Modbus RTU Relay 32CH

来自Waveshare Wiki
跳转至: 导航搜索

说明

Modbus RTU Relay
{{{name2}}}
{{{name3}}}
功能简介
特性 RS485 继电器模块
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 RS485

用电安全注意事项

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

硬件连接

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

Modbus-RTU-Relay-32CH-details-7.jpg

实例演示

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

SSCOM串口调试助手

  • 下载SSCOM串口调试助手并在电脑上打开,打开对应的端口号,设置波特率为9600,点击多字符串打开多条字符串发送窗口,点击对应的功能即可发送对应的命令,

Modbus-RTU-Relay-2-1.png

  • 如果需要发送其他命令则选择HEX发送,加检验选择ModbusCRC16校验,输入命令的前六个字节点击发送则会自动添加CRC校验码。

Modbus-RTU-Relay-3.png

  • 详细的控制指令请查看请查看开发协议。

Modbus Poll软件

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

Modbus-RTU-Relay-32CH-1.jpg

  • 选择Connection->Connect...,选择对应的串口,波特率为9600,八位无校验模式。点击OK连接。

Modbus-RTU-Analog-Input-3.png

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

Modbus-RTU-Relay-16CH-2.jpg

程序测试

注意:RS485不可以直接接到树莓派的串口否则可能烧毁设备,需要加485电平转换,树莓派建议搭配RS485 CAN HAT模块使用,NUCLEO-F103RB和Arduino建议搭配RS485 CAN Shield模块使用

树莓派

打开树莓派终端,输入以下指令进入配置界面

sudo raspi-config
选择Interfacing Options -> Serial,关闭shell访问,打开硬件串口
L76X GPS Module rpi serial.png

然后重启树莓派:

sudo reboot

打开/boot/config.txt文件,找到如下配置语句使能串口,如果没有,可添加在文件最后面。

enable_uart=1

对于树莓派3B用户,串口用于蓝牙,需要注释掉:

#dtoverlay=pi3-miniuart-bt

然后重启树莓派:

sudo reboot

将RS485 CAN HAT模块插到树莓派,把ModBus RTU Relay模块和RS485 CAN HAT模块的A与B对应连接
如果使用的是其他的485设备,确定连线A-A,B-B即可
运行如下命令运行程序

sudo apt-get install unzip
wget https://www.waveshare.net/w/upload/7/74/Modbus_RTU_Relay_32CH_Code.zip
unzip Modbus_RTU_Relay_32CH_Code.zip
cd Modbus_RTU_Relay_32CH_Code/Python3
sudo python3 main.py

STM32

注意:STM32的例程是基于NUCLEO-F103RB和RS485 CAN Shield模块。

1.下载示例程序,Modbus_RTU_Relay_32CH_Code\STM32\MDK-ARM路径找到STM32的工程文件Modbus Relay.uvprojx,双击打开STM32工程文件,注意使用前先确保电脑已经安装好keil5软件
Modbus-RTU-Relay-stm32-1.png
2.通过stm32下载调试器连接 stm32 到电脑。编译下载程序到开发板即可。
Modbus-RTU-Relay-stm32-2.png
3.将RS485 CAN Shield模块装在stm32上,RS485 CAN Shield模块上的485_A通过导线与Modbus RTU Relay上的RS485_A相连,RS485 CAN Shield模块上的485_B通过导线与Modbus RTU Relay上的RS485_B相连。然后对Modbus RTU Relay和stm32依次上电。

4.上电后,串口会输出发送的命令,可通过串口助手观察,同时继电器会按顺序(如 1→2→3→4)依次导通,全部导通后,再按顺序(如 1→2→3→4)依次关闭。可通过 LED 指示灯观察继电器是否正常吸合。

Modbus-RTU-Relay-stm32-3.png

Arduino

