quote:以下是引用掠影匆匆在2011-08-19 15:43:08的发言:quote:以下是引用火麒麟在2011-08-19 09:49:45的发言:quote:以下是引用掠影匆匆在2011-08-19 08:34:27的发言:quote:以下是引用火麒麟在2011-08-18 21:19:50的发言:
关于楼上的第5个,为什么一包数据最多只能发送125个寄存器而不是126个呢?
这是由Modbus TCP的协议规范所约束的,另外涉及到具体产品的话这个数字还会进一步缩小
按照ModbusTCP的报文规范,有一个字节代表返回字节的数量,一个字节最大255,又因为返回寄存器字节数都是偶数,所以最大254,而报文的第六个字节是后续所有字节的数量,最大也为255,除去设备地址、功能码、返回字节数3个字节,所以理论请求数量应该为(255-3)/2=126个,不知道报文规范为何限制为125个
Modbus PDU长度
◆ Modbus最初在串行链路上的实现(最大RS485ADU=256字节)限制
了Modbus PDU的长度
◆ 因此,对串行链路通信来说,Modbus PDU=256-服务器地址(1字节)-
CRC(2字节)=253字节
◆从而:
RS232 / RS485 ADU = 253字节+服务器地址(1字节) + CRC (2字节)=
256字节
TCP Modbus ADU = 253字节+ MBAP (7字节) = 260字节
◆从而Modbus TCP PDU=253字节-功能码(1字节)-返回的字节数(1字节)=251字
节
◆故纯寄存器数量=251/2(四舍五入)=125字节
其实最主要的原因还是Modbus TCP的PDU是基于串口的RTU来实现的