Modbus POE ETH IO 8CH 使用教程

产品参数

参数规格
供电电压DC 7 ~ 36 V
供电方式PoE 网口,DC 5.5*2.1 电源接口 或 接线端子 (7 ~ 36 V)
通信接口PoE 网口,支持 IEEE 802.3af 标准
数字输入8DI,5 ~ 36 V,无源输入/有源输入 (NPN 型或 PNP 型),内置双向光耦
数字输出8DO,5 ~ 40 V,开漏输出,输出负载 500 mA/通道 (MAX)
Modbus 协议Modbus RTU 协议或 Modbus TCP 协议

指示灯说明

指示灯状态说明
RUN 灯网口运行指示灯,网口工作正常后,会输出周期为 2 秒的方波。
STA 灯MCU 指示灯,MCU 正常工作时闪烁。
TXD 灯发送指示灯,发送数据时灯亮。
RXD 灯接收指示灯,接收数据时灯亮。
左网口绿色灯网口 1 连接以太网后亮。
右网口绿色灯网口 2 连接以太网后亮。
左网口黄色灯TCP 连接建立后黄灯亮,可用于模块是否和上位机软件建立通讯链路。
右网口黄色灯数据活动灯,当网口有数据传输时,黄色灯状态会改变,可以用于判断是否有数据传输。

基本功能

支持通过以太网发送 Modbus RTU 协议指令读取开关量输入,从而根据输入控制数字量输出。


接线说明

网口接线说明


将模块通过网线连接到局域网,通过 7~36V 电源端口供电或者通过 POE 供电。两个网口功能一样,均可用于网口通讯和级联。

数字量输入接线


DI1-DI8 为 8 通道信号输入端,DGND 为信号端地。DICOM 为输入信号公共端,可接悬空也可电源正极或电源负极,可直接从供电电源取电,也可接独立电源供电。

  • DICOM 不接悬空:干接点无源输入


  • DICOM 接电源正极:低电平触发,NPN 型湿接有源输入,电压 5V-30V DC

  • DICOM 接电源负极:高电平触发,PNP 型湿接有源输入


数字量输出接线

输出为 NPN 达林顿晶体管输出。DOCOM 为续流二极管公共端,接输出电源正极。接线图如下:



模块参数配置

模块在通讯前需要先配置参数,例如 IP 地址、串口格式、Modbus 协议等。支持以下两种配置方式:

配置方式优点缺点
Vircom 软件可配置参数更多,无需预先知道 IP 地址需要安装软件
Web 浏览器无需安装软件需预先知道设备 IP 地址,可配置参数较少
建议

首次配置推荐使用 Vircom 软件方式。

注意
  1. 两种配置方式可任选其一,首次测试建议使用 Vircom 软件方式配置。
  2. 首次配置建议只修改 IP 地址,其他参数保持默认;修改串口参数将导致无法通讯。
  3. 模块支持 Modbus RTU 和 Modbus TCP 两种协议。在"高级选项 → 转换协议"中可切换,默认为"无"(即 Modbus RTU 协议)。首次配置不建议修改。
  4. 若选择 Modbus TCP 协议,必须使用 Vircom 软件配置,并将网关类型设置为"非存储型 Modbus 网关",否则通讯异常。

Vircom 软件方式配置

将模块连接好硬件并接入网络,运行 Vircom 软件(安装 Vircom 的计算机须与模块处于同一局域网)。

操作如下:

  1. 点击 设备管理

  2. 点击 自动搜索,软件将自动识别局域网内的设备

  3. 选择设备,然后点击 编辑设备 或者 直接双击搜索到的设备

  4. 设置设备工作参数:

    • 将“IP 模式”修改为静态分配地址,设置 IP 地址,注意输入的静态 IP 地址须未被其他设备使用,而且需要和电脑在同一局域网。

    • 工作模式为 TCP 服务器。串口设置默认为 115200,不能修改。

    • 在“高级选项”中的“转换协议”,默认为“无”,即默认使用 modbus rtu 协议;如果选择“Modbus_TCP 协议”,则使用 modbus tcp 协议通讯。

    • 点击“更多高级选项...”选择 Modbus 网关类型为“非存储型 Modbus 网关”。

  5. 设置完成后,点击 Modify Setting 修改设置

  6. 点击 重启设备 ,等待模块重启,新的设置生效。

    注意:首次配置建议只修改 IP 地址,其他参数不要修改。

    具体见下图:



    注意

    默认的 Modbus 网关类型为"存储型",会自动多次发送查询指令,可能导致主控芯片无法及时响应。请务必设置为非存储型 Modbus 网关


