Skip to main content

SA0170:不应使用输出变量的地址

检测输出变量地址所在的代码位置(VAR_OUTPUT, VAR_IN_OUT使用功能块的 )。

理由: 不允许按以下方式使用功能块输出的地址:

  • 通过 ADR 操作员

  • 通过 REF=

例外:如果在同一功能块中使用输出变量,则不会报告错误。

重要性:中等

128. 例子

功能块 FB1VAR_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);

输出在 留言 看法:

  • sa_icon_message.png SA0170:不应采用输出变量的地址