Modbus RTU Module (A) 使用教程

产品参数

通信参数

参数规格
供电电压7 V ~ 36 V
通信接口RS485
通信波特率2400、4800、9600、19200、38400、57600、115200、128000、256000
默认通信格式9600,N,8,1
Modbus 协议标准 Modbus RTU 协议
RS485 地址设置1 ~ 255
指示灯STA:MCU 指示灯,MCU 正常工作时闪烁
TXD:发送指示灯,发送数据时灯亮
RXD:接收指示灯,接收数据时灯亮

输入输出参数

参数规格
继电器输出2 DO,一常开、一常闭,≤10 A 250 V AC 或 ≤10 A 30 V DC
数字输入2 DI,5 V ~ 36 V,无源输入 / 有源输入(NPN 型或 PNP 型),内置双向光耦
模拟输出2 AO,0 ~ 20 mA,分辨率 12 位,1 μA,精度 ±0.03 mA
模拟输入2 AI,0 ~ 10 V / 2 ~ 10 V / 0 ~ 20 mA / 4 ~ 20 mA,分辨率 12 位,精度 ≤3‰,更新速率 31 Hz,采样电阻 249 Ω

继电器输出

参数规格
继电器路数2 路
触点类型一常开、一常闭
触点负载≤10 A 250 V AC 或 ≤10 A 30 V DC

模拟输出

参数规格
输出模式2 路电流输出
分辨率12 位,1 μA
量程0 ~ 20 mA
输出精度±0.03 mA

数字输入

参数规格
数字输入路数2 路
有源输入范围5 V ~ 36 V DC
输入类型无源输入 / 有源输入(NPN 型或 PNP 型)
隔离类型双向光耦

模拟输入

参数规格
模拟输入路数2 路
量程0 ~ 10 V / 2 ~ 10 V
0 ~ 20 mA / 4 ~ 20 mA
采样精度12 位分辨率,精度 ≤3‰
数据更新速率31 Hz
电流采样电阻249 Ω

基本功能

支持通过 RS485 发送 Modbus RTU 协议指令实现数字量和模拟量输入输出


硬件说明

硬件端子说明


产品接线表

继电器输出
端子标号功能
CH1 NC继电器 CH1 常闭触点
CH1 COM继电器 CH1 公共端
CH1 NO继电器 CH1 常开触点
CH2 NC继电器 CH2 常闭触点
CH2 COM继电器 CH2 公共端
CH2 NO继电器 CH2 常开触点
模拟输入输出
端子标号功能
AO1第一路模拟量输出
AO2第二路模拟量输出
AGND模拟信号地
AI1+第一路模拟量输入正端
AI1-第一路模拟量输入负端
AI2+第二路模拟量输入正端
AI2-第二路模拟量输入负端
通信与供电
端子标号功能
485 A+RS485 信号线 A 端
485 B-RS485 信号线 B 端
EARTHRS485 屏蔽地线
DC 7 ~ 36 V +电源正极
DC 7 ~ 36 V -电源负极
⊙ DC 7 ~ 36 V圆形 DC 电源接口
注意事项

圆形 DC 电源接口与接线端子供电接口不可同时接入电源,否则可能导致电源损坏、模块损坏或引发其他安全风险。

数字输入
端子标号功能
DI COM数字输入公共端
DGND数字信号地
DI1第一路数字输入
DI2第二路数字输入

DI COM 端子

↑ DI COM 为输入信号公共端,可接悬空也可电源正极或电源负极,可直接从供电电源取电,也可接独立电源供电。

有以下三种接法

  • 不接悬空:干接点无源输入
  • 接电源正极:低电平触发,NPN 型湿接有源输入,电压 5V-36V DC
  • 接电源负极:高电平触发,PNP 型湿接有源输入,电压 5V-36V DC

数字量输入接线

数字量输入接线方式可细分为:无源干接点输入、有源湿接点 NPN 型输入、有源湿接点 PNP 型输入。

无源干接点输入接线图


有源湿接点 NPN 型输入接线图


有源湿接点 PNP 型输入接线图


继电器输出接线

继电器常开输出接线图

将火线(交流负载)或电源正极(直流负载)接入 COM 端,并从常开(NO)端引出后连接至负载。


模拟量输入接线

注意事项

打开设备外壳可以发现在靠近设备端子处有跳线,分别对应 AI1~AI2 两个个通道,需要根据测量信号选择跳线模式,否则测量数据不准确。 测量电压信号时,对应通道的跳线断开; 测量电流信号时,对应通道的跳线闭合;


AI+ 为正端输入,AI- 为负端输入。