协议设置

注意:首次配置建议使用默认 Modbus RTU 协议,不需要修改。

模块虽然通过网口传输数据,但是支持 Modbus RTU 和 Modbus TCP 两种 Modbus 协议。默认数据是透明传输,即默认使用 Modbus RTU 协议。

Modbus TCP 协议设置

在“高级选项”中的“转换协议”可以设置为“Modbus TCP 协议”。此时主控的 Modbus RTU 协议将转为 Modbus TCP 协议再通过网口传输。


此时设备端口自动变为 502,此时用户可以使用 Modbus TCP 工具连接上串口服务器的 IP 的 502 端口

点击“更多高级选项...”选择 Modbus 网关类型为“非存储型 Modbus 网关”。


Modbus RTU 协议设置

在“高级选项”中的“转换协议”可以设置为“无”,改为使用 Modbus RTU 协议。

点击“更多高级选项...”选择 Modbus 网关类型为“非存储型 Modbus 网关”。

注意:默认的 modbus 网关类型为存储型方式,会自动多次发送查询指令,可能会导致主控芯片响应不过来,导致查询指令不影响。故需要设置为非存储型 Modbus 网关


虚拟串口设置

模块通过网口传输数据 (TCP/UPD 协议),为了能够让用户已有开发好的串口软件也能使用网口通讯,需要添加虚拟串口,若不需要可跳过此部分。

  • 首先安装虚拟串口驱动 Virtual-serial-port
  • Vircom 和用户程序在一台计算机上运行。
  • Vircom 虚拟一个 COM 口,让这个 COM 口映射到网口,并连接到串口服务器。当用户程序使用 COM 通讯时可以通过 Vircom 串口服务器发到用户串口设备

下面演示这个操作步骤:

  • 点击 Vircom 主界面的“串口管理”,然后点击“添加”,选择添加 COM2(其中 COM2 须是计算机原来不存在的 COM 口)。

  • 然后进入设备管理,并双击需要和 COM2 绑定的设备。如图 所示,在左上角的“虚拟串口”列表中选择 COM2。然后点击“修改设置”,再点击“重启设备”。


  • 返回 Vircom 的主界面。可以看到 COM2 已经和 IP 为 192.168.1.200 的设备联通了。此时可以使用虚拟串口 COM2 代替网口进行通信。


WEB 方式配置

Web 方式无需安装任何软件,可在任意计算机的浏览器中进行配置,但需满足以下条件:

  • 计算机与串口服务器处于同一 IP 段
  • 预先知道串口服务器的 IP 地址

操作步骤:

  1. 在浏览器中输入串口服务器的 IP 地址,例如 http://192.168.1.200 打开如下网页


  2. 在 Password 中输入密码:出厂默认无设置登录密码或登录密码为 123456,无设置登录密码可随便输入一个密码,点击 Login 按钮登录。设置密码可登录后,在”修改网页登录密码”处设置生效:


  3. 在出现的网页中可以修改串口服务器参数。

  4. 修改参数后点击“提交修改”按钮。

注意:系统出厂默认已添加网页设置功能,如果覆盖了配置界面页面文件,导致网页无法打开,需要重新下载网页文件。


软件测试

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

SSCOM 串口调试助手

Modbus RTU 指令

注:模块默认配置为 Modbus RTU 指令

  1. 打开串口调试助手窗口
  2. 端口号选择 TCPClient
  3. 根据上面 Vircom 设置修改远程 IP 和端口号
  4. 点击“连接”按钮连接 TCP 服务端
  5. 连接成功后网口绿色灯将亮起。
  6. 点击多字符串打开多条字符串发送窗口,此时默认显示的为 Modbus RTU 指令,点击对应的功能即可发送对应的命令。
  7. 如果使用下方自定义输入框发送命令,则需要加校验选择 ModbusCRC16

