-1.#IND解决方式
首先,-1.#IND出现的原因是程序在做除法时出现除数为0的情况。如图1
图1
从图1可以看到,这里有三行数学运算的代码,除数分别是变量Rated_Power_SUM、Rated_Power,第
三行与第二行的除数相同,最后运算结果储存在变量Set_Power等变量中。众所周知,在做除法运算时,除数不
能为0,所以在这三行代码中存在一个问题:那就是当系统运行时,若这两个除数变量的值为0,则最后运算的结
果是有问题的,会出现图2中的情况:
图2
从图2可以看出,第一行代码的运算结果所储存的变量Set_Power显示的值为-1.#IND。
如果把此变量显示在WINCC界面中,会显示如图3:
图3
从图3可以看出,在WINCC的运行界面中的输入输出域之中都显示有感叹号,代表着数据异常或者通讯异常。
原因就是运算时除数出现为0的情况,导致最后的结果数据异常。
那么应该怎么解决这个问题呢?
我们可以从程序上解决,怎么解决呢?小编已更改完毕,在这里直接上图,如图4:
图4
从图4可以看出,程序在原来的基础上增加了IF判断语句,判断的是下一行代码中的除数变量的值,当除数
变量的值不为0时,才允许继续进行下面的运算;若除数变量的值为0,则跳过这一段代码。若代码中的除数直接
是一个常量,则只需注意这常量不能赋值为0。很简单吧?最后附上更改代码的效果图:
图5
图6
从图5可以看出,除数变量已经不再显示-1.#IND,而是显示数字0;而图6可以看出WINCC界面中对应的输
入输出域显示也已经正常,不再显示感叹号,这也是我们想要的效果。
总结而言,当除数用的是变量时,需要注意该变量不能为0。
欢迎各位大神点评指教。