01 前言
本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,请搜索公众号: 智能家居NodeRed和HomeAssistant 即可关注。
本篇文章的创作灵感来源于一位粉丝朋友的需求。尽管最终未能实现合作,但这一经历为我开拓了新的思路。
在Node-RED中解析485协议设备时,设备的配置基本上手动是逐一进行的。这种方法适用于有少量不同设备的场景,前提是需知道从站地址、设备类型和数据定义等基本信息。然而,在大规模系统中,尤其是在工程集成施工过程中,如果每个项目都采用这种手动配置的方式,势必会降低效率。此外,随着项目规模的扩大,手动配置带来的时间成本和出错风险也会显著增加。因此,寻找更高效的设备配置方法显得尤为重要。
02 适用场景及基本原理
该方案适用于设备数量众多、类型单一且协议已知的批量接入操作。对于Modbus协议设备,系统必须发送正确的请求指令,设备才能返回数据;否则,系统将无法读取任何信息。在设备成功返回数据后,可以根据设备的从站地址计算出设备数量,并依此生成预先定义的数据配置文档。
当然肯定有人会问:是否可以通过协议报文直接识别在线设备类型并实现自动配置?答案是否定的。基于Modbus协议的特性分析,虽然Modbus作为开放的标准化工业通信协议具备良好的互操作性,但其协议架构存在以下技术限制:
设备类型识别限制
协议规范未定义设备类型标识字段,不同厂商设备在功能码实现和数据地址分配上存在显著差异。典型表现为:
-
相同设备类型可能采用不同的寄存器映射方案;
-
不同厂商对功能码的实现存在扩展差异;
数据类型解析障碍
协议数据单元采用原始字节流传输,缺乏元数据描述机制从而存在:
-
数值类型需依赖预设格式解析;
-
数据缩放比例因子等关键参数需通过人工配置获取;
当前可行的设备识别维度仅限于从站地址(Slave ID)这一基础通信参数。完整的设备集成仍需依赖以下人工介入环节:
-
设备特征库的手动维护(厂商提供的设备描述文件)
-
寄存器映射关系的定制化配置
-
数据解析规则的预设定义
这一技术现状源于Modbus协议设计时的轻量化考量,后续衍生的Modbus TCP/IP协议虽扩展了网络传输能力,但未从根本上解决设备自描述机制的缺失问题。
03 NodeRed自动扫描流程设计
基于上述特性,首先需要生成查询状态指令。由于从站地址未知,但从站的总数量是已知的,因此我们可以设定从站地址的范围为1到254。这个数量可以根据实际情况进行调整。接下来,根据协议类型,我们可以自动生成该范围内的所有查询指令。如果设备在线,将会返回相应的数据。此时,流程将自动记录返回的数据。当返回的设备数量达到预设的标准后,流程将停止并生成配置数据。
以上是设计的流程图,下面就用一个例子来说明使用方法及效果展示:首先设定从站总数量值为4,再设定从站检索范围1~10:
完成以上操作后,“从站检索节点”则会根据设定的逻辑自动生成对应数量的查询指令,如下图所示:
此时串口或串口服务器收到请求指令后则会返回状态数据,“报文解析-生成设备数据”节点则会根据预设好的设备类型、功能定义等生成流程配置数据,当然此流程配置数据是按照我开发的流程格式生成。
下图是生成配置数据输出演示:
在完成以上操作后把配置文件复制到我开发的流程配置节点中,即可实现Homeassistant批量接入,在HA中实体和设备命名都是根据设定的设备名称_id的方式自定进行,无须手动配置
04 流程获取途径
因本自动扫描配置方案对于一般用户而言意义不大,大多是用于批量设置提供工作效率,带有商业性质,故不再公开,有需要的朋友可以私聊合作!
请关注公众号: 智能家居NodeRed和HomeAssistant 私聊我!