Modbus TCP 指令

注:如果想设置为 Modbus TCP 指令,则需要更改指令

  1. 在多条字符串发送栏中点击导入 ini 按钮

  2. 选择 modbus tcp.ini 文件导入 Modbus TCP 指令。
    注意:如果提示“A component named HEX0 already exists”弹窗报错。则需要关闭软件重新打开,软件会重新加载文件刷新按钮。


  3. 成功导入后显示如下,点击对应的功能即可发送对应的命令。 注意:modbus tcp 不需要 CRC 校验,加校验选择 None。


更加详细的 Modubs 指令请查看请查看 开发协议

Modbus Poll 软件

读取配置

  • 串口软件不方便观察数据,可以选择 Modbus Poll 软件 读取数据。下载并安装 Modbus Poll 软件。
  • 选择 setup->Read/Write Definition,Slave ID 选择实际设备地址,Function 选择 01 Read Coils 功能码,Quantity 改为 8 通道。点击 OK 确认。

协议选择以及连接配置

  • 连接配置
    • 使用 Modbus RTU 协议时:选择 Connection->Connect Setup,Connection 选择 Modbus RTU/ASCII Over TCP/IP,Mode 选择 RTU, 输入正确的 IP 地址和端口号。点击 OK 连接。

    • 使用 Modbus TCP 协议时:选择 Connection->Connect Setup,Connection 选择 Modbus TCP/IP,输入正确的 IP 地址和端口号。点击 OK 连接。

输出控制与输入读取

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

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

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


开发协议

功能码介绍

功能码备注
01读线圈状态读继电器状态
02读离散输入状态读输入状态
03读保持寄存器读取地址、版本
05写单线圈写单个继电器
06写单寄存器设置波特率,地址
0F写多个线圈写继电器状态
10写多个寄存器设置多个寄存器

寄存器地址介绍

地址 (HEX)地址存储内容寄存器取值权限Modbus 功能码
0x0000 ~ 0x0007通道 1~通道 8 继电器地址0xFF00: 继电器开启;
0x0000: 继电器关闭;
0x5500: 继电器翻转;
读/写0x01, 0x05, 0x0F
0x00FF操作全部继电器0xFF00: 继电器全部开启;
0x0000: 继电器全部关闭;
0x5500: 继电器全部翻转;
0x05
0x0100 ~ 0x0107通道 1~通道 8 继电器翻转地址0xFF00: 继电器翻转;
0x0000: 继电器不变;
0x05, 0x0F
0x01FF操作全部继电器翻转0xFF00: 继电器全部翻转;
0x0000: 继电器全部不变;
0x05
0x0200 ~ 0x0207通道 1~通道 8 继电器闪开延时时间为数据 * 100 ms
数值:0x0007, 延时:7 * 100 ms = 700 ms
0x05
0x0400 ~ 0x0407通道 1~通道 8 继电器闪闭延时时间为数据 * 100 ms
数值:0x0007, 延时:7 * 100 ms = 700 ms
0x05
0x10000 ~ 0x10007通道 1~通道 8 输入地址表示 1~8 输入通道状态0x02
0x41000 ~ 0x41007通道 1~通道 8 继电器控制模式0x0000 ~ 0x0003 四种控制模式读/写0x03, 0x06, 0x10
0x44000设备地址直接存储 Modbus 地址
设备地址:0x0001
0x03
0x48000软件版本转为十进制然后小数点左移两位即表示软件版本
0x0064 = 100 = V1.00
0x03

操作指令介绍

控制单个继电器

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

字段含义备注
01设备地址固定 0x01
0505 指令控制继电器指令
00 00地址要控制继电器的寄存器地址,0x0000 - 0x0007
FF 00指令0xFF00: 继电器开启;
0x0000: 继电器关闭;
0x5500: 继电器翻转;
8C 3ACRC16前 6 字节数据的 CRC16 校验和

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

