使用IOT-Tree对接工业现场PLC并把采集数据记录到关系数据库中

我的之前文章:使用IOT-Tree Server和InfluxDB对采集数据进行记录 专门讲述使用时序数据库InfluxDB对物联网系统进行数据记录。

但是,大量的工业现场应用要求使用传统的关系数据库进行数据记录。例如:生产线每个环节都需要记录产量、合格品和NG品数量。每次记录都必须把当前PLC中的多个计数值同时获取并且形成关系数据库表中的一条记录。

虽然也可以使用时序数据库进行相同功能的实现,但技术的惯性和业务系统方便整合的角度有着大量的需求。

注:我之前文章:使用IOT-Tree消息流实现实时数据同步:标签实时数据--关系数据库表。这篇文章讲述的是IOT-Tree接入现场各种设备之后的所有标签数据,通过消息流特定节点,配置定时同步的功能。关系数据库中对应的数据表每条记录对应一个数据标签Tag,并且会根据定时器不断的更新,并没有做任何的历史记录。

本文介绍的是使用IOT-Tree Server内部【关系数据库】消息流模块,对工业现场接入的设备数据进行采集和记录,满足后续的数据统计分析需要。

本文对如何接入工业现场各种PLC(如西门子,欧姆龙等)不做展开了,请参考下面文章或其他IOT-Tree的文档。

使用IOT-Tree Server通过PPI协议连接西门子PLC S7-200 Smart

使用IOT-Tree Server连接西门子PLC S7-300/1200/1500

使用IOT-Tree Server通过MC协议连接三菱Q系列PLC

使用IOT-Tree Server通过FINS协议连接欧姆龙CP2E-N系列PLC

IOT-Tree完成一个具体项目的过程,非常详细,如下:

机房自动化监控手把手分享给你 - 10 项目完成总结

下面的内容是一个IOT-Tree项目在现场设备接入数据标签配置完成之后,后续的配置过程。

1 配置关系数据库数据源

在IOT-Tree Server运行实例启动之后,访问管理主界面 http://localhost:9090/admin/

在数据源区块,点击添加,选择"JDBC"类型(对应关系数据库)。填写你配置好的数据库访问参数(我使用的是mysql8版本):

完成之后,点击新增数据源的测试图标,如果提示成功,说明数据源配置完成。

2 消息流配置过程

进入你的项目管理界面,本文使用IOT-Tree Server中的"Water tank and Medicament dosing "这个Demo项目进行说明。

你如果对这个Demo项目不熟悉,可以参考下面文章(你只需要2分钟就可以配置完成项目,然后启动):

IOT-Tree快速开始https://gitcode.com/jasonzhu8888/iot-tree/blob/main/web/doc/cn/doc/quick_start.md

2.1 新建消息流

在左下角添加消息流,在弹出对话框填写如下:

完成之后点击"数据记录"这个新增的消息流程,右边就会出现流程绘制区域。

2.2 配置关系数据库节点与数据表节点

在绘制区左边节点列表,选择"存储"分类下面的"关系数据库"节点,拖拽到绘图区,就可以添加一个关系数据库节点,如图:

双击"关系数据库 1"节点,在弹出的对话框中选择之前配置的数据源。确定之后"关系数据库 1"节点的错误提示就消失了。

2.3 配置标签数据读取

我们需要一次读取多个标签,组合成一条记录然后写入到数据库表中。因此,第一步我们需要添加分类"接入与设备"下面的"标签数据读取"节点,同样拖拽添加即可:

双击打开此节点对话框选择添加多个标签如下:

其中,每个标签对应一个变量(Var)名称。这样,当此节点有任意输入消息时,就会自动读取上面定义的三个标签数据值,然后形成如下JSON格式的数据输出:

javascript 复制代码
{
  "wl":3.21,
  "flow":23.1,
  "flowt":1111
}

2.4 配置JSON到数据表Table写入过程

2.4.1 配置JSON到Table的映射

我们需要把上面节点输出的JSON格式数据写入到数据库表中。为此,IOT-Tree中的"关系数据库"模块专门提供了一个子节点"JSON To Table",用来支持JSON数据到数据库表的写入。

