Modbus-POE-ETH-Relay-(B) 使用教程

说明

  • 本产品是一款工业级以太网接口控制的 8 路继电器模块,带 8 路开关量输入, 采用 Modbus RTU/Modbus TCP 协议,支持 PoE 网口供电,ABS 外壳设计。本产品操作简单,具有通信速度快、稳定、可靠、安全等特点,可适用于各种通信要求较高的工控设备或应用。

用电安全注意事项

  • 本产品须由专业的电工或技术人员作业使用,使用过程中请做好用电安全,防漏电和绝缘等保护措施。
  • 在安装、维护或更换继电器设备之前,请务必关闭电源并拔下插头。
  • 请勿试图拆卸继电器设备,以免损坏设备或导致电击危险。
  • 请妥善安装放置继电器设备产品,请勿在潮湿、过热、易燃坏境中使用,避免因安装或使用不慎,引发安全事故。

产品参数

供电方式PoE 网口,DC 5.5*2.1 电源接口 或 接线端子 (7~36V)
通信接口PoE 网口,支持 IEEE 802.3af 标准
继电器路数8 路
触点类型一常开、一常闭
触点负载≤10A 250V AC 或 ≤10A 30V DC
数字输入8DI,5~36V,无源输入/有源输入 (NPN 型或 PNP 型),
内置双向光耦
Modbus 协议Modbus RTU 协议或 Modbus TCP 协议

指示灯说明

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

基本功能

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

接线说明


将Modbus POE ETH Relay (B)通过网线连接到局域网,通过7~36V电源端口供电或者通过POE供电。
DI1-DI8为8通道信号输入端,DGND为信号端地。COM为输入信号公共端,可接悬空也可电源正极或电源负极,可直接从供电电源取电,也可接独立电源供电。

  • 不接悬空:干接点无源输入
  • 接电源正极:低电平触发,NPN型湿接有源输入,电压5V-30V DC
  • 接电源负极:高电平触发,PNP型湿接有源输入

数字量输入接线


无源干接点接线

  • 无源干接点输入


有源湿接点接线

  • 有源湿接点NPN型输入


  • 有源湿接点PNP型输入


软件安装

Vircom 可用于设备 IP 等参数的配置,以及创建虚拟串口。 如果无需虚拟串口功能,则可以只下载免安装版本配置软件 。

驱动安装需要解压,双击软件安装,若Vircom里的虚拟串口不显示,则重启再次查看。

实例演示

TCP通讯测试

软件准备

上位机设置说明

将模块连接好硬件,并接入网络。运行Vircom软件(安装Vircom的计算机须与模块在同个局域网内)。
操作如下:

  • ① 点击 设备管理
  • ② 点击 自动搜索
  • ③ 软件搜索识别到接入到局域网的设备
  • ④ 选择设备,然后点击 编辑设备 或者 直接双击搜索到的设备
  • ⑤ 设置设备工作参数:
    • 点击“本地IP”按钮识别电脑IP地址,将“IP地址”修改为静态分配地址,注意输入的静态IP地址没有被其他设备使用,而且需要和电脑在同一局域网。
    • 工作模式为TCP服务器。串口设置默认为115200,不能修改。
    • 高级选项中的“转换协议”,默认为无,即使用modbus rtu协议;如果选择Modbus_TCP 协议,则选择,modbus tcp协议。
  • ⑥ 设置完成后,点击 Modify Setting修改设置
  • ⑦ 点击 重启设备 ,等待模块重启,新的设置生效。

具体见下图:

  • 最后点击“修改设置”保存设置并生效。

TCP通讯测试

  • 打开串口调试助手窗口,端口号选择TCPClient,根据上面Vircom设置修改远程IP和端口号,加校验选择ModbusCRC16,点击“连接”按钮连接TCP服务端,连接成功后网口绿色灯将亮起


  • 点击多字符串打开多条字符串发送窗口,点击对应的功能即可发送对应的命令。
  • 详细的控制指令请查看请查看开发协议。

虚拟串口测试

图中的 SSCOM2 是通过 TCP 和串口服务器直接通信的,为了能够让用户已有开发好的串口软件也能和串口服务器通讯,需要在用户程序和串口服务器之间增加一个虚拟串口。如图 所示,Vircom 和用户程序在一台计算机上运行,Vircom 虚拟一个 COM 口,让这个 COM 口对应这个串口服务器。当用户程序打开 COM 通讯时可以通过 Vircom 串口服务器发到用户串口设备。下面演示这个操作步骤:

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


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


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


  • 在电脑上打开,打开对应的端口号,设置波特率为115200,点击多字符串打开多条字符串发送窗口,点击对应的功能即可发送对应的命令。


MODBUS TCP 测试

默认情况下数据是透明传输的,使用Modbus RTU协议。如果需要实现 Modbus TCP 转 RTU,则需要在设备设置对话框中,将转化协议选择为“Modbus TCP 协议”,如下图所示。此时设备端口自动变为 502,此时用户的 Modbus TCP 工具连接上串口服务器的 IP 的 502 端口,发送的Modbus TCP 指令将会转化为 RTU 指令从串口输出。
比如服务器网口收到 00 00 00 00 00 06 01 05 00 00 FF 00 的 Modbus TCP 指令(打开第一个继电器),则主控收到 01 05 00 00 FF 00 8C 3A 的Modbus RTU指令。

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

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

  • 打开Sscom软件,在多条字符串发送栏中点击导入ini按钮,选择modbus tcp.ini文件导入。

如果提示“A component named HEX0 already exists”错误。则关闭软件重新打开,再重新导入文件即可。 

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


  • 关于Modbus TCP转换详细请参考后面Modbus TCP协议部分。

WEB方式配置

