Skip to main content

Utilizzo di Pragmas

Pragma in CODESYS

Un pragma è un testo nel codice sorgente dell'applicazione racchiuso tra parentesi graffe. I pragma vengono utilizzati per inserire istruzioni speciali nel codice, che il compilatore può valutare. Ciò consente a un pragma di influenzare le proprietà di una o più variabili rispetto alla precompilazione o alla compilazione (generazione del codice). I pragma che il compilatore non riconosce vengono passati come commento.

La stringa di istruzione di un pragma può anche estendersi su più righe.

Per maggiori dettagli sulla sintassi, vedere le descrizioni dei singoli CODESYS pragma.

Esistono diversi pragma per scopi diversi (ad esempio: inizializzazione di una variabile, monitoraggio di una variabile, aggiunta di una variabile alla configurazione del simbolo, forzatura della visualizzazione di messaggi durante il processo di compilazione e comportamento di una variabile in determinate condizioni).

Importante

È necessario rispettare sia le maiuscole che le minuscole.

Categorie di pragma

IL CODESYS I pragma sono suddivisi nelle seguenti categorie:

  • Pragma dei messaggi

    Durante il processo di compilazione è possibile visualizzare messaggi personalizzati.

  • Pragma degli attributi

    Compilazione e precompilazione possono essere influenzate. A questo scopo, sono disponibili pragma per diversi scopi, ad esempio per l'inizializzazione, il monitoraggio o l'aggiunta di una variabile alla configurazione del simbolo.

  • Pragma condizionali

    La generazione del codice può essere controllata da istruzioni condizionali. Ad esempio, il comportamento di una variabile può variare in determinate condizioni.

  • Pragma regionale

  • Pragma nei POU di test

  • Pragma definiti dall'utente

Suggerimento

Nel Proprietà dialogo (Compilare categoria), è possibile dichiarare le "definizioni" del compilatore che possono essere interrogate nei pragma.

Possibili posizioni di inserimento

Importante

Pragmas in CODESYS non sono implementazioni uno a uno delle direttive del preprocessore C. È necessario posizionare un pragma come una normale istruzione. Non è consentito utilizzare un pragma all'interno di un'espressione.

È possibile inserire una direttiva che il compilatore può valutare in varie posizioni.

. Nella dichiarazione
  • Nell'intestazione della dichiarazione di un POU

    È possibile immettere il pragma desiderato direttamente nell'editor di testo come riga separata, come prima riga del POU o prima di una dichiarazione di variabile.

    Nella vista tabellare, riceverai supporto quando inserisci il pragma. Fai clic su Modifica intestazione dichiarazione comando. Nella finestra di dialogo, fare clic sul pulsante Attributo pulsante e immettere il pragma desiderato nel campo di input.

  • In un elenco di variabili globali

Restrizione nel caso di pragma condizionali

Utilizzare i pragma per la compilazione condizionale solo nelle implementazioni di POU. Nelle dichiarazioni, questi pragma vengono ignorati, non valutati.

Notare la seguente eccezione: la pragma IF con il project_defined L'operatore può essere inserito nelle dichiarazioni. Per ulteriori informazioni, vedere quanto segue: pragma IF con project_defined (<global define>)

. Nell'implementazione di un POU
  • Testo strutturato (ST)

    Nel linguaggio di implementazione ST, una pragma appartiene a una "posizione di istruzione". Una posizione valida si trova all'inizio dell'implementazione su una riga separata. Un'altra posizione valida è etichettata dopo un'istruzione che termina con un punto e virgola "; " o tramite parole chiave come END_VAR, END_IF, O END_WHILE.

  • Diagramma a blocchi funzionali (FBD) o diagramma a scala (LD)

    Nei linguaggi di implementazione dell'editor FBD/LD/IL, un pragma occupa una posizione adatta anche per un'etichetta. È possibile inserire il pragma proprio come un'etichetta. Per farlo, selezionare il comando FBD/LD/ILInserisci etichetta Quindi, nel campo di testo dell'etichetta, sostituisci il testo predefinito Label: con il pragma desiderato. Per utilizzare un pragma in aggiunta a un'etichetta, specificare prima il pragma e poi l'etichetta.

Esempio 17. Esempio

Per posizioni errate e corrette per un pragma condizionale

PROGRAM PRG_ConditionalPragma
VAR
    strTest : STRING := 'b';
    iResult : INT := 0;
END_VAR

Sbagliato

{IF defined(DEFINE_A)}
IF strTest = 'a' THEN
{ELSE}
IF strTest = 'b' THEN
{END_IF}
    iResult := {IF defined(DEFINE_B)} 12; {ELSE} 13; {END_IF}
END_IF

Corretto

{IF defined(DEFINE_A)}
IF strTest = 'a' THEN
    {IF defined(DEFINE_B)}
    iResult := 16#A;
    {ELSE}
    iResult := 16#AA;
    {END_IF}
END_IF
{ELSE}
IF strTest = 'b' THEN
    {IF defined(DEFINE_B)}
    iResult := 16#B;
    {ELSE}
    iResult := 16#BB;
    {END_IF}
END_IF
{END_IF}


Ambito

A seconda del tipo e del contenuto di un pragma, questo può influenzare quanto segue:

  • Dichiarazioni successive

  • Esattamente la prossima affermazione

  • Tutte le istruzioni successive finché non viene annullata da un pragma corrispondente

  • Tutte le istruzioni successive finché lo stesso pragma non viene eseguito con altri parametri o non viene raggiunta la fine del codice. In questo contesto, "codice" si riferisce alla parte di dichiarazione, alla parte di implementazione, all'elenco delle variabili globali e alla dichiarazione del tipo. Pertanto, un pragma influenza l'intero oggetto quando è da solo sulla prima riga della parte di dichiarazione e non è sostituito o annullato da un altro pragma.