注意:Arduino例程是基于UNO PLUS和RS485 CAN Shield模块。
1.下载示例程序,Modbus_RTU_Relay_32CH_Code\Arduino\Modbus_RTU_Relay路径找到Arduino的工程文件Modbus_RTU_Relay.ino,双击打开Arduino工程文件,注意使用前先确保电脑已经安装好Arduino IDE 软件。
Modbus-RTU-Relay-arduino-1.png

2.通过 USB 线连接 Arduino 到电脑,在Arduino IDE软件的Tools->Board项选择Arduino的设备型号,Tools->Port选择Arduino连接到电脑的COM口。
3.看到右下角连接到电脑的提示后,点击编译、烧录程序,烧录完成之后
Modbus-RTU-Relay-arduino-2.png

4.将RS485 CAN Shield模块装在Arduino上,RS485 CAN Shield模块上的485_A通过导线与Modbus RTU Relay上的RS485_A相连,RS485 CAN Shield模块上的485_B通过导线与Modbus RTU Relay上的RS485_B相连。然后对Modbus RTU Relay和Arduino 依次上电。

5.上电后,串口会输出发送的命令,可通过串口助手观察,同时继电器会按顺序(如 1→2→3→4)依次导通,全部导通后,再按顺序(如 1→2→3→4)依次关闭。可通过 LED 指示灯观察继电器是否正常吸合。

注:下图数据是包含空格和换行的ASCII 码,非实际发送数据。
Modbus-RTU-Relay-arduino-3.png

PLC

注意:PLC的例程是基于SIMATIC S7-200 SMART。

1.下载示例程序,Modbus_RTU_Relay_32CH_Code\PLC路径找到PLC的工程文件modbus_rtu.smart,双击打开PLC工程文件,注意使用前先确保电脑已经安装好STEP 7-MicroWIN SMART软件
Modbus-RTU-Relay-plc-1.png
2.通过网线连接PLC到电脑。点击下载,
Modbus-RTU-Relay-plc-2.png
3.在通信弹窗选择通信接口,查找到自己的设备,点击确认
Modbus-RTU-Relay-plc-3.png
4.在下载弹窗勾选程序块、数据块、系统块,然后点击下载即可。
Modbus-RTU-Relay-plc-4.png
5.将PLC模块上的485_A通过导线与Modbus RTU Relay上的RS485_A相连,PLC模块上的485_B通过导线与Modbus RTU Relay上的RS485_B相连。然后对Modbus RTU Relay上电。

6.Modbus RTU Relay上电后,在STEP 7-MicroWIN SMART软件的,找到上方菜单栏的 “PLC” 选项卡,切换至该选项卡后,在下方 “操作” 区域,点击绿色的 “RUN” 按钮 ,执行使 PLC 进入运行状态的操作
Modbus-RTU-Relay-plc-5.png
7.PLC运行后,继电器会按顺序(如 1→2→3→4)依次导通,全部导通后,再按顺序(如 1→2→3→4)依次关闭。可通过 LED 指示灯观察继电器是否正常吸合。

开发协议 V2

功能码介绍

功能码 功能说明 备注
01 读线圈状态 读继电器状态
03 读保持寄存器 读取地址、版本
05 写单线圈 写单个继电器
06 写单寄存器 设置波特率,地址
0F 写多个线圈 写全部继电器

寄存器地址介绍

地址(HEX) 地址存储内容 寄存器取值 权限 Modbus 功能码
0x0000
……
0x001F
道通1~通道32继电器地址 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
读/写 0x01,0x05,0x0F
0x00FF 操作全部继电器 0xFF00:继电器全部开启;
0x0000:继电器全部关闭;
0x5500:继电器全部翻转;
0x05
0x0100
……
0x011F
道通1~通道32继电器翻转 0xFF00:继电器翻转;
0x0000:继电器不变;
0x05,0x0F
0x01FF 翻转全部继电器 0xFF00:继电器全部翻转;
0x0000:继电器全部不变;
0x05
0x0200
……
0x021F
道通1~通道32继电器闪开 延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
0x05
0x0400
……
0x041F
道通1~通道32继电器闪闭 延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
0x05
4x2000 串口参数 高八位为校验方式:0x00~0x02
低八位为波特率方式:0x00~0x07
读/写 0x03,0x06
4x4000 设备地址 直接存储 Modbus 地址
设备地址:0x0001-0x00FF
读/写 0x03,0x06
4x8000 软件版本 转为十进制然后小数点左移两位即表示软件版本
0x0064 = 100 = V1.00
0x03

