Skip to main content

Definire le convenzioni di denominazione

In dialogo Impostazioni Analisi statica sotto la scheda convenzioni di denominazione definisci le convenzioni di denominazione che seguirai nel tuo codice. Definisci i prefissi per gli identificatori dei tuoi blocchi di programmazione, variabili e tipi di dati in base ai loro ambiti e qualificatori.

È quindi possibile fare in modo che l'analisi statica verifichi la conformità alle convenzioni di denominazione.

Per le istruzioni, vedere: Verifica della conformità alle convenzioni di denominazione definite

Definisci i prefissi

In dialogo Impostazioni Analisi statica sotto la scheda convenzioni di denominazione definire le convenzioni di denominazione nel campo di input della colonna prefisso.

  • carattere letterale

    Esempio:

    PRG_ in Prefissi per POU, Prefissi per il tipo POU, PROGRAMMA (102)

  • Più letterali per voce, separati da una virgola

    Sintassi: <prefix> ( , <next prefix> )*

    Esempio:

    PRG_, PRG in Prefissi per POU, Prefissi per il tipo POU, PROGRAMMA (102)

  • espressione regolare RegEx, che definisce un insieme di prefissi

    Sintassi: @ <expression>

    Esempi:

    @x[a-dA-D] definisce un prefisso che inizia con x inizia, seguito esattamente da un carattere dell'intervallo a-dA-D

    @[A-Za-z][A-Za-z][A-Za-z][A-Za-z0-9] definisce un prefisso composto da 4 caratteri: i primi 3 sono lettere, il 4° carattere può essere anche un numero

Definire i prefissi per i tipi di dati combinabili

I seguenti tipi di dati si basano su tipi di dati standard, tipi di dati esistenti o blocchi funzione:

  • puntatori: POINTER TO <basic type>

  • Riferimento: REFERENCE TO <basic type>

  • Vettore: ARRAY[ <lower index bound> .. <upper index bound> ] OF <basic type>

Questi tipi di dati possono essere nidificati e combinati tra loro. Se l'opzione Prefissi ricorsivi per tipi di dati combinabili è attivata, l'analisi statica prevede prefissi composti in modo ricorsivo per variabili di tali tipi di dati combinabili. I prefissi seguono la dichiarazione e corrispondono alle convenzioni di denominazione concordate per i tipi di dati di base.

esempio

Sono state stabilite le seguenti convenzioni di denominazione:

  • i in Prefissi per variabili, INT (26)

  • p in Prefissi per variabili, PUNTATORI (26)

  • ref in Prefissi per variabili, RIFERIMENTI (27)

  • struct in Prefissi per variabili, Struttura (32)

  • opzione Prefissi ricorsivi per tipi di dati combinabili: standard icon

Il codice seguente viola le convenzioni di denominazione ed è difficile da leggere.

PROGRAM plc1
VAR
        var1 : ARRAY[100..110] OF ARRAY[30..50] OF ARRAY[6..7] OF BOOL;
        var2 : ARRAY[1..3] OF INT;
        var3 : REFERENCE TO INT;
        iVar4 : INT;
        iVar5 : INT;
        var6 : ARRAY[1..3] OF INT := [11, 22, 33];
        var7 : POINTER TO ARRAY[1..3] OF INT;
        var8 : REFERENCE TO INT;
        var9 : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]);
        var0 : ARRAY[0..3] OF S_POLYGONLINE; // S_POLYGONLINE is a already defined structure
END_VAR

iVar4 := iVar4 + 1;
var8 REF= iVar4;
var1[100][30][6] := TRUE;
var9.aiPoint1[1] := 99;
var7 := ADR(var6);
var6[2] := 44;
iVar5 := var7^[2];
var0[0] := var9;