字段含义备注
01设备地址固定 0x01
0505 指令控制继电器指令
00 00地址要控制继电器的寄存器地址,0x0000 - 0x0007
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
2 号继电器开启 : 01 05 00 02 FF 00 2D FA
2 号继电器关闭 : 01 05 00 02 00 00 6C 0A
3 号继电器开启 : 01 05 00 03 FF 00 7C 3A
3 号继电器关闭 : 01 05 00 03 00 00 3D CA
0 号继电器翻转 : 01 05 00 00 55 00 F2 9A
1 号继电器翻转 : 01 05 00 01 55 00 A3 5A
2 号继电器翻转 : 01 05 00 02 55 00 53 5A
3 号继电器翻转 : 01 05 00 03 55 00 02 9A

控制全部继电器

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

字段含义备注
01设备地址固定 0x01
0505 指令控制继电器指令
00 FF地址固定 0x00FF
FF 00指令0xFF00: 继电器全部开启;
0x0000: 继电器全部关闭;
0x5500: 继电器全部翻转;
BC 0ACRC16前 6 字节数据的 CRC16 校验和

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

字段含义备注
01设备地址固定 0x01
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 08 3D CC

字段含义备注
01设备地址固定 0x01
0101 指令查询继电器状态指令
00 00起始地址继电器起始地址,0x0000 - 0x0007
00 08继电器数量不能超过最大继电器数量
3D CCCRC16前 6 字节数据的 CRC16 校验和

返回码:01 01 01 00 51 88

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

示例 [1 号地址设备]:

发送 : 01 01 00 00 00 08 3D CC //查询全部继电器
返回 : 01 01 01 00 51 88 //全部继电器关闭
发送 : 01 01 00 02 00 01 5C 0A //查询 2 号继电器
返回 : 01 01 01 01 90 48 //1 号继电器开启
发送 : 01 01 00 01 00 03 2D CB //查询 1,2,3 号继电器状态
返回 : 01 01 01 05 91 8B //1、3 号继电器开启,2 号继电器关闭

写继电器状态

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

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

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

字段含义备注
01设备地址固定 0x01
0F0F 指令全部寄存器控制指令
00 00地址继电器起始地址
00 08继电器数量写入继电器数量
54 0DCRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

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

继电器闪开闪闭指令

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

字段含义备注
01设备地址固定 0x01
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设备地址固定 0x01
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 08 79 CC

字段含义备注
01设备地址固定 0x01
0202 指令读取输入状态指令
00 00输入起始地址输入起始地址,0x0000 - 0x0007
00 08寄存器数量读取输入通道数量,不能超过最大输入通道
79 CCCRC16前 6 字节数据的 CRC16 校验和

返回码:01 02 01 00 A1 88

字段含义备注
01设备地址固定 0x01
0202 指令读取输入状态指令
01字节数返回状态信息的所有字节数。
00查询的状态返回的输入状态
Bit0: 起始输入通道状态;
Bit1: 下个输入通道状态,
依次类推,高端空闲位则为零
A1 88CRC16前 4 字节数据的 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 41 61 B8 //1、7 通道输入触发,其余通道没有触发
发送 : 01 02 00 01 00 03 69 CB //查询 2,3,4 输入通道
返回 : 01 02 01 03 E1 89 //2,3 通道输入触发,4 通道没有触发

读取继电器控制模式

发送码:01 03 10 00 00 08 40 CC

字段含义备注
01设备地址固定 0x01
0303 指令读取保持寄存器
10 00寄存器起始地址0x1000 - 0x1007 对应 1~8 输入通道
00 08寄存器数量读取寄存器数量,最多 8 个通道
40 CCCRC16前 6 字节数据的 CRC16 校验和

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