测量电流时,电流从 AI+ 流入、AI- 流出;测量电压时,电压正极接 AI+,负极接 AI-。


电流输出接线

将 AO 接负载正极,AGND 接负载负极


供电与通信连接

将 USB TO 485 和目标板通过杜邦线,将 A-->A 和 B-->B 相连,如下图所示:



软件测试

演示介绍了下面两种软件的操作方式。 SSCOM 串口调试助手操作更方便,免安装,指令完整显示分析更方便,缺点是数据不直观。 Modbus Poll 软件是直接对寄存器操作,数据显示更方便观察,缺点是指令不完整显示,需熟悉 Modbus 寄存器操作。

建议

可选任意一种方式测试,首次测试建议使用SSCOM串口调试助手软件。

SSCOM 串口调试助手

  • 下载 SSCOM 串口调试助手 并在电脑上打开,打开对应的端口号,设置波特率为 9600,选择 hex 发送和接收,加检验选择 Modbus CRC16 校验,点击 多字符串 打开多条字符串发送窗口,点击对应的功能即可发送对应的命令,

    • 开启通道1继电器

    注意

    模块出厂默认为正常模式,继电器可以直接指令控制,如果有指令正常返回,但继电器没动作,可能模块已改为其他控制模式,可通过读取继电器控制模式指令查询。

  • 如果需要发送其他命令则选择 HEX 发送,加检验选择 Modbus CRC16 校验,输入命令的前六个字节,点击发送,软件会自动添加 CRC 验码。 例如发送如下指令,可以设置模拟通道1输出1mA

    01 06 00 00 03 E8

    更多详细的控制指令请查看开发协议

Modbus Poll 软件

继电器输出

  • 串口软件不方便观察数据,可以选择 Modbus Poll 软件 读取数据。下载并安装 Modbus Poll 软件。

  • 打开软件,选择setup->Read/Write Definition,Slave ID选择实际设备地址,Function选择01 Read Coils功能码,Quantity改为2通道。点击OK确认。


  • 选择Connection->Connect...,选择对应的串口,波特率为9600,八位无校验模式。点击OK连接。


  • 连接正常后则可以查看当前输出通道状态,选择对应通道后,双击状态值即可跳出发送页面,选择ON或OFF,然后发送即可控制对应的继电器开合。


数字量输入

  • 选择File-New新建一个窗口,选择setup->Read/Write Definition,Slave ID选择实际设备地址,Function选择02 Read Discrete Inputs功能码,Address设置为0,Quantity设置为2通道,Scan Rate改为100ms。点击OK确认。


  • 新建窗口2可以显示当前输入状态,改变输入接口电平,对应的数值也会改变。


    建议

    以下测试以 AO1 和 AI2 为例进行说明。如需实现相同的测试效果,请先完成接线,再设置电流输出参数;请勿在接线完成前启用电流输出。


电流输出

  • 选择File-New新建一个窗口,选择setup->Read/Write Definition,Slave ID选择实际设备地址,Function选择03 Read Holding Registers功能码,Address设置为0,Quantity设置为2通道,Scan Rate改为100ms。点击OK确认。


  • 新建的窗口 3 可显示当前电流输出通道对应的寄存器值,调整输出电流大小后,对应的数值也会改变。


模拟输入通道数据类型

  • 选择File-New新建一个窗口,选择setup->Read/Write Definition,Slave ID选择实际设备地址,Function选择03 Read Holding Registers功能码,Address设置为12288,Quantity设置为2通道,Scan Rate改为100ms。点击OK确认。


  • 新建的窗口 4 可显示当前模拟输入通道的数据类型。修改模拟输入通道的数据类型为02 (0 ~ 20 mA 量程)后,对应寄存器值会发生变化。


模拟量输入

  • 选择File-New新建一个窗口,选择setup->Read/Write Definition,Slave ID选择实际设备地址,Function选择04 Read Input Registers功能码,Address设置为0,Quantity设置为2通道,Scan Rate改为100ms。点击OK确认。


  • 新建的窗口 5 可显示当前模拟输入通道的采集值。调整输出通道的电流后,输入通道采集到的电流值会随之变化,对应寄存器值也会同步更新。


    结果说明: 输出通道精度为 ±0.03 mA。受输出线缆损耗及模拟量采集精度误差影响,实际读取的寄存器值可能存在一定偏差,因此测量结果在 960 左右属于正常范围。

开发协议

功能码介绍

功能码备注
01读输出状态
02读输入状态
03读取保存寄存器
05写单个输出通道
06设置单个寄存器
0F写多个输出通道
10设置多个寄存器

寄存器地址介绍