Modbus RTU指令介绍

控制单个继电器

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

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
05 05指令 控制继电器指令
00 00 地址 要控制继电器的寄存器地址,0x0000 - 0x001F
FF 00 指令 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
8C 3A CRC16 前6字节数据的CRC16校验和

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

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
05 05指令 控制继电器指令
00 00 地址 要控制继电器寄存器地址,0x0000-0x001F
FF 00 指令 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
8C 3A CRC16 前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 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
05 05指令 控制继电器指令
00 FF 地址 固定0x00FF
FF 00 指令 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
BC 0A CRC16 前6字节数据的CRC16校验和

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

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
05 05指令 控制继电器指令
00 FF 地址 固定0x00FF
FF 00 指令 0xFF00:继电器开启;
0x0000:继电器关闭;
0x5500:继电器翻转;
BC 0A CRC16 前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 20 3D D2

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
01 01指令 查询继电器状态指令
00 00 继电器起始地址 继电器的寄存器地址,0x0000 - 0x001F
00 20 继电器数量 读取继电器数量,不能超过最大继电器数量
3D D2 CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 01 04 00 00 00 00 FB D1

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
01 01指令 查询继电器状态指令
04 字节数 返回状态信息的所有字节数。
00 00 00 00 查询的状态 返回的继电器状态
继电器状态为小端格式,低字节在前,高字节在后
Bit0:起始继电器状态;
Bit1:下个继电器转态,
依次类推,高端空闲位则为零
FB D1 CRC16 前 6 字节数据的 CRC16 校验和

示例:[1号地址设备]

发送 : 01 01 00 00 00 20 3D D2     //查询全部继电器
返回 : 01 01 04 00 00 00 00 FB D1  //全部继电器关闭
发送 : 01 01 00 01 00 03 2D CB     //查询1,2,3号继电器状态
返回 : 01 01 01 05 91 8B           //1、3号继电器开启,2号继电器关闭
发送 : 01 01 00 04 00 0C 7D CE     //查询4-15号继电器
返回 : 01 01 02 0F 00 BC 0C        //4-7号继电器开启,8-15号继电器关闭

写继电器状态

发送码:01 0F 00 00 00 20 04 FF FF FF FF C5 1C

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
0F 0F指令 写继电器状态指令
00 00 继电器起始地址 要控制继电器的寄存器地址,0x0000 - 0x001F
00 20 继电器数量 操作继电器数量,不能超过最大继电器数量
04 字节数量 状态字节数
FF FF FF FF 继电器状态 继电器状态为小端格式,低字节在前,高字节在后
Bit0:起始继电器状态;
Bit1:下个继电器转态,
依次类推,高端空闲位则为零
C5 1C CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 0F 00 00 00 20 54 13

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
0F 0F指令 全部寄存器控制指令
00 00 继电器起始地址 要控制继电器的寄存器地址,0x0000 - 0x001F
00 20 继电器数量 操作继电器数量
54 13 CRC16 前 6 字节数据的 CRC16 校验和

示例:[1号地址设备]

继电器全部开启 : 01 0F 00 00 00 20 04 FF FF FF FF C5 1C
继电器全部关闭 : 01 0F 00 00 00 20 04 00 00 00 00 C4 88
0-1开;3-31关  : 01 0F 00 00 00 20 04 03 00 00 00 C4 CC