使用 Vircom 可以在不同的网段内搜索和配置设备参数,Web 方式配置需要首先保证计算机和串口服务器处于同一个 IP 段,且需要预先知道串口服务器的 IP 地址。但是 Web 配置可以在任何一台没有 Vircom 的计算机上进行。(不同产品网页界面不同,可切换中英文显示)
1.在浏览器中输入串口服务器的 IP 地址,例如 http://192.168.1.200 打开如下网页

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

3.在出现的网页中可以修改串口服务器参数,相关参数可以参考表 4 参数含义。
4.修改参数后点击“提交修改”按钮。
5.如果配置和下载MQTT和Jetson Modbus固件,覆盖了配置界面网页文件,导致配置网页无法打开,请按照以下步骤重新下载网页文件:

关于内置的以太网模块更多详细的使用说明,可参考:RS485 TO ETH (B)用户手册

示例程序

树莓派

将树莓派和ModBus POE ETH Relay模块接入到同一个局域网。
打开树莓派终端,输入以下命令运行程序。
程序正常运行后各个通道依次打开然后依次关闭,最后显示当前输入状态。

sudo apt-get install unzip
wget https://www.waveshare.net/w/upload/d/d5/Modbus_POE_ETH_Relay_B_Code.zip
unzip Modbus_POE_ETH_Relay_B_Code.zip
cd Modbus_POE_ETH_Relay_B_Code

#modbus rtu 协议
vi modbus_rtu.py  #根据实际情况修改IP地址和端口号
sudo python3 modbus_rtu.py

#modbus tcp协议
vi modbus_tcp.py  #根据实际情况修改IP地址和端口号
sudo python3 modbus_tcp.py

注意:运行实例程序需要先修改程序文件,将IP地址和端口号修改为ModBus POE ETH Relay实际IP地址和端口号

Modbus RTU 开发协议

功能码介绍

功能码备注
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继电器闪开延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
0x05
0x0400
……
0x0407
道通1~通道8继电器闪闭延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
0x05
1x0000
……
1x0007
道通1~通道8输入地址表示0~8输入通道状态0x02
4x1000
……
4x1007
道通1~通道8继电器控制模式0x0000~0x0002三种控制模式读/写0x03,0x06,0x10
4x4000设备地址直接存储 Modbus 地址
设备地址:0x0001
0x03
4x8000软件版本转为十进制然后小数点左移两位即表示软件版本
0x0064 = 100 = V1.00
0x03

控制单个继电器

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

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

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

字段含义备注
01设备地址固定0x01
0505指令控制继电器指令
00 00地址要控制继电器寄存器地址,0x0000-0x0008
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-0x0008
00 08继电器数量不能超过最大继电器数量
3D CCCRC16前 6 字节数据的 CRC16 校验和

返回码:01 01 01 00 51 88

字段含义备注
01设备地址固定0x01
0101指令查询继电器状态指令
01字节数返回状态信息的所有字节数。
00查询的状态返回的继电器状态
Bit0:起始继电器状态;
Bit1:下个继电器转态,
依次类推,高端空闲位则为零
8C 35CRC16前 6 字节数据的 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-0x0008
00 08继电器数量写入继电器数量
01字节数量状态字节数
FF继电器状态Bit0:起始继电器状态;
Bit1:下个继电器转态,
依次类推,高端空闲位则为零
BE D5CRC16前 6 字节数据的 CRC16 校验和

返回码:01 0F 00 00 00 01 94 0B

字段含义备注
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~0x08
00 07间隔时间延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
8D B0CRC16前 6 字节数据的 CRC16 校验和

返回码:01 05 02 00 00 07 8D B0

字段含义备注
01设备地址固定0x01
0505指令单个控制指令
02指令02 为是闪开指令,04为闪闭指令
00继电器地址要控制继电器地址,0x00~0x08
00 07间隔时间延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
8D B0CRC16前 6 字节数据的 CRC16 校验和

备注:

闪开闪闭的时间最大设置为0x7FFF

示例[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-0x0008
00 08寄存器数量读取输入通道数量,不能超过最大输入通道
79 CCCRC16前 6 字节数据的 CRC16 校验和

返回码:01 02 01 00 A1 88

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

读取继电器控制模式

发送码: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~0x0002表示三种控制模式
0x0000:正常模式,继电器受指令直接控制;
0x0001:联动模式,继电器状态和对应输入通道状态一致;
0x0002:翻转模式,输入通道输入一个脉冲对应的继电器状态翻转一次
0x0002:跳变模式,输入通道电平跳变一次对应的继电器状态翻转一次
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~0x0002表示三种控制模式
0x0000:正常模式,继电器受指令直接控制;
0x0001:联动模式,继电器状态和对应输入通道状态一致;
0x0002:翻转模式,输入通道输入一个脉冲对应的继电器状态翻转一次
4C CACRC16前6字节数据的CRC16校验和

返回码: 01 06 10 00 00 01 4C CA

字段含义备注
01设备地址固定0x01
0606指令写单个寄存器指令
10 00寄存器起始地址0x1000 - 0x1007对应1~8通道继电器控制模式
00 01控制模式继电器控制模式,0x0000~0x0002表示三种控制模式
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 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
F0 B8CRC16前 6 字节数据的 CRC16 校验和

示例:

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

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协议。

高级应用 - MQTT连云平台

资料

程序

软件

相关资料

FAQ

问题:网口通过Vircom设置的参数忘记了,怎么恢复出厂设置呢?

  • 恢复网口的设置参数,需要拆开外壳,用镊子短接DEF丝印下的焊盘短接5s以上,模块将会复位为 192.168.1.254 的IP。


问题:我们想了解继电器工作温度范围?

工作温度范围是-15℃~70℃


技术支持

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

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841