实时工业控制系统的创新整合:PLC4X与CnosDB的高效数据采集与存储

在当代工业自动化系统中,实时监测和数据分析变得至关重要。本文将介绍如何通过集成Apache PLC4X与CnosDB,实现对工业控制系统中的PLC设备进行高效数据采集和存储,为工程师们提供更强大的数据分析和监测工具。

PLC的定义

PLC是可编程逻辑控制器的缩写,是一种用于自动化控制的工业计算机。它广泛应用于工业领域,用于监控和控制生产过程中的机械设备和工艺。它取了传统的继电器逻辑控制系统,以编程方式执行各种控制任务。

PLC的主要特点和功能

  1. 可编程性: 通过编程实现不同的控制逻辑,适应不同的工业过程。
  2. 实时性: 实时监测和响应生产过程中的变化。
  3. 可靠性: 耐用、稳定,并能在恶劣环境中工作。
  4. 通用性: 适用于逻辑控制、运动控制、过程控制等不同类型的控制任务。

PLC4X简介:

PLC4X(Apache PLC4X)是一个开源项目,旨在为工业自动化领域提供灵活、可扩展的工具集,用于与各种可编程逻辑控制器(PLC)通信。它能简化与不同品牌和型号的PLC交互的复杂性,使开发人员更轻松地集成PLC数据到他们的应用程序中。

该项目由Apache软件基金会支持,使用Java编写,并提供了多种语言的API,包括Java、Python和JavaScript等。PLC4X支持多种通信协议,如Modbus、OPC UA、Siemens S7等,使其能够与各种PLC设备进行通信。

总体而言,PLC4X旨在为工业自动化系统提供开放、标准化的接口,以便更容易地集成和管理不同类型的PLC。

CnosDB简介:

CnosDB是一款专注于时序数据存储的开源数据库。其高性能和灵活的查询语言使其成为工业控制系统中理想的数据存储解决方案,特别是在需要实时监测和数据分析的场景下。

下面是用Java语言实现PLC4X集成CnosDB的示例。在示例中,我们将使用PLC4X库从虚拟PLC设备中读取数据,然后写入到CnosDB。

首先配置好写入CnosDB的连接:

// Configure the connection to CnosDB
String cnosDBUrl = "http://127.0.0.1:8902";
String tenant = "cnosdb";
String databaseName = "public";
String username = "root";
String password = "";
String measurement = "plc4x";String apiUrl = cnosDBUrl + "/api/v1/write?db=" + databaseName + "&tenant=" + tenant + "&pretty=true";
String auth = username + ":" + password;
byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes());
String authHeaderValue = "Basic " + new String(encodedAuth);URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", authHeaderValue);
connection.setDoOutput(true);

然后选择要读取的PLC设备的连接地址,示例中使用PLC4X库提供的虚拟地址:

String plcConnectionString = "simulated://127.0.0.1";

从虚拟地址中读取随机数据,实际项目中需要替换成真实PLC设备的地址。

使用Read请求从该地址中读取一个随机整数,然后写入CnosDB数据库:

try (PlcConnection plcConnection = PlcDriverManager.getDefault().getConnectionManager().getConnection(plcConnectionString)) {String field = "foo";PlcReadRequest readRequest =  plcConnection.readRequestBuilder().addTagAddress(field, "RANDOM/foo:INT") // Replace with your PLC address.build();PlcReadResponse response = readRequest.execute().get();int fieldValue = response.getInteger(field);String line = String.format("%s %s=%di",measurement, field, fieldValue);System.out.println(line);connection.getOutputStream().write(line.getBytes());System.out.println(connection.getResponseMessage());connection.disconnect();
} catch (Exception e) {e.printStackTrace();
}

运行示例代码后,可以查询CnosDB数据库,确认数据已成功写入。

