Code statisch analysieren
Sie können Ihren Quellcode während einer Codegenerierung zusätzlich statisch analysieren („linten“) lassen. Dabei wird ermittelt, ob Ihr Quellcode den von Ihnen festgelegten Codierrichtlinien folgt - gemäß der Idee des „Lint“-Analysewerkzeugs.
Im Dialog Projekteinstellungen unter der Kategorie Static Analysis Light aktivieren Sie die Regeln, die geprüft werden. Die Prüfung selbst erfolgt dann automatisch bei jeder Codegenerierung, beispielsweise wenn Sie den Befehl wählen. Wenn Abweichungen von den Regeln ermittelt werden, werden diese als Fehlermeldungen der Kategorie Übersetzen im Meldungsfenster ausgegeben. Die dabei gemeldeten Fehler haben einen Präfix:
SA<Zahl>
.
Wichtig
Bei der statischen Codeanalyse mit Static Analysis Light wird nur den Applikationscode des Projekts geprüft. Bibliotheken sind von der Prüfung ausgeschlossen.
Variablen einer GVL in der Ansicht POUs werden nicht zwingend geprüft: Wenn Sie ein Projekt mit mehreren Applikationen haben, werden nur die Objekte unter der gerade aktiven Applikation geprüft. Wenn Sie nur eine einzige Applikation haben, werden auch die Objekte im allgemeinen POUs-Pool geprüft.
Tipp
Static Analysis Light ist nur mit einem reduzierten Satz an Regeln im Standard-Entwicklungssystem enthalten. Ein erweiterter Umfang an Regeln, zusätzliche Namenskonventionen und Metriken stehen Ihnen zur Verfügung, wenn Sie das Add-on CODESYS Static Analysis installieren.
Codezeilen in Implementierungen mit Pragma von der statischen Analyse ausschließen
Sie können mit Hilfe des Pragmas {analysis ...}
Code so kennzeichnen, dass die dabei angegebenen Regeln nicht geprüft werden. Folglich werden die so gekennzeichneten Codezeilen nicht statische analysiert. Während der Prüfung wird der gekennzeichnete Code ignoriert.
Syntax:
{analysis <Vorzeichen><Regelnummer>|,<weitere Kombinationen von Vorzeichen und Regelnummern, kommasepariert>}
-<Regelnummer>
: Prüfung der Regel SA<Regelnummer> ausschalten.
+<Regelnummer>
: Prüfung der Regel SA<Regelnummer> einschalten.
Implementierungscode ausschließen
Voraussetzung: Sie haben im Dialog Projekteinstellungen Regeln aktiviert.
Fügen Sie das Pragma
{analysis -<number>}
oberhalb der Codezeile ein, die erstmals nicht zu prüfenden Code enthält. Beispielsweise für die Regel SA0024Die Codezeile ist die erste Zeile des Codeschnipsels, der nicht gegen die Regel 24 geprüft wird.
Fügen Sie das Pragma
{analysis +<number>}
unterhalb der Codezeile ein, die erstmals nicht zu prüfenden Code enthält.Beispiel: Für die Regel SA0024
Die Codezeile oberhalb ist die letzte Zeile des Codeschnipsels, der nicht gegen die Regel 24 geprüft wird.
{analysis -24} nTest := 99; iVar := INT#2; {analysis +24}
Die Regel SA0024: Nicht getypte Literale ist für 2 Zeilen deaktiviert. Es wird kein Fehler ausgegeben, obwohl der Code nicht korrigiert zu: nTest := DINT#99;
{analysis -10, -24, -18} ... {analysis +10, +24, +18}
SA0010: Arrays mit nur einer Komponente
SA0018: Unübliche Bitzugriffe
SA0024: Nicht getypte Literale
Tipp
Allerdings können Sie die Regel SA0004
: Mehrfacher Schreibzugriff auf Ausgang nicht über Pragma deaktivieren.
Programmierobjekte mit Pragma von der statischen Analyse ausschließen
Syntax:
{attribute 'analysis' := '-<rule number>[,<other negative rule numbers, comma-separated>]'}
Wenn Sie das Attributpragma im Deklarationsteil eines Programmierobjekts einfügen, werden die angegebenen Regeln für das ganze Programmierobjekt ausgeschlossen. Wenn mehrere Regeln ausgeschlossen werden, sind die Regeln jeweils kommasepariert mit Minus und Nummer anzugeben. Eine Pragmaanweisung für ein Einschalten wird nicht benötigt.
{attribute 'analysis' := '-33, -31'} TYPE LocalData : STRUCT iLocal : INT; uiLocal : UINT; udiLocal : UDINT; END_STRUCT END_TYPE
Die Regeln SA0033 und SA0031 werden bei der Struktur LocalData
ignoriert.
{attribute 'analysis' := '-100'} big: ARRAY[1..10000] OF DWORD;
Die Regel SA0100 wird beim Array big
ignoriert.