SA0170: Adresse einer Ausgabevariablen sollte nicht verwendet werden
Funktion | Ermittelt Codestellen, an denen die Adresse einer Ausgabevariablen (VAR_OUTPUT, VAR_IN_OUT) eines Funktionsbausteins verwendet wird. |
Begründung | Es ist nicht erlaubt, in folgender Weise die Adresse eines Funktionsbausteinausgangs zu verwenden:
|
Ausnahme | Es wird kein Fehler gemeldet, wenn die Ausgabevariable innerhalb desselben Funktionsbausteins verwendet wird. |
Wichtigkeit | Mittel |
Beispiel:
Funktionsbaustein FB_Sample:
FUNCTION_BLOCK FB_Sample
VAR_INPUT
nIn : INT;
END_VAR
VAR_OUTPUT
nOut : INT;
END_VAR
VAR
pFB : POINTER TO FB_Sample;
pINT : POINTER TO INT;
END_VARIF pFB <> 0 THEN
pINT := ADR(pFB^.nOut); // => SA0170
END_IF
nOut := nIn;
pINT := ADR(THIS^.nOut); // no error due to internal usage
pINT := ADR(nOut); // no error due to internal usageZugriffe innerhalb eines anderen Bausteins, in diesem Fall im Programm MAIN:
PROGRAM MAIN
VAR
fbSample : FB_Sample;
pExternal : POINTER TO INT;
refExternal : REFERENCE TO INT;
END_VARpExternal := ADR(fbSample.nOut); // => SA0170
refExternal REF= fbSample.nOut; // => SA0170