From 4e005e4936039fca16bfd1679942daa416a21986 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 20 十一月 2025 14:27:47 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java |  120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 114 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java b/src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java
index f70729d..97a8ffc 100644
--- a/src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java
@@ -1,38 +1,146 @@
 package com.zy.core.network.real;
 
+import HslCommunication.Core.Types.OperateResult;
+import HslCommunication.Core.Types.OperateResultExOne;
+import HslCommunication.Profinet.Siemens.SiemensPLCS;
 import HslCommunication.Profinet.Siemens.SiemensS7Net;
+
+import java.text.MessageFormat;
+import java.util.Date;
+
+import com.alibaba.fastjson.JSON;
+import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.BasCrnpOpt;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.entity.BasRgvOpt;
 import com.zy.asrs.entity.DeviceConfig;
+import com.zy.asrs.entity.DeviceDataLog;
+import com.zy.asrs.service.BasCrnpOptService;
+import com.zy.asrs.service.BasRgvOptService;
+import com.zy.asrs.service.BasRgvService;
+import com.zy.asrs.service.DeviceDataLogService;
+import com.zy.asrs.utils.Utils;
+import com.zy.core.News;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.RgvStatusType;
 import com.zy.core.model.CommandResponse;
 import com.zy.core.model.command.RgvCommand;
+import com.zy.core.model.protocol.RgvProtocol;
 import com.zy.core.network.api.ZyRgvConnectApi;
 import com.zy.core.network.entity.ZyRgvStatusEntity;
 
 public class ZyRgvRealConnect implements ZyRgvConnectApi {
-    private final SiemensS7Net siemensNet;
-    private final DeviceConfig deviceConfig;
 
-    public ZyRgvRealConnect(SiemensS7Net siemensNet, DeviceConfig deviceConfig) {
-        this.siemensNet = siemensNet;
+    private SiemensS7Net siemensNet;
+    private DeviceConfig deviceConfig;
+
+    public ZyRgvRealConnect(DeviceConfig deviceConfig) {
         this.deviceConfig = deviceConfig;
     }
 
     @Override
     public boolean connect() {
-        return true;
+        boolean result = false;
+        siemensNet = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp());
+        OperateResult connect = siemensNet.ConnectServer();
+        if(connect.IsSuccess){
+            result = true;
+            OutputQueue.RGV.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+            News.info("RGV plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort());
+        } else {
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+            News.error("RGV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort());
+        }
+//        siemensNet.ConnectClose();
+        return result;
     }
 
     @Override
     public boolean disconnect() {
+        siemensNet.ConnectClose();
         return true;
     }
 
     @Override
     public ZyRgvStatusEntity getStatus() {
+        try {
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 30);
+            if (result.IsSuccess) {
+                ZyRgvStatusEntity zyRgvStatusEntity = new ZyRgvStatusEntity();
+                zyRgvStatusEntity.setRgvNo(deviceConfig.getDeviceNo());
+                zyRgvStatusEntity.setMode((int) siemensNet.getByteTransform().TransInt16(result.Content, 0));
+                zyRgvStatusEntity.setStatus((int) siemensNet.getByteTransform().TransInt16(result.Content, 2));
+                zyRgvStatusEntity.setTaskNo((int) siemensNet.getByteTransform().TransInt16(result.Content, 4));
+                // zyRgvStatusEntity.setStatus((int) siemensNet.getByteTransform().TransInt16(result.Content, 6));
+                zyRgvStatusEntity.setLoaded((int) siemensNet.getByteTransform().TransInt16(result.Content, 8));
+                zyRgvStatusEntity.setRgvPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 10));
+                zyRgvStatusEntity.setWalkPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 12));
+                zyRgvStatusEntity.setAlarm((int) siemensNet.getByteTransform().TransInt16(result.Content, 14));
+
+                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), deviceConfig.getDeviceNo()));
+
+                return zyRgvStatusEntity;
+            } else {
+                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+        }
         return null;
     }
 
     @Override
     public CommandResponse sendCommand(RgvCommand command) {
-        return new CommandResponse(false, "not implemented");
+        CommandResponse response = new CommandResponse(false);
+        try {
+            if (null == command) {
+                response.setMessage("RGV鍐欏叆鍛戒护涓虹┖");
+                return response;
+            }   
+
+            short[] array = new short[5];
+            array[0] = command.getAckFinish().shortValue();
+            array[1] = command.getTaskNo().shortValue();
+            array[2] = command.getTaskMode().shortValue();
+            array[3] = command.getSourcePos().shortValue();
+            array[4] = command.getTargetPos().shortValue();
+            OperateResult result = siemensNet.Write("DB100.0", array);
+
+            if (result != null && result.IsSuccess) {
+                News.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", deviceConfig.getDeviceNo(), JSON.toJSON(command));
+                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), JSON.toJSON(command)));
+                response.setResult(true);
+                return response;
+            } else {
+                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+                News.error("鍐欏叆RGV plc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort());
+                response.setMessage("鍐欏叆RGV plc鏁版嵁澶辫触");
+                return response;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            // 鏃ュ織璁板綍
+            BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
+            BasRgvOpt basRgvOpt = new BasRgvOpt(
+                    command.getTaskNo(),    // 浠诲姟鍙�
+                    command.getRgvNo(),    // RGV[闈炵┖]
+                    new Date(),    // 涓嬪彂鏃堕棿
+                    String.valueOf(command.getTaskMode()),    // 妯″紡
+                    String.valueOf(command.getSourcePos()), //婧愬簱浣�
+                    String.valueOf(command.getTargetPos()), //鐩爣搴撲綅
+                    null,    // 淇敼鏃堕棿
+                    null,    // 淇敼浜哄憳
+                    null,    // 澶囨敞
+                    JSON.toJSONString(command),    // 鎸囦护
+                    JSON.toJSONString(getStatus()),    // 绯荤粺鐘舵��
+                    1,    // 涓嬪彂鐘舵�亄0:鏈笅鍙�,1:宸蹭笅鍙憓
+                    JSON.toJSONString(response)    // 鍝嶅簲
+            );
+            bean.insert(basRgvOpt);
+        }
+        return response;
     }
 }
\ No newline at end of file

--
Gitblit v1.9.1