网络 io 设置指令参考 - usr

21
网络 IO 设置指令参考 http://h.usr.cn 网络 IO 设置指令参考 文件版本:V1.0.0

Upload: others

Post on 17-Feb-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

网络 IO 设置指令参考 http://h.usr.cn

网络 IO 设置指令参考

文件版本:V1.0.0

网络 IO 设置指令参考 http://h.usr.cn

说明

本文档主要针对 USR 网络 IO 系列产品协议进行解析。

使用配套的设置软件 USR-IO 或者有人透传云可快速进行设备的控制。

本文的 Modbus 指令以设备默认地址为 17 即 0x11,来进行表示。

有关更加详细 Modbus 协议请查阅 Modbus 协议官方手册。

熟悉 Modbus 指令可直接参考网络 IO 设备对应说明书中寄存器分配表操作设备。

网络 IO 设置指令参考 http://h.usr.cn

1. 输出

1.1. 读继电器状态

例子:读继电器 1 状态

指令:11 01 00 00 00 01 FF 5A

设备地址 功能码 起始地址 设置状态 CRC 校验位

指令 11 01 00 00 00 01 FF 5A

解析 设备地址 读继电器状态 继电器 1 地址 继电器数量 CRC 校验

参考指令表

执行动作 Modbus 指令

读继电器 1 状态 11 01 00 00 00 01 FF 5A

读继电器 2 状态 11 01 00 01 00 01 AE 9A

读继电器 3 状态 11 01 00 02 00 01 5E 9A

读继电器 4 状态 11 01 00 03 00 01 0F 5A

读继电器 5 状态 11 01 00 04 00 01 BE 9B

读继电器 6 状态 11 01 00 05 00 01 EF 5B

读继电器 7 状态 11 01 00 06 00 01 1F 5B

读继电器 8 状态 11 01 00 07 00 01 4E 9B

读继电器 1-4 状态 11 01 00 00 00 04 3F 59

读继电器 2-4 状态 11 01 00 01 00 03 2F 5B

读继电器 1-8 状态 11 01 00 00 00 08 3F 5C

1.2. 设置单个继电器状态

05 功能码指令剖析:

例子:设置继电器 1 为断开状态

指令:11 05 00 00 00 00 CF 5A

设备地址 功能码 起始地址 设置状态 CRC 校验位

指令 11 05 00 00 00 00 CF 5A

解析 设备 ID 设置继电器状态 继电器 1 地址 关闭状态 CRC 校验

注:设置状态: FF00 为闭合继电器 0000 为断开继电器

参考指令表

执行动作 Modbus 指令

设置继电器 1 断开 11 05 00 00 00 00 CF 5A

设置继电器 2 断开 11 05 00 01 00 00 9E 9A

设置继电器 3 断开 11 05 00 02 00 00 6E 9A

设置继电器 4 断开 11 05 00 03 00 00 3F 5A

网络 IO 设置指令参考 http://h.usr.cn

设置继电器 1 闭合 11 05 00 00 FF 00 8E AA

设置继电器 2 闭合 11 05 00 01 FF 00 DF 6A

设置继电器 3 闭合 11 05 00 02 FF 00 2F 6A

设置继电器 4 闭合 11 05 00 03 FF 00 7E AA

设置继电器 5 闭合 11 05 00 04 FF 00 CF 6B

设置继电器 6 闭合 11 05 00 05 FF 00 9E AB

设置继电器 7 闭合 11 05 00 06 FF 00 6E AB

设置继电器 8 闭合 11 05 00 07 FF 00 3F 6B

1.3. 设置多个继电器状态

0F 功能码指令剖析:

例子:读继电器 1 状态

指令:11 0F 00 00 00 01 01 00 FF 5A

设备地址 功能码 起始地址 输出数量 字节数 输出值 CRC 校验位

指令 11 0F 00 00 00 01 01 00 FF 5A

解析 设备地址 读多个

继电器

继电器 1

地址

继电器

数量 1个字节

闭合

继电器 1 CRC 校验

参考指令表

执行动作 Modbus 指令 参数备注

设置继电器 1 闭合 11 0F 00 00 00 01 01 01 EE 5B

输出值按字节计算,域比特位

置中的逻辑“1”请求相应输出

为 ON。域比特位置中的逻辑

“0”请求相应输出为 OFF。

设置继电器 1 断开 11 0F 00 00 00 01 01 00 2F 9B

