浮点数状态相等,但比较等于时却条件不成立问题解决
虽然浮点数在状态上相等,但为什么在“比较实数是否相等”运算中却检测到存在差异?对于“比较实数是否相等”的比较运算,由过程运算提供的实数类型的数值非常不精确。由于实数存在修正的误差,故不推荐使用此数据格式进行“相等”比较。
浮点数 (或实数) 由一个 32 位的单精度数表示,而访问时使用双字格式。在 合信200PLC 中,实数精确到 6 个小数位。
当使用包括较大数和很小数的一系列数值来计算实数时,可能会出现不精确的结果。当在状态表中查看实数时,相同的实数可能有不同的二进制表示。
计算示例如下图:监控状态都是0.7但是比较指令并未导通。
在状态表中监控VD100和VD104二进制并不相同
因此我们推荐不要使用“LDR=”函数,而是使用“LDR<=”和“LDR>=”这两个函数来进行比较运算。这为你提供一个数值比较的比较框架。
子程序代码附上
最后还有一种浮点数等于比较的方法就是先放大倍数再使用整数进行比较就不会出现程序中的这种虽然数值看上去相等,却导致后面不输出的情况。
页:
[1]