跳到主要内容

DAM-8AO 通信协议

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

Modbus寄存器说明

设备地址介绍

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

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

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

功能码介绍

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

功能码功能说明说明
03读保持寄存器读模拟输出设定值 / 设备参数
06写单寄存器写单路模拟输出或设备参数
10写多个寄存器写多路模拟输出或多项设备参数

寄存器地址介绍

地址(HEX)地址存储内容说明类型Modbus 功能码
4x0000~4x0007AO1~AO8 电流输出无符号十六进制,范围:0~20000,单位uA。对应量程0~20 mA。读/写0x03,0x06,0x10
4xA000~4xA007AO1~AO8 开机电流输出默认设定值,开机或看门狗复位的输出值。掉电保存读/写/存0x03,0x06,0x10
4x8000SUK产品型号读/存0x03
4x8001软件版本十进制小数点左移两位即表示软件版本例0x0064 = 100 = V1.00读/写/存0x03,0x06
4x8002设备地址直接存储 Modbus 地址默认地址:0x0001读/写/存0x03,0x06
4x8003串口参数高八位为停止位和校验方式,低八位为波特率读/写/存0x03,0x06
4x8004看门狗时间间隔内没通讯则复位并恢复开机输出读/写/存0x03,0x06
4x9000~4x9007用户自定义区域字符串格式读/写/存0x03,0x06,0x10
注意

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

数值说明
  • 电流 AO(4x0000~4x0007):寄存器值 = 输出电流(µA),范围 0~200000~20 mA。例:10000 = 10.000 mA,20000 = 20.000 mA。

Modbus RTU 指令解析

写单路模拟输出

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

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
00 00地址输出寄存器地址(例:AO1 = 4x0000)
03 E8设定值设置值为16进制,高位在前,低位在后。单位 µA,0x03E8 = 1000,即 1 mA
89 74CRC16前面字节数据的CRC16校验

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

示例:[1号地址设备]

AO1 输出 20 mA(20000 µA): 01 06 00 00 4E 20 BD B2
AO1 输出 10 mA(10000 µA): 01 06 00 00 27 10 93 F6
AO1 输出 4 mA(4000 µA) : 01 06 00 00 0F A0 8C 42

写多路模拟输出

发送码:01 10 00 00 00 08 10 4E 20 4E 20 4E 20 4E 20 4E 20 4E 20 4E 20 4E 20 0C 6A

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
1010指令写多保持寄存器指令
00 00起始地址第一个输出寄存器地址
00 08寄存器数量写入 8 路输出寄存器
10字节数量后续数据字节数(8×2)
设定值各通道 16 位设定值
CRC16CRC16前面字节数据的CRC16校验

返回码:01 10 00 00 00 08 C1 CF

示例:[1号地址设备]

AO1~AO8 全部 20 mA: 01 10 00 00 00 08 10 4E 20 4E 20 4E 20 4E 20 4E 20 4E 20 4E 20 4E 20 0C 6A

读取模拟输出

发送码:01 03 00 00 00 08 44 0C

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0303指令读保持寄存器指令
00 00起始地址第一个输出寄存器地址
00 08寄存器数量连续读取 8 路(AO1~AO8)
44 0CCRC16前面字节数据的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字节数返回数据字节数(8×2)
00 00 …输出设定值依次为 AO1~AO8(µA)的 16 位无符号数值
E4 59CRC16前面字节数据的CRC16校验

示例:[1号地址设备]

读取全部8路(AO1~AO8): 01 03 00 00 00 08 44 0C
读取 AO1~AO4 : 01 03 00 00 00 04 44 09
读取 AO5~AO8 : 01 03 00 04 00 04 05 C8

设置开机输出

发送码:01 06 A0 00 4E 20 9F B2

字段含义备注
01设备地址0x00表示广播地址;0x01-0xF7表示设备地址
0606指令写单保持寄存器指令
A0 00地址开机输出寄存器(例:AO1 = 4xA000)
设定值与运行寄存器相同单位(µA),掉电保存
CRC16CRC16前面字节数据的CRC16校验

返回码: 与发送码相同

注意

修改开机输出不会改变当前输出状态,仅修改默认值。

示例:[1号地址设备]

AO1 开机 20 mA: 01 06 A0 00 4E 20 9F B2
AO1 开机 4 mA : 01 06 A0 00 0F A0 AE 42

读取软件版本

发送码: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
18 05CRC16前面字节数据的CRC16校验

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

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

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

示例:[1号地址设备]

发送 : FE 03 80 02 00 01 18 05
返回 : FE 03 02 00 02 2D 91 //地址0x02

设置设备地址

发送码: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 80 03 00 D1 90 56
设置波特率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 85 03 02 91

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

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

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