# Modbus TCP协议
适用范围
可用版本:V1.8.0及以后
仅支持博灵A4系列
在1.8.0版本之后,设备支持通过Modbus TCP协议推送告警信息、常用告警控制能力,可应用于工业领域,对接各类PLC、工业自动化设备等。
目前支持的功能如下:
# Modbus寄存器地址表
# 操作说明
目前的功能都在保持寄存器中实现,即Holding Register寄存器,以下简称hr寄存器。**除了hr寄存器之外请不要操作其它寄存器。
**
Slave ID说明
以下操作均在Slave ID 1下进行操作
# 读写权限
40001-40060寄存器为只读40080-40223寄存器为读写- 支持读指令
- 仅支持写多寄存器指令(即
0x10功能码)
# 地址范围分配
- 地址
1-2可显示系统状态,只读 - 地址
80-81为功能位,当功能位存在非0数据位时播报功能不生效 - 地址
100为方式1-指令模版 - 地址
101-223为方式2-自定义声光播报
以下地址默认为保持寄存器地址范围。表中的地址1表示实际寄存器地址的40001。
| 地址(DEC 10进制) | 功能 | 样例 | 备注 |
|---|---|---|---|
| 状态区-只读 | |||
| 1 | 寄存器数据处理Busy | 0x0001 | 1表示正在处理,0表示空闲 |
| 2 | 队列待播报数量 | 0x0000 | |
| 3~79 | 保留未使用 | 0x0000 | |
| 控制功能区-读写 支持写单、寄存器操作 | |||
| 80 | 跳过当前播报功能 | 0x0001 | 设为1时,立刻进行下一条播报。 此寄存器设置值后系统会自动置0。 |
| 81 | 清空播报队列 | 0x0001 | 设为1时,立刻清空待播报的队列。 此寄存器设置值后系统会自动置0。 |
| 82~99 | 保留未使用 | 0x0000 | |
| 修改待机样式功能区-读写支持写单、寄存器操作 | |||
| 95 | Led样式和样式参数 | 0x0015 | 高8位为样式ID 低8位为样式参数 |
| 96 | Led颜色高8位 | 0xccbb | 例如颜色为`#ffccbb`,此处值就是`0x00ff` |
| 97 | Led颜色低16位 | 0x00FF | 例如颜色为`#ffccbb`,此处值就是`0xccbb` |
| 98 | 待机恢复时间(秒) | 0x0010 | 时间为:十六进制转整数(秒) |
| 模板播报功能区-读写支持写单、寄存器操作 | |||
| 99 或 550-599 | 删除由模版指令创建的周期性或无限循环播报 | 0x0001 | 指定需要删除周期性或无限循环播报的模版ID |
| 100 或 500-549 | 模板ID | 0x0001 | 与Modbus模板配置界面ID一致即可调用,如果配置重复播选项报将自动创建重复播报 |
# 注意事项
- 当写入功能位时,播报功能区即使写入数据也不会生效
- 当使用读取操作时,会触发设备更新状态区数据
- 功能位可以同时使用多个标志位,会同时生效
- 当Busy为1时,读取状态位得到的数据可能不准,请在Busy位为0时进行操作
- 由于Modbus写多寄存器指令,最多只能一次写入123个寄存器,所以这也是为什么播报地址在
223就截止了。101-223正是一次写入命令支持的最大寄存器数量。
# 方式1-指令模版
# 功能介绍
1.9.0版本增加该功能,这是一种比较简单的对接方法,只需要在界面中配置好播报模板和对应ID,传入对应ID即可播报。
播报时只需要对100寄存器传入预设的对应ID即可触发一次对应语音播报,无需再发送端进行语音编码,极大减轻对接工作量。
以下是对该功能的介绍。地址表参见
# Modbus TCP配置图:
# 自定义指令配置图:
参数说明:
- 寄存器值:此参数为触发报警灯报警的值
- 播报内容:触发此指令时,报警灯会语音播报自定义的播报内容
- 通知组:触发指令时,报警灯会按照选择的通知组进行变化
注意事项:
- Modbus TCP配置内的端口号支持自定义
- 寄存器值不允许只填写一个0或首字符为0,如值为
0x000a,则正确的输入应为a
# 调试案例
在规则表中添加如下规则
寄存器值:a
报警内容:设备温度超过阈值,请检查
通知组:默认
最终得到的发送数据结构如下,将0x000a数据写入100地址,即可触发一次语音告警
设备温度超过阈值,请检查
# 方式2-自定义声光播报
# 功能介绍
强大的播报方法,可以自定义灯光样式、颜色、播报内容,但构造数据较为复杂,使用写多寄存器实现。
| 地址(DEC 10进制) | 功能 | 样例 | 备注 |
|---|---|---|---|
| 自定义播报功能区-读写 仅支持多寄存器操作 | |||
| 101 | Led样式 | 0x0015 | 参见常规告警Api中LED样式参数 |
| 102 | Led颜色1-高8位 | 0x00FF | 例如颜色为`#ffccbb`,此处值就是`0x00ff` |
| 103 | Led颜色1-低16位 | 0xccbb | 例如颜色为`#ffccbb`,此处值就是`0xccbb` |
| 104 | Led颜色2-高8位 | 0x00FF | 颜色赋值方式同上,如果不需要多色,设为0即可。 |
| 105 | Led颜色2-低16位 | 0xccbb | 颜色赋值方式同上,如果不需要多色,设为0即可。 |
| 106 | Led颜色3-高8位 | 0x00FF | 同上 |
| 107 | Led颜色3-低16位 | 0xccbb | 同上 |
| 108 | Led颜色4-高8位 | 0x00FF | 同上 |
| 109 | Led颜色4-低16位 | 0xccbb | 同上 |
| 110 | 播报时长 | 0x0015 | 设置播报时长 |
| 111 | 铃声编号 | 0x0014 | 设置铃声编号 `0xFFFF`表示不使用铃声 |
| 112 | 播报速率 | 0x0000 | 设置播报速率 |
| 113 | led样式参数 | 0x0301 | 只有Led样式参数为15或20时才有效。 当led样式为`15`时,`高8位`*0.01=`led_style[0]`,低8位为`led_style[1]`。 例如:[0.03, 1]对应的值为`0x0301`。 当led样式为`20`时,`高8位`*0.1=`led_style[0]`,`低8位`*0.1=`led_style[1]` 例如:[1, 1]对应的值为`0x1010`。 |
| 114-115 | 保留未使用 | 0x0000 | |
| 116 | 文本文字1-高8位 | 0x00e4 | 每个文字占用2个寄存器,使用utf-8编码。 例如`你`字,utf-8编码为`e4bda0`,那么116号寄存器存储`utf-8`编码高8位,即`0x00e4` 117号寄存器存储`utf-8`编码低16位,即`0xbda0`。以下的寄存器以此类推。 |
| 117 | 文本文字1-低16位 | 0xbda0 | |
| 118 | 文本文字2-高8位 | 0x00e5 | 每个文字占用2个寄存器,使用utf-8编码。 例如`好`字,utf-8编码为`e5a5bd`,那么118号寄存器存储`utf-8`编码高8位,即`0x00e5` 119号寄存器存储`utf-8`编码低16位,即`0xa5bd`。以下的寄存器以此类推。 |
| 119 | 文本文字2-低16位 | 0xa5bd | |
| 以下直到结束地址均为文本编码内容,以此类推。 | |||
| 223 | 文本文字54-低16位 | 0x0000 | |
# 调试案例
led样式:
15led颜色数组:
['#8a2be2']播报时长:
0提示音:
001播报语速:
0led样式参数:
[0.03,1]语音播报内容:
欢迎使用
最终得到的发送数据结构如下
['0x000f', '0x008a', '0x2be2', '0x0000', '0x0000', '0x0000', '0x0000', '0x0000', '0x0000', '0x0000', '0x0001', '0x0000', '0x0301', '0x0000', '0x0000', '0x00e6', '0xaca2', '0x00e8', '0xbf8e', '0x00e4', '0xbdbf', '0x00e7', '0x94a8']
使用写多寄存器指令,从101地址开始写入,即可实现推送播报。
# Demo下载
提供了Modbus Poll工具的工程文件,以及使用Python实现的通过Modbus
TCP发送告警的脚本。点我下载 (opens new window)