设置继电器 2 断开 11 0F 00 01 00 01 01 00 12 5B

设置继电器 2 闭合 11 0F 00 01 00 01 01 01 D3 9B

设置继电器 3 闭合 11 0F 00 02 00 01 01 01 97 9B

设置继电器 4 断开 11 0F 00 03 00 01 01 00 6B 9B

设置继电器 5 闭合 11 0F 00 04 00 01 01 01 1F 9B

设置继电器 6 断开 11 0F 00 05 00 01 01 00 E3 9B

设置继电器 7 闭合 11 0F 00 06 00 01 01 01 66 5B

设置继电器 8 断开 11 0F 00 07 00 01 01 00 9A 5B

设置继电器 1-4 状态 11 0F 00 00 00 04 01 09 FF 9C 1、4 闭合,2、3 断开

设置继电器 1-8 状态 11 0F 00 00 00 08 01 C9 3F CF 1、4、7、8 闭合,

2、3、5、6 断开

2. 输入

2.1. 读 DI 状态

1. 例子:读输入 DI_1 状态

2. 指令:11 02 00 20 00 01 BA 90

网络 IO 设置指令参考 http://h.usr.cn

设备地址 功能码 起始地址 数量 CRC 校验位

指令 11 02 00 20 00 01 BA 90

解析 设备 ID 读 DI 输入 DI_1 地址 1 个 CRC 校验

参考指令表

执行动作 Modbus 指令

读输入 1 状态 11 02 00 20 00 01 BA 90

读输入 2 状态 11 02 00 21 00 01 EB 50

读输入 3 状态 11 02 00 22 00 01 1B 50

读输入 4 状态 11 02 00 23 00 01 4A 90

读输入 5 状态 11 02 00 24 00 01 FB 51

读输入 6 状态 11 02 00 25 00 01 AA 91

读输入 7 状态 11 02 00 26 00 01 5A 91

读输入 8 状态 11 02 00 27 00 01 0B 51

读输入 1-4 状态 11 02 00 20 00 04 7A 93

读输入 1-8 状态 11 02 00 20 00 08 7A 96

2.1. 读按键输入

1. 例子:读按键 DI_1

2. 指令:11 03 00 20 00 01 86 95

设备地址 功能码 起始地址 数量 CRC 校验位

指令 11 03 00 20 00 01 86 95

解析 设备 ID 读参数 按键 1 地址 1 个 CRC 校验

参考指令表

执行动作 Modbus 指令

DI-按键输入 1 11 03 00 30 00 01 86 95

DI-按键输入 2 11 03 00 31 00 01 D7 55

DI-按键输入 3 11 03 00 32 00 01 27 55

DI-按键输入 4 11 03 00 33 00 01 76 95

DI-按键输入 5 11 03 00 34 00 01 C7 54

DI-按键输入 6 11 03 00 35 00 01 96 94

DI-按键输入 7 11 03 00 36 00 01 66 94

DI-按键输入 8 11 03 00 36 00 01 66 94

DI-按键输入 1-4 11 03 00 30 00 04 46 96

DI-按键输入 1-8 11 03 00 30 00 08 46 93

网络 IO 设置指令参考 http://h.usr.cn

2.1. 读脉冲计数

1. 例子:读脉冲次数

2. 指令:11 03 00 40 00 01 87 4E

设备地址 功能码 起始地址 数量 CRC 校验位

指令 11 03 00 40 00 01 87 4E

解析 设备 ID 读参数 脉冲 1 地址 1 个 CRC 校验

参考指令表

执行动作 Modbus 指令

DI-脉冲计数 1 11 03 00 40 00 01 87 4E

DI-脉冲计数 2 11 03 00 41 00 01 D6 8E

DI-脉冲计数 3 11 03 00 42 00 01 26 8E

DI-脉冲计数 4 11 03 00 43 00 01 77 4E

DI-脉冲计数 5 11 03 00 44 00 01 C6 8F

DI-脉冲计数 6 11 03 00 45 00 01 97 4F

DI-脉冲计数 7 11 03 00 46 00 01 67 4F

DI-脉冲计数 8 11 03 00 47 00 01 36 8F

DI-脉冲计数 1-4 11 03 00 40 00 04 47 4D

DI-脉冲计数 1-8 11 03 00 40 00 08 47 48

3. 参数

3.1. 读设备参数

1. 例子:读时间戳

2. 指令:11 03 00 68 00 02 47 47