L'analisi statica segnala le seguenti violazioni delle convenzioni di denominazione:

  • NC0102: nome non valido 'plc1': prefisso previsto 'PRG_'

  • NC0014: Nome variabile 'var0' non valido: Prefisso previsto 'astruct'

  • NC0014: Nome variabile 'var1' non valido: Prefisso previsto 'aaax'

  • NC0014: nome variabile 'var2' non valido: prefisso previsto 'ai'

  • NC0014: Nome variabile 'var3' non valido: Prefisso previsto 'refi'

  • NC0014: nome variabile 'var6' non valido: prefisso previsto 'ai'

  • NC0014: Nome variabile 'var7' non valido: Prefisso previsto 'pai'

  • NC0014: Nome variabile 'var8' non valido: Prefisso previsto 'refi'

  • NC0014: nome variabile 'var9' non valido: prefisso previsto 'struct'

Definire i prefissi per le variabili di un alias

È possibile utilizzare i prefissi per le variabili del tipo di dati Alias come letterale con il carattere jolly {datatype} definire. Quindi l'analisi statica prevede il prefisso del tipo di dati di base anziché il segnaposto.

L'opzione Combina il prefisso dello spazio dei nomi con il prefisso del tipo di dati non pregiudica l'uso del prefisso {datatype}.

esempio

Sono state stabilite le seguenti convenzioni di denominazione:

  • s in Prefissi per variabili, Digita i prefissi, STRINGA()19

  • A_{datatype} in Prefissi per variabili, Alias (33)

codice

TYPE A_MESSAGE : STRING[50]; // base data type is STRING
END_TYPE

VAR
        A_sMessage_N1 : A_MESSAGE := 'Robot is running.';
        A_s_Message_N2 : A_MESSAGE := 'Robot has been finished.';
        As_Message_N3 : A_MESSAGE := 'Robot has been stopped.';
        AsMessage_N4 : A_MESSAGE := 'Error 3 has been occured.';
END_VAR

L'analisi statica segnala la seguente violazione della convenzione di denominazione:

  • NC0033: Nome variabile 'As_Message_N3' non valido: Prefisso previsto 'A_s'

  • NC0033: Nome variabile 'AsMessage_N4' non valido: Prefisso previsto 'A_s''

Definire i prefissi per le proprietà

È possibile utilizzare il prefisso per i blocchi predefiniti (POU) del tipo di dati PROPERTY come letterale con il carattere jolly {datatype} definire. Quindi l'analisi statica prevede il prefisso del tipo di dati restituito della proprietà anziché il segnaposto.

L'opzione Combina il prefisso dello spazio dei nomi con il prefisso del tipo di dati non pregiudica l'uso del segnaposto {datatype}.

esempio

Sono state stabilite le seguenti convenzioni di denominazione:

  • fb in Prefissi per variabili, Digita i prefissi, istanza del blocco funzione

  • FB_ in Prefissi per POU, Prefissi per il tipo POU, BLOCCO FUNZIONI (103)

  • prop_{datatype} in Prefissi per POU, Prefissi per il tipo POU, IMMOBILE (107)

codice

FUNCTION_BLOCK blocka // Invalid function block name
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
    iA : INT;
END_VAR
iA := iA + 1;

PROPERTY PUBLIC vara : INT // Invalid property name, return data type is INT
Get
        vara := iA;
Set
iA := vara;

PROGRAM plc1
VAR
        var10 : blocka; // Invalid variable name of typ function block
        iVar11: INT;
END_VAR

var10();
IF var10.vara > 500 THEN
        var10.vara := 0;
END_IF
iVar11 := var10.vara;

L'analisi statica segnala la seguente violazione della convenzione di denominazione:

  • NC0102: nome non valido ''plc1': prefisso previsto 'PRG_''

  • NC0031: Nome variabile ''var10'' non valido: Prefisso previsto ''fb''

  • NC0103: Nome variabile ''blocka' non valido: Prefisso previsto 'FB_''

  • NC0107: Nome variabile 'blocka.vara' non valido: Prefisso previsto 'prop_i''

