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("写入成功"); + } + + +}