SA0170:不应使用输出变量的地址
检测输出变量地址所在的代码位置(VAR_OUTPUT
, VAR_IN_OUT
使用功能块的 )。
理由: 不允许按以下方式使用功能块输出的地址:
通过
ADR
操作员通过
REF=
例外:如果在同一功能块中使用输出变量,则不会报告错误。
重要性:中等
例 128. 例子
功能块 FB1
有 VAR_OUTPUT
多变的 iOutVal : INT;
另一个 POU 中的以下访问会生成错误 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:不应采用输出变量的地址