0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Node-RED中如何用ModbusTCP采集存储Influxdb

IOTRouter 来源:成都纵横智控 作者:成都纵横智控 2024-06-28 16:26 次阅读

(以下来源成都纵横智控公众号授权更多可见-https://www.iotrouter.com-智控

-需求概述

注:使用Influxdb数据库节点,需要插上micro sd卡才可以

本章节主要实现一个流程:EG8200每10秒采集一次Modbus TCP数据存入Influxdb数据库,并且每分钟从Influxdb数据库中取6条数据打包上报。

Modbus TCP数据采集此处不做过多赘述,可参考其他案例介绍。下文默认已经采集到Modbus TCP数据。

-数据上报格式


[{
  "time": "2023-12-20 14:50:13",
  "value1": 12573,
  "value2": 12568,
  "value3": 12561,
  "value4": 12557,
  "value5": 12552,
  "value6": 12545,
  "value7": 12540,
  "value8": 12535
}, {
  "time": "2023-12-20 14:50:13",
  "value1": 12573,
  "value2": 12568,
  "value3": 12561,
  "value4": 12557,
  "value5": 12552,
  "value6": 12545,
  "value7": 12540,
  "value8": 12535
}, {
  "time": "2023-12-20 14:50:13",
  "value1": 12574,
  "value2": 12569,
  "value3": 12562,
  "value4": 12558,
  "value5": 12553,
  "value6": 12546,
  "value7": 12541,
  "value8": 12536
}, {
  "time": "2023-12-20 14:50:14",
  "value1": 12574,
  "value2": 12569,
  "value3": 12562,
  "value4": 12558,
  "value5": 12553,
  "value6": 12546,
  "value7": 12541,
  "value8": 12536
}, {
  "time": "2023-12-20 14:50:14",
  "value1": 12575,
  "value2": 12570,
  "value3": 12563,
  "value4": 12559,
  "value5": 12554,
  "value6": 12547,
  "value7": 12542,
  "value8": 12537
}, {
  "time": "2023-12-20 14:50:14",
  "value1": 12575,
  "value2": 12570,
  "value3": 12563,
  "value4": 12559,
  "value5": 12554,
  "value6": 12547,
  "value7": 12542,
  "value8": 12537
}]

-需求分析

第一步:配置并连接数据库

第二步:创建一个数据库

第三步:指定使用新创建的数据库

第四步:读取Modbus TCP数据并存入指定表中

第五步:从数据库中读取6个数据

第六步:将读取出来的数据打包

第七步:将打包的数据发送到MQTT

-需求实现

第一步:配置并连接数据库

首次连接EG8200的Influxdb数据库按照默认的配置即可无需修改

wKgZomZ-cZiADoSDAAE5lU7egz0085.png

第二步:创建一个数据库

创建一个数据库需要使用到sql语句 CREATE DATABASE myDatabase ,这条语句的意思是创建一个名字叫做myDatabase的数据库。按照下面视频的方式创建,日志窗口打印[empty],说明数据库创建成功

wKgaomZ-cbaAdOVQAAEI_SMs1_o583.png

第三步:指定使用新创建的数据库

在第一步创建了一个名字叫做myDatabase的数据库,现在需要使用这个数据库,将Influxdb的一个配置名Database改成myDatabase

wKgZomZ-ce-AUa25AAEOLCE9lPY623.png

第四步;DO能控制的设备

Modbus TCP数据采集此处不做过多赘述,这里已经配置好Modbus TCP详细使用请参考

从节点库里面拿出一个写时序数据库节点,选择前面步骤已经添加的配置信息,并将表名填写在Measurement,

这里使用myTable作为表名

wKgZomZ-chyAXf-uAAFMg4pamUA342.png

第五步:从数据库中读取6个数据

通过函数节点构造sql读取指令,通过时间查询最近6条数据

wKgZomZ-cieAFKQ7AAFRrGKBIRY017.png

上面视频中使用到的函数代码


if (global.get("startTime") == undefined || global.get("startTime") == null) global.set("startTime", new Date().getTime())
var startTime = global.get("startTime")
var temp = new Date(startTime).toISOString()
var table = "myTable"
msg.query = "SELECT * FROM" + " "" + table + "" " + " WHERE time > '" + temp + "' LIMIT 6"
return msg;

第六步:将读取出来的数据打包

使用函数节点将数据封装成对应的json字符串

wKgZomZ-ckqAIAH5AAGKUggqfVg185.png

上面视频中使用到的函数代码


function dateFormat(fmt, timestamp) {
    let ret;
    const opt = {
        "Y+": timestamp.getFullYear().toString(), // 年
        "m+": (timestamp.getMonth() + 1).toString(),  // 月
        "d+": timestamp.getDate().toString(), // 日
        "H+": timestamp.getHours().toString(), // 时
        "M+": timestamp.getMinutes().toString(), // 分
        "S+": timestamp.getSeconds().toString() // 秒
        // 有其他格式化字符需求可以继续添加,必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}
// const fmt = dateFormat("YYYY-mm-dd HH:MM:SS", new Date())
var dataList = msg.payload
if (dataList.length == 0) {
    node.error("数据库无数据请检查")
    return
}
dataList.forEach(item => item.time = dateFormat("YYYY-mm-dd HH:MM:SS", new Date(item.time)))
global.set("startTime", new Date(dataList[dataList.length - 1].time).getTime() + 1000)
msg.payload = JSON.stringify(dataList)
return msg

第七步:将打包的数据发送到MQTT

新增MQTT发布节点

客户端ID:网关SN

用户名:网关SN

密码:EG87654321

发布主题:${sn}/send

wKgZomZ-co2AC7gLAAGYf4IaLNw616.png

-总结

本章节介绍了一个相对复杂的流程,旨在表述网关所具备的能力,因此并未对程序的安全性、稳定性、灵活性等方面做优化。通过理解本流程,相信你已经对网关的可视化编程有了一定的熟悉。接下来,深入学习每个节点的功能用法吧,掌握它们将会为你制作更复杂的流程提供更多的选择和可能!

-注意

MQTT配置节点导出时,不会携带用户名和密码。因此导入时需要重新录入用户名和密码

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4298

    浏览量

    85807
  • node
    +关注

    关注

    0

    文章

    23

    浏览量

    5934
  • ModbusTCP
    +关注

    关注

    0

    文章

    111

    浏览量

    4388
收藏 人收藏

    评论

    相关推荐

    Node-RED实现电表数据采集并上云

    本案例将通过Docker容器安装DLT-645协议插件采集实现电表数据上云,前面已经讲过ModbusRTU协议通过Node-RED上云,如果采用支持ModbusRTU电表可以参考之前的“Docker
    的头像 发表于 06-07 08:21 2822次阅读
    <b class='flag-5'>Node-RED</b>实现电表数据<b class='flag-5'>采集</b>并上云

    基于node-Red和Raspberry Pi的物联网实验设计

    基于node-Red和Raspberry Pi的物联网实验设计,都是小实验,有人会吗?
    发表于 03-06 12:11

    Node-Red是什么?如何去学习Node-Red

    Node-Red是什么?如何去学习Node-Red?有哪些方法可以去学习Node-Red
    发表于 07-02 06:11

    新手求助如何去学习Node-Red

    如何去学习Node-Red?怎样去安装dashboard这个UI控件库?
    发表于 09-01 06:53

    第2部分:使用Node-RED的程序

    Understand how to use the Node-RED* interface to add sensors and send data to the AWS* cloud.
    的头像 发表于 10-26 07:17 6680次阅读

    运用 Node-RED 开发 LoRa 应用

    之前的课程LoRa G-IoT模块基础应用,我们已经知道如何将从LoRa得到的数值上传服务器,本文我们将学习撰写Node-RED,将数据传送到自己设计的网页监测接口。
    的头像 发表于 12-25 17:54 799次阅读

    Raspberry Pi利用Node-RED控制LED

    今天的教程,我们将研究如何使用 Node-RED 树莓派上部署简单的项目。
    的头像 发表于 09-01 16:00 5977次阅读
    <b class='flag-5'>在</b>Raspberry Pi<b class='flag-5'>中</b>利用<b class='flag-5'>Node-RED</b>控制LED

    Node-REDARM嵌入式工控机上的应用

    BL302 ARM嵌入式工控机Node-RED使用教程
    的头像 发表于 03-02 18:45 4979次阅读
    <b class='flag-5'>Node-RED</b><b class='flag-5'>在</b>ARM嵌入式工控机上的应用

    Node-red启动电脑摄像头案例

    通过Node-red实现打开电脑自带的摄像头或者USB摄像头
    的头像 发表于 06-01 06:50 5208次阅读
    <b class='flag-5'>Node-red</b>启动电脑摄像头案例

    搭建Node-RED环境,将开发板变身为工业控制网关——米尔基于NXP LS1028A开发板

    控制系统LED五、系统命令控制GPIO六、Node-RED控制GPIO七、开发板上的S3按键使用八、Node-RED中使用S3按键控制LED九、Node-RED使用I
    的头像 发表于 12-05 09:47 3664次阅读
    搭建<b class='flag-5'>Node-RED</b>环境,将开发板变身为工业控制网关——米尔基于NXP LS1028A开发板

    物联网与ESP32、Node-REDInfluxDB与WebSocket

    电子发烧友网站提供《物联网与ESP32、Node-REDInfluxDB与WebSocket.zip》资料免费下载
    发表于 07-13 09:51 0次下载
    物联网与ESP32、<b class='flag-5'>Node-RED</b>和<b class='flag-5'>InfluxDB</b>与WebSocket

    Node-RED安装本地教程

    Node-RED是一个基于流的开发工具,广泛应用于物联网(IoT)、家庭自动化和其他数据驱动的应用程序。它通过图形化的编程界面,使得非专业程序员也能轻松上手。本文将介绍如何在本地环境安装Node-RED,帮助你快速开始项目开发
    的头像 发表于 06-24 12:10 2065次阅读
    <b class='flag-5'>Node-RED</b>安装本地教程

    Node-RED如何制作漂亮的界面

    Node-RED深度融合(如成都的纵横智控和苏州稳联科技将Node-RED与物联网网关深度融合,打造可视化、硬件加持的物联网开发平台,使用者无需编码即可快速实现各类应用,开拓物联网无限可能)。未来或许将会有越来越多的企业步入此行业
    的头像 发表于 06-26 16:50 4581次阅读
    <b class='flag-5'>Node-RED</b>如何制作漂亮的界面

    Node-RED初学者教程-三分钟学习

    通过这短短三分钟的教程,你已经掌握了Node-RED的基本操作。你可以利用Node-RED的强大功能来创建更复杂的数据流和自动化任务,无论是物联网应用、API集成还是数据处理。Node-RED简化了编程过程,让开发更直观、更高效
    的头像 发表于 06-27 17:09 2752次阅读
    <b class='flag-5'>Node-RED</b>初学者教程-三分钟学习

    使用Node-RED实现ModBus TCP到RTU的转换

    ,需要将ModBusTCP数据转换为ModBusRTU格式或者是将ModBusRTU格式转换为ModBusTCP数据。本文将详细介绍如何使用Node-RED来实现M
    的头像 发表于 08-02 08:21 815次阅读
    使用<b class='flag-5'>Node-RED</b>实现ModBus TCP到RTU的转换