EcoStruxure Machine Expert bedeutet, dass der Quellcode erst auf Abweichungen hinsichtlich bestimmter Programmierrichtlinien durchsucht wird, bevor ein Projekt ohne Generierungsfehler in das Zielsystem heruntergeladen werden kann. Zu diesem Zweck kann in den Projekteinstellungen ein Satz zu beachtender Regeln konfiguriert werden. Bei einer Codegenerierung wird dann eine automatische Überprüfung anhand dieser definierten Regeln durchgeführt.
in{analysis ...}
oder dem Pragma {attribute 'analysis' := '...'}
kennzeichnen.
Die Ergebnisse der Analyse werden als Fehler in der Ansicht
mit dem Präfix angezeigt.(SA0033): |
Zur Erkennung von Variablen, die deklariert, jedoch im kompilierten Programmcode nicht verwendet wurden. |
(SA0028): |
Zur Erkennung der Zuweisung von zwei oder mehr Variablen zum gleichen Speicherbereich.
Dies ist beispielsweise bei folgenden Deklarationen der Fall: |
(SA0006): |
Zur Erkennung von Variablen, die von mehr als einer Task geschrieben werden. |
Beispiel (SA0006):
FUNCTION_BLOCK ADD_FB
g_iTemp1 := g_iTemp1 + INT#1;
PROGRAM PLC_PRG //controlled by MainTask
g_iTemp1 := g_iTemp1 + INT#2;
g_xTemp2 := g_iTemp1 > INT#10;
PROGRAM PLC_PRG_1 //controlled by SubTask
g_iTemp1 := g_iTemp1 - INT#3;
g_xTemp2 := g_iTemp1 < INT#-10;
(SA0004): |
Zur Erkennung von Ausgängen, die auf mehr als eine Position geschrieben wurden. |
VAR_GLOBAL
g_xVar AT %QX0.0 : BOOL ;
g_iTest AT %QW0 : INT ;
END_VAR
PROGRAM PLC_PRG
IF iCondition < INT#0 THEN
g_xVar := TRUE;
g_iTest := INT#12;
END_IF
CASE iCondition OF
INT#1:
g_xVar := FALSE;
INT#2:
g_iTest := INT#11;
ELSE
g_xVar := TRUE;
g_iTest := INT#9;
END_CASE
(SA0027): |
Zur Erkennung einer Mehrfachverwendung eines Namens/Bezeichners für eine Variable oder ein Objekt (POU) innerhalb des Anwendungsbereichs eines Projekts. Die folgenden Fälle werden erkannt:
|
Beispiel (SA0027):
PROGRAM PLC_PRG
VAR
ton : INT; // error SA0027
END_VAR
Die Standardbibliothek ist im Projekt enthalten und stellt den Funktionsbaustein TON
zur Verfügung, was zu einer Mehrfachnutzung eines Namens führt.
(SA0167): |
Mit dem Test werden Funktionsbausteininstanzen erkannt, die als temporäre Variablen deklariert sind. Dies gilt für Instanzen, die in einer Methode, in einer Funktion oder als VAR_TEMP deklariert werden und daher in jedem Verarbeitungszyklus und für jeden POU-Aufruf neu initialisiert werden. |
Beispiel (SA0167):
PROGRAM PLC_PRG
VAR
END_VAR
VAR_TEMP
yafb: AFB;
END_VAR
FUNCTION Fun : INT
VAR_INPUT
END_VAR
VAR
funafb: AFB;
END_VAR
METHOD METH : INT
VAR_INPUT
END_VAR
VAR
methafb: AFB;
END_VAR