SA0046:初期化されていないインターフェイスが使用されている可能性があります
使用前に初期化されていないインターフェースの使用を検出します。
理由: インターフェイス参照は、使用する前に <> 0 であるかどうかをチェックする必要があります。そうしないと、アクセス中にアクセス違反が発生する可能性があります。
重要性:高い
例 115. 例
//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_VARPROGRAM 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_VARinstITF := 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での出力 メッセージ ビュー:
SA0046: 初期化されていないインターフェイス 'instNoInitITF' が使用されている可能性があります
SA0046: 初期化されていないインターフェイス 'instNoInitITF' が使用されている可能性があります
SA0046: 初期化されていないインターフェイス 'instNoInitMasterITF1' が使用されている可能性があります
SA0046: 初期化されていないインターフェイス 'instNoInitMasterITF2' が使用されている可能性があります