跳到主要内容

DAM-8RO-8DI 开发协议

本产品为8路继电器输出+8路数字输入模块,支持标准Modbus RTU指令,有关详细的指令生成与解析方式,可根据本文中的寄存器表结合MODBUS协议规范。

Modbus寄存器说明

设备地址介绍

本产品默认从机设备地址为0x01,可设置地址范围0x01~0xF7。支持如下地址。

地址范围状态说明
0x00❌ 禁用无响应广播地址,仅用于主站发送命令给所有从机,从机不能使用,从机不回复任何报文。
0x01~0xF7✅ 可用标准从机地址,可分配给任意设备
0xFE❌ 禁用有响应广播地址,仅用于主站发送命令给所有从机,从机不能使用。
注意

使用0xFE广播地址时应只接一个设备,接多个设备时所有设备都响应,会出现总线冲突。

功能码介绍

本产品主要为线圈寄存器,主要支持以下功能码指令。

功能码功能说明说明
01读线圈状态读继电器状态
02读离散输入状态读数字输入状态
03读保持寄存器读取设备参数
05写单线圈写单个继电器
06写单寄存器写设备参数
0F写多个线圈写多个继电器

寄存器地址介绍

地址(HEX)地址存储内容说明类型Modbus 功能码
0x0000~0x00081路~8路继电器输出0xFF00:继电器开启; 0x0000:继电器关闭;读/写0x01,0x05,0x0F
0x00FF全部继电器输出0xFF00:继电器全部开启;0x0000:继电器全部关闭;0x05
0x1000~0x10081路~8路继电器翻转0xFF00:继电器翻转; 0x0000:继电器不变;0x05,0x0F
0x10FF全部继电器翻转0xFF00:继电器全部翻转; 0x0000:继电器全部不变;0x05
0xA000~0xA00F1路~8路继电器开机输出0xFF00:继电器开启; 0x0000:继电器关闭;开机继电器输出。读/写/存0x01,0x05,0x0F
1x0000~1x00071路~8路数字输入表示1~8路数字输入通道状态0x02
4x2000~4x20071路~8路继电器模式继电器支持多种控制模式,0x0000~0x0006七种控制模式读/写0x03,0x06,0x10
4x3000~4x30071路~8路继电器闪开延时=数值*100ms,例如数值:0x0007,延时:7*100MS = 700MS0x06,0x10
4x4000~4x40071路~8路继电器闪闭延时=数值*100ms,例如数值:0x0007,延时:7*100MS = 700MS0x06,0x10
4x5000~4x500F1路~8路继电器延时延时=数值*100ms,例如数值:0x0007,延时:7*100MS = 700MS写/存0x03,0x06,0x10
4x8000SUK产品型号读/存0x03
4x8001软件版本十进制小数点左移两位即表示软件版本,例0x0064 = 100 = V1.00读/存0x03
4x8002设备地址直接存储 Modbus 地址,默认地址:0x0001读/写/存0x03,0x06
4x8003串口参数高八位为停止位和校验方式,低八位为波特率读/写/存0x03,0x06
4x8004看门狗时间间隔内没通讯关闭输出读/写/存0x03,0x06
4x8005主动上传输入口状态主动上传控制读/写/存0x03,0x06
4x9000~4x900F用户自定义区域字符串格式读/写/存0x03,0x06,0x10
注意

带'存'标记的寄存器参数掉电保存,修改后掉电重启后电仍然生效。

Modbus RTU 指令解析

控制单个继电器

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

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0505指令控制继电器指令
00 00地址要控制继电器的寄存器地址
FF 00指令0xFF00:继电器开启; 0x0000:继电器关闭;
8C 3ACRC16前面字节数据的CRC16校验

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

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0505指令控制继电器指令
00 00地址要控制继电器寄存器地址
FF 00指令0xFF00:继电器开启; 0x0000:继电器关闭;
8C 3ACRC16前面字节数据的CRC16校验

示例: [1号地址设备]:

1号继电器开启 : 01 05 00 00 FF 00 8C 3A
1号继电器关闭 : 01 05 00 00 00 00 CD CA
2号继电器开启 : 01 05 00 01 FF 00 DD FA
2号继电器关闭 : 01 05 00 01 00 00 9C 0A
3号继电器开启 : 01 05 00 02 FF 00 2D FA
3号继电器关闭 : 01 05 00 02 00 00 6C 0A
4号继电器开启 : 01 05 00 03 FF 00 7C 3A
4号继电器关闭 : 01 05 00 03 00 00 3D CA
1号继电器翻转 : 01 05 10 00 FF 00 88 FA
2号继电器翻转 : 01 05 10 01 FF 00 D9 3A
3号继电器翻转 : 01 05 10 02 FF 00 29 3A
4号继电器翻转 : 01 05 10 03 FF 00 78 FA

控制全部继电器

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

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0505指令控制继电器指令
00 FF地址固定0x00FF
FF 00指令0xFF00:继电器开启; 0x0000:继电器关闭;
BC 0ACRC16前面字节数据的CRC16校验

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

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0505指令控制继电器指令
00 FF地址固定0x00FF
FF 00指令0xFF00:继电器开启; 0x0000:继电器关闭;
BC 0ACRC16前面字节数据的CRC16校验

示例:[1号地址设备]:

全部继电器开启 : 01 05 00 FF FF 00 BC 0A
全部继电器关闭 : 01 05 00 FF 00 00 FD FA
全部继电器翻转 : 01 05 10 FF FF 00 B8 CA

读取继电器状态

发送码:01 01 00 00 00 08 3D CC

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0101指令查询继电器状态指令
00 00继电器起始地址要查询的第一个继电器寄存器地址
00 08继电器数量要查询的继电器数量,不能超过最大继电器地址
3D CCCRC16前面字节数据的CRC16校验

返回码:01 01 01 00 51 88

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0101指令查询继电器状态指令
01字节数返回状态信息的所有字节数。
00查询的状态返回的继电器状态。
Bit0:起始继电器状态,
Bit1:下个继电器状态,
……
依次类推,高端空闲位则为零。
51 88CRC16前面字节数据的CRC16校验

示例:[1号地址设备]

发送 : 01 01 00 00 00 08 3D CC //查询前8路继电器
返回 : 01 01 01 00 51 88 //前8路继电器全部关闭
发送 : 01 01 00 01 00 03 2D CB //查询2,3,4号继电器状态
返回 : 01 01 01 05 91 8B //2、4号继电器开启,3号继电器关闭
发送 : 01 01 00 03 00 05 0C 09 //查询4-8号继电器
返回 : 01 01 01 0F 11 8C //4-7号继电器开启,8号继电器关闭

写继电器状态

发送码:01 0F 00 00 00 08 01 FF BE D5

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0F0F指令写继电器状态指令
00 00继电器起始地址要控制的第一个继电器寄存器地址
00 08继电器数量操作继电器数量,不能超过最大继电器数量
01字节数量状态字节数
FF继电器状态Bit0:起始继电器状态,
Bit1:下个继电器状态,
……
依次类推,高端空闲位则为零
BE D5CRC16前面字节数据的CRC16校验

返回码:01 0F 00 00 00 08 54 0D

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0F0F指令写继电器状态指令
00 00继电器起始地址要控制的第一个继电器寄存器地址
00 08继电器数量操作继电器数量,不能超过最大继电器数量
54 0DCRC16前面字节数据的CRC16校验

示例:[1号地址设备]

继电器全部开启 : 01 0F 00 00 00 08 01 FF BE D5
继电器全部关闭 : 01 0F 00 00 00 08 01 00 FE 95
1-2开;3-7关闭 : 01 0F 00 00 00 08 01 03 BE 94

单个继电器闪开闪闭

发送码:01 06 30 00 00 07 C7 08

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
30 00闪开闪闭地址要控制继电器的闪开闪闭寄存器地址
00 07间隔时间延时时间为数值*100ms,例如数值:0x0007,延时:7*100MS = 700MS,闪开闪闭的时间最大设置为0x7FFF
C7 08CRC16前面字节数据的CRC16校验

