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 conx
inizia, seguito esattamente da un carattere dell'intervalloa-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:
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()19A_{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 funzioneFB_
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:
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.
Scegli il comando
.Scegli il pulsante
.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.
Scegli il comando
.Scegli il pulsante
.Si apre la finestra di dialogo per la selezione dei file. Selezionane uno dai file CSA visualizzati.