设备地址 功能码 起始地址 寄存器数量 CRC 校验位

指令 11 03 00 68 00 02 47 47

解析 设备 ID 读参数 时间戳地址 2 个 CRC 校验

参考指令表

执行动作 Modbus 指令

读时间戳 11 03 00 68 00 02 47 47

年月日、时分秒 11 03 00 6A 00 03 27 47

星期 11 03 00 6D 00 01 17 47

读逻辑指令 1 11 03 00 8E 00 04 26 B2

读逻辑指令 2 11 03 00 92 00 04 E7 74

读逻辑指令 6 11 03 00 A2 00 04 E7 7B

读逻辑指令 7 11 03 00 A6 00 04 A6 BA

网络 IO 设置指令参考 http://h.usr.cn

读逻辑指令 1-8 11 03 00 8E 00 20 26 A9

读 RS485 串口 11 03 00 AE 00 02 A7 7A

读 RS485 模式 11 03 00 B0 00 01 87 7D

读 Modbus 地址 11 03 00 B1 00 01 D6 BD

读工作模式 11 03 00 B2 00 01 26 BD

读重启状态 11 03 00 B6 00 01 67 7C

读 APN 地址 11 03 10 00 00 0B 02 5D

APN 密码 11 03 10 16 00 0B E3 99

注册包 11 03 10 43 00 01 73 8E

TCP client 远程连接地址 11 03 10 55 00 20 52 52

TCP client 远程连接端口 11 03 10 75 00 01 93 80

设备名称 11 03 10 88 00 10 C2 7C

模块软件版本 11 03 10 98 00 01 03 B5

模块硬件版本 11 03 10 99 00 01 52 75

设备型号 11 03 14 00 00 10 43 66

3.2. 写单个寄存器参数

1. 例子:写 RS485 模式参数

2. 指令:11 06 00 68 00 01 4B 7D

设备地址 功能码 起始地址 参数值 CRC 校验位

指令 11 06 00 B0 00 01 4B 7D

解析 设备 ID 写单个寄存器参数 RS485 模式

寄存器地址 主机模式 CRC 校验

参考指令表

执行动作 Modbus 指令 参数备注

写 RS485 模式为 1 11 06 00 B0 00 01 4B 7D 主机模式(0x0001)

从机模式(0x0002)

写 Modbus 地址为 0x12 11 06 00 B1 00 12 5B 70 从机地址(0x0001~0x00FD)

写工作模式为 1 11 06 00 B2 00 01 EA BD Modbus 模式(0x0001)

固件升级(0x0002)

写恢复出厂设置 11 06 00 B3 55 55 85 D2 默认(0x0000)、

重启(0x0001)、

恢复用户默认设置(0x0002)、

恢复有人默认设置(0x5555)、

将当前参数存为用户默认设

置(0xAAAA)

模块重启 11 06 00 B3 00 01 BB 7D

继电器状态一直保持 11 06 00 B6 00 01 AB 7C 一直保持(0x0001)

重启保持,断电不保持

(0x002)

一直不保持(0x0003)

继电器状态不保持 11 06 00 B6 00 03 2A BD

网络 IO 设置指令参考 http://h.usr.cn

透传云注册包 11 06 10 43 00 01 BF 8E 透传云 注册包(0x0001)

IMEI 注册包(0x0002) IMEI 注册包 11 06 10 43 00 02 FF 8F

3.3. 写多个寄存器参数

1. 例子:写 RS485 模式参数

2. 指令:11 06 00 68 00 01 4B 7D

设备地址 功能码 起始地址 参数值 CRC 校验位

指令 11 10 00 6A 18 01 03 12

24 48 7E E1

解析 设备 ID 写多个寄存器参数 RS485 模式

寄存器地址

时间 18-1-03

12:24 48 CRC 校验

参考指令表

执行动作 Modbus 指令 参数备注

写年月日时分秒 11 10 00 6A 00 03 06 18 01 03 12

24 48 7E E1 写入时间 18-1-03-12:24 48

写 RS485 模式为 1 11 10 00 B0 00 01 02 00 01 B0 60 主机模式(0x0001)

从机模式(0x0002)

写 Modbus 地址为 0x13 11 10 00 B1 00 01 02 00 13 31 BC 设备地址(0x0001~0x00FD)

写工作模式寄存器为 1 11 10 00 B2 00 01 02 00 01 B1 82 Modbus 模式(0x0001)

固件升级(0x0002)

