| 参数 | 规格 |
|---|---|
| 通信接口 | RS485 |
| 通信波特率 | 4800, 9600, 19200, 38400, 57600, 115200, 128000, 256000 |
| 默认通信格式 | 9600, N, 8, 1 |
| Modbus 协议 | 标准 Modbus RTU 协议 |
| 供电电压 | DC 7 ~ 36 V |
| 脉冲输入电平范围 | 3.3 V ~ 30 V |
| 脉冲频率测量范围 | 400 Hz ~ 50 kHz |
| 脉冲分辨率 | 0.01 Hz |
| 脉冲精度 | 5 ‰ |
| 占空比测量范围 | 0 ~ 100 % |
| 占空比分辨率 | 0.01 % |
| 占空比精度 | 5 ‰ |
| 指示灯 | 状态说明 |
|---|---|
| STATUS灯 | MCU指示灯,MCU正常工作时闪烁。 |
| TXD灯 | 发送指示灯,发送数据时灯亮。 |
| RXD灯 | 接收指示灯,接收数据时灯亮。 |
CHN+为正端输入,CHN-为负端输入。PWM测量频率范围为400 Hz~50 kHz,占空比范围为0~100%。

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

下载 SSCOM 串口调试助手 并在电脑上打开,打开对应的端口号,设置波特率为 9600,选择 hex 发送和接收,加检验选择 ModbusCRC16 校验。
发送如下指令,正常会返回八路脉冲输入数据。
01 04 00 00 00 18

01 04 00 03 00 03

更多详细的控制指令请查看请查看开发协议。
串口软件不方便观察数据,可以选择 Modbus Poll 软件 读取数据。下载并安装 Modbus Poll 软件。
打开软件,选择 setup->Read/Write Definition,Slave ID 选择实际设备地址,Function 选择 04 功能码,Quantity 改为 24。点击 OK 确认。

选择 Connection->Connect...,选择对应的串口,波特率为 9600,8 位数据位,无校验模式,1 位停止位。点击 OK 连接。

连接正常后将显示寄存器数据,为方便观察需设置频率格式。选择 1,3,6,9,12,15,18,21 寄存器右键选择 Format->32 Bit Unsigned->Big-endian,格式设置为无符号 32 位大段格式。同时可在 Alias 栏添加寄存器备注。

设置正常格式后显示正常八通道脉冲频率和占空比显示如下。