地址 (HEX)地址存储内容寄存器取值权限Modbus 功能码
0x0000 ~ 0x0001输出通道 1~输出通道 2 地址0xFF00: 开启;
0x0000: 关闭;
0x5500: 翻转
读/写0x01, 0x05, 0x0F
0x00FF操作全部寄存器0xFF00: 输出全部开启;
0x0000: 输出全部关闭;
0x5500: 输出全部翻转
0x05, 0x0F
0x0100 ~ 0x0101输出通道 1~输出通道 2 地址0xFF00: 翻转;
0x0000: 不变
0x05
0x0200 ~ 0x0201输出通道 1~输出通道 2 闪开延时时间为数据 × 100 ms
数值:0x0007,延时:7 × 100 ms = 700 ms
0x05
0x0400 ~ 0x0401输出通道 1~输出通道 2 闪闭延时时间为数据 × 100 ms
数值:0x0007,延时:7 × 100 ms = 700 ms
0x05
1x0000 ~ 1x0001输入通道 1~输入通道 2 地址表示 1~2 输入通道状态0x02
3x0000 ~ 3x0001模拟输入通道 1~模拟输入通道 2 数据数值为无符号十六进制0x04
4x0000 ~ 4x0001模拟输出通道 1~模拟输出通道 2 数据数值为无符号十六进制读/写0x03, 0x06, 0x10
4x1000 ~ 4x1001输出通道 1~输出通道 2 控制模式0x0000~0x0003 四种控制模式读/写0x03, 0x06, 0x10
4x3000 ~ 4x3001模拟输入通道 1~模拟输入通道 2 数据类型0x0000~0x0004 五种量程范围读/写0x03, 0x06, 0x10
4x2000串口参数高八位为校验方式:0x00~0x02
低八位为波特率方式:0x00~0x07
读/写0x03, 0x06
4x4000设备地址直接存储 Modbus 地址
设备地址:0x0001~0x00FF
读/写0x03, 0x06
4x8000软件版本转为十进制然后小数点左移两位即表示软件版本
0x0064 = 100 = V1.00
0x03

Modbus RTU 数字通道指令介绍

控制单个输出通道

发送码:01 05 00 00 FF 00 8C 3A

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0505 指令写单个输出通道指令
00 00地址要控制输出通道的寄存器地址,0x0000 - 0x0001
FF 00指令0xFF00: 开启;
0x0000: 关闭;
0x5500: 翻转;
8C 3ACRC16前 6 字节数据的 CRC16 校验和

返回码: 01 05 00 00 FF 00 8C 3A

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0505 指令写单个输出通道指令
00 00地址要控制输出通道的寄存器地址,0x0000 - 0x0001
FF 00指令0xFF00: 开启;
0x0000: 关闭;
0x5500: 翻转;
8C 3ACRC16前 6 字节数据的 CRC16 校验和

示例:[1 号地址设备]

0 号输出通道开启 : 01 05 00 00 FF 00 8C 3A
0 号输出通道关闭 : 01 05 00 00 00 00 CD CA
1 号输出通道开启 : 01 05 00 01 FF 00 DD FA
1 号输出通道关闭 : 01 05 00 01 00 00 9C 0A

控制全部继电器输出通道

发送码:01 05 00 FF FF 00 BC 0A

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0505 指令写单个输出通道指令
00 FF地址固定 0x00FF
FF 00指令0xFF00: 开启;
0x0000: 关闭;
0x5500: 翻转;
BC 0ACRC16前 6 字节数据的 CRC16 校验和

返回码: 01 05 00 FF FF 00 BC 0A

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0505 指令写单个输出通道指令
00 FF地址固定 0x00FF
FF 00指令0xFF00: 开启;
0x0000: 关闭;
0x5500: 翻转;
BC 0ACRC16前 6 字节数据的 CRC16 校验和

示例:[1 号地址设备]

全部输出通道开启 : 01 05 00 FF FF 00 BC 0A
全部输出通道关闭 : 01 05 00 FF 00 00 FD FA
全部输出通道翻转 : 01 05 00 FF 55 00 C2 AA

读取继电器输出通道状态

发送码:01 01 00 00 00 02 BD CB

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0101 指令查询输出通道状态指令
00 00输出通道起始地址输出通道的寄存器地址,0x0000 - 0x0001
00 08输出通道数量读取输出通道数量,不能超过最大输出通道数量
3D CCCRC16前 6 字节数据的 CRC16 校验和

返回码:01 01 01 00 51 88

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0101 指令查询输出通道状态指令
00 00输出通道起始地址输出通道的寄存器地址,0x0000 - 0x0001
00 08输出通道数量读取输出通道数量,不能超过最大输出通道数量
3D CCCRC16前 6 字节数据的 CRC16 校验和