返回码:01 06 30 00 00 07 C7 08

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
30 00闪开闪闭地址要控制继电器的闪开闪闭寄存器地址
00 07间隔时间延时时间为数值*100ms ,例如数值:0x0007,延时:7*100MS = 700MS,闪开闪闭的时间最大设置为0x7FFF
C7 08CRC16前面字节数据的CRC16校验

示例:[1号地址设备]

1号继电器闪开 : 01 06 30 00 00 07 C7 08 //700MS = 7*100MS = 700MS
2号继电器闪开 : 01 06 30 01 00 08 D6 CC //800MS
1号继电器闪闭 : 01 06 40 00 00 05 5C 09 //500MS
2号继电器闪闭 : 01 06 40 01 00 06 4D C8 //600MS

多个继电器闪开闪闭

发送码:01 10 30 00 00 04 08 00 0A 00 0A 00 0A 00 0A 65 8E

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
1010指令写多保持寄存器指令
30 00闪开闪闭地址要控制第一个继电器的闪开闪闭寄存器地址
00 04继电器数量操作继电器数量,不能超过最大继电器数量
08字节数量后面数据节数
00 0A
……
00 0A
间隔时间延时时间为数值*100ms ,例如数值:0x0007,延时:7*100MS = 700MS,闪开闪闭的时间最大设置为0x7FFF
65 8ECRC16前面字节数据的CRC16校验

返回码:01 10 30 00 00 04 CE CA

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
1010指令写多保持寄存器指令
30 00闪开闪闭地址要控制第一个继电器的闪开闪闭寄存器地址
00 04继电器数量操作继电器数量,不能超过最大继电器数量
CE CACRC16前面字节数据的CRC16校验

示例:[1号地址设备]

1号~4号继电器闪开1S  : 01 10 30 00 00 04 08 00 0A 00 0A 00 0A 00 0A 65 8E //700MS = 7*100MS = 700MS
2号`3号继电器闪开800ms : 01 10 30 01 00 02 04 00 08 00 08 E6 66 //800MS
5号~8号继电器闪闭500ms : 01 10 40 04 00 04 08 00 05 00 05 00 05 00 05 F0 77 //500MS
1号`3号继电器闪开600ms : 01 10 40 00 00 03 06 00 07 00 07 00 07 F6 82 //700MS

读取数字输入状态

发送码:01 02 00 00 00 08 79 CC

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0202指令读取输入状态指令
00 00继电器起始地址要查询的第一个数字输入地址
00 08继电器数量要查询的输入通道数量,不能超过最大输入通道
79 CCCRC16前面字节数据的CRC16校验

返回码:01 01 01 00 51 88

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0101指令查询继电器状态指令
01字节数返回状态信息的所有字节数。
00查询的状态返回的继电器状态。
Bit0:起始继电器状态,
Bit1:下个继电器状态,
……
依次类推,高端空闲位则为零。
51 88CRC16前面字节数据的CRC16校验

示例:[1号地址设备]

发送 : 01 02 00 00 00 08 79 CC
返回 : 01 01 01 00 51 88 //输入全部没有触发
发送 : 01 02 00 00 00 08 79 CC
返回 : 01 02 01 01 60 48 //1通道输入触发,其余通道没有触发
发送 : 01 02 00 00 00 08 79 CC
返回 : 01 02 01 41 61 B8 //1、7通道输入触发,其余通道没有触发

读取继电器控制模式

发送码:01 03 20 00 00 08 4F CC

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0303指令读取保持寄存器指令
20 00继电器模式起始地址要查询的第一个继电器模式地址
00 08继电器数量要查询的继电器模式数量,不能超过最大继电器
4F CCCRC16前面字节数据的CRC16校验

