Modbus RTU Analog Output 8CH (B)

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

说明

Modbus RTU Analog Output 8CH (B)
{{{name2}}}
{{{name3}}}
功能简介
特性 电压模拟量输出模块
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 RS485

硬件说明

  • AON为模拟输出端,AGND为模拟地,输出范围为0-10V。

Modbus-RTU-Analog-Output-B-1.jpg
特别注意:输入电压必须要大过输出电压,如果输入电压不足可能会导致输出电压不足。例如要输出10V则输入电压最少要大于15V。

版本对比

目前模拟输出系列有两个版本,分别默认为电流输出和电压输出。

  • Modbus RTU Analog Output 8CH输出电流,范围:0-20mA
  • Modbus RTU Analog Output 8CH (B)输出电压,范围:0-10V

Modbus-RTU-Analog-Output-8CH-compare.jpg

硬件连接

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

Modbus-RTU-Analog-Output-8CH-hw-connected.jpg

软件测试

SSCOM串口调试助手

  • 下载SSCOM 串口调试助手并在电脑上打开,打开对应的端口号,设置波特率为9600,选择hex发送和接收。
    发送如下指令,正常情况通道1就会输出1V电压。
01 04 00 00 00 08 F1 CC

Modbus-RTU-Analog-Input-1.png

  • 如果需要发送其他命令则选择HEX发送,加检验选择ModbusCRC16校验,输入命令的前六个字节点击发送则会自动添加CRC校验码。
    例如发送如下指令,可以设置通道1输出5V电压。
01 06 10 00 00 03

Modbus-RTU-Analog-Input-7.png

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

Modbus Poll软件

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

Modbus-RTU-Analog-Output-4.png

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

Modbus-RTU-Analog-Input-3.png

  • 连接正常后则可以设置1-8通道模拟输出电压,单位mV,范围0-10000mV,即0-10V。

Modbus-RTU-Analog-Output-5.png

程序测试

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

树莓派

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

sudo raspi-config
选择Interfacing Options -> Serial Port, 选择Yes打开硬件串口

然后重启树莓派:

sudo reboot

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

sudo apt-get install unzip
sudo apt-get install python3-pip
pip install modbus_tk
wget https://www.waveshare.net/w/upload/4/42/Modbus_RTU_Analog_Output_Code.zip
unzip Modbus_RTU_Analog_Output_Code.zip
cd Modbus_RTU_Analog_Output_Code/Python3
sudo python3 modbus.py

程序正常运行后全部通道将输出5V电压。

STM32

STM32的例程是基于NUCLEO-F103RB和RS485 CAN Shield模块。
找到STM32程序文件目录并打开STM32工程。注意使用前先确保电脑已经安装好keil5软件,下载将程序下载到开发板即可。
程序正常运行后全部通道将输出5V电压。

Arduino

Arduino例程是基于NUO PLUS和RS485 CAN Shield模块。
使用Arduino IDE 打开程序,选择对应的开发板然后下载程序。
程序正常运行后全部通道将输出5V电压。

开发协议 V2

功能码介绍

功能码 备注
03 读取保持寄存器
06 写单个保持寄存器
10 写多个保持寄存器

寄存器地址介绍

地址(HEX) 地址存储内容 寄存器取值 权限 Modbus 功能码
4x0000
……
4x0007
道通1~通道8输出数据 数值为无符号十六进制 读/写 0x03,0x06,0x10
4x2000 串口参数 高八位为校验方式:0x00~0x02
低八位为波特率方式:0x00~0x07
读/写 0x03,0x06
4x4000 设备地址 直接存储 Modbus 地址
设备地址:0x0001-0x00FF
读/写 0x03,0x06
4x8000 软件版本 转为十进制然后小数点左移两位即表示软件版本
0x0064 = 100 = V1.00
0x03

操作指令介绍

设置单通道输出指令

