通讯协议(V1.0)
通讯协议(V1.0)
一、 概述
x通讯协议采用标准Modbus协议,所用的传输模式为RTU模式。Modbus协议是一种主-从式协议。
任何时刻只有一个设备能够在线路上进行发送。由主站管理信息交换,且只有它能发起。它会相继对从站进行轮询。除非被主站批准,否则任何从站都不能发送消息。从站之间不能进行直接通信。
协议帧中不包含任何消息报头字节或消息字节结束符。 它的定义如下:
从站地址 | 请求代码 | 数据 | CRC16 |
从站地址:- 地址必须在1到247之间。
- 每个地址在网络设备环境中必须唯一。数据 : 以二进制代码传输。
CRC16 : 循环冗余校验参数。
当间隔时间长于或等于3.5字符时,即作为检测到帧结束。
1、通讯口设置
通讯方式 异步串行通讯接口,如 RS-485,RS-232,RS-422 等
xx率 2400、4800、9600、19200bps(可由设定仪表参数相互更改,默认 9600) 2、字节数据格式
. 一位起始位
. 八位数据位
. 一位停止位
. 无校验
1 | * | * | * | * | * | * | * | * | 1 |
1 位起始位 8 位数据位 1 位停止位
3、仪表通讯帧格式
下表给出由数显仪工作在从机模式时的的Modbus功能,并规定其限值。
从站编号:本机仪表地址,地址必须在1到247之间,且同一总线上各仪表地址不可重复。 地址为0时用于广播功能,且此时只有写功能有效。单字节。
功能代码:“读”和“写”功能是从主站角度定义的。单字节。
功能代码 | Modbus名 | 功能名 | 广播 | 一次连续的N 的最大值 |
3 (0x03) | Read Holding Registers | 读N个寄存器值 | NO | 24 |
16 (0x10) | Write Multiple Registers | 写N个寄存器值 | YES | 24 |
首寄存器地址:要读取的第一个内部寄存器的地址。双字节。每个内部寄存器的值数据为双字节。
寄存器数:要读取或修改的内部寄存器个数。双字节。
读取的字节数:被读取的内部寄存器的数据的字节总数。单字节。
CRC16:循环冗余校验参数。
1) 读N个输出字:功能3
注意: 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个字In(地址0003H,见附表),其中:
· In(第一通道信号输入类型) = 17(0x11) 主站请求
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个单元SP1和SP2(寄存器地址0009H至000AH,见附表),即:
· SP1(上限报警值) = 1000(0x3E8)
· SP2(下限报警值) = 200 (0xC8)
主站请求
从站编号 | 请求代码 | 首寄存器 地址 | 寄存器数 | 字节数目 | 首寄存器 数据 | 第二寄存器 数据 | CRC16 | |||||
0x01 | 0x10 | 0x00 | 0x09 | 0x00 | 0x02 | 0x04 | 0x03 | 0xE8 | 0x00 | 0xC8 | 0xBD | 0x67 |
从站响应
从站 编号 | 响应 代码 | 首寄存器地址 | 寄存器数 | CRC16 |
0x01 | 0x10 | 0x00 | 0x09 | 0x00 | 0x02 | 0x91 | 0xF9 |
3) 异常响应
当从站不能执行发送给它的请求时,它将返回一个异常响应。 异常响应的格式:
从站编号 | 响应代码 | 错误代码 | CRC16 | |
Lo | Hi |
1字节 1字节 1字节 2 字节
响应代码:请求的功能代码 + 0x80(最高位被置为1)。 错误代码:
1 = 请求中需访问寄存器地址不在寄存器地址范围内。
2 = 请求中一次需访问寄存器的数量超过可连续访问寄存器数量的的最大值(24)。
3 = 从站写保护。
4、单回路数字显示控制仪表内部参数对应地址表(范围:0000H—001BH):
编号 | 参数符号 | 参 数 名 称 | 寄存器地 址 ( 十 六 进制) | 数据格式 (十六进制) | 类型 | 数 值 范 围 (十进制) | 备 注 |
1 | 无 | 仪表类型(单回路数显仪表) | 0000 | 双字节 无符号 | 只读 | 00 | 定点数 |
2 | UAd | 仪表地址 | 0001 | 读/写 | 0~99 | ||
3 | Ucr | 仪表通讯xx率 | 0002 | 读/写 | 1~247 | ||
4 | In | 输入类型 | 0003 | 双字节 无符号 | 读/写 | 0~99 | |
5 |
| 抗干扰设置 | 0004 | 0~99 | |||
6 | dip | 小数点位置 | 0005 | 0~3 | |||
7 |
| 显示迁移值 | 0006 | 双字节 有符号 | 读/写 | -1999~9999 | |
8 | Ldo | 显示量程下限 | 0007 | -1999~9999 | |||
9 | Lup | 显示量程上限 | 0008 | -1999~9999 | |||
10 | SP1 | 第一报警值 | 0009 | -1999~9999 | |||
11 | SP2 | 第二报警值 | 000A | -1999~9999 | |||
12 | SP3 | 第三报警值 | 000B | -1999~9999 | |||
13 | SP4 | 第四报警值 | 000C | -1999~9999 | |||
14 | P1h | 第一报警回差值 | 000D | -1999~9999 | |||
15 | P2h | 第二报警回差值 | 000E | -1999~9999 | |||
16 | P3h | 第一报警回差值 | 000F | -1999~9999 | |||
17 | P4h | 第二报警回差值 | 0010 | -1999~9999 | |||
18 | P1c | 第一报警方式 | 0011 | 双字节 无符号 | 读/写 | 0~99 | |
19 | P2c | 第二报警方式 | 0012 | 0~99 | |||
20 | P3c | 第一报警方式 | 0013 | 0~99 | |||
21 | P4c | 第二报警方式 | 0014 | 0~99 | |||
22 | odo | 变送量程下限 | 0015 | 双字节有符 号 | 读/写 | -1999~9999 | |
23 | oup | 变送量程上限 | 0016 | -1999~9999 | |||
24 | SLn | 继电器消音设置 | 0017 | 双字节无符号 | 读/写 | -1999~9999 | |
25 | out | 模拟变送输出类型 | 0018 | 0~9999 | |||
26 | 无 | 无意义(预留) | 0019 | (预留) | |||
27 | 无 | 测量显示值 | 001A | 双字节有符 号 | 只读 | -1999~9999 | |
28 | 无 | 报警状态 | 001B | 双字节无符 号 | 只读 | 见下表 A | |
|
|
|
|
|
| ||
|
|
|
|
|
|
|
|
表 A:
Bit0——SP1,Bit2——SP 2,Bit4——SP 3,Bit6——SP 4。
报警:1;无报警:0
报警状态 | Bit15 ~ Bit8 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | ||||
无意义 | 无意义 | 1 | 0 | 无意义 | 1 | 0 | 无意义 | 1 | 0 | 无意义 | 1 | 0 |
5、双回路数字显示控制仪表内部参数对应地址表(范围:0000H—0023H):
编号 | 参数符号 | 参 数 名 称 | 寄存器地 址 (十六 进制) | 数据格式 (十六进制) | 类型 | 数 值 范 围 (十进制) | 备 注 |
1 | 无 | 仪表类型(双回路数显仪表) | 0000 | 双字节 无符号 | 只读 | 01 | 定点数 |
2 | UAd | 仪表地址 | 0001 | 读/写 | 0~99 | ||
3 | Ucr | 仪表通讯xx率 | 0002 | 读/写 | 1~247 | ||
4 | In1 | 第一回路 输入类型 | 0003 | 双字节 无符号 | 读/写 | 0~99 | |
5 |
| 第一、二回路 抗干扰设置 | 0004 | 读/写 | 0~99 | ||
6 | dip1 | 第一、二回路 小数点位置 | 0005 | 读/写 | 0~33 个位代表第一回路 十位代表第二回路 |
| |
dip2 |
| ||||||
7 |
| 第一回路 显示迁移值 | 0006 | 双字节 有符号 | 读/写 | -1999~9999 | |
8 | Ldo | 第一回路 线性量程下限 | 0007 | 读/写 | -1999~9999 | ||
9 | Lup | 第一回路 线性量程上限 | 0008 | 读/写 | -1999~9999 | ||
10 | SP1 | 第一回路 第一报警值 | 0009 | 读/写 | -1999~9999 | ||
11 | SP2 | 第一回路 第二报警值 | 000A | 读/写 | -1999~9999 | ||
12 | P1h | 第一回路 第一报警回差值 | 000B | 读/写 | -1999~9999 | ||
13 | P2h | 第一回路 第二报警回差值 | 000C | 读/写 | -1999~9999 | ||
14 | P1c | 第一回路 第一报警方式 | 000D | 双字节无符 号 | 读/写 | 0~99 | |
15 | P2c | 第一回路 第二报警方式 | 000E | 读/写 | 0~99 | ||
16 | odo | 第一回路 变送量程下限 | 000F | 双字节有符 号 | 读/写 | -1999~9999 | |
17 | oup | 第一回路 变送量程上限 | 0010 | 读/写 | -1999~9999 | ||
18 | In2 | 第二回路 输入类型 | 0011 | 双字节无符 号 | 读/写 | 0~99 | |
19 | 无 | 无意义(预留) | 0012 | (预留) | |||
20 | 2 | 第二回路 显示迁移值 | 0013 | 双字节 有符号 | 读/写 | -1999~9999 | |
21 | Ldo2 | 第二回路 线性量程下限 | 0014 | 读/写 | -1999~9999 | ||
22 | Lup2 | 第二回路 线性量程上限 | 0015 | 读/写 | -1999~9999 | ||
23 | SP3 | 第二回路 第一报警值 | 0016 | 读/写 | -1999~9999 | ||
24 | SP4 | 第二回路 第二报警值 | 0017 | 读/写 | -1999~9999 | ||
25 | P3h | 第二回路 第一报警回差值 | 0018 | 读/写 | -1999~9999 | ||
26 | P4h | 第二回路 第二报警回差值 | 0019 | 读/写 | -1999~9999 | ||
27 | P3c | 第二回路 第一报警方式 | 001A | 双字节无符 号 | 读/写 | 0~99 | |
28 | P4c | 第二回路 第二报警方式 | 002B | 读/写 | 0~99 | ||
29 | odo2 | 第二回路 变送量程下限 | 002C | 双字节有符 号 | 读/写 | -1999~9999 | |
30 | oup2 | 第二回路 变送量程上限 | 002D | 读/写 | -1999~9999 | ||
31 | Sln | 继电器消音设置 | 002E | 双字节无符 号 | 读/写 | -1999~9999 | |
32 | out | 模拟变送输出类型设置 | 002F |
| 读/写 | 0~9999 | |
33 | 无 | 无意义(预留) | 0020 |
| (预留) | ||
34 | 无 | 第一通道显示值 | 0021 | 双字节 有符号 | 只读 | -1999~9999 | |
35 | 无 | 第二通道显示值 | 0022 | 只读 | -1999~9999 | ||
36 | 无 | 报警状态 | 0023 | 双字节 无符号 | 只读 | 见下表 A | |
|
|
|
|
|
|
表 A:
报警:1;无报警:0 (Bit0——SP1,Bit2——SP2,Bit4——SP3,Bit6——SP4)
报警状态 | Bit15 ~ Bit8 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | ||||
无意义 | 无意义 | 1 | 0 | 无意义 | 1 | 0 | 无意义 | 1 | 0 | 无意义 | 1 | 0 |