问题描述:
我在高级报警的表达式里写abs(LT1-LT2)>0.005 当LT1=11.1 LT2=11.105 不报警 ;当LT1=11.1 LT2=11.095 就会报警
请问如何处理这样的情况所属产品线:
AVEVA™ Plant SCADA解决方法:
建议将判断放在PLC 中 触发的结果给到线圈 在传到Citect。
Citect中报警不准确的情况,是因为浮点数计算总会引入一些“错误”,原因是二进制表示的本质。
内部Citect使用c ++“double”类型,这是双精度浮动点数,用于Citect“真实”类型变量。这意味着,如果你进行浮点计算,那么让我们说一个理想的答案是A_ideal,你得到的答案是A,假设机器ε是E(ε=2.22e-16),那么A将在范围内
(A_ideal-E)<A <(A_ideal + E)
在做浮点时基本上无法得到确切的答案计算。这是浮点数在当前计算机中的工作原理硬件和软件环境。这是一个系统限制,不在我们的范围内控制。例如当你告诉计算机变量的值是0.005时,它是什么时候转换成二进制,值将是
0.005000000000000000104083408558608425664715468883514404296875
是否有帮助?