Skip to content

Modbus TCP

Modbus TCP 面向 PLC 与组态软件场景,支持模板 ID 触发与多寄存器自定义播报。

设备支持通过Modbus TCP协议推送告警信息、常用告警控制能力,可应用于工业领域,对接各类PLC、工业自动化设备等

  • 推送告警信息(等同于基础功能
  • 通过指定ID触发一次预设的语音告警
  • 查询当前告警队列数量
  • 跳过当前告警
  • 清空播报队列
  • 指令模版

只需要在界面中配置好播报模板和对应ID,传入对应ID即可播报。

播报时只需要对100寄存器传入预设的对应ID即可触发一次对应语音播报,无需再发送端进行语音编码,极大减轻对接工作量。 以下是对该功能的介绍。 地址表参见

参数说明

  • 寄存器值:此参数为触发报警灯报警的值
  • 播报内容:触发此指令时,报警灯会语音播报自定义的播报内容
  • 通知组:触发指令时,报警灯会按照选择的通知组进行变化

注意事项

  • Modbus TCP配置内的端口号支持自定义
  • 寄存器值不允许只填写一个0或首字符为0,如值为0x000a,则正确的输入应为a

在规则表中添加如下规则

寄存器值:a

报警内容:设备温度超过阈值,请检查

通知组:默认

最终得到的发送数据结构如下,将0x000a数据写入100地址,即可触发一次语音告警

设备温度超过阈值,请检查

强大的播报方法,可以自定义灯光样式、颜色、播报内容,但构造数据较为复杂,使用写多寄存器实现。

目前的功能都在保持寄存器中实现,即Holding Register寄存器,以下简称hr寄存器

除了hr寄存器之外请不要操作其他寄存器。

led样式:15

led颜色数组:['#8a2be2']

播报时长:0

提示音:001

播报语速:0

led样式参数:[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地址开始写入,即可实现推送播报。

注意事项

  • 当写入功能位时,播报功能区即使写入数据也不会生效
  • 当使用读取操作时,会触发设备更新状态区数据
  • 功能位可以同时使用多个标志位,会同时生效
  • 当Busy为1时,读取状态位得到的数据可能不准,请在Busy位为0时进行操作
  • 由于Modbus写多寄存器指令,最多只能一次写入123个寄存器,所以这也是为什么播报地址在223就截止了。 101-223正是一次写入命令支持的最大寄存器数量。

提供了Modbus Poll工具的工程文件,以及使用Python实现的通过Modbus TCP发送告警的脚本。

官网 - 资源 - 博灵 Modbus TCP 协议调试 Demo

读写权限

  • 40001-40060寄存器为只读
  • 40080-40223寄存器为读写
  • 支持读指令
  • 支持写单寄存器和写多寄存器指令(即 0x060x10 功能码)

地址范围分配

以下地址默认为保持寄存器地址范围。表中的地址1表示实际寄存器地址的40001

地址(DEC 10进制) 功能 样例 备注
状态区-只读
1 寄存器数据处理Busy 0x0001 1表示正在处理,0表示空闲
2 队列待播报数量 0x0000
3~79 保留未使用 0x0000
控制功能区-读写 支持写单、多寄存器操作
80 跳过当前播报功能 0x0001 设为1时,立刻进行下一条播报。
此寄存器设置值后系统会自动置0。
81 清空播报队列 0x0001 设为1时,立刻清空待播报的队列。
此寄存器设置值后系统会自动置0。
82~98 保留未使用 0x0000
模板播报功能区-读写支持写单、多寄存器操作
99 或 550-599 删除由模版指令创建的周期性或无限循环播报 0x0001 指定需要删除周期性或无限循环播报的模版ID
100 或 500-549 模板ID 0x0001 与Modbus模板配置界面ID一致即可调用,如果配置重复播选项报将自动创建重复播报
自定义播报功能区-读写 仅支持多寄存器操作
101 Led样式 0x0015 参见常规Api中 [Led样式参数](/model-q/once-api/#led样式参数)
102 Led颜色1-高8位 0x00FF 例如颜色为`#22ffcc`,此处值就是`0x0022`
103 Led颜色1-低16位 0xccbb 例如颜色为`#22ffcc`,此处值就是`0xffcc`
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 设置播报时长,功能等同[常规Api-构造请求-play_time参数](/model-q/once-api/#接口配置)
111 铃声编号 0x0014 设置铃声编号,功能等同[常规Api-构造请求-tone参数](/model-q/once-api/#接口配置)
`0xFFFF`表示不使用铃声
112 播报速率 0x0000 设置播报速率,功能等同[常规Api-构造请求-tts_speed参数](/model-q/once-api/#接口配置)
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