V1.2
一、概述
本通讯协议采用标准Modbus协议,所用的传输模式为RTU模式。Modbus协议是一种主-从式协议。 任何时刻只有一个设备能够在线路上进行发送。由主站管理信息交换,且只有它能发起。它会相继对从站进行 轮询。除非被主站批准,否则任何从站都不能发送消息。从站之间不能进行直接通信。 协议帧中不包含任何消息报头字节或消息字节结束符。
它的定义如下:
从站地址 | 请求代码 | 数据 | CRC16 |
从站地址:- 地址必须在1到247之间。
- 每个地址在网络设备环境中必须唯一。
数据 : 以二进制代码传输。 CRC16 : 循环冗余校验参数。
当间隔时间长于或等于3.5字符时,即作为检测到帧结束。
1、通讯口设置
通讯方式异步串行通讯接口,如 RS-485,RS-232,RS-422 等
波特率 2400、4800、9600、19200bps(可由设定仪表参数相互更改,默认 9600) 2、字节数据格式
. 一位起始位
. 八位数据位
. 偶校验
. 一位停止位
起始 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | 偶校验 | 停止 |
二、仪表通讯帧格式 (1)名词定义 ● 从站编号:
本机仪表地址,地址必须在1到247之间,且同一总线上各仪表地址不可重复。地址为0时用于广播功能, 且此时只有写功能有效,从站无应答。单字节。
● 功能代码:
“读”和“写”功能是从主站角度定义的。单字节。
功能代码 | Modbus名 | 功能名 | 广播 | 一次连续的N |
|
的最大值 |
| ||||
|
|
|
|
| |
|
|
|
|
|
|
3 (0x03) | Read Holding Registers | 读N个寄存器值 | NO | 9 |
|
16 (0x10) | Write Multiple Registers | 写N个寄存器值 | YES | 9 |
|
Ø首寄存器地址:
要读取的第一个内部寄存器的地址。双字节,高字节在前。
Ø寄存器数:
要连续读取或修改的内部寄存器个数。双字节,高字节在前。
● 字节数:
1
● CRC16:
循环冗余校验参数。双字节,低字节在前。
(2)读和写操作
1) 读N个输出字:功能码3(0x03)
注意: Hi = 高位字节,Lo = 低位字节。 此功能可被用于读取参数,而无论类型如何。
主站请求
| 从站编号 |
|
| 0x03 |
|
| 首寄存器地址 |
|
|
| 寄存器数 |
| CRC16 |
|
|
| |||||||||||||
|
|
|
|
| Hi |
|
| Lo |
|
| Hi |
| Lo | Lo |
|
|
|
| Hi |
|
| ||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||||
| 1 字节 |
|
| 1 字节 |
| 2 | 字节 |
|
|
| 2 字节 |
|
| 2 字节 |
|
|
| ||||||||||||
从站响应 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||
| 从站编号 |
|
| 0x03 | 读取的字节 | 首寄存器数值 | …… |
| 末寄存器数值 |
|
| CRC16 |
|
| |||||||||||||||
|
|
|
|
| 数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||
|
|
|
|
|
| Hi |
| Lo |
|
|
| Hi |
| Lo |
| Lo |
| Hi |
|
| |||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1字节 | 1字节 |
| 1字节 |
| 2 字节 |
|
|
|
|
| 2 字节 |
|
| 2 字节 |
|
|
| |||||||||||
例1:使用功能3读取从站1上的1个单元(地址0003H) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||||||||||
主站请求 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||
| 0x01 |
|
| 0x03 |
|
| 0x00 |
| 0x03 |
| 0x00 |
| 0x01 | 0x74 |
|
| 0x0A |
|
| ||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||
| 1 字节 |
|
| 1 字节 |
| 2 | 字节 |
|
|
| 2 字节 |
|
| 2 | 字节 |
|
|
| |||||||||||
从站响应 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||||
| 0x01 |
|
| 0x03 |
| 0x02 |
|
| 0x00 |
|
| 0x11 |
|
| 0x78 |
|
| 0x48 |
|
| |||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||||
| 1字节 |
|
| 1字节 |
| 1字节 |
|
|
|
| 2字节 |
|
|
|
|
| 2字节 |
|
|
|
2) 写N个输出字:功能码16(0x10)
主站请求
| 从站 | 0x10 | 首寄存器地址 |
| 寄存器数 | 字节数 | 首字数据 |
| …… | CRC16 |
| ||||||||||
| 编号 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||
| Hi | Lo |
| Hi | Lo |
|
| Hi |
| Lo |
| Lo |
| Hi |
| ||||||
|
|
|
|
|
|
|
|
|
|
| |||||||||||
|
|
|
|
|
|
|
|
|
|
|
| ||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| 1字节 | 1字节 | 2 字节 | 2 字节 | 1字节 | 2字节 |
|
|
| 2字节 |
| ||||||||||
从站响应 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||
| 从站 | 0x10 | 首寄存器地址 |
| 寄存器数 |
|
|
|
| CRC16 |
|
|
| ||||||||
| 编号 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| Hi |
|
| Lo |
| Hi |
| Lo |
| Lo |
|
| Hi |
| |||||||
|
|
|
|
|
|
|
| ||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||
| 1字节 | 1字节 |
| 2 字节 |
|
|
| 2 字节 |
|
|
| 2 字节 |
|
|
|
例2:使用功能16将1000、200写入从站1中的2个单元(寄存器地址0009H至000AH)
2
| 从站 | 请求 | 首寄存器 | 寄存器数 | 字节数 |
| 首寄存器 | 第二寄存器 | CRC16 |
| |||||
| 编号 | 代码 | 地址 | 目 |
| 数据 | 数据 |
| |||||||
|
|
|
|
|
|
| |||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 0x01 | 0x10 | 0x00 | 0x09 | 0x00 | 0x02 | 0x04 |
| 0x03 | 0xE8 | 0x00 | 0xC8 | 0xB2 | 0x23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
从站响应 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 从站 | 响应 |
| 首寄存器地址 |
|
| 寄存器数 |
|
| CRC16 |
|
| |||
| 编号 | 代码 |
|
|
|
|
|
|
| ||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
|
|
|
|
|
|
|
|
|
|
|
| ||||
| 0x01 | 0x10 | 0x00 | 0x09 | 0x00 |
|
| 0x02 | 0x91 | 0xCA |
|
3) 异常响应
当从站不能执行发送给它的请求时,它将返回一个异常响应。 异常响应的格式:
从站编号响应代码 错误代码
CRC16
LoHi
1字节 1字节 1字节2 字节
响应代码:请求的功能代码 + 0x80(最高位被置为1)。
错误代码:
1 = 请求中需访问寄存器地址不在寄存器地址范围内。
2 = 请求中一次需访问寄存器的数量超过可连续访问寄存器数量的的最大值。
3 = 从站写保护(详见说明书中波特率菜单设置)。
3
三、2088 一体化智能温度表头内部参数对应地址表(范围:0000—0009):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 寄存器 |
|
|
|
|
|
编 | 参数 | 参 | 数 名 | 称 | 地 址 | 数据格式 | 属性 | 数 值 范 围 | 备 注 |
|
号 | 符号 | ( 十 六 | (十六进制) | (十进制) |
| |||||
|
|
|
|
|
| |||||
|
|
|
|
| 进制) |
|
|
|
|
|
1 | 无 | 仪表类型(2088 智能表头) | 00000 | 双字节 | 只读 | 00 |
|
| ||
2 | UAd |
| 仪表地址 |
| 00001 | 读/写 | 1~247 |
|
| |
|
| 无符号 | 注[1]: |
| ||||||
3 | Ucr | 仪表通讯波特率 | 00002 | 读/写 | 0~3 |
| ||||
| 无小数点 |
| ||||||||
4 | Unit |
| 显示单位 |
| 00003 | 双字节 | 读/写 | 0~10 |
| |
|
|
|
| |||||||
|
| 无符号 |
|
| ||||||
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 00004 | 四字节有符 |
|
| 注[2]: |
|
5 | Dnst |
| 密度值 |
| 号浮点数高 | 读/写 | 0-9999 |
| ||
|
| 00005 | 高位在前 |
| ||||||
|
|
|
|
| 位在前 |
|
|
| ||
|
|
|
|
|
|
|
|
|
| |
6 | dOW |
| 量程下限 |
| 00006 | 四字节有符 |
| -999~9999 | 注[4]: |
|
|
| 0007 |
| 高位在前, |
| |||||
|
|
|
|
| 号浮点数高 | 读/写 |
|
| ||
7 |
|
|
|
| 0008 |
| 单位根据 |
| ||
UP |
| 量程上限 |
| 位在前 |
| -999~9999 |
| |||
|
| 0009 |
| Unit 变化 |
| |||||
|
|
|
|
|
|
|
|
| ||
|
|
|
|
|
|
|
|
| 注[5]: |
|
8 | CUR |
| 电流值 |
| 00010 | 双字节 | 只读 | 0~65535 | 0 代表 4ma, |
|
|
| 无符号 | 65535 代表 |
| ||||||
|
|
|
|
|
|
|
|
| ||
|
|
|
|
|
|
|
|
| 20ma |
|
|
|
|
|
|
| 四字节有符 |
|
| 注[6]: |
|
|
|
|
|
| 00011 |
|
| 高位在前, |
| |
9 | PRESS |
| 压力值 |
| 号浮点数高 | 只读 | -999~9999 |
| ||
|
| 00012 | 单位根据 |
| ||||||
|
|
|
|
| 位在前 |
|
|
| ||
|
|
|
|
|
|
|
| Unit 变化 |
| |
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
4