事情起因是PLC和需要一台设备对接,可以配PN或者modbusTcp,众所周知的原因,首选是MbTcp,设备还没定,先做了一个简单的测试。
一台SR60 V2.04 ,一台电脑, Modbus Tool ModbusSlave 7.4.4.1654 x64。

测试一:读一个寄存器
用库指令MBUS_CLIENT编程,利用指令输出完成信号触发下一次发送,
两次发送间隔时间约32ms左右.
MBUS_CLIENT不支持功能码23(读/写多个寄存器),一次读写交换要经过两次指令,所以下面测试用库TCP OUC指令。
测试二,读一个寄存器,用库TCP OUC指令,TCPconnect / TCPsend /TCPrecv。利用TCPrecv指令输出完成信号触发下一次 TCPsend。
两次发送间隔时间32ms左右。
测试三,读5个寄存器/写5个寄存器,用库TCP OUC指令,TCPconnect / TCPsend /TCPrecv。利用TCPrecv指令输出完成信号触发下一次 TCPsend。即收完后再发。
两次发送间隔时间32ms左右。
测试四,因为全双工通信,SEND触发改成利用TCPsend指令输出完成信号触发下一次 TCPsend。即发完经后再发。
两次发送间隔时间2ms左右。但是TCPrecv接收,会出现把两次信息当成一次接收。接收缓冲区从起始地址开始出现两条消息,同时经过短时运行,发送阻塞,接收还在持续一段时间。程序中每次发送MBAP中的传输标志自加1,明显可见发送区的传输标志比接收区的传输标志大很多。
测试五,还是利用TCPsend指令输出完成信号触发下一次 TCPsend。但发完后,经过若干个PLC扫描周期后再发。周期数从100逐渐减少,当减少到45时,发送间隔约为34~37ms。发收正常。
当周期数减少到35时,偶尔出现两条信息,减少到35,发送间隔时间约27ms左右,出现堵塞,发送区和接受区的传输标志出现偏差,即时调整周期数到32767,相当于短时停止发送,接收区继续进行。在下一次发送前,接收区传输标志和发送区相比,有时一致,有时候差1或2,可能是出现丢包吧。
请教,
一,上述这样的现象, 是因为电脑上 的Modbus Tool ModbusSlave接收阻塞,还是因为PLC接收阻塞引起电脑的阻塞?
二,200smart PLC 的modbusTCP的一次收发周期一般在多少毫秒?

smart程序如附件
ModbusTcp_OUC 0.0.zip