From b129e0f404d42d80bb7d52bd539b196762c872cf Mon Sep 17 00:00:00 2001
From: "HUOJIN\\92525" <925258474@qq.com>
Date: Fri, 12 Apr 2024 18:02:58 +0800
Subject: [PATCH] no message
---
 youchain-system/pom.xml                       |  16 ++-
 .../com/youchain/utils/S7ConnectorUtils.java  | 132 ++++++++++++++++++
 2 files changed, 142 insertions(+), 6 deletions(-)
 create mode 100644 youchain-system/src/main/java/com/youchain/utils/S7ConnectorUtils.java
diff --git a/youchain-system/pom.xml b/youchain-system/pom.xml
index 9416744..5dbbfa3 100644
--- a/youchain-system/pom.xml
+++ b/youchain-system/pom.xml
@@ -67,10 +67,10 @@
         
 
         
-		
-			org.springframework.boot
-			spring-boot-starter-websocket
-		
+        
+            org.springframework.boot
+            spring-boot-starter-websocket
+        
 
         
         
@@ -90,6 +90,7 @@
             0.1.55
         
 
+
         
         
             com.github.oshi
@@ -126,8 +127,11 @@
             4.1.42.Final
         
 
-
-
+        
+            com.github.s7connector
+            s7connector
+            2.1
+        
 
 
     
diff --git a/youchain-system/src/main/java/com/youchain/utils/S7ConnectorUtils.java b/youchain-system/src/main/java/com/youchain/utils/S7ConnectorUtils.java
new file mode 100644
index 0000000..b12aac0
--- /dev/null
+++ b/youchain-system/src/main/java/com/youchain/utils/S7ConnectorUtils.java
@@ -0,0 +1,132 @@
+package com.youchain.utils;
+
+import com.github.s7connector.api.DaveArea;
+import com.github.s7connector.api.S7Connector;
+import com.github.s7connector.api.factory.S7ConnectorFactory;
+import com.github.s7connector.impl.serializer.converter.StringConverter;
+import com.sun.mail.iap.ConnectionException;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+
+/**
+ * S7西门子PLC连接工具类
+ *
+ * @author 
+ * @date 2024/04/12
+ */
+@Slf4j
+public class S7ConnectorUtils {
+
+    public S7Connector connect() {
+        S7Connector s7Connector = null;
+        try {
+            s7Connector = S7ConnectorFactory
+                    .buildTCPConnector()
+                    .withHost("192.168.0.21")//设置PLC的IP地址
+                    .withPort(102)//设置PLC的端口号
+                    .withTimeout(10000)//设置连接超时时间
+                    .withRack(0)//设置PLC的机架号
+                    .withSlot(2)//设置PLC的插槽号
+                    .build();
+            return s7Connector;
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+
+    /**
+     * 读取PLC数据
+     * 读取条码信息
+     *
+     * @param connector 连接器
+     */
+    public void readMo(S7Connector connector) {
+        if (connector == null) {
+            throw new RuntimeException("PLC连接失败,请检查!");
+        }
+        long startTime = System.currentTimeMillis();
+        /**
+         * 读取数据
+         * 选择区块:DB
+         * 区块编号:100
+         * 字节:500
+         * 偏移:0
+         */
+        byte[] PlcData = connector.read(DaveArea.DB, 100, 500, 0);
+
+        long endTime = System.currentTimeMillis();
+        log.info("读取耗时:" + (endTime - startTime) + "ms");
+
+        String str1 = "";
+        StringConverter converter = new StringConverter();
+
+        String extract1 = converter.extract(str1.getClass(), PlcData, 0, 0);
+        log.info("内置方法转换str=" + extract1);
+        try {
+            connector.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 读取PLC数据
+     * 读取容器信息
+     *
+     * @param connector 连接器
+     */
+    public Integer readStock(S7Connector connector) throws IOException {
+        Integer status = null;
+        try {
+
+            if (connector == null) {
+                throw new IllegalArgumentException("PLC连接失败,请检查!");
+            }
+            long startTime = System.currentTimeMillis();
+            /**
+             * 读取数据
+             * 选择区块:DB
+             * 区块编号:100
+             * 字节:1
+             * 偏移:0
+             */
+            byte[] PlcData = connector.read(DaveArea.DB, 100, 1, 24);
+
+            long endTime = System.currentTimeMillis();
+            log.info("读取耗时:" + (endTime - startTime) + "ms");
+
+            Integer stock = null;
+            StringConverter converter = new StringConverter();
+
+            status = converter.extract(stock.getClass(), PlcData, 0, 0);
+        } catch (Exception e) {
+            throw new IOException("读取PLC数据异常", e);
+        } finally {
+            connector.close();
+        }
+        return status;
+    }
+
+    /**
+     * 写入数据到PLC
+     *
+     * @param connector 连接器
+     * @param instruct  写入的数据;上位机给PLC发扫码合格指令,不合格写1,合格写2,0无效,上位机写,PLC清
+     */
+    public void write(S7Connector connector, Integer instruct) {
+        long startTime = System.currentTimeMillis();
+        ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES);
+        buffer.putInt(instruct);
+        byte[] bytes = buffer.array();
+        connector.write(DaveArea.DB, 100, 22, bytes);
+        long endTime = System.currentTimeMillis();
+        System.out.println((endTime - startTime) + "ms");
+        System.out.print("写入成功");
+    }
+
+
+}