欣仰邦温湿度采集ModBus从站接口通信详解(RS485 ModBus规约)
发表时间:2021-12-17作者:xmsiyb
1 适用范围
S-CGQM以及S-CGXO系列(系统版本7.03以后)监控主机ModBus从站接口。
(1)主机按键设置:改主机的ModBus从规约为“RS-ModBus规约”
操作步骤:按确认键,在主机界面找到“2基础参数设置”,按确认键进入,密码默认0000长按确认键进入子菜单,找到“ModBus从规约”或者“485口通信规约”,按确认键修改为“RS-ModBus规约”,长按确认键保存。
(2)主机按键设置ModBus从地址;
如果同时与多台主机通讯,则需修改主机的ModBus从地址保证从地址不冲突,ModBus从地址对应主机32个通道的第1个通道(ModBus从地址1表明主机通道1地址为1,通道2地址为2,依次类推),因此在与多台主机同时通讯时,可将主机的ModBus从地址依次设置为1,33,65,97,32N+1,......
操作步骤:按确认键,在主机界面找到“2基础参数设置”,按确认键进入,密码默认0000长按确认键进入子菜单,找到“3ModBus从地址”,修改地址,默认地址为1。
初始结构 ≥4 字节的时间
地址码 = 1 字节
功能码 = 1 字节
数据区 = N 字节
错误校验 = 16 位CRC 码
结束结构 ≥4 字节的时间
地址码:主机的通道地址,在通讯网络中是唯一的(出厂默认0x01)。
功能码:主机所发指令功能指示,本变送器只用到功能码0x03(读取寄存器数据)。
数据区:数据区是具体通讯数据,注意16bits数据高字节在前!
CRC码:二字节的校验码。
主机问询帧结构:
从机应答帧结构:
应答帧: (例如读到温度为-10.1℃,湿度为65.8%RH)
模拟量2表示湿度,模拟量1表示温度;
温度计算:
当温度低于 0 ℃ 时温度数据以补码的形式上传。
温度:FF9B H(十六进制)= -101 => 温度 = -10.1℃
湿度计算:
湿度:0292 (十六进制)代表10进制数658,则代表湿度值为65.8%
=> 湿度 = 65.8%RH
应答帧: (例如读到温度为-10.1℃,湿度为65.8%RH)
模拟量2表示湿度,模拟量1表示温度;
温度计算:
当温度低于 0 ℃ 时温度数据以补码的形式上传。
温度:FF9B H(十六进制)= -101 => 温度 = -10.1℃
湿度计算:
湿度:0292 (十六进制)代表10进制数658,则代表湿度值为65.8%
=> 湿度 = 65.8%RH
S-CGQM以及S-CGXO系列(系统版本7.03以后)监控主机ModBus从站接口。
(1)主机按键设置:改主机的ModBus从规约为“RS-ModBus规约”
操作步骤:按确认键,在主机界面找到“2基础参数设置”,按确认键进入,密码默认0000长按确认键进入子菜单,找到“ModBus从规约”或者“485口通信规约”,按确认键修改为“RS-ModBus规约”,长按确认键保存。
(2)主机按键设置ModBus从地址;
如果同时与多台主机通讯,则需修改主机的ModBus从地址保证从地址不冲突,ModBus从地址对应主机32个通道的第1个通道(ModBus从地址1表明主机通道1地址为1,通道2地址为2,依次类推),因此在与多台主机同时通讯时,可将主机的ModBus从地址依次设置为1,33,65,97,32N+1,......
操作步骤:按确认键,在主机界面找到“2基础参数设置”,按确认键进入,密码默认0000长按确认键进入子菜单,找到“3ModBus从地址”,修改地址,默认地址为1。
2 通讯基本参数
编 码 | 8位二进制 |
数据位 | 8位 |
奇偶校验位 | 无 |
停止位 | 1位 |
错误校验 | CRC(冗余循环码) |
波特率 | 4800bit/s |
3数据帧格式定义
采用Modbus RTU 通讯规约,格式如下:初始结构 ≥4 字节的时间
地址码 = 1 字节
功能码 = 1 字节
数据区 = N 字节
错误校验 = 16 位CRC 码
结束结构 ≥4 字节的时间
地址码:主机的通道地址,在通讯网络中是唯一的(出厂默认0x01)。
功能码:主机所发指令功能指示,本变送器只用到功能码0x03(读取寄存器数据)。
数据区:数据区是具体通讯数据,注意16bits数据高字节在前!
CRC码:二字节的校验码。
主机问询帧结构:
地址码 | 功能码 | 寄存器起始地址 | 寄存器长度 | 校验码低位 | 校验码高位 |
1字节 | 1字节 | 2字节 | 2字节 | 1字节 | 1字节 |
地址码 | 功能码 | 有效字节数 | 数据一区 | 第二数据区 | 第N数据区 | 校验码 |
1字节 | 1字节 | N*2字节 | 2字节 | 2字节 | 2字节 | 2字节 |
4寄存器地址
寄存器地址 | PLC或者组态地址 | 内容 | 操作 |
0000 | 40001 | 模拟量2原始值(16位无符号整形) | 只读 |
0001 | 40002 | 模拟量1原始值(16位有符号整形) | 只读 |
5通讯协议示例以及解释
举例1:读取通道01的模拟量1/2(以温湿度为例),ModBus从地址设置为2
问询帧:地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
0x02 | 0x03 | 0x00 0x00 | 0x00 0x02 | 0xC4 | 0x38 |
地址码 | 功能码 | 返回有效字节数 | 模拟量2原始值 | 模拟量1原始值 | 校验码低位 | 校验码高位 |
0x02 | 0x03 | 0x04 | 0x02 0x92 | 0xff 0x9b | 0x69 | 0x3D |
温度计算:
当温度低于 0 ℃ 时温度数据以补码的形式上传。
温度:FF9B H(十六进制)= -101 => 温度 = -10.1℃
湿度计算:
湿度:0292 (十六进制)代表10进制数658,则代表湿度值为65.8%
=> 湿度 = 65.8%RH
举例2:读取通道03的模拟量1/2(以温湿度为例),ModBus从地址设置为10
问询帧:地址码 | 功能码 | 起始地址 | 数据长度 | 校验码低位 | 校验码高位 |
0x0C | 0x03 | 0x00 0x00 | 0x00 0x02 | 0xC5 | 0x16 |
地址码 | 功能码 | 返回有效字节数 | 模拟量2原始值 | 模拟量1原始值 | 校验码低位 | 校验码高位 |
0x0C | 0x03 | 0x04 | 0x02 0x92 | 0xff 0x9b | 0x86 | 0xFD |
温度计算:
当温度低于 0 ℃ 时温度数据以补码的形式上传。
温度:FF9B H(十六进制)= -101 => 温度 = -10.1℃
湿度计算:
湿度:0292 (十六进制)代表10进制数658,则代表湿度值为65.8%
=> 湿度 = 65.8%RH
相关资讯
17850532774