字段含义备注
01设备地址固定 0x01
0303 指令读保持寄存器
10字节数返回状态信息的所有字节数。
00 00 ~ 00 00控制模式表示 1 - 8 继电器控制模式,0x0000 ~ 0x0003 表示四种控制模式
0x0000: 正常模式,继电器受指令直接控制;
0x0001: 联动模式,继电器状态和对应输入通道状态一致;
0x0002: 翻转模式,输入通道输入一个脉冲对应的继电器状态翻转一次
0x0003: 跳变模式,输入通道电平跳变一次对应的继电器状态翻转一次
⚠️ 注意:除了联动模式外,其他模式都同时支持通过指令控制继电器。
E4 59CRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

读取 1-8 号继电器控制模式 : 01 03 10 00 00 08 40 CC
读取 1 号继电器控制模式 : 01 03 10 00 00 01 80 CA
读取 2 号继电器控制模式 : 01 03 10 01 00 01 D1 0A
读取 3-5 号继电器控制模式 : 01 03 10 02 00 03 A0 CB

设置单继电器控制模式

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

字段含义备注
01设备地址固定 0x01
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设备地址固定 0x01
0606 指令写单个寄存器指令
10 00寄存器起始地址0x1000 - 0x1007 对应 1~8 通道继电器控制模式
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 08 10 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 7C B1

字段含义备注
01设备地址固定 0x01
10写多寄存器指令-
10 00寄存器起始地址0x1000 - 0x1007 对应 1~8 通道继电器控制模式
00 08寄存器数量设置寄存器数量,最多 8 个通道
10字节数量-
00 01 ~ 00 01控制模式表示 1 - 8 继电器控制模式,0x0000 ~ 0x0003 表示四种控制模式
0x0000: 正常模式,继电器受指令直接控制;
0x0001: 联动模式,继电器状态和对应输入通道状态一致;
0x0002: 翻转模式,输入通道输入一个脉冲对应的继电器状态翻转一次
0x0003: 跳变模式,输入通道输入状态改变一次对应的继电器状态翻转一次
⚠️ 注意:除了联动模式外,其他模式都同时支持通过指令控制继电器。
7C B1CRC16前 6 字节数据的 CRC16 校验和

返回码: 01 10 10 00 00 08 C5 0F

字段含义备注
01设备地址固定 0x01
10写多寄存器指令-
10 00寄存器起始地址0x1000 - 0x1007 对应 1~8 通道继电器控制模式
00 08寄存器数量设置寄存器数量,最多 8 个通道
C5 0FCRC16前 6 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

设置 1-8 通道继电器为正常模式:01 10 10 00 00 08 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B 5C
设置 1-8 通道继电器为联动模式:01 10 10 00 00 08 10 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 7C B1
设置 3-5 通道继电器为翻转模式:01 10 10 02 00 03 06 00 02 00 02 00 02 4A 4B

读取软件版本指令

发送码:01 03 80 00 00 01 AD CA

字段含义备注
01设备地址固定 0x01
0303 指令读保持寄存器
80 00指令寄存器0x8000 为读取软件版本
00 01字节数固定 0x0001
AD CACRC16前 6 字节数据的 CRC16 校验和

返回码:01 03 02 00 64 B9 AF

字段含义备注
01设备地址固定 0x01
0303 指令读保持寄存器
02字节数返回字节数
00 64软件版本转为十进制然后小数点左移两位即表示软件版本
0x0064 = 100 = V1.00
B9 AFCRC16前 5 字节数据的 CRC16 校验和

示例 [1 号地址设备]:

发送:01 03 80 00 00 01 AD CA
返回:01 03 02 00 C8 B9 D2 //0x00C8 = 200 =V2.00

异常功能码

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

返回码:01 85 03 02 91

字段含义备注
01设备地址0x00 表示广播地址;0x01-0xFF 表示设备地址
85异常功能码异常功能码 = 请求功能码 + 0x80
03字节数异常码
02 91CRC16前 6 字节数据的 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前 6 字节数据的 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 协议。

比如服务器网口收到 00 00 00 00 00 06 01 05 00 00 FF 00 的 Modbus TCP 指令(打开第一个继电器),则主控收到 01 05 00 00 FF 00 8C 3A 的 Modbus RTU 指令。

高级应用

相关资料

1. 技术手册

2. 软件开发资源

技术支持

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

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841