# opc **Repository Path**: zl_java/opc ## Basic Information - **Project Name**: opc - **Description**: 使用opc ua方式获取opc实时数据 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2024-02-27 - **Last Updated**: 2024-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 巴拉素选煤厂数据采集项目 本项目主要目的是采集西门子PLC硬件上的数据,并将其发送到Kafka集群上,供数据大屏系统使用。 ## 项目技术介绍 使用 `HslCommunication` 工具批量采集PLC中的数据,读出的数据是byte数组,根据实际的数据类型,需要在代码中将数据转化为对应的可识别的数据。 采集程序主要类是 `com.example.task.OpcTask.batchReadPLCData()`,是定时采集PLC数据的方法。 其中主要涉及三部分:PLC数据采集、数据转化和数据发送到Kafka。 1. PLC数据采集,使用的技术有 `CompletableFuture`异步调用、自定义线程池、PLC连接池`com.example.s7.PlcSectionTwoConnectorFactory`。PLC连接池类似于数据库连接池,是用来生成与PLC进行通信的对象,每次使用完就会还给对象池,供下一个采集任务使用。避免IO消耗。 2. 数据转化,采集的数据有四种格式,分别是二进制变量、无符号的 8 位值、无符号的 16 位值、32-位浮点数 IEEE 754等类型。后续有其他类型的值,可自行添加采集任务。 1. 二进制变量:此类型的地址采集出来的数据是一个byte字节,例如地址是DB570,D59.7,其中的采集出来的值,对应的是 DB570,D59.7~DB570,D59.0的bit值,其中的值是0或1。 2. 无符号的 8 位值:采集出来的是一个byte字节的值,对应一个地址的值,直接获取字节数据的值即可,无需转换。 3. 无符号的 16 位值:采集出来的是一个长度是2的byte字节数组,需要使用 `byteTransform.TransInt16(bytes, 0)`方法将数据进行转换。 4. 32-位浮点数 IEEE 754:采集出来的是一个长度是4的byte字节数组,使用 `byteTransform.TransSingle(valueBytes, 0)`方法进行转换 3. 数据发送到Kafka:使用Spring事件机制,采用异步发送的方式,将采集到的数据发送到Kafka的broker。使用的方法是 `eventPublisher.publishEvent(new OpcMessageEvent(this, binaryBlockDto))`。 ## 项目打包 使用以下命令进行打包: ```shell clean package spring-boot:repackage -Dmaven.test.skip=true ``` 打包好的jar在target目录下,将其拷贝到服务器上,进行部署。