示例:[1 号地址设备]

发送 : 01 01 00 00 00 02 BD CB
返回 : 01 01 01 00 51 88 //全部输出通道关闭
发送 : 01 01 00 00 00 02 BD CB
返回 : 01 01 01 01 90 48 //0号输出通道开启,其余输出通道关闭

写继电器输出通道状态

发送码:01 0F 00 00 00 02 01 03 9E 96

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0F0F 指令写输出通道状态指令
00 00输出通道起始地址要控制输出通道的寄存器地址,0x0000 - 0x0001
00 08输出通道数量操作输出通道数量,不能超过最大输出通道数量
01字节数量状态字节数
03输出通道状态Bit0: 起始输出通道状态;
Bit1: 下个输出通道状态,
依次类推,高端空闲位则为零
9E 96CRC16前 6 字节数据的 CRC16 校验和

返回码:01 0F 00 00 00 02 D4 0A

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0F0F 指令全部寄存器控制指令
00 00输出通道地址要控制输出通道的寄存器地址,0x0000 - 0x0007
00 02输出通道数量操作输出通道数量
D4 0ACRC16前 6 字节数据的 CRC16 校验和

示例:[1 号地址设备]

输出通道全部开启 : 01 0F 00 00 00 02 01 FF 9E D7
输出通道全部关闭 : 01 0F 00 00 00 02 01 00 DE 97
通道0开;通道1关 : 01 0F 00 00 00 02 01 01 1F 57

继电器输出通道闪开闪闭指令

发送码:01 05 02 00 00 07 8D B0

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0505 指令单个控制指令
02指令02 为闪开指令,04 为闪闭指令
00输出通道地址要控制的输出通道地址,0x00~0x07
00 07间隔时间延时时间为数据 × 100 ms
数值: 0x0007,延时: 7 × 100 ms = 700 ms
闪开/闪闭的时间最大设置为 0x7FFF
8D B0CRC16前 6 字节数据的 CRC16 校验和

返回码:01 05 02 00 00 07 8D B0

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0505 指令单个控制指令
02指令02 为闪开指令,04 为闪闭指令
00输出通道地址要控制的输出通道地址,0x00~0x07
00 07间隔时间延时时间为数据 × 100 ms
数值: 0x0007,延时: 7 × 100 ms = 700 ms
闪开/闪闭的时间最大设置为 0x7FFF
8D B0CRC16前 6 字节数据的 CRC16 校验和

示例:[1 号地址设备]

0号输出通道闪开 : 01 05 02 00 00 07 8D B0 //700MS = 7*100MS = 700MS
1号输出通道闪开 : 01 05 02 01 00 08 9C 74 //800MS
0号输出通道闪闭 : 01 05 04 00 00 05 0C F9 //500MS
1号输出通道闪闭 : 01 05 04 01 00 06 1D 38 //600MS

读取数字量输入通道状态

发送码:01 02 00 00 00 02 F9 CB

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0202 指令读取输入状态指令
00 00输入起始地址输入寄存器地址,0x0000 - 0x0001
00 02寄存器数量读取输入通道数量,不能超过最大输入数量
F9 CBCRC16前 6 字节数据的 CRC16 校验和

返回码:01 02 01 00 A1 88

字段含义备注
01设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
0202 指令读取输入状态指令
01字节数返回状态信息的所有字节数。
00查询的状态返回的输入通道状态

Bit0:起始输入通道状态;
Bit1:下一个输入通道状态;
依次类推,高端空闲位则为零
A1 88CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

发送 : 01 02 00 00 00 02 F9 CB
返回 : 01 02 01 00 A1 88 //输入全部没有触发
发送 : 01 02 00 00 00 02 F9 CB
返回 : 01 02 01 01 60 48 //1通道输入触发,其余通道没有触发

读取继电器输出通道控制模式

发送码:01 03 10 00 00 02 C0 CB

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0303 指令读取保持寄存器
10 00寄存器起始地址0x1000 - 0x1007 对应 1~8 输出通道
00 02寄存器数量读取寄存器数量,最多 8 个通道
C0 CBCRC16前 6 字节数据的 CRC16 校验和

返回码:01 03 04 00 00 00 00 FA 33

字段含义备注
01设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
0303 指令读保持寄存器
04字节数返回状态信息的所有字节数。
00 00
......
00 00
控制模式表示 1 ~ 2 输出通道控制模式,0x0000 ~ 0x0003 表示四种控制模式:

0x0000:正常模式,输出通道受指令直接控制;
0x0001:联动模式,输出通道状态和对应输入通道状态一致;
0x0002:翻转模式,输入通道输入一个脉冲对应的输出通道状态翻转一次;
0x0003:跳变模式,输入通道电平跳变一次对应的输出通道状态翻转一次;
FA 33CRC16前 6 字节数据的 CRC16 校验和
注意

除了联动模式外,其他模式都同时支持通过指令控制输出通道。

示例 [1 号地址设备]:

读取 1号输出通道控制模式 : 01 03 10 00 00 01 80 CA
读取 2号输出通道控制模式 : 01 03 10 01 00 01 D1 0A

设置单输出通道控制模式

发送码:01 06 10 00 00 01 4C CA

字段含义备注
01设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
0606 指令写单个寄存器指令
10 00寄存器起始地址0x1000 ~ 0x1007 对应 1 ~ 8 通道输出通道控制模式
00 01控制模式表示 1 ~ 8 输出通道控制模式,0x0000 ~ 0x0003 表示四种控制模式:

0x0000:正常模式,输出通道受指令直接控制;
0x0001:联动模式,输出通道状态和对应输入通道状态一致;
0x0002:翻转模式,输入通道输入一个脉冲对应的输出通道状态翻转一次;
0x0003:跳变模式,输入通道电平跳变一次对应的输出通道状态翻转一次;
4C CACRC16前 6 字节数据的 CRC16 校验和
注意

除了联动模式外,其他模式都同时支持通过指令控制输出通道。

返回码: 01 06 10 00 00 01 4C CA

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
0606 指令写单个寄存器指令
10 00寄存器起始地址0x1000 - 0x1001 对应 1~2 通道输出通道控制模式
00 01控制模式输出通道控制模式,0x0000~0x0003 表示四种控制模式
4C CACRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

设置1输出通道为联动模式 : 01 06 10 00 00 01 4C CA
设置2输出通道为翻转模式 : 01 06 10 01 00 02 5D 0B

设置多输出通道控制模式

发送码:01 10 10 00 00 02 04 00 01 00 01 AE 6F

字段含义备注
01设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
10写多寄存器指令
10 00寄存器起始地址0x1000 ~ 0x1001 对应 1 ~ 2 通道输出通道控制模式
00 02寄存器数量设置寄存器数量,最多 2 个通道
04字节数量设置输出字节数
00 01
......
00 01
控制模式表示 1 ~ 2 输出通道控制模式,0x0000 ~ 0x0003 表示四种控制模式:

0x0000:正常模式,输出通道受指令直接控制;
0x0001:联动模式,输出通道状态和对应输入通道状态一致;
0x0002:翻转模式,输入通道输入一个脉冲对应的输出通道状态翻转一次;
0x0003:跳变模式,输入通道电平跳变一次对应的输出通道状态翻转一次;
AE 6FCRC16前 6 字节数据的 CRC16 校验和
注意

除了联动模式外,其他模式都同时支持通过指令控制输出通道。

返回码: 01 10 10 00 00 02 45 08

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
10写多寄存器指令
10 00寄存器起始地址0x1000 - 0x1007 对应 1~8 通道输出通道控制模式
00 02寄存器数量设置寄存器数量,最多 8 个通道
45 08CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

设置1-2通道输出通道为联动模式: 01 10 10 00 00 02 04 00 01 00 01 AE 6F
设置1-2通道输出通道为正常模式: 01 10 10 00 00 02 04 00 00 00 00 3E 6F

Modbus RTU 模拟通道指令介绍

设置单个模拟输出通道指令

发送码:01 06 00 00 03 E8 89 74

字段含义备注
01设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0606 指令写单个寄存器指令
00 00寄存器地址0x0000 - 0x0007 对应 1 ~ 8 输出通道
03 E8设置数值设置值为十六进制,单位 uA,高位在前,低位在后
0x03E8 = 1000 uA,即 1 mA
89 74CRC16前 6 字节数据的 CRC16 校验和

返回码: 01 06 00 00 03 E8 89 74

字段含义备注
01设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0606 指令写单个寄存器指令
00 00寄存器地址0x0000 - 0x0007 对应 1 ~ 8 输出通道
03 E8设置数值设置值为十六进制,单位 uA,高位在前,低位在后
0x03E8 = 1000 uA,即 1 mA
89 74CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

设置 1通道输出1mA : 01 06 00 00 03 E8 89 74
读取 2通道输出5mA : 01 06 00 01 13 88 D5 5C

设置多个模拟输出通道指令

发送码:01 10 00 00 00 02 04 03 E8 03 E8 73 61