Codice secondo le convenzioni di denominazione

FUNCTION_BLOCK FB_A
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
    iA : INT;
END_VAR
iA := iA + 1;

PROPERTY PUBLIC prop_iA : INT
Get
        prop_iA := iA;
Set
        iA := prop_iA;

PROGRAM PRG_PLC1
VAR
        fbA : FB_A;
        iVar11: INT;
END_VAR

fbA();
IF fbA.prop_iA > 500 THEN
        fbA.prop_iA := 0;
END_IF
iVar11 := fbA.prop_iA;

Definire i prefissi per le strutture

È possibile impostare un prefisso generale per le strutture nel progetto in Prefissi per DUT, Struttura (151) definire. Puoi anche fornire una struttura con un prefisso speciale. Il prefisso speciale quindi oscura il prefisso generale.

Il prefisso speciale è specificato nella dichiarazione del tipo di dati della struttura con il pragma {attribute 'nameprefix' := <special prefix> '} Sono definiti. Quindi avvia tutte le variabili di questa struttura con questo prefisso <special prefix>.

esempio

Sono state stabilite le seguenti convenzioni di denominazione:

  • struct in Prefissi per variabili, Struttura(32)

  • S_ in Prefissi per DUT, Struttura (151)

  • Prefissi ricorsivi per tipi di dati combinabili: standard icon

codice

TYPE S_POLYGONLINE :
STRUCT
        aiStart : ARRAY[1..2] OF INT := [-99, -99];
        aiPoint1 : ARRAY[1..2] OF INT;
        aiPoint2 : ARRAY[1..2] OF INT;
        aiPoint3 : ARRAY[1..2] OF INT;
        aiPoint4 : ARRAY[1..2] OF INT;
        aiEnd : ARRAY[1..2] OF INT := [99, 99];
END_STRUCT
END_TYPE

{attribute 'nameprefix' := 'penta'} // Pragma to define a special prefix
TYPE S_PENTA EXTENDS S_POLYGONLINE :
STRUCT
        aiPoint5 : ARRAY[1..2] OF INT;
END_STRUCT
END_TYPE

PROGRAM PRG_Compute
VAR
        structPolygon : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]);
        structPentagon : S_PENTAGON := (aiStart:=[0,0], aiPoint1:=[1,1], aiPoint2:=[2,2], aiPoint3:=[3,3], aiPoint4:=[4,4], aiPoint5:=[5,5]);
        structLine0 : S_PENTA;
        pentaLine1 : S_PENTA;
        iXPoint: INT;
        aPoint0: ARRAY [1..2] OF INT;
        aPoint1: ARRAY [1..2] OF INT;
END_VAR

iXPoint := structPolygon.aiPoint1[1];
aPoint0 := structLine0.aiEnd;
aiPoint1 := pentaLine1.aiEnd;

L'analisi statica segnala la seguente violazione della convenzione di denominazione:

  • Nome variabile 'structLine0' non valido: prefisso previsto 'penta'

ulteriore CODESYS Static Analysis- Fornire progetti con convenzioni di denominazione

Salva le tue convenzioni di denominazione in un file CSA. Puoi usare questo file in altri CODESYS Static Analysis-Carica e usa i progetti.

Procedura. Salva su file
  1. Scegli il comando Costruisci → Analisi statica → Impostazioni.

  2. Scegli il pulsante Risparmia sul computer.

    Si apre una finestra di dialogo per la selezione dei file. Lì puoi memorizzare le convenzioni di denominazione in un file con qualsiasi nome con estensione CSA.

Procedura. Carica il file con le convenzioni di denominazione
  1. Scegli il comando Costruisci → Analisi statica → Impostazioni.

  2. Scegli il pulsante caricare.

    Si apre la finestra di dialogo per la selezione dei file. Selezionane uno dai file CSA visualizzati.