返回码:01 03 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E4 59

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0303指令读取保持寄存器指令
10字节数返回状态信息的所有字节数。
00 00
……
00 00
继电器模式继电器控制支持如下几种控制模式。
0x0000:指令模式,继电器受指令直接控制;
0x0001:循环模式,继电器状态每隔一段时间改变一次;
0x0002:联动模式,继电器状态和对应输入通道状态一致;
0x0003:翻转模式,输入通道输入一个脉冲对应的继电器状态翻转一次;
0x0004:跳变模式,输入通道电平跳变一次对应的继电器状态翻转一次;
0x0005:开延时模式,输入触发一次继电器打开延时一段时候后关闭;
0x0006:关延时模式,输入触发一次继电器关闭延时一段时候后打开;
51 88CRC16前面字节数据的CRC16校验
注意

循环模式,开延时模式和关延时模式的时间间隔可以通过延时寄存器修改延时时间。

示例:[1号地址设备]

读取1-8号继电器控制模式 : 01 03 20 00 00 08 4F CC
读取 1号继电器控制模式 : 01 03 20 00 00 01 8F CA
读取 2号继电器控制模式 : 01 03 20 01 00 01 DE 0A
读取3-5号继电器控制模式 : 01 03 20 02 00 03 AF CB

设置单继电器控制模式

发送码:01 06 20 00 00 02 03 CB

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写保持寄存器指令
20 00继电器模式地址要设置的继电器模式地址
00 02继电器模式继电器控制支持如下几种控制模式。
0x0000:指令模式,继电器受指令直接控制;
0x0001:循环模式,继电器状态每隔一段时间改变一次;
0x0002:联动模式,继电器状态和对应输入通道状态一致;
0x0003:翻转模式,输入通道输入一个脉冲对应的继电器状态翻转一次;
0x0004:跳变模式,输入通道电平跳变一次对应的继电器状态翻转一次;
0x0005:开延时模式,输入触发一次继电器打开延时一段时候后关闭;
0x0006:关延时模式,输入触发一次继电器关闭延时一段时候后打开;
03 CBCRC16前面字节数据的CRC16校验
注意

循环模式开延时模式关延时模式的时间间隔可以通过延时寄存器修改延时时间。

返回码:01 06 20 00 00 02 03 CB

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写保持寄存器指令
20 00继电器模式地址要设置的继电器模式地址
00 02继电器模式继电器控制模式
03 CBCRC16前面字节数据的CRC16校验

示例:[1号地址设备]

设置1号继电器为联动模式 : 01 06 20 00 00 02 03 CB
设置2号继电器为翻转模式 : 01 06 20 01 00 03 93 CB

设置多继电器控制模式

发送码:01 10 20 00 00 08 10 00 02 00 02 00 02 00 02 00 02 00 02 00 02 00 02 D3 35

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
1010指令写多保持寄存器指令
20 00继电器模式起始地址要设置的第一个继电器模式地址
00 08继电器数量操作继电器数量,不能超过最大继电器数量
10字节数量后面数据节数
00 02
……
00 02
继电器模式继电器控制支持如下几种控制模式。
0x0000:指令模式,继电器受指令直接控制;
0x0001:循环模式,继电器状态每隔一段时间改变一次;
0x0002:联动模式,继电器状态和对应输入通道状态一致;
0x0003:翻转模式,输入通道输入一个脉冲对应的继电器状态翻转一次;
0x0004:跳变模式,输入通道电平跳变一次对应的继电器状态翻转一次;
0x0005:开延时模式,输入触发一次继电器打开延时一段时候后关闭;
0x0006:关延时模式,输入触发一次继电器关闭延时一段时候后打开;
D3 35CRC16前面字节数据的CRC16校验
注意

循环模式开延时模式关延时模式的时间间隔可以通过延时寄存器修改延时时间。

返回码:01 10 20 00 00 08 CA 0F

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
1010指令写多保持寄存器指令
20 00继电器模式起始地址要设置的第一个继电器模式地址
00 08继电器数量操作继电器数量,不能超过最大继电器数量
CA 0FCRC16前面字节数据的CRC16校验

示例:[1号地址设备]

设置1-8通道继电器为联动模式: 01 10 20 00 00 08 10 00 02 00 02 00 02 00 02 00 02 00 02 00 02 00 02 D3 35
设置3-5通道继电器为翻转模式: 01 10 20 02 00 03 06 00 03 00 03 00 03 18 8B