字段含义备注
01设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
10写多寄存器指令
00 00寄存器起始地址0x0000 - 0x0002 对应 1 ~ 2 输出通道
00 02寄存器数量设置寄存器数量,不能超过最大通道数量
04字节数量设置输出字节数
03 E8
......
03 E8
指令起始道模拟量输出
......
最后道模拟量输出
设置值为十六进制,单位 uA,高位在前,低位在后
0x03E8 = 1000 uA,即 1 mA
73 61CRC16前 6 字节数据的 CRC16 校验和

返回码: 01 10 00 00 00 02 41 C8

字段含义备注
01设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
10写多寄存器指令
00 00寄存器起始地址0x0000 ~ 0x0007 对应 1 ~ 8 输出通道
00 02寄存器数量设置寄存器数量,不能超过最大通道数量
41 C8CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

设置1-2模拟通道输出1mA : 01 10 00 00 00 02 04 03 E8 03 E8 73 61
设置1-2模拟通道输出2mA : 01 10 00 00 00 02 04 07 D0 07 D0 F0 8E

读取模拟输出指令

发送码:01 03 00 00 00 02 C4 0B

字段含义备注
01设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0303 指令读取保持寄存器
00 00寄存器起始地址0x0000 - 0x0001 对应 1 ~ 2 输入通道
00 02寄存器数量读取寄存器数量,不能超过最大通道数量
C4 0BCRC16前 6 字节数据的 CRC16 校验和

返回码:01 03 04 03 E8 03 E8 7A FD

字段含义备注
01设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0303 指令读保持寄存器
04字节数返回状态信息的所有字节数。
03 E8
......
03 E8
输出数值起始通道模拟量输出
......
最后通道模拟量输出
设置值为十六进制,单位 uA,高位在前,低位在后
0x03E8 = 1000 uA,即 1 mA
7A FDCRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

读取 1通道数据类型 : 01 03 00 00 00 01 84 0A
读取 2通道数据类型 : 01 03 00 01 00 01 D5 CA

读取模拟输入指令

发送码:01 04 00 00 00 02 71 CB

字段含义备注
01设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0404 指令读取输入寄存器
00 00寄存器起始地址0x0000 - 0x0001 对应 1 ~ 2 输入通道
00 02寄存器数量读取寄存器数量,不能超过最大通道数量
71 CBCRC16前 6 字节数据的 CRC16 校验和

返回码: 01 04 04 00 00 00 00 FB 84

字段含义备注
01设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0404 指令读取输入寄存器
04字节数量数据长度
00 00
......
00 00
寄存器数据表示 0 - 2 通道采集模拟量的数值
无符号十六位标识一个通道,高位在前,低位在后
数据范围根据输出数据类型确定
FB 84CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

读取模拟输入 1通道 : 01 04 00 00 00 01 31 CA
读取模拟输入 2通道 : 01 04 00 01 00 01 60 0A

读取模拟输入通道数据类型指令

发送码:01 03 30 00 00 02 CB 0B

字段含义备注
01设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0303 指令读取保持寄存器
30 00寄存器起始地址0x3000 - 0x3001 对应 1 ~ 2 输入通道
00 02寄存器数量读取寄存器数量,不能超过最大通道数量
CB 0BCRC16前 6 字节数据的 CRC16 校验和

返回码:01 03 04 00 02 00 02 DA 32

字段含义备注
01设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
0303 指令读保持寄存器
04字节数返回状态信息的所有字节数。
00 02
......
00 02
数据类型表示 0 ~ 1 通道数据类型,0x0000 ~ 0x0004 表示五种量程范围:

0x0000:量程 0 ~ 5 V,输出范围 0 ~ 5000;或 量程 0 ~ 10 V,输出范围 0 ~ 10000,单位 mV;
0x0001:量程 1 ~ 5 V,输出范围 1000 ~ 5000;或 量程 2 ~ 10 V,输出范围 2000 ~ 10000,单位 mV;
0x0002:量程 0 ~ 20 mA,输出范围 0 ~ 20000,单位 uA;
0x0003:量程 4 ~ 20 mA,输出范围 4000 ~ 20000,单位 uA;
0x0004:直接输出数值码,输出范围 0 ~ 4096,需要经过线性转换才能得到实际测量电压和电流;
DA 32CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

读取模拟输入 1通道数据类型 : 01 03 10 00 00 01 80 CA
读取模拟输入 2通道数据类型 : 01 03 10 01 00 01 D1 0A

设置单个模拟输入通道数据类型指令

发送码:01 06 30 00 00 03 C6 CB