| 功能码 | 备注 |
|---|---|
| 03 | 读取保持寄存器 |
| 04 | 读取输入寄存器 |
| 06 | 写单个保持寄存器 |
| 10 | 写多个保持寄存器 |
| 地址 (HEX) | 地址存储内容 | 寄存器取值 | 权限 | Modbus 功能码 |
|---|---|---|---|---|
| 3x0000 3x0001 | 通道 1 频率高 16 位 通道 1 频率低 16 位 | 数值为无符号 32 进制,单位 0.01 HZ,范围:400~5000000,即 400 HZ~50 kHz | 读 | 0x04 |
| 3x0002 | 通道 1 占空比 | 数值为无符号 16 进制,单位 0.01%,范围 0~1000,即 0~100% | 读 | 0x04 |
| 3x0003 3x0004 | 通道 2 频率高 16 位 通道 2 频率低 16 位 | 数值为无符号 32 进制,单位 0.01 HZ,范围:400~5000000,即 400 HZ~50 kHz | 读 | 0x04 |
| 3x0005 | 通道 2 占空比 | 数值为无符号 16 进制,单位 0.01%,范围 0~1000,即 0~100% | 读 | 0x04 |
| 3x0006 3x0007 | 通道 3 频率高 16 位 通道 3 频率低 16 位 | 数值为无符号 32 进制,单位 0.01 HZ,范围:400~5000000,即 400 HZ~50 kHz | 读 | 0x04 |
| 3x0008 | 通道 3 占空比 | 数值为无符号 16 进制,单位 0.01%,范围 0~1000,即 0~100% | 读 | 0x04 |
| 3x0009 3x000A | 通道 4 频率高 16 位 通道 4 频率低 16 位 | 数值为无符号 32 进制,单位 0.01 HZ,范围:400~5000000,即 400 HZ~50 kHz | 读 | 0x04 |
| 3x000B | 通道 4 占空比 | 数值为无符号 16 进制,单位 0.01%,范围 0~1000,即 0~100% | 读 | 0x04 |
| 3x000C 3x000D | 通道 5 频率高 16 位 通道 5 频率低 16 位 | 数值为无符号 32 进制,单位 0.01 HZ,范围:400~5000000,即 400 HZ~50 kHz | 读 | 0x04 |
| 3x000E | 通道 5 占空比 | 数值为无符号 16 进制,单位 0.01%,范围 0~1000,即 0~100% | 读 | 0x04 |
| 3x000F 3x0010 | 通道 6 频率高 16 位 通道 6 频率低 16 位 | 数值为无符号 32 进制,单位 0.01 HZ,范围:400~5000000,即 400 HZ~50 kHz | 读 | 0x04 |
| 3x0011 | 通道 6 占空比 | 数值为无符号 16 进制,单位 0.01%,范围 0~1000,即 0~100% | 读 | 0x04 |
| 3x0012 3x0013 | 通道 7 频率高 16 位 通道 7 频率低 16 位 | 数值为无符号 32 进制,单位 0.01 HZ,范围:400~5000000,即 400 HZ~50 kHz | 读 | 0x04 |
| 3x0014 | 通道 7 占空比 | 数值为无符号 16 进制,单位 0.01%,范围 0~1000,即 0~100% | 读 | 0x04 |
| 3x0015 3x0016 | 通道 8 频率高 16 位 通道 8 频率低 16 位 | 数值为无符号 32 进制,单位 0.01 HZ,范围:400~5000000,即 400 HZ~50 kHz | 读 | 0x04 |
| 3x0017 | 通道 8 占空比 | 数值为无符号 16 进制,单位 0.01%,范围 0~1000,即 0~100% | 读 | 0x04 |
| 4x2000 | 串口参数 | 高八位为校验方式:0x00~0x02 低八位为波特率方式:0x00~0x07 | 读/写 | 0x03,0x06 |
| 4x4000 | 设备地址 | 直接存储 Modbus 地址 设备地址:0x0001~0x00FF | 读/写 | 0x03,0x06 |
| 4x8000 | 软件版本 | 转为十进制然后小数点左移两位表示软件版本 0x0064 = 100 = V1.00 | 读 | 0x03 |
发送码:01 04 00 00 00 03 B0 0B
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 04 | 04 指令 | 读取输入寄存器 |
| 00 00 | 寄存器起始地址 | 读取通道起始寄存器,每个通道占三个寄存器,前两个寄存器保存频率,后一个寄存器保存占空比。 |
| 00 03 | 寄存器数量 | 读取寄存器数量,不能超过最大寄存器数量 |
| B0 0B | CRC16 | 前 6 字节数据的 CRC16 校验和 |
返回码: 01 04 06 00 3B 83 A5 03 01 7D C1
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 04 | 04 指令 | 读取输入寄存器 |
| 06 | 字节数量 | 数据长度 |
| 3B 83 A5 03 03 01 | 寄存器数据 频率高16位 频率低16位 占空比 | 每个通道占三个寄存器,前两个寄存器保存频率,后一个寄存器保存占空比。 频率为无符号32进制,单位 0.01 Hz,范围: 100 ~ 200000000,即 1 Hz ~ 200 KMHz 占空比为无符号16进制,单位 0.01 %,范围 0 ~ 1000,即 0 ~ 100% |
| 7D C1 | CRC16 | 前 6 字节数据的 CRC16 校验和 |
示例:[1 号地址设备]
读取 1-8 通道 : 01 04 00 00 00 18 F0 00
读取 2 通道 : 01 04 00 03 00 03 40 0B
读取 3-5 通道 : 01 04 00 06 00 09 D0 0D
读取 1 通道 : 01 04 00 00 00 03 B0 0B
返回:01 04 06 00 00 9C 40 13 88 42 41 //通道 1,400 Hz ,50%占空比
发送码:00 06 20 00 00 05 43 D8
| 字段 | 含义 | 备注 |
|---|---|---|
| 00 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 06 | 06 指令 | 设置波特率,设置设备地址 |
| 20 00 | 指令寄存器 | 0x2000 为设置波特率,0x4000 为设置设备地址 |
| 00 | 校验方式 | 0x00 为无校验,0x01 为偶校验,0x02 为奇校验 |
| 05 | 波特率数值 | 波特率数值对应 0x00: 4800 0x01: 9600 0x02: 19200 0x03: 38400 0x04: 57600 0x05: 115200 0x06: 128000 0x07: 256000 |
| 43 D8 | CRC16 | 前 6 字节数据的 CRC16 校验和 |
返回码:00 06 20 00 00 05 43 D8
| 字段 | 含义 | 备注 |
|---|---|---|
| 00 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 06 | 06 指令 | 设置波特率,设置设备地址 |
| 20 00 | 指令寄存器 | 0x2000 为设置波特率,0x4000 为设置设备地址 |
| 00 | 校验方式 | 0x00 为无校验,0x01 为奇校验,0x02 为偶校验 |
| 05 | 波特率 | 波特率数值对应 0x00: 4800 0x01: 9600 0x02: 19200 0x03: 38400 0x04: 57600 0x05: 115200 0x06: 128000 0x07: 256000 |
| 43 D8 | CRC16 | 前 6 字节数据的 CRC16 校验和 |
示例:[1 号地址设备]
设置波特率 4800 :00 06 20 00 00 00 83 DB
设置波特率 9600 :00 06 20 00 00 01 42 1B
设置波特率 115200 :00 06 20 00 00 05 43 D8
发送码:00 06 40 00 00 01 5C 1B
| 字段 | 含义 | 备注 |
|---|---|---|
| 00 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 06 | 06 指令 | 设置波特率,设置设备地址 |
| 40 00 | 指令寄存器 | 0x2000 为设置波特率,0x4000 为设置设备地址 |
| 00 01 | 设备地址 | 设置的设备地址,0x0001-0x00FF |
| 5C 1B | CRC16 | 前 6 字节数据的 CRC16 校验和 |
返回码:00 06 40 00 00 01 5C 1B
| 字段 | 含义 | 备注 |
|---|---|---|
| 00 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 06 | 06 指令 | 设置波特率,设置设备地址 |
| 40 00 | 指令寄存器 | 0x2000 为设置波特率,0x4000 为设置设备地址 |
| 00 01 | 设备地址 | 设置的设备地址,0x0001-0x00FF |
| 5C 1B | CRC16 | 前 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 表示设备地址 |
| 03 | 03 指令 | 读取设备地址指令 |
| 40 00 | 指令寄存器 | 0x4000 为读取设备地址,0x8000 为读取软件版本 |
| 00 01 | 字节数 | 固定 0x0001 |
| 90 1B | CRC16 | 前 6 字节数据的 CRC16 校验和 |
返回码:01 03 02 00 01 79 84
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 03 | 03 指令 | 读取软件版本,读取设备地址指令 |
| 02 | 字节数 | 返回字节数 |
| 00 01 | 设备地址 | 设置的设备地址,0x0001-0x00FF |
| 79 84 | CRC16 | 前 6 字节数据的 CRC16 校验和 |
示例:[2 号地址设备]
发送 : 00 03 40 00 00 01 90 1B
返回 : 02 03 02 00 02 7D 85 //地址 0x02
发送码:00 03 80 00 00 01 AC 1B
| 字段 | 含义 | 备注 |
|---|---|---|
| 00 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 03 | 03 指令 | 读取软件版本,读取设备地址指令 |
| 80 00 | 指令寄存器 | 0x4000 为读取设备地址,0x8000 为读取软件版本 |
| 00 01 | 字节数 | 固定 0x0001 |
| AC 1B | CRC16 | 前 6 字节数据的 CRC16 校验和 |
返回码:01 03 02 00 64 B9 AF
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 03 | 03 指令 | 读取软件版本,读取设备地址指令 |
| 02 | 字节数 | 返回字节数 |
| 00 64 | 软件版本 | 转为十进制然后小数点左移两位即表示软件版本 0x0064 = 100 = V1.00 |
| B9 AF | CRC16 | 前 6 字节数据的 CRC16 校验和 |
示例:[1 号地址设备]
发送:00 03 80 00 00 01 AC 1B
返回:01 03 02 00 64 B9 AF //0x0064 = 100 =V1.00
当接收到的指令出错或者异常设备将会返回异常响应,异常响应格式如下。
返回码:01 85 03 02 91
| 字段 | 含义 | 备注 |
|---|---|---|
| 01 | 设备地址 | 0x00 表示广播地址;0x01-0xFF 表示设备地址 |
| 85 | 异常功能码 | 异常功能码 = 请求功能码 + 0x80 |
| 03 | 字节数 | 异常码 |
| 02 91 | CRC16 | 前 6 字节数据的 CRC16 校验和 |
异常码是一个单字节值,用于指示错误的类型。Modbus 协议定义的几个常用异常码:
| 异常码 | 名称 | 描述 |
|---|---|---|
| 0x01 | 非法功能 | 请求的功能码不支持 |
| 0x02 | 非法数据地址 | 请求的数据地址错误 |
| 0x03 | 非法数据值 | 请求的数据值或操作无法执行 |
| 0x04 | 服务器故障 | 服务器设备故障 |
| 0x05 | 应答 | 已接收到请求并正在处理 |
| 0x06 | 设备繁忙 | 设备当前正忙无法执行请求的操作 |
周一-周五(9:30-6:30)周六(9:30-5:30)
手机:13434470212
邮箱:services04@spotpear.cn
QQ:202004841