设置单继电器延时时间

发送码:01 06 50 00 00 0A 18 CD

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写保持寄存器指令
50 00继电器模式地址要设置的继电器延时时间地址
00 0A延时时间延时时间为数值*100ms ,例如数值:0x0007,延时:7*100MS = 700MS,闪开闪闭的时间最大设置为0x7FFF
03 CBCRC16前面字节数据的CRC16校验
注意

继电器延时寄存器仅在循环模式开延时模式关延时模式时有作用。

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

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写保持寄存器指令
20 00继电器模式地址要设置的继电器模式地址
00 02继电器模式继电器控制模式
03 CBCRC16前面字节数据的CRC16校验

示例:[1号地址设备]

设置1号继电器为联动模式 : 01 06 20 00 00 02 03 CB
设置2号继电器为翻转模式 : 01 06 20 01 00 03 93 CB

读取软件版本

发送码:01 03 80 01 00 01 FC 0A

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0303指令读取软件版本,读取设备地址指令
80 01软件版本寄存器固定4x8001
00 01字节数固定0x0001
FC 0ACRC16前面字节数据的CRC16校验

返回码:01 03 02 00 64 B9 AF

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0303指令读取软件版本,读取设备地址指令
02字节数返回字节数
00 64软件版本转为十进制然后小数点左移两位即表示软件版本,0x0064 = 100 = V1.00
B9 AFCRC16前面字节数据的CRC16校验

示例:[1号地址设备]

发送:01 03 80 01 00 01 FC 0A
返回:01 03 02 01 2C B8 09 //0x012C = 300 =V3.00

读取设备地址

发送码:FE 03 80 02 00 01 18 05

字段含义备注
FE设备地址此处0xFE表示有响应广播地址;对所有地址设备都有效
0303指令读保持寄存器指令
80 02设备地址寄存器固定4x8002
00 01设置地址设置的从机设备地址,范围:0x0001-0x00F7
D4 05CRC16前面字节数据的CRC16校验

返回码:FE 03 02 00 01 6D 90

字段含义备注
FE设备地址此处0xFE表示有响应广播地址;对所有地址设备都有效
0303指令读保持寄存器指令
02字节数返回字节数
00 01设备地址从机设备地址,范围:0x0001-0x00F7
6D 90CRC16前面字节数据的CRC16校验
注意

使用0xFE广播地址设置地址时应只接一个设备,接多个设备时所有设备都响应,会出现总线冲突。

示例:[1号地址设备]

设置设备地址为0x01 :FE 06 80 02 00 01 D4 05
设置设备地址为0x02 :FE 06 80 02 00 02 94 04
设置设备地址为0x03 :FE 06 80 02 00 03 55 C4

设置设备地址

发送码:FE 06 80 02 00 01 D4 05

字段含义备注
FE设备地址此处0xFE表示有响应广播地址;对所有地址设备都有效
0606指令写单保持寄存器指令
80 02设备地址寄存器固定4x8002
00 01设置地址设置的从机设备地址,范围:0x0001-0x00F7
D4 05CRC16前面字节数据的CRC16校验

返回码:FE 06 80 02 00 01 D4 05

字段含义备注
FE设备地址此处0xFE表示有响应广播地址;对所有地址设备都有效
0606指令写单保持寄存器指令
80 02设备地址寄存器固定4x8002
00 01设置地址设置的从机设备地址,范围:0x0001-0x00F7
D4 05CRC16前面字节数据的CRC16校验
注意

使用0xFE广播地址设置地址时应只接一个设备,接多个设备时所有设备都设置为同一个地址。

示例:[1号地址设备]

设置设备地址为0x01 :FE 06 80 02 00 01 D4 05
设置设备地址为0x02 :FE 06 80 02 00 02 94 04
设置设备地址为0x03 :FE 06 80 02 00 03 55 C4

设置串口参数