字段含义备注
01设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
0606 指令写单个寄存器指令
30 00寄存器起始地址0x3000 ~ 0x3001 对应 1 ~ 2 输入通道输出数据类型
00 03通道数据类型通道数据类型,0x0000 ~ 0x0004 表示五种量程范围:

0x0000:量程 0 ~ 5 V,输出范围 0 ~ 5000;或 量程 0 ~ 10 V,输出范围 0 ~ 10000,单位 mV;
0x0001:量程 1 ~ 5 V,输出范围 1000 ~ 5000;或 量程 2 ~ 10 V,输出范围 2000 ~ 10000,单位 mV;
0x0002:量程 0 ~ 20 mA,输出范围 0 ~ 20000,单位 uA;
0x0003:量程 4 ~ 20 mA,输出范围 4000 ~ 20000,单位 uA;
0x0004:直接输出数值码,输出范围 0 ~ 4096,需要经过线性转换才能得到实际测量电压和电流;
C6 CBCRC16前 6 字节数据的 CRC16 校验和

返回码: 01 06 30 00 00 03 C6 CB

字段含义备注
01设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
0606 指令写单个寄存器指令
30 00寄存器起始地址0x3000 ~ 0x3001 对应 1 ~ 2 输入通道输出数据类型
00 03通道数据类型通道数据类型,0x0000 ~ 0x0004 表示五种量程范围:

0x0000:量程 0 ~ 5 V,输出范围 0 ~ 5000;或 量程 0 ~ 10 V,输出范围 0 ~ 10000,单位 mV;
0x0001:量程 1 ~ 5 V,输出范围 1000 ~ 5000;或 量程 2 ~ 10 V,输出范围 2000 ~ 10000,单位 mV;
0x0002:量程 0 ~ 20 mA,输出范围 0 ~ 20000,单位 uA;
0x0003:量程 4 ~ 20 mA,输出范围 4000 ~ 20000,单位 uA;
0x0004:直接输出数值码,输出范围 0 ~ 4096,需要经过线性转换才能得到实际测量电压和电流;
C6 CBCRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

设置 1通道数据类型为0~20mA : 01 06 30 00 00 02 07 0B
读取 2通道数据类型为4~20mA : 01 06 30 00 00 03 C6 CB

设置多个模拟输入通道数据类型指令

发送码:01 10 30 00 00 02 04 00 03 00 03 17 AF

字段含义备注
01设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
10写多寄存器指令
30 00寄存器起始地址0x3000 ~ 0x3001 对应 1 ~ 2 输入通道数据类型
00 02寄存器数量设置寄存器数量,不能超过最大通道数量
04字节数量设置输出字节数
00 03
......
00 03
指令对应 0 ~ 7 通道数据类型,0x0000 ~ 0x0004 表示五种量程范围:

0x0000:量程 0 ~ 5 V,输出范围 0 ~ 5000;或 量程 0 ~ 10 V,输出范围 0 ~ 10000,单位 mV;
0x0001:量程 1 ~ 5 V,输出范围 1000 ~ 5000;或 量程 2 ~ 10 V,输出范围 2000 ~ 10000,单位 mV;
0x0002:量程 0 ~ 20 mA,输出范围 0 ~ 20000,单位 uA;
0x0003:量程 4 ~ 20 mA,输出范围 4000 ~ 20000,单位 uA;
0x0004:直接输出数值码,输出范围 0 ~ 4096,需要经过线性转换才能得到实际测量电压和电流;
17 AFCRC16前 6 字节数据的 CRC16 校验和

返回码: 01 10 30 00 00 02 4E C8

字段含义备注
01设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
10写多寄存器指令
30 00寄存器起始地址0x3000 - 0x3001 对应 1~2 输入通道数据类型
00 02寄存器数量设置寄存器数量,不能超过最大通道数量
4E C8CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

读取1-2通道数据类型为4~20mA : 01 10 30 00 00 02 04 00 03 00 03 17 AF
读取1-2通道数据类型为 1 ~ 5V : 01 10 30 00 00 02 04 00 01 00 01 37 AE

Modbus RTU 通信指令介绍

设置波特率指令

发送码:00 06 20 00 00 05 43 D8

字段含义备注
00设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
0606 指令设置波特率、设备地址
20 00指令寄存器0x2000 为设置波特率,0x4000 为设置设备地址,0x8000 为读取软件版本
00校验方式0x00 为无校验,0x01 为偶校验,0x02 为奇校验
05波特率数值波特率数值对应:

0x00:4800
0x01:9600
0x02:19200
0x03:38400
0x04:57600
0x05:115200
0x06:128000
0x07:256000
43 D8CRC16前 6 字节数据的 CRC16 校验和

