Please ensure Javascript is enabled for purposes of website accessibility
Powered by Zoomin Software. For more details please contactZoomin

AVEVA™ InTouch HMI

IF … THEN … ELSEIF … ELSE … ENDIF 和属性质量

IF … THEN … ELSEIF … ELSE … ENDIF 和属性质量

  • Last UpdatedSep 24, 2024
  • 1 minute read

当属性值被复制到相同类型的其它属性时,属性的质量也被复制过去了。在使用 I/O 属性时,这一点特别重要。例如,下面的两个语句同时复制了值和质量:

me.Attr2 = me.Attr1;

me.Attr2.value = me.Attr1.value;

如果只需要复制值,并且属性质量为“BAD”,则可使用临时变量来容纳值。例如:

Dim temp as Integer;

temp = me.Attr1;

me.Attr2 = temp;

如果有比较,如 Attr1 <> Attr2,并且其中一个属性质量为“BAD”,则不会执行 IF 控制块中的语句。例如,假设 Attr1 质量为“BAD”:

if me.Attr1<> me.Attr2 then

me.Attr2 = me.Attr1;

endif;

在此脚本中,不会执行语句 me.Attr2 = me.Attr1,因为 Attr1 的质量为“BAD”,而将“BAD”质量值与“Good”质量值比较是未定义的/不可能的。

建议的做法是先验证 Attr1 的质量,如以下示例所示:

if(IsBad(me.Attr1)) then

LogMessage("Attr1 quality is bad, its value is not copied to Attr2");

else

if me.Attr1<> me.Attr2 then

me.AttrA2 = me.Attr1;

endif;

endif;

验证质量的替代方法是使用“==”运算符:

if Me.Attr1 == TRUE then

或者,可以将“value”属性添加到简化的 IF THEN 语句中:

if Me.Attr1.value then

如果使用上述任意方法来验证数据质量,您的脚本将会正确执行。