发送码:01 06 80 03 00 05 90 09

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
80 03串口参数寄存器固定4x8003
00 05串口参数Bit0 ~ Bit7:波特率
0 : 4800
1 : 9600
2 : 19200
3 : 38400
4 : 57600
5 : 115200
6 : 128000
7 : 256000
Bit8 ~ Bit12:停止位
0 : 无校验(None),
1 : 偶检验(Even),
2 : 奇校验(Odd)
Bit13 ~ Bit16:停止位
0 : 停止位1位,
1 : 停止位1.5位,
2 : 停止位2位
90 09CRC16前面字节数据的CRC16校验

返回码:01 06 80 03 00 05 90 09

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
80 03串口参数寄存器固定4x8003
00 05串口参数串口参数
90 09CRC16前面字节数据的CRC16校验

示例:[1号地址设备]

设置波特率9600,无校验,1位 :01 06 80 03 00 01 91 CA
设置波特率9600,偶校验,2位 :01 06 20 00 00 91 43 CA
设置波特率115200,无校验,1位 :01 06 80 03 00 05 90 09

设置看门狗

发送码:01 06 80 04 00 0A 61 CC

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
80 04看门狗寄存器固定4x8004
00 0A间隔时间寄存器默认为0看门狗关闭。设置不为零数值后开启看门狗功能。
收到正常modbus指令为一次成功喂狗。如果时间隔内没有收到正常Modbus指令则程序复位重启,继电器恢复开机输出状态。
延时时间为数值*100ms ,例如数值:0x000A,延时:10*100MS = 1S
61 CCCRC16前面字节数据的CRC16校验

返回码:01 06 80 04 00 0A 61 CC

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
80 04看门狗寄存器固定4x8004
00 0A间隔时间看门狗超时时间
61 CCCRC16前面字节数据的CRC16校验

示例:[1号地址设备]

关闭看门狗10S :01 06 80 04 00 64 E0 20
关闭看门狗 :01 06 80 04 00 00 E1 CB

设置主动上传

发送码:01 06 80 05 FF 00 61 CC

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
80 05主动上传寄存器固定4x8005
FF 00开启关闭数字输入支持主动上传功能。寄存器默认为0,主动上传功能关闭。
设置寄存器值为非零数据则开启主动上传功能,数字输入状态改变时自动上传输入状态。
61 CCCRC16前面字节数据的CRC16校验

返回码:01 06 80 05 FF 00 61 CC

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
80 05主动上传寄存器固定4x8005
FF 00开启关闭数字输入支持主动上传功能。寄存器默认为0,主动上传功能关闭。
设置寄存器值为非零数据则开启主动上传功能,数字输入状态改变时自动上传输入状态。
61 CCCRC16前面字节数据的CRC16校验

示例:[1号地址设备]

开启主动上传 :01 06 80 05 FF 00 61 CC
关闭主动上传 :01 06 80 05 00 00 B0 0B

异常功能码

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

返回码:01 85 03 02 91

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

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

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

Modbus TCP 开发协议

在这里以上面打开第一个继电器的指令为例简单介绍一下modbus tcp与modbus rtu协议转换。

  • Modbus RTU 指令:01 05 00 00 FF 00 8C 3A
字段含义备注
01设备地址固定0x01
0505指令控制继电器指令
00 00地址要控制继电器的寄存器地址,0x00,即第一个继电器
FF 00指令0xFF00:继电器开启
8C 3ACRC16前面字节数据的CRC16校验
  • Modbus TCP 指令:00 00 00 00 00 06 01 05 00 00 FF 00
字段含义备注
00 00消息标号都是0x00即可
00 00modbus标志号必须都为0,代表这是modbus 通信
00 06字节长度表示后面的所有字节数,后面还有6个字节
01设备地址固定0x01
0505指令控制继电器指令
00 00地址要控制继电器的寄存器地址,0x00,即第一个继电器
FF 00指令0xFF00:继电器开启

通过上面指令的对比可以发现,modbus rtu 指令去掉CRC校验,前面加上五个0x00和一个字节长度即可转为modbus tcp协议。