NodeRed解析485流程全新升级-支持Modbus空调设备(241210)

01 前言

本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,请搜索公众号: 智能家居NodeRed和HomeAssistant 即可关注。

02 说明

本次是在Modus解析全新流程核心基础上对私有485协议解析流程进行升级更新,全新升级2.0版!新增中弘小超人空调网关支持,配置定义如下:

Device配置(从站配置)

Add:设置从站地址;

FC:读功能码;

RegStAdd:设置开始寄存器;

QTY:需要读取的寄存器数量;

DevName:自动发现为设备的名称;

analysis配置(寄存器配置)

CH:通道序号,保留定义项,可以任意设置值;

RegAdd:寄存器地址;

FC:写功能;

DrvClass:HA中的设备类别;

entities:HA中的实体名称定义;

Path:MQTT路径,需以“/”结尾;

Notes:HA中显示的中文名称;

Fun:定义空调的功能配置分别为:开关、设置的温度、工作模式、风速模式、当前回风温度;前面的数值为Fun功能值所在Modbus报文的位置,例如报文第4位值为0,则对应power值为0;

Funset:为调用写寄存器功能时的寄存器地址与功能值的对应关系,如果寄存器地址以16进制表示可以在数组前加上0x;

modes:为空调模式显示、选择设置,可根据功能可选功能设置,HomeAssistant支持的模式有:"auto", "dry", "cool", "heat", "off", "fan_only"六种,前面数值对应与模式的关系,例如1: "heat",表示值为1时解析为当前为制热模式;

fan_mode:为风速模式显示、选择设置,可根据功能可选功能设置,HomeAssistant支持的模式有:"auto", "high","medi

### 配置 Node-RED 中的 Modbus RTU (RS485) 通信 要在 Node-RED 中实现 Modbus RTU (RS485) 的通信,可以按照以下方法完成配置: #### 安装必要的节点模块 首先需要安装支持 Modbus 协议的 Node-RED 节点包 `node-red-contrib-modbus`。可以通过 npm 命令来安装该模块: ```bash npm install node-red-contrib-modbus ``` 此模块提供了多种类型的 Modbus 功能节点,包括用于 RTU 和 TCP 的读取和写入操作。 --- #### 创建 Modbus RTU Server 或 Client 配置 在 Node-RED 编辑器中,添加一个新的 Modbus 配置节点并设置其参数为 RS485 模式下的 RTU 类型。以下是具体的配置选项说明: 1. **波特率**: 设置串口通信速率(如 9600, 19200 等),需与目标设备一致[^2]。 2. **数据位**: 通常为 8 位。 3. **停止位**: 可选单个或双停止位,默认为 1。 4. **奇偶校验**: 根据实际需求选择无、奇数或偶数校验。 5. **超时时间**: 设定等待响应的最大时限,建议根据网络环境调整。 6. **地址偏移量**: 如果从零开始计数,则保持默认值即可;如果从一开头编号则相应更改此项。 7. **RTU CRC 校验启用状态**: 对于 Modbus RTU 来说这是必需开启的功能。 这些参数都应在创建新的 modbus-client-server 配置节点时指定好。 --- #### 构建工作流逻辑 构建完整的流程图如下所示: 1. 使用 inject 输入节点触发请求; 2. 将输入连接至已定义好的 modbus 请求节点上; 3. 在输出端接收返回的结果并通过 debug 查看解析后的数值。 下面是一个简单的例子展示如何查询寄存器中的值: ```json [ { "id": "inject-node", "type": "inject", "z": "", "name": "", "props": [ {"p":"payload","v":"","vt":"date"} ], "repeat":"", "crontab":"", "once":false, "onceDelay":0.1, "topic":"", "x":150,"y":100,"wires":[["modbus-request"]] }, { "id": "modbus-request", "type": "modbus request", "z": "", "name": "", "showStatusActivities": true, "logIOActivities": false, "server":"modbus-config-id", // 替换为您的服务器ID "useWriteFile": false, "writeFileDir":"", "writeFileName":"", "delayOnRetries":true, "retriesDelayTime":100, "retryOnFail":true, "maxRetries":3, "unitId":1, "command":"readHoldingRegisters", "address":"40001", "quantity":"10", "swapBytes":false, "swapWordByte":false, "keepSessionOpen":false, "outputDataType":"buffer", "justParse":false, "x":350,"y":100,"wires":[["debug-node"]] }, { "id": "debug-node", "type": "debug", "z": "", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal":"", "statusType":"auto", "x":550,"y":100,"wires":[] } ] ``` 上述 JSON 数据描述了一个基本的工作流实例,其中包含了三个主要部分:注入信号源 (`inject`) -> 发送 Modbus 查询指令(`modbus request`) -> 输出调试信息(`debug`)--- #### 注意事项 当尝试建立基于硬件串行接口上的 Modbus RTU 连接时,请确认计算机具备可用的 RS485 接口或者已经正确设置了 USB 到串行适配器驱动程序,并且分配给它的 COM 端口号已被正确定义在相应的软件环境中。 另外需要注意的是,在某些情况下可能还需要额外考虑电气隔离以及终端匹配电阻等因素以确保稳定可靠的通讯链路质量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值