点击选中"关系数据库 1",在左下角弹出的子节点列表中,选中"JSON To Table"拖拽到绘图区,就完成了添加,然后双击打开编辑对话框,如下:

可以看到,此节点本质就是一个关系数据库表的设计及到JSON属性的映射关系。我们可以新增不同的数据库列定义如下:

上面是表结构的列定义,以及每一列对应JSON格式中的属性名称。其中,ID列作为主键可以在数据插入时自动生成。确定之后我们就完成了这个节点的配置。

但是:你肯定疑惑了,上面配置了这么多------数据库表设置在哪里?

2.4.2 配置数据库表

别着急,我们再次选中"关系数据库 1",拖拽子节点"DB Table"到绘图区,然后把"JSON To Table 1"中的"Relational DB Table"端子与此关联,如图:

双击打开"DB Table 1",填写Table Name=water_rec

我们把"标签数据读取 1"的第一个输出端子与"JSON To Table 1"的输入端子连接,最终效果如下:

2.4.3 生成数据库表

点击选中"JSON To Table 1",在节点右下角的面板展开图标进行展开,可以看到里面有个"Create Table"按钮,点击此按钮,就会自动在数据库中建立表"water_rec":

我们可以到mysql数据库中查看这个表结构:

可以看到,数据表water_rec除了自动生成我们上面定义的列之外,还有个特殊时间戳列"_rec_ms"。此列在数据插入时会自动写入当前的时间戳(unix毫秒数)。

2.5 使用标签触发方式

2.5.1 手动触发测试结果

我们可以添加一个"手动触发器",连接"标签数据读取1"。点击触发标记,然后我们查看数据库表,就可以发现有一条记录添加成功:

2.5.2 定时触发

你可以使用"定时触发器"放到"标签数据读取1"前面,并且设定时间间隔,就可以定时读取数据并写记录到数据库表中,太简单不展开了。

2.5.3 特定条件触发

这个比较重要:在很多现场做这种记录时,必须根据一定的条件触发,否则获取的数据可能是无效的。比如,生产线系统一些测量数据需要一定的时间才能完成,PLC这边一般需要有个完成测量标记M地址------用来告诉上位系统(如IOT-Tree Server):"本次测量完成,A B C三个地址的数据现在是有效数据,你可以取数据了。"

对于IOT-Tree来说,A B C和M这四个地址,都是不同的标签而已,只需要监听M地址对应的标签值,当发生变化时才触发获取A B C对应的标签值。

还是在分类"接入与设备"中,选择"标签变化触发器",放置"标签数据读取 1"前面,设置里面监听的标签即可。

3 运行效果

上面整个过程看起来内容有点多,实际几分钟就可以完成。可以发现,使用IOT-Tree Server完全可以作为生产线边缘配套软件使用,可以随着每个不同的产线做快速适配,最大限度的降低系统成本。

事实上,我们已经在国内某个先进的生产线上使用了IOT-Tree Server作为边缘配套,一个20多个环节的产线(每个环节都有独立的PLC),只用了5天就完成了PLC接入、数据点位的配置采集,生产过程的记录、并预留了OPC UA、RESTful和关系数据库等各种接口------为用户的MES或ERP系统打好了底层基础。

相关推荐
2301_822375442 小时前
Python虚拟环境(venv)完全指南:隔离项目依赖
jvm·数据库·python
2301_790300962 小时前
Python类型提示(Type Hints)详解
jvm·数据库·python
一路向北⁢2 小时前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(二)
java·数据库·spring boot·sse·通信
远方16092 小时前
112-Oracle database 26ai下载和安装环境准备
大数据·数据库·sql·oracle·database
2401_838472512 小时前
Python多线程与多进程:如何选择?(GIL全局解释器锁详解)
jvm·数据库·python
悠哉悠哉愿意2 小时前
【物联网学习笔记】按键
笔记·单片机·嵌入式硬件·物联网·学习
光影少年2 小时前
非关系数据库和关系型数据库都有哪些?
数据库·数据库开发·非关系型数据库
2301_822363602 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
麦兜*2 小时前
深入解析分布式数据库TiDB核心架构:基于Raft一致性协议与HTAP混合负载实现金融级高可用与实时分析的工程实践
数据库·分布式·tidb