MODBUS通讯小数点的故事
这是个值得脸红的事情,但是教训是深刻的。 做一个系统,通过MODBUS通讯5个站点的状态,每个站点的状态值相加之和小于75需要进行报警,很简单的程序啊。 选型,硬件配置,软件编写。因为阀值是一个实数,为了让程序好看点,尽量少占用内部寄存器,就用语句表编程了。第一个地雷已经埋好,已经埋好,已经埋好,重要的事情说三遍。程序编好,总要模拟器运行下,通讯一般不会出问题,那就直接模拟比较这个阶段的程序了。第二个地雷已经埋好,已经埋好,已经埋好,重要的事情说三遍。运行没问题。好了,完活。 其他没就再管。等待现场调试,等待了五六个月,都快把这个项目给忘了。直到领导同志让北京治疗癫痫病医院去现场服务,才又想起这个事情。 到现场,检查,上电,运行,都没问题。其他功能都调试完毕,准备收拾完活了,突然想起那个阀值报警没有做,于是模拟做阀值报警,一做阀值报警,问题来了:根本出不来!监控程序,站点通讯正常,返回值正常,站点状态值相加之和正常,比较之后,不正常。是的不正常了。什么鬼? 难道是数据格式问题?将相加之和再转换成实数格式和阀值比较,还是不正常。什么鬼? 语句表行不通,那么换成梯形图吧。逐条更换,梯形图做数字运算然后在转换为实数这个过程的癫痫病是怎么引起呢麻烦程度你懂得。做完之后再比较,没问题。是的,是治疗癫痫病有哪些食疗方法呢没问题。那么问题来了,到底是哪里的问题?再返回去检查,突然发现一个不顺眼的地方,这个阀值是75,当时为方便起见,直接写75在比较程序里面了。用实数比较一个实数和75,结果能对么?赶紧将75改成实数形式。保存,编译,下载,运行,问题解决了。 哎,汗颜无比啊。怎么能将实数和整形默得了癫痫病应怎么治疗较好认这样的低级错误犯到实际应用中? 总结整个错误的过程,第一个错误是在使用语句表编程的过程中,数据格式报错不像梯形图编程那么严苛,所以忽视了。第二个错误是在模拟运行的过程中没有认真对待,没有从源头进行模拟,为了图一时的便利而造成了大的错误。 做控制不容易,在校的错误都会在现场被放大,在咱们看来是一个个的控制点,到了现场都是和安全息息相关的,所以,还是要从每个细节抓起,做程序的时候,多做思考,多加保护,多模拟且模拟要到位。希望以后不要再犯这种低级错误了。