返回码:00 06 20 00 00 05 43 D8

字段含义备注
00设备地址0x00 表示广播地址;0x01 ~ 0xFF 表示设备地址
0606 指令设置波特率、设备地址
20 00指令寄存器0x2000 为设置波特率,0x4000 为设置设备地址,0x8000 为读取软件版本
00校验方式0x00 为无校验,0x01 为偶校验,0x02 为奇校验
05波特率数值波特率数值对应:

0x00:4800
0x01:9600
0x02:19200
0x03:38400
0x04:57600
0x05:115200
0x06:128000
0x07:256000
43 D8CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

设置波特率 4800 :00 06 20 00 00 00 83 DB
设置波特率 9600 :00 06 20 00 00 01 42 1B
设置波特率 19200 :00 06 20 00 00 02 02 1A
设置波特率 38400 :00 06 20 00 00 03 C3 DA
设置波特率 57600 :00 06 20 00 00 04 82 18
设置波特率115200 :00 06 20 00 00 05 43 D8
设置波特率128000 :00 06 20 00 00 06 03 D9
设置波特率256000 :00 06 20 00 00 07 C2 19

设置设备地址指令

发送码:00 06 40 00 00 01 5C 1B

字段含义备注
00设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0606 指令设置波特率,设备地址
40 00指令寄存器0x2000 为设置波特率,0x4000 为设置设备地址,0x8000 为读取软件版本
00 01设备地址设置的设备地址,0x0001 - 0x00FF
5C 1BCRC16前 6 字节数据的 CRC16 校验和

返回码:00 06 40 00 00 01 5C 1B

字段含义备注
00设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0606 指令设置波特率,设备地址
40 00指令寄存器0x2000 为设置波特率,0x4000 为设置设备地址,0x8000 为读取软件版本
00 01设备地址设置的设备地址,0x0001 - 0x00FF
5C 1BCRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

设置设备地址为0x01 :00 06 40 00 00 01 5C 1B
设置设备地址为0x02 :00 06 40 00 00 02 1C 1A
设置设备地址为0x03 :00 06 40 00 00 03 DD DA

读取设备地址指令

发送码:00 03 40 00 00 01 90 1B

字段含义备注
00设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0303 指令读取设备地址指令
40 00指令寄存器0x2000 为设置波特率,0x4000 为设置设备地址,0x8000 为读取软件版本
00 01字节数固定 0x0001
90 1BCRC16前 6 字节数据的 CRC16 校验和

返回码:01 03 02 00 01 79 84

字段含义备注
00设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0303 指令读取软件版本,读取设备地址指令
02字节数返回字节数
00 01设备地址设置的设备地址,0x0001 - 0x00FF
79 84CRC16前 6 字节数据的 CRC16 校验和

示例 [2 号地址设备]:

发送 : 00 03 40 00 00 01 90 1B
返回 : 00 03 02 00 02 04 45 //地址0x02

读取软件版本指令

发送码:00 03 80 00 00 01 AC 1B

字段含义备注
00设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0303 指令读取软件版本,读取设备地址指令
80 00指令寄存器0x2000 为设置波特率,0x4000 为设置设备地址,0x8000 为读取软件版本
00 01字节数固定 0x0001
AC 1BCRC16前 6 字节数据的 CRC16 校验和

返回码:00 03 02 00 C8 84 12

字段含义备注
00设备地址0x00 表示广播地址;0x01 - 0xFF 表示设备地址
0303 指令读取软件版本,读取设备地址指令
02字节数返回字节数
00 C8软件版本转为十进制然后小数点左移两位即表示软件版本
0x00C8 = 200 = V2.00
84 12CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

发送:00 03 80 00 00 01 AC 1B
返回:00 03 02 00 64 84 6F //0x0064 = 100 =V1.00

异常功能码介绍

当接收到的指令出错或者异常设备将会返回异常响应,异常响应格式如下。

返回码:01 85 03 02 91

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
85异常功能码异常功能码 = 请求功能码 + 0x80
03字节数异常码
02 91CRC16前 6 字节数据的 CRC16 校验和

异常码是一个单字节值,用于指示错误的类型。Modbus 协议定义的几个常用异常码:

异常码名称描述
0x01非法功能请求的功能码不支持
0x02非法数据地址请求的数据地址错误
0x03非法数据值请求的数据值或操作无法执行
0x04服务器故障服务器设备故障
0x05应答已接收到请求并正在处理
0x06设备繁忙设备当前正忙无法执行请求的操作

相关资料

1. 技术手册

2. 软件开发资源


技术支持

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841



[教程导航]