Skip to main content

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_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

での出力 メッセージ ビュー:

  • sa_icon_message.png SA0046: 初期化されていないインターフェイス 'instNoInitITF' が使用されている可能性があります

  • sa_icon_message.png SA0046: 初期化されていないインターフェイス 'instNoInitITF' が使用されている可能性があります

  • sa_icon_message.png SA0046: 初期化されていないインターフェイス 'instNoInitMasterITF1' が使用されている可能性があります

  • sa_icon_message.png SA0046: 初期化されていないインターフェイス 'instNoInitMasterITF2' が使用されている可能性があります