SA0044: Deklarationen mit Schnittstellenreferenz

Funktion

Ermittelt Deklarationen mit REFERENCE TO <Schnittstelle> und Deklarationen von VAR_IN_OUT-Variablen mit dem Typ einer Schnittstelle (implizit über REFERENCE TO realisiert).

Begründung

Ein Schnittstellentyp ist immer implizit eine Referenz auf eine Instanz eines Funktionsbausteins, der diese Schnittstelle implementiert. Eine Referenz auf eine Schnittstelle ist demnach eine Referenz auf eine Referenz und kann zu sehr unerwünschtem Verhalten führen.

Wichtigkeit

Hoch

Beispiele:

I_Sample ist eine im Projekt definierte Schnittstelle.

Funktionsbaustein FB_Sample:

FUNCTION_BLOCK FB_Sample
VAR_INPUT
    iInput      : I_Sample;
END_VAR
VAR_OUTPUT
    iOutput     : I_Sample;
END_VAR
VAR_IN_OUT
    iInOut1     : I_Sample;              // => SA0044

    {attribute 'analysis' := '-44'}
    iInOut2     : I_Sample;              // no error SA0044 because rule is deactivated via attribute
END_VAR

Programm MAIN:

PROGRAM MAIN 
VAR
    fbSample    : FB_Sample;
    iSample     : I_Sample;
    refItf      : REFERENCE TO I_Sample; // => SA0044
END_VAR