首页 > 其他分享 >在工厂项目中,我是用这个读取PLC数据的

在工厂项目中,我是用这个读取PLC数据的

时间:2024-03-14 21:30:14浏览次数:28  
标签:java 读取 plc4x 工厂 api PLC import apache org

Apache PLC4X 软件介绍

Apache PLC4X旨在创建一组库,以统一的方式与工业级可编程逻辑控制器(PLCs)进行通信。目前,支持以下语言:

  • Java
  • Go
  • C (尚未可用)
  • Python (尚未可用)
  • C# (.Net) (已废弃)

功能特点

PLC4X 设计目标之一是为开发人员提供简化的 API,隐藏底层通信细节,以便与各种 PLC 进行通信。该框架提供了一致的编程接口,涵盖以下通信协议:

  • Modbus
  • S7 Communication (Siemens S7)
  • ADS (Automation Device Specification)
  • OPC UA (Unified Architecture)
  • EtherNet/IP
  • DF1 (Data Highway Plus)
  • KNX
  • ISO on TCP

这种支持多个协议的设计使得 PLC4X 具有较高的灵活性和通用性。

应用场景

  • 工业自动化:监控和控制工业生产设备和系统。
  • Modbus PLC 通信:与支持 Modbus 协议的 PLC 进行数据交换。

示例代码

这是一个示例代码的简要概述:

  • 1.在 pom.xml 中添加 PLC4X 依赖。
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.plc4x</groupId>
        <artifactId>plc4j-api</artifactId>
        <version>0.8.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.plc4x</groupId>
        <artifactId>plc4j-driver-modbus</artifactId>
        <version>0.8.0</version>
    </dependency>
</dependencies>
  • 2.在 application.properties 或 application.yml 中配置 Modbus 连接信息。
plc4x.connection-string=modbus:tcp://127.0.0.1:502
  • 3.编写服务类用于与 Modbus PLC 进行通信,包括读取和写入数据的方法。可以使用 PlcReadRequest 和 PlcWriteRequest 进行通信。
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.PlcReadRequest;
import org.apache.plc4x.java.api.PlcReadResponse;
import org.apache.plc4x.java.api.PlcSubscriptionRequest;
import org.apache.plc4x.java.api.PlcSubscriptionResponse;
import org.apache.plc4x.java.api.exceptions.PlcException;
import org.apache.plc4x.java.api.exceptions.PlcTimeoutException;
import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
import org.apache.plc4x.java.api.messages.PlcSubscriptionRequestBuilder;
import org.apache.plc4x.java.base.messages.PlcSubscriptionEventAdapter;
import org.apache.plc4x.java.api.PlcWriteRequest;
import org.apache.plc4x.java.api.PlcWriteResponse;

@Service
public class ModbusPlcService {

    private final PlcConnection plcConnection;

    public ModbusPlcService(PlcConnection plcConnection) {
        this.plcConnection = plcConnection;
    }

    public void readDataFromPlc(int slaveId) {
        try {
            plcConnection.setOption(PlcDriverOption.SLAVE_ID, slaveId);
            PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
            PlcReadRequest<Integer> readRequest = builder.addItem("readInt", "HR1", Integer.class).build();

            PlcReadResponse<Integer> readResponse = readRequest.execute().get();

            if (readResponse.hasValues()) {
                Integer result = readResponse.getInteger("readInt");
                System.out.println("Read value from PLC: " + result);
            } else {
                System.out.println("No values received from PLC");
            }
        } catch (PlcException e) {
            e.printStackTrace();
        }
    }

    public void writeDataToPlc(int slaveId) {
        try {
            plcConnection.setOption(PlcDriverOption.SLAVE_ID, slaveId);
            PlcWriteRequest.Builder builder = plcConnection.writeRequestBuilder();
            PlcWriteRequest<Integer> writeRequest = builder.addItem("writeInt", "HR1", value).build();

            PlcWriteResponse writeResponse = writeRequest.execute().get();

            if (writeResponse.getResponseCode("writeInt") == PlcWriteResponse.ResponseCode.OK) {
                System.out.println("Write to PLC successful");
            } else {
                System.out.println("Failed to write to PLC");
            }
        } catch (PlcException e) {
            e.printStackTrace();
        }
    }
}

优势

  • 开源框架:PLC4X 是一个开源项目,支持多种 PLC 品牌和通信协议。
  • 集成简便:通过 Spring Boot 集成,使得与 PLC 的通信更加简单。

对于更详细的信息和最新支持的协议列表,请查看 PLC4X 的官方网站或文档。

