调试过程值得记录一下,真是很有意思,用了一下午的时间,可能是我不熟悉日系PLC的原因。
首先设置通讯口,我这里使用的是Port3,具体参数设置如下:
主程序如下图
网络1主要是初始化一下串口,这条指令不设置好像也没什么问题,加上更保险一些。
网络2主要是一秒钟读取从站一个寄存器的数据,这里使用上升沿触发的指令,其实不用上升沿指令也是可以的。
第一步很顺利,然后悲催的事情开始了,我要读取两个从站的内容,就出问题了,程序如下:
通讯不上了,最终发现,只要有两个一样的modbus指令,发送出去的数据就存在问题,监控的数据如下:
01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 01 03 01 03 01 03 01 01 03 01 03 01 01 |
感觉指令被不停地触发,每个报文都发送不完整。换了几种思路都不解决问题,联系厂家吧。
厂家说不能这么做,要用步进指令隔开,然后看了步进指令的帮助,把程序改成如下模式问题解决了。
也算是新接触了一种设计思路吧。问题的根源是什么,因为不知道底层的东西,所以这里也就不做推测了。