继电器闪开闪闭指令

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

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
05 05指令 单个控制指令
02 闪开闪闭 02 为是闪开指令,04为闪闭指令
00 继电器地址 要控制的继电器地址,0x00~0x1F
00 07 间隔时间 延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
闪开闪闭的时间最大设置为0x7FFF
8D B0 CRC16 前 6 字节数据的 CRC16 校验和

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

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
05 05指令 单个控制指令
02 闪开闪闭 02 为是闪开指令,04为闪闭指令
00 继电器地址 要控制继电器地址,0x00~0x1F
00 07 间隔时间 延时时间为数据*100ms
数值:0x0007,延时:7*100MS = 700MS
闪开闪闭的时间最大设置为0x7FFF
8D B0 CRC16 前 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 06 20 00 00 05 42 09

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
06 06指令 设置波特率,设备地址
20 00 波特率寄存器 0x2000为设置波特率
00 校验方式 0x00为无校验,0x01为偶检验,0x02为奇校验
05 波特率数值 波特率数值对应
0x00 : 4800
0x01 : 9600
0x02 : 19200
0x03 : 38400
0x04 : 57600
0x05 : 115200
0x06 : 128000
0x07 : 256000
42 09 CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 06 20 00 00 05 43 D8

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
06 06指令 设置波特率,设备地址
20 00 波特率寄存器 0x2000为设置波特率
00 校验方式 0x00为无校验,0x01为奇检验,0x02为偶校验
05 波特率 波特率数值对应
0x00 : 4800
0x01 : 9600
0x02 : 19200
0x03 : 38400
0x04 : 57600
0x05 : 115200
0x06 : 128000
0x07 : 256000
42 09 CRC16 前 6 字节数据的 CRC16 校验和

示例:[1号地址设备]

设置波特率  4800 :01 06 20 00 00 00 82 0A
设置波特率  9600 :01 06 20 00 00 01 43 CA
设置波特率115200 :01 06 20 00 00 05 42 09

设置设备地址指令

发送码:01 06 40 00 00 01 5D CA

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
06 06指令 设置波特率,设备地址
40 00 设备地址寄存器 0x4000为设置设备地址
00 01 设备地址 设置的设备地址,0x0001-0x00FF
5D CA CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 06 40 00 00 01 5D CA

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
06 06指令 设置波特率,设备地址
40 00 设备地址寄存器 0x4000为设置设备地址
00 01 设备地址 设置的设备地址,0x0001-0x00FF
5D CA 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为读取设备地址
00 01 字节数 固定0x0001
90 1B CRC16 前 6 字节数据的 CRC16 校验和

返回码:00 03 02 00 01 44 44

字段 含义 备注
00 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
03 03指令 读取软件版本,读取设备地址指令
02 字节数 返回字节数
00 01 设备地址 设置的设备地址,0x0001-0x00FF
44 44 CRC16 前 6 字节数据的 CRC16 校验和

示例:[2号地址设备]

发送 : 00 03 40 00 00 01 90 1B
返回 : 00 03 02 00 02 04 45     //地址0x02

读取软件版本指令

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

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
03 03指令 读取软件版本,读取设备地址指令
80 00 软件版本寄存器 0x4000为读取设备地址,0x8000为读取软件版本
00 01 字节数 固定0x0001
AD CA CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 03 02 01 2C B8 09

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
03 03指令 读取软件版本,读取设备地址指令
02 字节数 返回字节数
01 2C 软件版本 转为十进制然后小数点左移两位即表示软件版本
0x012C = 300 = V3.00
B8 09 CRC16 前 6 字节数据的 CRC16 校验和

示例:

发送:01 03 80 00 00 01 AD CA
返回:01 03 02 01 2C B8 09       //0x012C = 300 =V3.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 设备繁忙 设备当前正忙无法执行请求的操作

FAQ

技术支持


联系人:邓工
EMAIL:3005766107@qq.com
QQ:3005766107
微信:扫下方二维码添加
Dhz-wx.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证