技术常见问答

询问问题

Citect高级报警中遇到报警值不正确的情况

问题描述:

我在高级报警的表达式里写abs(LT1-LT2)>0.005 当LT1=11.1 LT2=11.105 不报警 ;当LT1=11.1 LT2=11.095 就会报警 请问如何处理这样的情况

所属产品线:

Vijeo Citect

解决方法:

建议将判断放在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

对您是否有帮助?
我们如何进行信息改进?