问题发生在单位参加的一次展会上,参展设备PLC用的是1200,需要通过modbus tcp协议与上位机通讯,上位机得到PLC的信号之后,调度AGV小车进行上料卸料的工作。

通讯的程序用过很多次了,没有出现过问题。但是这次数据丢失的情况。收到DB1000.DBD1996值为1的话,代表指令接收完成,但是设备运行起来之后,10此有2次会收不到数值,就导致上位机下发了指令,AGV小车无动于衷,展会上人很多,会很尴尬。

但是当时实在没有找到原因,就把程序改成了周期性的清零,不管收没收到了,我都会定时的认为我收到了,虽然有些不合理,但是最起码上位机下发指令之后,AGV能动起来了,就这么的把展会任务给凑活的完成了。
回到单位之后,开始调查这个问题,研究半天没有发现什么问题。闲聊时同事说上一个项目用的1500没有问题,提醒了我,我就把程序复制到了1500里试,确实没有问题,每次通讯都会返回值1。
查来查去的,发现1500中的MB_SERVER块的版本号比较高,回到1200的程序里看,发现我用的是4.0,然后还有4.1和4.2可以选,瞎猫碰死耗子试试4.2吧,还真就好了。

到现在也不知道为啥,要是有道友知道更高级更深层次的原因,还请不吝赐教。