发送码:01 06 00 00 03 E8 89 74

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
06 06指令 写单个寄存器指令
00 00 寄存器地址 0x0000 - 0x0007对应1~8通道输出数据
03 E8 设置数值 设置值为16进制,单位mV,高位在前,低位在后
0x03E8 = 1000mV,即1V
89 74 CRC16 前6字节数据的CRC16校验和

返回码: 01 06 00 00 03 E8 89 74

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
06 06指令 写单个寄存器指令
00 00 寄存器地址 0x0000 - 0x0007对应1~8输入通道数据类型
03 E8 设置数值 设置值为16进制,单位mV,高位在前,低位在后
0x03E8 = 1000mV,即1V
89 74 CRC16 前6字节数据的CRC16校验和

示例:[1号地址设备]

设置  1通道数据类型为1V : 01 06 00 00 03 E8 89 74
读取  2通道数据类型为5V : 01 06 00 01 13 88 D5 5C

设置多通道输出指令

发送码:01 10 00 00 00 08 10 03 E8 03 E8 03 E8 03 E8 03 E8 03 E8 03 E8 03 E8 3C 05

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
10 写多寄存器指令
00 00 寄存器起始地址 0x0000 - 0x0007对应1~8输出通道
00 08 寄存器数量 设置寄存器数量,不能超过最大通道数量
10 字节数量 设置输出字节数
03 E8
……
03 E8
指令 起始通道模拟量输出
……
最后通道模拟量输出
设置值为16进制,单位mV,高位在前,低位在后
0x03E8 = 1000mV,即1V
3C 05 CRC16 前6字节数据的CRC16校验和

返回码: 01 10 00 00 00 08 C1 CF

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
10 写多寄存器指令
00 00 寄存器起始地址 0x0000 - 0x0007对应1~8输出通道
00 08 寄存器数量 设置寄存器数量,不能超过最大通道数量
C1 CF CRC16 前6字节数据的CRC16校验和

示例:[1号地址设备]

设置1-8通道输出1V : 01 10 00 00 00 08 10 03 E8 03 E8 03 E8 03 E8 03 E8 03 E8 03 E8 03 E8 3C 05
设置3-5通道输出2V : 01 10 00 02 00 03 06 07 D0 07 D0 07 D0 84 0E

读取通道输出指令

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

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
03 03指令 读取保持寄存器
00 00 寄存器起始地址 0x0000 - 0x0007对应1~8输入通道
00 08 寄存器数量 读取寄存器数量,不能超过最大通道数量
40 CC CRC16 前 6 字节数据的 CRC16 校验和

返回码:01 03 10 03 E8 03 E8 03 E8 03 E8 03 E8 03 E8 03 E8 03 E8 C1 91

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
03 03指令 读保持寄存器
10 字节数 返回状态信息的所有字节数。
03 E8
……
03 E8
输出数值 起始通道模拟量输出
……
最后通道模拟量输出
设置值为16进制,单位mV,高位在前,低位在后
0x03E8 = 1000mV,即1V
C1 91 CRC16 前 6 字节数据的 CRC16 校验和

示例:[1号地址设备]

读取1-8通道数据类型 : 01 03 00 00 00 08 44 0C
读取  1通道数据类型 : 01 03 00 00 00 01 84 0A
读取  2通道数据类型 : 01 03 00 01 00 01 D5 CA
读取3-5通道数据类型 : 01 03 00 02 00 03 A4 0B

设置波特率指令

发送码: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

字段 含义 备注
00 设备地址 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

字段 含义 备注
01 设备地址 0x00表示广播地址;0x01-0xFF表示设备地址
03 03指令 读取软件版本,读取设备地址指令
80 00 指令寄存器 0x4000为读取设备地址,0x8000为读取软件版本
00 01 字节数 固定0x0001
8F CA 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 设备繁忙 设备当前正忙无法执行请求的操作

FAQ


技术支持


联系人:林工
EMAIL:services@waveshare.net
电话:0755-83040712
QQ:3004506335
微信:扫下方二维码添加
Lxw.jpg

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