//命令 03 收发的报文格式: (读)
*pc-->mcu: 从机地址(1Byte)+ 功能码(1Byte)+ 起始地址(2By t e)+ 数据度(2By t e)+ CRC 码(2Byte)
*mcu-->pc:从机地址(1Byte)+功能码(1Byte)+字节数(1By t e)+寄存器数据 1(2By te)+…..+ 寄存器数据 n(2Byte)+ CRC 码(2By t e)
1、读取温度值带两位小数的情况
//命令 03H:实现读取“供水温度”数值
发送:01 03 40 20 00 01 90 00
接收:01 03 02 89 D8 DF 8E
解析:
供水温度 = 25.20℃ = 0x89D8&0x7FF;
0x89D8&0x8000=0x1000,最高位为1表示两位小数,即数值扩大100倍。
//命令 03H:实现读取“回水温度”数值
发送:01 03 40 21 00 01 C1 C0
接收:01 03 02 89 EF 9E 58
解析:
回水温度 = 25.43℃= 0x89EF&0x7FF;
0x89EF&0x8000=0x1000,最高位为1表示两位小数,即数值扩大100倍。
问题一: 89D8是怎么转换成25.20 89EF怎么转换成25.43的?
问题二:功能码和寄存器有没有对应表,例如功能码03H对应寄存器地址40000或者40001开始
最佳答案
参考:
modbus RTU 通讯的寄存器地址,与报文发送地址关系 - 已解决问题
http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=122296&cid=1028
至于温度的转换,看看在表的通讯协议里面应该有说明吧,试了一下不是直接的浮点数和整数的格式
提问者对于答案的评价:
谢谢
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc368384.html