SA0046 : Interface éventuellement non initialisée utilisée
Détecte l'utilisation d'interfaces qui n'ont pas été initialisées avant utilisation.
Justification : Une référence d'interface doit être vérifiée pour <> 0 avant d'être utilisée. Sinon, une violation d'accès peut se produire lors de l'accès.
Importance : Élevée
Exemple 115. Exemple
//Declaration of INTERFACE ITF and assigned METH2: METHOD METH2 : BOOL VAR_INPUT iInput2:INT; END_VAR
//Declaration of INTERFACE Master_ITF1 and assigned METH: METHOD METH : BOOL VAR_INPUT iInput:INT; END_VAR
PROGRAM PLC_PRG VAR instPOU : POU; instITF : ITF; instMasterITF1 : Master_ITF1; instMasterITF2 : Master_ITF2; iDummy : INT; xDummy : BOOL; instNoInitITF : ITF; instNoInitITF2 : ITF; instNoInitMasterITF1 : Master_ITF1; instNoInitMasterITF2 : Master_ITF2; END_VAR
instITF := instPOU; xDummy := instITF.METH(iInput := iDummy); // OK instMasterITF1 := instPOU; xDummy := instMasterITF1.METH(iInput := iDummy); // OK xDummy := instNoInitITF.METH(iInput := INT#1); // SA0046 xDummy := instNoInitITF.METH2(iInput2 := INT#2); // SA0046 xDummy := instNoInitMasterITF1.METH(iInput := INT#3); // SA0046 iDummy := instNoInitMasterITF2.Prop; // SA0046 IF instNoInitITF <> 0 THEN instNoInitITF.Prop; // OK, because the interface can't be 0 END_IF
Sortie dans le messages voir:
SA0046 : Utilisation possible de l'interface non initialisée 'instNoInitITF'
SA0046 : Utilisation possible de l'interface non initialisée 'instNoInitITF'
SA0046 : Utilisation possible de l'interface non initialisée 'instNoInitMasterITF1'
SA0046 : Utilisation possible de l'interface non initialisée 'instNoInitMasterITF2'