写恢复出厂设置 11 10 00 B3 00 01 02 55 55 8E FC 默认(0x0000)、重启(0x0001)、

恢复用户默认设置(0x0002)、

恢复有人默认设置(0x5555)、

将当前参数存为用户默认设置

(0xAAAA)

将当前参数存为用户默认 11 10 00 B3 00 01 02 AA AA 8F 4C

恢复用户默认设置 11 10 00 B3 00 01 02 00 02 F0 52

模块重启 11 10 00 B3 00 01 02 00 01 B0 53

写继电器状态一直保持 11 10 00 B6 00 01 02 00 01 B0 06

一直保持(0x0001)

重启保持,断电不保持(0x002)

一直不保持(0x0003)

写继电器状态重启保持,

断电不保持 11 10 00 B6 00 01 02 00 02 F0 07

写继电器状态断电、

重启不保持 11 10 00 B6 00 01 02 00 03 31 C7

写 APN 地址为

11 10 10 00 00 0B 16 77 77 77 2E

75 73 72 2E 63 6E 00 00 00 00 00

00 00 00 00 00 00 00 EC 11

设 APN 地址为 www.usr.cn

APN 用户名

11 10 10 0B 00 0B 16 77 77 77 2E

75 73 72 2E 63 6E 00 00 00 00 00

00 00 00 00 00 00 00 2D 2E

设 APN 用户名为 www.usr.cn

APN 密码

11 10 10 16 00 0B 16 31 32 33 34

35 36 37 38 00 00 00 00 00 00 00

00 00 00 00 00 00 00 D0 01

设 APN 密码为 12345678

写注册包为透传云注册包 11 10 10 43 00 01 02 00 01 B5 62 透传云 注册包(0x0001)

网络 IO 设置指令参考 http://h.usr.cn

写注册包为 IMEI 11 10 10 43 00 01 02 00 02 F5 63 IMEI 注册包(0x0002)

TCP client 远程连接地址

11 10 10 55 00 20 40 63 6C 6F 75

64 2E 75 73 72 2E 63 6E 00 00 00

00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 AB 99

设远程服务器地址为

cloud.usr.cn

写 TCP client 远程连接端口

为 4096 11 10 10 75 00 01 02 10 00 7C F4 远程服务器地址端口

设备名称

11 10 10 88 00 10 20 55 53 52 2D

49 4F 38 30 38 2D 47 52 00 00 00

00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 83 D6

写入参数:USR-IO808-GR

网络 IO 设置指令参考 http://h.usr.cn

4. 模拟量

4.1. 电压输入检测

寄存器地址范围:88~89(0x0058~0x0059,电压采集数据)、96~97(0x0060~0x0061,电流

采集数据)

支持功能码:03(读保持寄存器)、04(读输入寄存器)

接线方法:模拟量检测采用公共参考地的方法接线,信号+接+,信号—接—,参考地与电源

地短接;电压检测范围为 0~10V,电流检测范围为 0~20 mA。

以第一路电压检测为例:

数据查询:11 03 00 58 00 01 07 49

返回:11 03 02 10 00 74 47

返回数据为:0x1000,即 4096 mV

注:模拟量检测为电压、电流检测,电路默认为电压检测方式,电流寄存器的值请忽略,

若有需要电流检测 4~20 mA 请联系销售。

4.2. 温度检测

寄存器地址范围:80(0x0050 温度采集数据)

支持功能码:03(读保持寄存器)、04(读输入寄存器)

接线方法:温度检测输入信号为 PT100 信号,接线为 3 线制接线,单独的一根线接+,相通

的两根线接在两个—上面。

温度计算公式:

实际温度 = (返回值 – 10000)/100

数据查询:11 04 00 50 00 01 33 4B

返回:11 04 02 06 92 FA FE

返回数据为:0x0692,即 1682,则实际温度为(1682-10000)/100 = -83.18℃

5. 条件控制

条件控制指令共 8 条,每条指令地址分别为

0x008E~0x0091、0x0092~0x0095、0x0096~0x0099、0x009A~0x009D、

0x009E~0x00A1、0x00A2~0x00A5、0x00A6~0x00A9、0x00AA~0x00AD

网络 IO 设置指令参考 http://h.usr.cn

5.1. 正向输出跟随

期望效果 条件 输入寄存器 输出寄存器 Modbus 指令设

置方法

DO_1 的电平始

终跟随 DI_1 的

电平状态

正向输出跟随:

1(0x01) 0x20(DI_1) 0x00(DO_1)

11 10 00 8E 00

04 08 20 00 03

01 00 00 00 00

72 34

DO_2 的电平始

终跟随 DI_2 的

电平状态

正向输出跟随:

1(0x01) 0x21(DI_2) 0x01(DO_2)

11 10 00 92 00

04 08 21 01 03

01 00 00 00 00

72 D7

DO_1 的电平始

终跟随 DI_1 的

电平状态,DO_3

的电平始终跟随

DI_3 的电平状态

正向输出跟随:

1(0x01)

0x20(DI_1)

0x22(DI_3)

0x00(DO_1)

0x02(DO_3

11 10 00 8E 00

08 10 20 00 03

01 00 00 00 00

22 02 03 01 00

00 00 00 27 98

5.2. 反向输出跟随

期望效果 条件 输入寄存器 输出寄存器 Modbus 指令设

置方法

DO_0 的电平始

终与 DI_0 的电

平状态相反

反向输出跟随:

2(0x01) 0x20(DI_0) 0x00(DO_1)

11 10 00 8E 00

04 08 20 00 03

02 00 00 00 00

36 34

DO_1 的电平始

终与 DI_1 的电

平状态相反

反向输出跟随:

2(0x01) 0x21(DI_1) 0x01(DO_2)

11 10 00 92 00

04 08 21 01 03

02 00 00 00 00

36 D7

5.3. 按键动作

期望效果 条件 输入寄

存器

输出寄

存器 输出动作

Modbus 指令设置

方法

DI_3 执行按键

动作一次,

DO_3 状态翻

转一次

按键动作:

255(0xFF)

0x32

(DI_3)

0x02

(DO_3) 翻转:3(0x03)

11 10 00 96 00 04

08 32 02 03 FF 00

00 00 00 D8 D5

DI_3 执行按键 按键动作: 0x32 0x02 翻转:3(0x03) 11 10 00 8E 00 04

网络 IO 设置指令参考 http://h.usr.cn

动作一次,

DO_3 状态翻

转一次

255(0xFF) (DI_3) (DO_3) 08 32 02 03 FF 00

00 00 00 F8 F5

6. Modbus 功能码详解

缩写、术语 解 释

线圈 设备的继电器

离散量输入 DI 输入

保持寄存器、输入寄存器 设备参数

USR-IO808、USR-IO424T 支持的功能码:

序号 功能码 功能 涉及功能

1 01 (0x01) 读线圈 读 DO-开关量

2 02 (0x02) 读离散量输入 读 DI-开关量

3 03 (0x03) 读保持寄存器 读参数

4 04 (0x04) 读输入寄存器 读参数

5 05 (0x05) 写单个线圈 写单个 DO-开关量

6 06 (0x06) 写单个寄存器 写单个寄存器参数

7 15 (0x0F) 写多个线圈 写多个 DO-开关量

8 16 (0x10) 写多个寄存器 写参数

6.1. 0x01 读线圈:

功能详细说明:读取线圈输出状态。支持寄存器地址:0-15

正常请求指令格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x01

起始地址 2 个字节 0x0000 至 0x000F

线圈数量 2 个字节 1 至 16

校验位 2 个字节 CRC 校验码

网络 IO 设置指令参考 http://h.usr.cn

正常响应格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x01

字节数 1 个字节 N*

线圈状态 N 个字节 n=N 或 N+1

校验位 2 个字节 CRC 校验码

*N=输出数量/8,如果余数不等于 0,那么N = N+1

发送与接收的格式请参考“正常请求指令格式”和“正常响应格式”两个表格(下同)。

例 1:读线圈 1 的线圈状态

发送(16 进制):11 01 00 00 00 01 FF 5A

接收(16 进制):11 01 01 01 94 88

例 2:读线圈 1-6 个线圈状态

发送(16 进制):11 01 00 00 00 06 BE 98

接收(16 进制):11 01 01 03 15 49

例 3:读线圈 1-16 个线圈状态

发送(16 进制):11 01 00 00 00 10 3F 56

接收(16 进制):11 01 02 03 00 78 CF

通常,将一个字节内的比特表示为 MSB 位于左侧,LSB 位于右侧。第一字节的输出从左至

右为 8 至 1。下一个字节的输出从左到右为 16 至 9。当串行发射比特时,从 LSB 向 MSB 传输:

0...8、9...16 等等。

注:若 N%8!=0,用零填充剩余比特(一直到高位端)。

可能出错的情况:

错误情况说明 异常码

Modbus 协议数据设备地址不符,接收端不返回信息 无数据返回

Modbus 协议中起始地址超过 DO 线圈地址最大值

(0x0F)

0x02(非法寄存器地址)

协议中起始地址+线圈数量超过 DO 线圈地址最大值 0x02(非法寄存器地址)

线圈数量为 0 0x03(非法的数据值)

6.2. 0x02 读离散量输入:

功能详细说明:读取离散量输入状态。支持寄存器地址:32-47

正常请求指令格式

字节数 Value

网络 IO 设置指令参考 http://h.usr.cn

设备地址 1 个字节 0x11

功能码 1 个字节 0x02

起始地址 2 个字节 0x0020 至 0x002F

输入数量 2 个字节 1 至 16

校验位 2 个字节 CRC 校验码

正常响应格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x02

字节数 1 个字节 N*

输入状态 N*×1 个字节

校验位 2 个字节 CRC 校验码

*N=输出数量/8,如果余数不等于 0,那么N = N+1

例 1:读 DI 1 的线圈状态

发送(16 进制):11 02 00 20 00 01 BA 90

接收(16 进制):11 02 01 00 A5 48

例 2:读 DI 1-8 个线圈状态

发送(16 进制):11 02 00 20 00 08 7A 96

接收(16 进制):11 02 01 00 A5 48

例 2:读 DI 1-15 个线圈状态

发送(16 进制):11 02 00 20 00 0F 3B 54

接收(16 进制):11 02 02 00 00 78 7B

注:若 N%8!=0,用零填充剩余比特(一直到高位端)。

可能出错的情况:

错误情况说明 异常码

Modbus 协议数据设备地址不符,接收端不返回信息 无数据返回

Modbus 协议传输过程中数据错误,导致 CRC 校验位

与接收端重新计算不同

0x04(校验位错误)

协议发送时 CRC 校验值错误 0x04(校验位错误)

Modbus 协议中起始地址小于 32(0x20)超过 DI 线圈

地址最大值(0x2F)

0x02(非法寄存器地址)

协议中起始地址+线圈数量超过 DI 线圈地址最大值

(0X2F)

0x02(非法寄存器地址)

线圈数量为 0 0x03(非法的数据值)

网络 IO 设置指令参考 http://h.usr.cn

6.3. 0x03 读保持寄存器:

正常请求指令格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x03

起始地址 2 个字节 参考《网络 IO 寄存器分配表》

寄存器数量 2 个字节 1 至 125(0x7D)

校验位 2 个字节 CRC 校验码

正常响应格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x03

字节数 1 个字节 2×N*

寄存器值 N*×2 个字节

校验位 2 个字节 CRC 校验码

*N=寄存器的数量

例 1:读 RS485 模式

发送(16 进制):11 03 00 b0 00 01 87 7d

接收(16 进制):11 03 02 00 02 F8 46

例 2:读 tcpc 远程连接地址(透传云的服务器地址)

发送(16 进制):11 03 10 55 00 20 52 52

接收(16 进制):11 03 40 6C 63 75 6F 2E 64 73 75 2E 72 6E 63 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 25 45

可能出错的情况:

错误情况说明 异常码

Modbus 协议数据设备地址不符,接收端不返回信息 无数据返回

Modbus 协议中起始地址不在《寄存器分配表》中参数

的起始地址

0x02(非法寄存器地址)

读寄存器数量超过 125 0x02(非法寄存器地址)

Modbus 协议中(起始地址+寄存器数量)不在《寄存

器分配表》中参数的结束地址

0x02(非法寄存器地址)

起始地址或者(起始地址+寄存器数量)在《寄存器

分配表》只写或者生产寄存器地址上

0x02(非法寄存器地址)

线圈数量为 0 0x03(非法的数据值)

寄存器值不符合《寄存器分配表》中规定的值 0x03(非法的数据值)

网络 IO 设置指令参考 http://h.usr.cn

6.4. 0x04 读输入寄存器:

正常请求指令格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x04

起始地址 2 个字节 寄存器数量 2 个字节 1 至 125(0x7D)

校验位 2 个字节 CRC 校验码

正常响应格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x04

字节数 1 个字节 2×N*

寄存器值 N*×2 个字节

校验位 2 个字节 CRC 校验码

*N=寄存器的数量

例 1:读 RS485 模式

发送(16 进制):11 04 00 b0 00 01 87 7d

接收(16 进制):11 04 02 00 02 F8 46

例 2:读 tcpc 远程连接地址(透传云的服务器地址)

发送(16 进制):11 04 10 55 00 20 52 52

接收(16 进制):11 04 40 6C 63 75 6F 2E 64 73 75 2E 72 6E 63 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 25 45

可能出错的情况:

错误情况说明 异常码

Modbus 协议数据设备地址不符,接收端不返回信息 无数据返回

Modbus 协议中起始地址不在《寄存器分配表》中参数

的起始地址

0x02(非法寄存器地址)

寄存器数量大于 125 0x02(非法寄存器地址)

Modbus 协议中(起始地址+寄存器数量)不在《寄存

器分配表》中参数的结束地址

0x02(非法寄存器地址)

起始地址或者(起始地址+寄存器数量)在《寄存器

分配表》只写或者生产寄存器地址上

0x02(非法寄存器地址)

线圈数量为 0 0x03(非法的数据值)

寄存器值不符合《寄存器分配表》中规定的值 0x03(非法的数据值)

网络 IO 设置指令参考 http://h.usr.cn

6.5. 0x05 写单个线圈:

正常请求指令格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x05

输出地址 2 个字节 0x0000~0x000F

输出值 2 个字节 0xFF00 或者 0x0000

校验位 2 个字节 CRC 校验码

正常响应格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x05

输出地址 2 个字节 0x0000~0x000F

输出值 2 个字节 0xFF00 或者 0x0000

校验位 2 个字节 CRC 校验码

例 1:写线圈 1 的状态

发送(16 进制):11 05 00 00 00 00 CF 5A

接收(16 进制):11 05 00 00 00 00 CF 5A

例 2:写线圈 2 的状态

发送(16 进制):11 05 00 01 FF 00 DF 6A

接收(16 进制):11 05 00 01 FF 00 DF 6A

注:使用该功能码写单个输出为 ON 或 OFF。十六进制值 FF 00 请求输出为 ON。十六进制值

00 00 请求输出为 OFF。其它所有值均是非法的,并且对输出不起作用。

可能出错的情况:

错误情况说明 异常码

Modbus 协议数据设备地址不符,接收端不返回信息 无数据返回

Modbus 协议传输过程中数据错误,导致 CRC 校验位

与接收端重新计算不同

0x04(校验位错误)

协议发送时 CRC 校验值错误 0x04(校验位错误)

Modbus 协议中起始地址超过 DO 线圈地址最大值

(0x0F)

0x02(非法寄存器地址)

协议中起始地址+线圈数量超过 DO 线圈地址最大值 0x02(非法寄存器地址)

输出值不为 0xFF00 或者 0x0000 0x03(非法的数据值)

线圈数量为 0 0x03(非法的数据值)

网络 IO 设置指令参考 http://h.usr.cn

6.6. 0x06 写单个寄存器:

正常请求指令格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x06

寄存器地址 2 个字节 寄存器值 2 个字节

校验位 2 个字节 CRC 校验码

正常响应格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x06

寄存器地址 2 个字节

寄存器值 2 个字节 校验位 2 个字节 CRC 校验码

例 1:写 RS485 模式

发送(16 进制):11 06 00 B0 00 01 4B 7D

接收(16 进制):11 06 00 B0 00 01 4B 7D

例 2:写 debug 开关

发送(16 进制):11 06 00 B6 00 01 AB 7C

接收(16 进制):11 06 00 B6 00 01 AB 7C

可能出错的情况:

错误情况说明 异常码

Modbus 协议数据设备地址不符,接收端不返回信息 无数据返回

Modbus 协议中起始地址不是《寄存器分配表》中单个

寄存器的参数的地址

0x02(非法寄存器地址)

寄存器值不符合《寄存器分配表》中规定的值 0x03(非法的数据值)

起始地址在《寄存器分配表》中为只读 0x02(非法寄存器地址)

写地址为生产寄存器 0x02(非法寄存器地址)

6.7. 0x0F 写多个线圈:

正常请求指令格式

字节数 Value

设备地址 1 个字节 0x11

网络 IO 设置指令参考 http://h.usr.cn

功能码 1 个字节 0x0F

起始地址 2 个字节 0x0000 至 0x000F

输出数量 2 个字节 1 至 16

字节数 1 个字节 N*

输出值 N*×1 个字节

校验位 2 个字节 CRC 校验码

注 2.7: N*=输出数量/8,如果余数不等于 0,那么N = N+1

正常响应格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x0F

起始地址 2 个字节 输出数量 2 个字节

校验位 2 个字节 CRC 校验码

例 1:写 DO 5 状态

发送(16 进制):11 0F 00 04 00 01 01 01 1F 9B

接收(16 进制):11 0F 00 04 00 01 D7 5A

例 2:写 DO 1-16 状态

发送(16 进制):11 0F 00 B6 00 01 AB 7C

接收(16 进制):11 0F 00 B6 00 01 AB 7C

可能出错的情况:

错误情况说明 异常码

Modbus 协议数据设备地址不符,接收端不返回信息 无数据返回

Modbus 协议传输过程中数据错误,导致 CRC 校验位

与接收端重新计算不同

0x04(校验位错误)

协议发送时 CRC 校验值错误 0x04(校验位错误)

Modbus 协议中起始地址超过 DO 线圈地址最大值

(0x0F)

0x02(非法寄存器地址)

协议中起始地址+线圈数量超过 DO 线圈地址最大值 0x02(非法寄存器地址)

线圈数量为 0 0x03(非法的数据值)

输出的数量与字节数不符合注 2.7 0x03(非法的数据值)

输出值所占字节数不等于 N* 0x03(非法的数据值)

6.8. 0x10 写多个寄存器:

正常请求指令格式

字节数 Value

网络 IO 设置指令参考 http://h.usr.cn

设备地址 1 个字节 0x11

功能码 1 个字节 0x10

起始地址 2 个字节 0x0000 至 0xFFFF

寄存器数量 2 个字节 0x0001 至 0x0078

字节数 1 个字节 2×N*

寄存器值 N*×2 个字节 值

校验位 2 个字节 CRC 校验码

*N=寄存器数量

正常响应格式

字节数 Value

设备地址 1 个字节 0x11

功能码 1 个字节 0x10

起始地址 2 个字节 0x0000 至 0xFFFF

寄存器数量 2 个字节 1 至 123(0x7B)

校验位 2 个字节 CRC 校验码

例 1:写 RS485 模式

发送(16 进制):11 10 00 B0 00 01 02 00 01 B0 60

接收(16 进制):11 10 00 B0 00 01 02 BE

例 2:写 username(字符串): “www.usr.cn”

发送(16 进制):11 10 10 78 00 08 10 77 77 2E 77 73 75 2E 72 6E 63 00 00 00 00 00 00 90 62

接收(16 进制):11 10 10 78 00 08 47 86

例 3(0x03 功能码):读 username(字符串): “www.usr.cn”

发送(16 进制):11 03 10 78 00 08 c2 45

接收(16 进制):11 03 10 77 77 2E 77 73 75 2E 72 6E 63 00 00 00 00 00 00 DC DA

可能出错的情况:

错误情况说明 异常码

Modbus 协议数据设备地址不符,接收端不返回信息 无数据返回

Modbus 协议中起始地址不在《寄存器分配表》中参数

的起始地址

0x02(非法寄存器地址)

Modbus 协议中(起始地址+寄存器数量)不在《寄存

器分配表》中参数的结束地址

0x02(非法寄存器地址)

起始地址或者(起始地址+寄存器数量)在《寄存器

分配表》只读或者生产寄存器地址上

0x02(非法寄存器地址)

线圈数量为 0 0x03(非法的数据值)

寄存器值不符合《寄存器分配表》中规定的值 0x03(非法的数据值)

寄存器数量*2 不等于字节数 0x03(非法的数据值)

字节数与实际协议寄存器值所占字节数不符 0x03(非法的数据值)

网络 IO 设置指令参考 http://h.usr.cn

7. 异常码

Modbus 异常码:

错误类型 异常码

设备地址不符合 无返回

非法功能码 0x01

非法寄存器地址 0x02

非法数据 0x03

指令错误响应格式

字节数 Value

设备地址 1 个字节 设备地址

差错码 1 个字节 0x80+功能码

异常码 1 个字节 01 或 02 或 03

校验位 2 个字节 CRC 校验码

异常码说明:

0x01:非法的功能码,设备不支持请求的功能码。

0x02:非法的数据地址,请求的数据地址存在设备不支持的地址。

0x03:非法的数据值,请求的数据不符合协议或数据不在可设置范围内。

注:设备地址错误,当前设备不返回数据。