SA0170: 出力変数のアドレスは使用できません
出力変数のアドレスが含まれるコードの位置を検出します (VAR_OUTPUT
、 VAR_IN_OUT
ファンクションブロックの)を使用します。
理由: ファンクション ブロック出力のアドレスを次の方法で使用することは許可されていません。
経由
ADR
-オペレーターによって
REF=
例外: 出力変数が同じ関数ブロック内で使用されている場合、エラーは報告されません。
重要性:中
例 128. 例
ファンクションブロック FB1
持っています VAR_OUTPUT
変数 iOutVal : INT;
別のブロックで次のアクセスを行うと、エラーSA0170が生成されます。
//FB1_inst is of type FB1 addr1 := ADR(FB1_inst.iOutVal); //SA0170 refINT REF= FB1_inst.iOutVal; //SA0179
機能ブロック内での後続のアクセス FB1
また、エラーが発生します。
//other is a POINTER TO FB1 ptr := ADR(other^.iOutVal); //SA0170
以下は、機能ブロック内で直接アクセスします。 FB1
エラーは発生しません:
//iInputVal is a VAR_INPUT of FB1 iOutVal := iInputVal; //ptr is a POINTER TO INT ptr := ADR(THIS^.iOutVal); ptr := ADR(iOutVal);
での出力 メッセージ ビュー:
SA0170: 出力変数のアドレスを受け取るべきではありません