作者介绍:

90后资深架构师,深耕工业可视化,数字化转型,深度学习技术在工业中的应用。深入研究Web3D,SCADA ,深度学习开发应用。开发语言技能JAVA/C#/Python/Golang/Vue3/TypeScript, 关注【工业可视化】带你一起学~

标签:java,读取,plc4x,工厂,api,PLC,import,apache,org
From: https://blog.csdn.net/scadaadmin/article/details/136634765

相关文章

  • 使用EasyExcel读取Excel文件遇到的小问题
    没有读取到内容的问题excel内容具体代码importcom.alibaba.excel.EasyExcel;importcom.alibaba.excel.annotation.ExcelProperty;importjava.io.File;importjava.util.List;publicclassTestEasyExcel{publicstaticvoidmain(String[]args){Lis......
  • 西门子PLC常用底层逻辑块分享_单/双输出电机
    文章目录前言一、功能概述二、单输出电机程序编写1.创建自定义数据类型2.创建FB功能块“单输出电机”3.编写程序三、双输出电机程序编写1.创建自定义数据类型2.创建FB功能块“双输出电机”3.编写程序前言本文分享一个自己编写的电机控制逻辑块。一、功能概述手......
  • Springboot2+consul启动时报错,读取的SystemConfig类的值全部为null
    【错误描述】     解决方案:检查是否已经在pom.xml配置了consul的相关jar包引用。 排查过程:检查了启动的日志,跟旧项目的正常日志进行对比,发现缺少了读取配置boostrap文件的日志。怀疑没有启动consul服务去远端读取consul的内容。 ......
  • Linux利用DS9490R读取多个温湿度
    1.DS9490R是一款由MaximIntegrated(原DallasSemiconductor)生产的USB至1-Wire®接口适配器。它允许计算机通过USB端口与遵循1-Wire协议的设备进行通信,非常适合需要通过PC进行数据采集和控制的应用。1.1基本特性接口类型:USB至1-Wire。连接方式:通过USB接口连接至PC,提供1-W......
  • PYTHON openpyxl 读取课程表,轮值排班表,输出每日班级简报
    源文件excel及python源文件链接:https://pan.baidu.com/s/1uswO_33jrgE3nvaJv47wGw提取码:clnw#frompickleimportAPPENDimportopenpyxlimportdatetimefromtimeimportstrftime#importre#fromdatetimeimportdatetime#fromdateutil.parserimportparse#impor......
  • PLC数采网关在实际应用中的效能-天拓四方
    在工业自动化领域中,PLC扮演着至关重要的角色,它负责控制和监测生产线的各个环节。然而,随着工业4.0的推进和智能制造的快速发展,单纯依靠PLC进行现场控制已无法满足企业对数据集中管理、远程监控和智能分析的需求。因此,PLC数采网关应运而生,成为连接现场设备与云端平台的关键桥梁。......
  • 抽象工厂模式
    本文借助jdk中实现jdbc的原理来描述描述一下抽象工厂模式,首先定义两个抽象接口:连接接口和命令接口。interfaceIConnect{voidconnect();}interfaceICommand{voidcommand();}此时再定义一个数据库操作util用来对数据库进行抽象对数据库进行处理。interfaceIDa......
  • 什么是PLC设备数据采集?
    在当今工业4.0和智能制造的大背景下,数据的价值日益凸显。特别是对于PLC(可编程逻辑控制器)这类核心工业设备,数据采集显得尤为重要。那么,究竟什么是PLC设备数据采集?它又有何价值呢?今天,就让我们通过介绍HiWooBox,一款卓越的PLC设备数据采集工具,来为您揭开这层面纱。一、PLC设备......
  • 什么是PLC远程控制模块?
    随着工业自动化的不断发展,可编程逻辑控制器(PLC)已成为现代工业设备中不可或缺的核心组件。然而,传统的PLC管理方式往往受限于现场操作和维护,难以满足日益复杂的工业需求。在这一背景下,PLC远程控制模块应运而生,为工业设备的远程管理带来了革命性的变革。今天,我们就来深入探讨一......
  • STM32模拟IIC读取ACD10红外二氧化碳数据
    引脚介绍ACD10通过IIC来通信我们使用下图右边四个引脚就可以了,系统默认模式为IIC通信方式,他也支持USART串口通信不过需要配置pin5引脚(低电平)。模拟IIC通信配置比较简单,在单片机上面随便找两个引脚就可以。用来配置SDA数据与SCL时钟引脚。读取数据命令官方给我们命令行列......