模块表通讯协议
时间:2013-07-03 阅读:3217
概述
本通讯协议采用标准Modbus协议,所用的传输模式为RTU模式。Modbus协议是一种主-从式协议。
任何时刻只有一个设备能够在线路上进行发送。由主站管理信息交换,且只有它能发起。它会相继对从站进行轮询。除非被主站批准,否则任何从站都不能发送消息。从站之间不能进行直接通信。
协议帧中不包含任何消息报头字节或消息字节结束符。
它的定义如下:
从站地址 | 请求代码 | 数据 | CRC16 |
从站地址:- 地址必须在1到247之间。
- 每个地址在网络设备环境中必须*。
数据 : 以二进制代码传输。
CRC16 : 循环冗余校验参数。
当间隔时间长于或等于3.5字符时,即作为检测到帧结束。
1、通讯口设置
通讯方式 异步串行通讯接口,如RS-485,RS-232,RS-422等
波特率 2400、4800、9600、19200bps(可由设定仪表参数相互更改,默认9600)
2、字节数据格式
. 一位起始位
. 八位数据位
. 一位停止位
. 无校验
1 | * | * | * | * | * | * | * | * | 1 |
1位起始位 8位数据位 1位停止位
3、仪表通讯帧格式
下表给出由工作在从机模式时的的Modbus功能,并规定其限值。
从站编号:本机仪表地址,地址必须在1到247之间,且同一总线上各仪表地址不可重复。
地址为0时用于广播功能,且此时只有写功能有效。单字节。
功能代码:“读”和“写”功能是从主站角度定义的。单字节。
功能代码 | Modbus名 | 功能名 | 广播 | 一次连续的N的zui大值 |
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上的*通道输入类型(地址0006H,见附表),其中:
主站请求
0x01 | 0x03 | 0x00 | 0x06 | 0x00 | 0x01 | 0x64 | 0x0B |
1 字节 1 字节 2 字节 2 字节 2 字节
从站响应
0x01 | 0x03 | 0x02 | 0x00 | 0x0F | 0XF8 | 0x40 |
1字节 1字节 1字节 2字节 2字节
· *通道信号输入类型 = 0x000F(4-20mA)。
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将从站1上的*通道输入类型(地址0006H,见附表)改为PT100,见附表),即:
· PT100(类型代码0X09,见下表)
主站请求
从站编号 | 请求代码 | 首寄存器 地址 | 寄存器数 | 字节数目 | 首寄存器数据 | CRC16 | ||||
0x01 | 0x10 | 0x00 | 0x06 | 0x00 | 0x01 | 0x02 | 0x00 | 0x09 | 0x66 | 0x30 |
从站响应
从站编号 | 响应代码 | 首寄存器地址 | 寄存器数 | CRC16 | |||
0x01 | 0x10 | 0x00 | 0x06 | 0x00 | 0x01 | 0xE1 | 0xC8 |
3) 异常响应
当从站不能执行发送给它的请求时,它将返回一个异常响应。
异常响应的格式:
从站编号 | 响应代码 | 错误代码 | CRC16 | |
Lo | Hi |
1字节 1字节 1字节 2 字节
响应代码:请求的功能代码 + 0x80(zui高位被置为1)。
错误代码:
1 = 请求中需访问寄存器地址不在寄存器地址范围内。
2 = 请求中一次需访问寄存器的数量超过可连续访问寄存器数量的的zui大值((24)。
3 = 从站写保护。
7、模块仪表内部参数对应地址表(范围:0--17):
编号 | 参 数 名 称 | 寄存器地 址(HEX) | 数据格式 | 类型 | 数 值 范 围 | 备 注 |
0 | 仪表类型(调理器) | 0000 | 双字节 无符号 | 只读 | 0x11 | |
1 | 仪表地址 | 0001 | 读/写 | 1~247 | | |
2 | 仪表通讯波特率 | 0002 | 0-3 | 0:2400n81 1:4800n81 2:9600n81, 3:19200n81, 波特率修改后仪表需重新上电有效,默认为2。 | ||
3 | 继电器报警方式 | 0003 | 0-1 | 0:小于报警值报警 1:大于报警值报警 | ||
4 | 继电器报警 设定值 | 0004 | 双字节 有符号 | | ||
5 | 断线输出类型 | 0005 | 双字节 无符号 | 见说明 | 见说明 | |
6 | *通道 输入类型 | 0006 | 见说明 | 见说明 | ||
7 | *通道 输出类型 | 0007 | 见说明 | 见说明 | ||
8 | *通道 变送量程下限 | 0008 | 双字节 有符号 | | 为1位定点小数 | |
9 | *通道 变送量程上限 | 0009 | | |||
10 | *通道 测量数据 | 000a | 只读 | | 5V和20mA为定点3位小数 温度:1位小数 | |
11 | *通道 输出数据 | 000b | 双字节 无符号 | | 定点3位小数 | |
12 | 第二通道 输入类型 | 000c | 同*通道 | 读/写 | | 当有第二路输入或输出时才可用,其范围和要求和*通道相同 |
13 | 第二通道 输出类型 | 000d | | |||
14 | 第二通道 变送量程下限 | 000e | | |||
15 | 第二通道 变送量程上限 | 000f | | |||
16 | 第二通道 测量数据 | 0010 | 只读 | | ||
17 | 第二通道 输出数据 | 0011 | |
注
1、输入信号类型:
读本仪表设定的输入信号的类型。
SignalInputType | 对应类型 | 备注 |
0x01 | K分度 | 热 电 偶 |
0x02 | E分度 | |
0x03 | S分度 | |
0x04 | B分度 | |
0x05 | J分度 | |
0x06 | T分度 | |
0x07 | R分度 | |
0x08 | N分度 | |
0x09 | PT100 | 热 电 阻 |
0x0a | Cu100 | |
0x0b | Cu50 | |
0x0c | BA1 | |
0x0d | BA2 | |
0x0e | 0-10mA | 电 压 电 流 |
0x0f | 4-20mA | |
0x10 | 0-5V | |
0x11 | 1-5V | |
0x12 | 0-20mA | |
0x13 | 0-20mV | 毫伏 |
0x14 | 0-70mV | |
0x15 | 0-100mV | |
0x16 | 0-50KHz | 频率 |
0x17 | Pt100(0-100) | PT100小量程 |
0x18 | Pt1000 | |
0x19 | 0-10V | |
0x1a | 0-1k 电阻 | 线性电阻 |
0x1b | 钨铼 5-钨铼 26 | 热 电 偶 |
0x1c | 钨铼 3-钨铼 25 |
2、读输入信号类型:
设置本仪表的输入信号类型。
具体类型定义见上表。
3、读输出信号类型:
读本仪表设定的输出信号的类型。
SignalOutputType | 对应类型 |
0x01 | 0-10mA |
0x02 | 4-20mA |
0x03 | 0-5V |
0x04 | 1-5V |
0x06 | 0-10V |
0x05 | 0-20mA |
4、 断线输出类型(InputOpenType):
当没有输入或输入断路时的输出值。
InputOpenType | 对应类型 |
0x01 | 报警值 |
0x02 | 断线输出保持 |
0x03 | 未使用 |
0x04 | 0-22mA/0-5.5V/0-11V跟随 |
5、 写报警输出值:
设定故障报警输出的输出值参数(AH AM AL),范围为:0---22.000(mA)。按照4-20mA的输出类型设置,若输出类型为电压或0-10mA时,需按比例计算后发送。如:为0.750V时,AH=0x00,AM=0x30,AL=0x00。
6、 读报警输出值:
读出故障报警输出的输出值参数(AH AM AL)