NodeRed中Modbus数据解析流程原理设计与实现

 01 前言

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

02 概述

Modbus设备的数据解析有很多种方法,在智能家居中一般采用的是HomeAssistant和NodeRed,这两个平台各有千秋,有各自的优缺点,至于平台的选择根据实际需求和喜好来决定,而我更喜欢用NodeRed。

03 为何不愿使用第三方节点

当然NodeRed门槛稍稍有点高,初次接触都会一头雾水,因为大家都习惯了图形化的操作界面,虽然说NodeRed采用拖拽式操作也比较直观,但是如果想实现更多的功能就得使用诸多的第三方节点。

第三方节点依赖于广大开发者的分享和维护,在升级NodeRed版本时如果节点维护更新不及时,可能造成无法使用的尴尬;其二,三方节点大多无用功能太多,很多时候安装一个节点而只是使用到其中的一个功能;其三,有时为了实现某些特定功能则需要使用很多节点来完成,显得流程臃肿。

基于以上原因,我更喜欢用function来完成复杂的功能,流程显得更简洁,运行更高效,免配置的HA自动发现功能应该算是一大亮点,希望推广我的流程和理念使更多人使用并受益。

04 解析流程原理与实现

相信在NodeRed中99%都是采用Modbus节点完成的,而我则没有使用过,主要原因是它不能和HA无缝对接(当然可以使用HA节点),而且设置过程也较为繁琐,我的初衷是用简单的流程完成想要的所有功能,下面是我在用的流程图:

图片

Node-RED中使用Modbus读取数据并将其写入数据库,可参考以下步骤和方法: ### 1. 读取Modbus数据 可借助`node-red-contrib-modbus`插件来实现Modbus TCP设备的通信,以读取数据。此插件提供了`Modbus-Read`等节点,能对Modbus设备的数据进行读取。以使用Modbus TCP协议从设备读取数据为例,可使用`Modbus-Read`节点,配置好设备的IP地址、端口、寄存器地址等参数,即可实现数据的读取 [^1]。 ### 2. 数据处理 从Modbus设备读取的数据,可能需要经过处理才能写入数据库。可使用`Function`节点对数据进行处理,例如提取所需的字段、转换数据类型等。以下是一个简单的JavaScript代码示例,用于提取`msg.payload`中的数据: ```javascript // 假设msg.payload包含从Modbus读取的数据 var data = msg.payload; // 处理数据,例如提取特定字段 var processedData = data.someField; msg.payload = processedData; return msg; ``` ### 3. 写入数据库 根据所使用的数据库类型,选择相应的节点将数据写入数据库。以下为不同数据库的示例: #### MySQL数据库 若使用MySQL数据库,可使用`node-red-node-mysql`节点。配置好数据库连接信息(如主机、端口、用户名、密码、数据库名)后,使用`Function`节点构建SQL插入语句,再通过`mysql`节点将数据写入数据库。示例代码如下: ```javascript var insertOne = "INSERT INTO plc_test(plc,create_time) VALUES ('%d',Now())"; var newMsg = { "topic": util.format(insertOne, msg.payload) }; return newMsg; ``` 此代码构建了一个插入语句,把`msg.payload`中的数据插入到`plc_test`表中 [^4]。 #### MSSQL数据库 若使用MSSQL数据库,可使用`Modbustcp Mssql`节点。通过`Function`节点提取数据,当值变化时才往后传递数据,然后将数据写入数据库。需注意,若表中只有一条数据,才可以不加条件地使用`UPDATE`语句 [^2]。 ### 4. 性能优化 在配置节点时,可选择`Switch icon shows state of the input`模式,入口有数据过来后,不会触发`switch`按钮的点击事件,避免在每次读数据后都触发一次`Modbus Write`节点,从而提升性能 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值