-
-
lxbogr 发表于 2024/6/12 20:18:11
每个Modbus-RTU设备在通讯时都有一个唯一的地址(Unit Identifier),这个地址用于在通讯时区分不同的设备。
父串口的基本参数(如波特率、数据位、停止位、校验位等)需要正确配置,以确保所有子设备都能正常通讯。
通过编写一个程序或脚本,向父串口发送广播消息(通常是一个带有功能码03或04的读请求,但Unit Identifier设置为0或255,这取决于具体实现),然后监听来自子设备的响应。
响应中的Unit Identifier字段将指示是哪个子设备发送的响应。
记录并统计响应中的不同Unit Identifier数量,即可得到子设备的数量。
在扫描过程中,需要设置合理的超时时间,以避免等待无响应的设备过长时间。
示例流程(伪代码):
初始化串口参数。
循环发送广播消息(例如,使用功能码03或04)。
监听并接收响应。
解析响应数据,提取Unit Identifier。
统计并记录不同的Unit Identifier数量。
如果在指定时间内未收到响应或遇到错误,则进行超时或错误处理。
循环结束,输出子设备数量。
引用 lxbogr 2024/6/12 20:18:11 发表于2楼的内容
-
-
-
xzr2004xzr | 当前状态:在线
总积分:410 2024年可用积分:266
注册时间: 2005-01-27
最后登录时间: 2024-11-21
-
xzr2004xzr 发表于 2024/6/12 20:21:59
总数肯定是你一个一个添加上去的,自己写个常量。添加的子设备通道里有个HMI默认通道是连接状态,BOOL量的,你给连接个实时变量。循环策略里写脚本判断算一下数量。(这方法不能区分故障和离线,当广播的方式也区分不了)
引用 xzr2004xzr 2024/6/12 20:21:59 发表于3楼的内容
-
-
-
-
zpjames1127 | 当前状态:在线
总积分:489 2024年可用积分:297
注册时间: 2006-08-15
最后登录时间: 2024-11-13
-
zpjames1127 发表于 2024/6/12 20:22:31
可以通过你的图片方式进行配置,总数就是你简历的设备数,有几个就分配几个,但是要注意MODBUS最大从站数,以及轮询通讯速度的问题,对于说通讯故障以及实际设备情况可以参考 通讯的返回数据进行判断, 比如返回值一直不变或者一直为0,多久之后就可以认为该设备通讯故障,设备通讯数-1 供参考!
引用 zpjames1127 2024/6/12 20:22:31 发表于4楼的内容
-