From 8abc9481eafeb715b39a4f4f8d6f628a642e6b53 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期三, 19 三月 2025 17:38:18 +0800
Subject: [PATCH] 优化AGV和输送线、产线对接逻辑

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineExtend/AGVsignal.cs |  118 +++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 82 insertions(+), 36 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineExtend/AGVsignal.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineExtend/AGVsignal.cs"
index 4cb0717..3926374 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineExtend/AGVsignal.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineExtend/AGVsignal.cs"
@@ -12,6 +12,7 @@
 using WIDESEAWCS_QuartzJob;
 using WIDESEAWCS_QuartzJob.Service;
 using WIDESEAWCS_Tasks.ConveyorLineJob.ConveyorLineExtend;
+using WIDESEAWCS_Tasks.ProductionLineJob;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -29,39 +30,83 @@
             {
                 if (conveyor == null) throw new Exception("璇锋眰鏁版嵁涓虹┖");
                 if (string.IsNullOrEmpty(conveyor.Station)) throw new Exception("绔欑偣缂栧彿涓虹┖");
-                CommonConveyorLine conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceName == "杈撻�佺嚎") as CommonConveyorLine;
-                if (!conveyorLine.IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+                switch (conveyor.Station)
+                {
+                    case "1001":
+                    case "1008":
+                        content = AGVRequestinConveyorLine(conveyor);
+                        break;
+                    case "MDX01":
+                        content = AGVRequestinProductionLine(conveyor);
+                        break;
+                    default: throw new Exception($"鏈畾涔夌珯鍙板彿[Station锛歿conveyor.Station}]");
+                }
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+
+        /// <summary>
+        /// AGV鍜岃緭閫佺嚎浜や簰
+        /// </summary>
+        /// <returns></returns>
+        public static WebResponseContent AGVRequestinConveyorLine(ConveyorLineDTO conveyor)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceName == "杈撻�佺嚎") as CommonConveyorLine;
+                if (conveyorLine == null) throw new Exception("鏈壘鍒拌緭閫佺嚎璁惧淇℃伅");
+                if (!conveyorLine.IsConnected) throw new Exception($"杈撻�佺嚎璁惧閫氳寮傚父");
+                //conveyorLine.SetValue(ConveyorLine_AGV.WriteRGPutComplete, true, "1001");//浜哄伐鏀捐揣瀹屾垚
                 switch (conveyor.Type)
                 {
                     case 1:
-                        content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestPut, true, conveyor.Station);
-                        if (content.Status) content.Status = conveyorLine.GetValue<ConveyorLine_AGV, bool>(ConveyorLine_AGV.ConveyorLinePermitPut, conveyor.Station);
+                        {
+                            if (conveyor.Station == "1001")
+                            {
+                                content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestPut, true, conveyor.Station);
+                                if (content.Status) content.Status = conveyorLine.GetValue<ConveyorLine_AGV, bool>(ConveyorLine_AGV.ConveyorLinePermitPut, conveyor.Station);
+                            }
+                            else
+                            {
+                                content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestTake, true, conveyor.Station);
+                                if (content.Status) content.Status = conveyorLine.GetValue<ConveyorLine_AGV, bool>(ConveyorLine_AGV.ConveyorLinePermitTake, conveyor.Station);
+                            }
+                        }
                         break;
                     case 2:
                         {
-                            content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVPutComplete, true, conveyor.Station);
-                            if (content.Status)
+                            if (conveyor.Station == "1001")
                             {
-                                Thread.Sleep(1000);
-                                conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestPut, false, conveyor.Station);
-                                conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVPutComplete, false, conveyor.Station);
+                                content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVPutComplete, true, conveyor.Station);
+                                if (content.Status)
+                                {
+                                    Thread.Sleep(1000);
+                                    conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestPut, false, conveyor.Station);
+                                    conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVPutComplete, false, conveyor.Station);
+                                }
+                            }
+                            else
+                            {
+                                content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVTakeComplete, true, conveyor.Station);
+                                if (content.Status)
+                                {
+                                    Thread.Sleep(1000);
+                                    conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestTake, false, conveyor.Station);
+                                    conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVTakeComplete, false, conveyor.Station);
+                                }
                             }
                         }
                         break;
                     case 3:
-                        content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestTake, true, conveyor.Station);
-                        if (content.Status) content.Status = conveyorLine.GetValue<ConveyorLine_AGV, bool>(ConveyorLine_AGV.ConveyorLinePermitTake, conveyor.Station);
+
                         break;
                     case 4:
-                        {
-                            content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVTakeComplete, true, conveyor.Station);
-                            if (content.Status)
-                            {
-                                Thread.Sleep(1000);
-                                conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestTake, false, conveyor.Station);
-                                conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVTakeComplete, false, conveyor.Station);
-                            }
-                        }
+
                         break;
                     default: throw new Exception($"绫诲瀷鏈夎[Type锛歿conveyor.Type}]");
                 }
@@ -73,35 +118,36 @@
             }
             return content;
         }
-
-        public static WebResponseContent AGVRequestin<T>(T conveyor) where T : ConveyorLineDTO, new()
+        /// <summary>
+        /// AGV鍜屼骇绾夸氦浜�
+        /// </summary>
+        /// <returns></returns>
+        public static WebResponseContent AGVRequestinProductionLine(ConveyorLineDTO conveyor)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                if (conveyor == null) throw new Exception("璇锋眰鏁版嵁涓虹┖");
-                if (string.IsNullOrEmpty(conveyor.Station)) throw new Exception("绔欑偣缂栧彿涓虹┖");
-                CommonConveyorLine conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceName == "杈撻�佺嚎") as CommonConveyorLine;
-                if (!conveyorLine.IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
+                OtherDevice? ProductionLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == conveyor.Station) as OtherDevice;
+                if (ProductionLine == null) throw new Exception("鏈壘鍒颁骇绾胯澶囦俊鎭�");
+                if (!ProductionLine.IsConnected) throw new Exception($"浜х嚎璁惧閫氳寮傚父");
+                content.Status = ProductionLine.SetValue(ProductionLineDBName.WagvState, conveyor.Type);
+                if (!content.Status) throw new Exception("鍐欏叆AGV淇″彿澶辫触");
+                var agvState = ProductionLine.GetValue<ProductionLineDBName, short>(ProductionLineDBName.agvState);
+                if (agvState == 3) throw new Exception("浜х嚎璁惧寮傚父");
                 switch (conveyor.Type)
                 {
                     case 1:
-                        content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestPut, true, conveyor.Station);
-                        if (content.Status) content.Status = conveyorLine.GetValue<ConveyorLine_AGV, bool>(ConveyorLine_AGV.ConveyorLinePermitPut, conveyor.Station);
+                        if (agvState != conveyor.Type) throw new Exception("浜х嚎涓嶅厑璁歌繘鍏ヤ綔涓�");
                         break;
                     case 2:
-                        content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVPutComplete, true, conveyor.Station);
+                        if (agvState != conveyor.Type) throw new Exception("浜х嚎涓嶅厑璁哥寮�");
                         break;
                     case 3:
-                        content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVRequestTake, true, conveyor.Station);
-                        if (content.Status) content.Status = conveyorLine.GetValue<ConveyorLine_AGV, bool>(ConveyorLine_AGV.ConveyorLinePermitTake, conveyor.Station);
+                        content.Status = ProductionLine.SetValue(ProductionLineDBName.Wrequest, 2);
+                        if (content.Status) content.Status = ProductionLine.SetValue(ProductionLineDBName.WagvState, 0);
                         break;
-                    case 4:
-                        content.Status = conveyorLine.SetValue(ConveyorLine_AGV.WriteAGVTakeComplete, true, conveyor.Station);
-                        break;
-                    default: throw new Exception($"绫诲瀷鏈夎[Type锛歿conveyor.Type}]");
                 }
-                content = content.Status ? content.OK() : content.Error();
+                content = content.Status ? content.OK() : content.Error("鍐欏叆澶辫触");
             }
             catch (Exception ex)
             {

--
Gitblit v1.9.3