From ea2bd7c6ec07eab9abb6c89cd2bf66de909185df Mon Sep 17 00:00:00 2001 From: liuhanqing Date: Tue, 18 Nov 2025 09:29:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8D=87=E6=9C=BA=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=20=E5=92=8C=20=E5=9B=9B=E5=90=91=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/device/srgv/domain/DeviceSrgv.java | 87 ++++++++++++ .../ruoyi/device/tsj/domain/DeviceTsj.java | 87 ++++++++++++ .../schedule/plcRead/tsj/PlcTsjRead.java | 125 ++++++++++++++++++ 3 files changed, 299 insertions(+) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/device/srgv/domain/DeviceSrgv.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/device/tsj/domain/DeviceTsj.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/tsj/PlcTsjRead.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/srgv/domain/DeviceSrgv.java b/ruoyi-admin/src/main/java/com/ruoyi/device/srgv/domain/DeviceSrgv.java new file mode 100644 index 0000000..58da29c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/srgv/domain/DeviceSrgv.java @@ -0,0 +1,87 @@ +package com.ruoyi.device.srgv.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 输送机对象 device_ssj + * + * @author ruoyi + * @date 2025-07-04 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DeviceSrgv extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + /** 设备唯一编码 */ + @Excel(name = "设备唯一编码") + private String deviceCode ; + + /** 设备名称 */ + @Excel(name = "设备名称") + private String name ; + + /** 类型 */ + @Excel(name = "类型") + private String type; + + /** 设备IP */ + @Excel(name = "设备IP") + private String ipAddress; + + /** PLC读取地址 */ + @Excel(name = "PLC读取地址") + private String plcDbReadAddress; + + /** 0-F 1-T */ + @Excel(name = "0-F 1-T") + private String isActive; + + /** PLC写入地址 */ + @Excel(name = "PLC写入地址") + private String plcDbWriteAddress; + + /** 入库请求 */ + @Excel(name = "入库请求") + private int rkqq; + + /** 空闲 */ + @Excel(name = "空闲") + private int kx; + + /** 到位 */ + @Excel(name = "到位") + private int dw; + + /** 条码 */ + @Excel(name = "条码") + private String trayCode; + + /** 任务号 */ + @Excel(name = "任务号") + private int taskNo; + + @Excel(name = "异常") + private int exception; + + @Excel(name = "托盘尺寸") + private int traySize; + + @Excel(name="允许放货") + private int allowPut; + + @Excel(name="输送线模式 1-入库 2-出库") + private int model; + + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/tsj/domain/DeviceTsj.java b/ruoyi-admin/src/main/java/com/ruoyi/device/tsj/domain/DeviceTsj.java new file mode 100644 index 0000000..b1f87e3 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/tsj/domain/DeviceTsj.java @@ -0,0 +1,87 @@ +package com.ruoyi.device.tsj.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 输送机对象 device_ssj + * + * @author ruoyi + * @date 2025-07-04 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DeviceTsj extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + /** 设备唯一编码 */ + @Excel(name = "设备唯一编码") + private String deviceCode ; + + /** 设备名称 */ + @Excel(name = "设备名称") + private String name ; + + /** 类型 */ + @Excel(name = "类型") + private String type; + + /** 设备IP */ + @Excel(name = "设备IP") + private String ipAddress; + + /** PLC读取地址 */ + @Excel(name = "PLC读取地址") + private String plcDbReadAddress; + + /** 0-F 1-T */ + @Excel(name = "0-F 1-T") + private String isActive; + + /** PLC写入地址 */ + @Excel(name = "PLC写入地址") + private String plcDbWriteAddress; + + /** 入库请求 */ + @Excel(name = "入库请求") + private int rkqq; + + /** 空闲 */ + @Excel(name = "空闲") + private int kx; + + /** 到位 */ + @Excel(name = "到位") + private int dw; + + /** 条码 */ + @Excel(name = "条码") + private String trayCode; + + /** 任务号 */ + @Excel(name = "任务号") + private int taskNo; + + @Excel(name = "异常") + private int exception; + + @Excel(name = "托盘尺寸") + private int traySize; + + @Excel(name="允许放货") + private int allowPut; + + @Excel(name="输送线模式 1-入库 2-出库") + private int model; + + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/tsj/PlcTsjRead.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/tsj/PlcTsjRead.java new file mode 100644 index 0000000..1720a5c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/tsj/PlcTsjRead.java @@ -0,0 +1,125 @@ +package com.ruoyi.schedule.plcRead.tsj; + +import HslCommunication.Core.Net.IReadWriteNet; +import HslCommunication.Core.Types.OperateResult; +import HslCommunication.Profinet.Siemens.SiemensPLCS; +import HslCommunication.Profinet.Siemens.SiemensS7Net; +import com.ruoyi.common.domain.HslRead; +import com.ruoyi.common.domain.PlcConnectInfo; +import com.ruoyi.common.domain.SendData; +import com.ruoyi.device.tsj.domain.DeviceTsj; +import com.ruoyi.schedule.plcRead.util.Tools; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.ConcurrentHashMap; + +@Slf4j +public class PlcTsjRead implements Runnable { + + public static ConcurrentHashMap deviceTsjMap; + public volatile boolean isRun = true; + + public SiemensS7Net siemensS7Net = null; + public static IReadWriteNet readWriteNet = null; + private final String ip; + private final int port; + private boolean success = false; + + public PlcTsjRead(ConcurrentHashMap deviceTsjMap, PlcConnectInfo plcConnectInfo) { + PlcTsjRead.deviceTsjMap = deviceTsjMap; + this.ip = plcConnectInfo.getIp(); + this.port = plcConnectInfo.getPort(); + } + + public static int WriteToSSJ(String address, byte[] data) { + int a = 0; + if (readWriteNet != null) { + a = HslRead.WriteResultRender(readWriteNet.Write(address, data), address); + } + return a; + } + + @Override + public void run() { + while (isRun) { + try { + if (IsConnect()) { + int step = 20; + int baseOffset = 0; + for (String tsjCode : deviceTsjMap.keySet()) { + DeviceTsj tsjDevice = deviceTsjMap.get(tsjCode); + + } + Thread.sleep(1000); + } else { + reConnect(); + } + } catch (InterruptedException e) { + // 捕获中断异常,退出循环 + Thread.currentThread().interrupt(); // 重新设置中断标志 + return; + } catch (Exception e) { + log.info("********IP:" + this.ip + " port:" + this.port + "读取数据异常 " + e.getMessage()); + } + + } + } + + + void ConnectServer() { + siemensS7Net = new SiemensS7Net(SiemensPLCS.S1500); + try { + siemensS7Net.setIpAddress(this.ip); + siemensS7Net.setPort(this.port); + siemensS7Net.setRack((byte) 0); + siemensS7Net.setSlot((byte) 1); + + OperateResult connect = siemensS7Net.ConnectServer(); + if (connect.IsSuccess) { + setIsConnect(true); + readWriteNet = siemensS7Net; + } + } catch (Exception ex) { + log.info("********IP:" + this.ip + " port:" + this.port + "连接失败 " + ex.getMessage()); + } + + } + + public void setIsConnect(boolean bflag) { + if (!success) { + success = bflag; + } + } + + public boolean IsConnect() { + if (success) { + return success; + } + return false; + } + + void reConnect() { + closeServer(); + ConnectServer(); + log.info("重新连接 SSJ-PLC"); + } + + void closeServer() { + if (readWriteNet != null) { + readWriteNet.ConnectClose(); + } + setIsConnect(false); + } + + public static int writeToSsj(String address, String taskNo, int qx, int completed) { + int jym = Tools.getJYM(Integer.parseInt(taskNo), qx, completed); + SendData taskNoSendData = new SendData(Tools.INT, taskNo); + SendData qxSendData = new SendData(Tools.INT, qx); + SendData completedSendData = new SendData(Tools.INT, completed); + SendData jymSendData = new SendData(Tools.INT, jym); + byte[] bytes = Tools.sendData(taskNoSendData, qxSendData, completedSendData, jymSendData); + return PlcTsjRead.WriteToSSJ(address, bytes); + } + + +}