public ❯ show tables;
+------------+
| table_name |
+------------+
| plc4x      |
+------------+
Query took 0.089 seconds.
public ❯ select * from plc4x;
+----------------------------+------+
| time                       | foo  |
+----------------------------+------+
| 2024-01-04T08:27:23.566444 | 3625 |
+----------------------------+------+
Query took 0.024 seconds.
public ❯

通过使用PLC4X与CnosDB的集成,工程师们可以更轻松地建立高效的实时工业控制系统。这种集成不仅使数据采集更加简便,还为用户提供了强大的时序数据库,为工业自动化的下一步发展提供了坚实的基础。

本文提供的代码示例和集成步骤旨在帮助社区成员更容易地使用PLC4X和CnosDB,促进开源工具在工业自动化领域的广泛应用。通过这种集成,我们相信能够推动工业控制系统的创新,提高生产效率和数据分析能力。

CnosDB简介

CnosDB是一款高性能、高易用性的开源分布式时序数据库,现已正式发布及全部开源。

欢迎关注我们的社区网站:https://cn.cnosdb.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/735140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哈希表|242.有效的字母异位词

力扣题目链接 bool isAnagram(char* s, char* t) {int len_s strlen(s), len_t strlen(t);if(len_s ! len_t) {return false;}int table[26];memset(table, 0, sizeof(table));for(int i 0; i < len_s; i) {table[s[i] - a];}for(int i 0; i < len_t; i) {table[t[i…

Unity中使用代码动态修改URP管线下的标准材质是否透明

//修改为透明 material.SetFloat("_Surface",1.0f); material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); material.Set…

Unity 关节:铰链、弹簧、固定、物理材质:摩檫力、 特效:拖尾、

组件-物理-关节&#xff1a;铰链&#xff08;类似门轴&#xff09; 自动动作、多少力可以将其断开、 弹簧可以连接另一个刚体&#xff08;拖动即可&#xff09; 固定一般是等待一个断裂力&#xff0c;造成四分五裂的效果。 物理材质 设置摩檫力&#xff0c;则可以创造冰面的…

复制表

目录 复制表 将部门 30 的所有员工信息保存在 emp30 表中 将复杂查询结果创建为表 只将 emp 表的结构复制为 empnull 表 从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 复制表 严格来说&#xff0c;复制表不是复制操作&am…

【NR 定位】3GPP NR Positioning 5G定位标准解读(七)- GNSS定位方法

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…

Java积累

文章目录 java积累IDEA快捷键 java积累 Arrays.asList(args)&#xff1a; 将args转为列表的形式输出 常犯的错误&#xff1a;经常直接就new新的了。应该用上面的的。 new Date()是年月日时分秒。 LocalDate.now()是年月日 IDEA快捷键 Ctrl Alt B : 显示实现该类或者接口…

Linux acl权限

linux的权限非常重要&#xff0c;我们之前所说的几种权限中&#xff0c;但是并不能只针对一个用户或者一个组进行单独设置&#xff0c;而ACL权限可以帮助我们实现这个功能&#xff0c;比如说有一个文件的所有者和所有者组都是a&#xff0c;这个文件的权限是660&#xff0c;我可…

LeetCode 2917. 返回 nums 的 K-or 值。(通过JavaScript实现)

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数&#xff1a; 只有在 nums 中&#xff0c;至少存在 k 个元素的第 i 位值为 1 &#xff0c;那么 K-or 中的第 i 位的值才是 1 。 返回 nums 的 K-or 值。 注意 &#xff…

01hadoop概念

大数据与Hadoop 大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 Hadoop是什么&#xff1f; Hadoop是一种分析和处理海量数据的…

2024年掌握人工智能的顶级课程

[AI 课程推荐] 谷歌、微软、哈佛大学, DeepLearning.AI都发布了免费的人工智能和ChatGPT的课程。 以下是 2024 年掌握人工智能的顶级课程: GOOGLE - 生成式人工智能学习路径微软- 为每个人提供生成式人工智能微软 - 人工智能初学者入门哈佛 - CS50 的 Python 人工智能简介Deep…

论文阅读--A Survey of Meta-Reinforcement Learning

论文概述 本文是一篇关于元强化学习&#xff08;Meta Reinforcement Learning&#xff09;的综述。元强化学习是将改进强化学习算法的发展看作是一个机器学习问题的方法&#xff0c;通过在给定任务分布的情况下学习一个能够适应任何新任务的策略&#xff0c;来提高强化学习算法…

mysql的安装启动

下载 2.解压后放在某个目录下&#xff1a; 3.修改系统变量 4.修改配置文件 &#xff08;创建一个ini文件放在解压后的目录下&#xff09; 内容如下 5.初始化mysql 1.用管理员模式下输入&#xff1a; mysqld --initialize --console C:\WINDOWS\system32>mysqld --initia…

今天就分享一下如何提前前端游戏的效率工作问题(自己工作经验得出来的)

比如给到一个新的功能&#xff0c;涉及的逻辑可能简单可能复杂&#xff0c;无论是哪一种&#xff0c;你都要做以下这几点我个人是觉得可以提升效率这一块的... 第一&#xff1a;你做的时候或者做的过程中如果遇到问题卡你半个小时以上的&#xff0c;那么这个你千万不要在埋头苦…

Java面试必考题之线程的生命周期,结合源码,透彻讲解!

写在开头 在前面的几篇博客里&#xff0c;我们学习了Java的多线程&#xff0c;包括线程的作用、创建方式、重要性等&#xff0c;那么今天我们就要正式踏入线程&#xff0c;去学习更加深层次的知识点了。 第一个需要学的就是线程的生命周期&#xff0c;也可以将之理解为线程的…

Springboot jpa 查询排序Sort,分页Page使用报错

一.Sort 报错信息&#xff1a; “Sort(org.springframework.data.domain.Sort.Direction, java.util.List<java.lang.String>) has private access in org.springframework.data.domain.Sort” 原因&#xff1a; 使用Sort sort new Sort(Sort.Direction.DESC, "…

orm之SQLAlchemy

SQLAlchemy 1.介绍 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上&#xff0c;使用关系对象映射进行数据库操作&#xff0c;简言之便是&#xff1a;将类和对象转换成SQL&#xff0c;然后使用数据API执行SQL并获取执行结果。 pip3 install sqlalchemy组…

JVM运行时数据区——对象的实例化内存布局与访问定位

文章目录 1、对象的实例化1.1、创建对象的方式1.2、创建对象的步骤 2、对象的内存布局3、对象的访问定位3.1、对象访问的定位方式3.2、使用句柄访问3.3、使用指针访问 4、小结 平时大家经常使用new关键字来创建对象&#xff0c;那么我们创建对象的时候&#xff0c;怎么去和运行…

ABAP接口-RFC连接(ABAP TO ABAP)

目录 ABAP接口-RFC连接&#xff08;ABAP TO ABAP&#xff09;创建ABAP连接RFC函数的调用 ABAP接口-RFC连接&#xff08;ABAP TO ABAP&#xff09; 创建ABAP连接 事务代码&#xff1a;SM59 点击创建&#xff0c;填写目标名称&#xff0c;选择连接类型&#xff1a; 填写主机名…

Vue动态绑定样式

虽然经常使用动态绑定样式的方法&#xff0c;但有时候突然要用&#xff0c;一瞬间还是会有点困惑&#xff0c;决定记录一下&#xff0c;方便混乱的时候查阅。 绑定 HTML class 绑定对象 <div :class"{ active: isActive }"></div> <divclass"…

pycharm查看Tensor的完整数据

通常debug时&#xff0c;Tensor的数据呈现如下图&#xff0c;只显示开头几个值和结尾几个值&#xff0c;中间被省略&#xff1a; 解决方法&#xff1a; 右击想查看的数据&#xff0c;选择Evaluate Expression 输入如下命令&#xff0c;就会出现View as Array提示&#xff0c;…