SA0170: Adresse einer Ausgabevariablen sollte nicht verwendet werden
Ermittelt Codestellen, in 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:
via
ADR
-Operatorvia
REF=
Ausnahme: Kein Fehler wird gemeldet, wenn die Ausgabevariable innerhalb desselben Funktionsbausteins verwendet wird.
Wichtigkeit: Mittel
Funktionsbaustein FB1
hat die VAR_OUTPUT
-Variable iOutVal : INT;
Folgende Zugriffe in einem anderen Baustein erzeugen den Fehler SA0170:
//FB1_inst is of type FB1 addr1 := ADR(FB1_inst.iOutVal); //SA0170 refINT REF= FB1_inst.iOutVal; //SA0179
Folgender Zugriff direkt innerhalb des Funktionsbausteins FB1
erzeugt ebenfalls den Fehler:
//other is a POINTER TO FB1 ptr := ADR(other^.iOutVal); //SA0170
Folgende Zugriffe direkt innerhalb des Funktionsbausteins FB1
erzeugen keine Fehler:
//iInputVal is a VAR_INPUT of FB1 iOutVal := iInputVal; //ptr is a POINTER TO INT ptr := ADR(THIS^.iOutVal); ptr := ADR(iOutVal);
Ausgabe unter Ansicht Meldungen:
SA0170: Sollte nicht die Adresse einer Ausgabevariablen annehmen