近期在陕西的一个煤矿水处理工程,我们用的2套1200PLC,下面有一套加药系统是别人的,用的信捷的PLC。双方需要通信,最终确定方案为走Modbus TCP通讯。本以为比较简单,做下来却发现始终无法接通。好在费了功夫之后总算解决了问题。
我这边遇到的问题是:1.信捷的X区跟Y区无法读取。
2. 当1200的Modbus TCP程序下进去并执行的时候,1200与信捷的网络通讯就会出现问题,导致电脑无法ping通。咨询了西门子跟信捷无数遍,信捷还帮我远程了一个上午,都无法说清原因。
解决方案:1.关于这点我咨询了西门子的工程师,他明确表示西门子1200的485地址的0区最高只到9999,而信捷PLC的X区跟Y区都是0区5位数,所以确认无法直接读取,只能将其转到M区后再进行通讯。
2.我尝试用modscan扫信捷的PLC,得到的结果是当1200的Modbus TCP程序不执行时,Modscan可以读到信捷的数据,同样当程序执行时,无法建立连接。
我确信问题出在1200这边。费了好大劲,总算找到了问题所在。
在使用MB_CLIENT的背景块里有一个MB_UNIT_ID管脚,这个管脚默认是255!!.坑了个爹了,只要把这个管脚改成16#01双方就能正常通讯了。
最后附上本次的程序吧。软件用的是博途V15。