modbus RTU PLC 跨字节读线圈寄存器的返回值? modbus报文解析实例
- modbus-RTU 接受报文里面的内容返回后存在哪里?
- c#请问modbus-rtu返回的数据该如何解析
- modbus TCP通讯,返回数据总说总长错误,哪位大神知道该返回什么才对啊?
- 用modbus通讯 05指令给西门子S7-200输出线圈置位,为什么接收到的返回帧为00?高手给解答啊
modbus-RTU 接受报文里面的内容返回后存在哪里?
给你举个例子,
发送报文:01 03 00 00 00 05 XX XX
表示从0000地址读取5个寄存器,XX XX为RCR校验码。
接收报文:01 03 0A 00 01 02 03 04 05 06 07 08 09 YY YY
其中,00 01 02 03 04 05 06 07 08 09为接收的数据,共10个字节,也就是5个寄存器。YY YY 为校验码。
c#请问modbus-rtu返回的数据该如何解析
Modbus RTU返回的数据,第一个字节是设备ID,第二个字节是寄存器类型,第三第四字节是数据长度,最末的两个字节是CRC16校验码,中间的是数据。数据的解析,要看你读的是什么寄存器,以及寄存器存放的数据类型是什么,如果读的是线圈寄存器,也就是开关量,数据区第一个字节的最高位二进制位就对应着第一个开关量,0为关,1为开,依此类推。如果是保持寄存器,或者读写寄存器,数据类型可能是32位浮点,32位整数,16位整数等。一个寄存器包含两个字节,也就是说你读取一个寄存器,返回的数据是两个字节,32位浮点或者整数需要用到两个寄存器,也就是四个字节,四个字节的顺序可能与电脑的标准不同,有0123,1032,3210,2301等四种组合,都要调整顺序为0123才能被电脑正确转换。
浮点数使用BitConverter.ToSingle(Bdata, 0);进行转换。其中Bdata是一个长度为4的字节数组,保存着四字节的浮点数,用过这个方法可以将字节数组转换为浮点数据类型。整数也可用类似的方法。
modbus TCP通讯,返回数据总说总长错误,哪位大神知道该返回什么才对啊?
发送报文:图片中的这modbustcp报文里面的从站地址是06,功能码是01,读起始地址为00 00,读数据格式为00 01。
接收报文:前面的报文头都一样的,00 09表示的是后面的modbus数据有9个字节,数据是【06 10 00 00 00 01 02 00 00 】,意思是从站地址06、功能码变成了10H,也就是16,这应答报文是错的。起始地址是 00 00,数据个数是 00 01 ,字节数是 02,具体的数据内容是 00 00。
-----------------------------------
你的modbustcp的应答报文,好像不是读线圈状态的,而是功能码16——写多个保持型寄存器。
矩形PLC,支持Modbus rtu和Modbus tcp协议。
用modbus通讯 05指令给西门子S7-200输出线圈置位,为什么接收到的返回帧为00?高手给解答啊
你用5指令把线圈置位如果你监控程序或在PLC上看到线圈置位了,证明这条程序段正确,但你说的接收数据是00是什么意思呢?你接收的数据是用什么指令写的?如果你要读线圈应该用1指令。