From 4d7c377173784d6ec495b2c4178395a65f4e2a76 Mon Sep 17 00:00:00 2001
From: zhangchengsong <zhangchengsong@hnkhzn.com>
Date: 星期三, 22 四月 2026 19:55:18 +0800
Subject: [PATCH] 1

---
 项目代码/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |   89 ++++++++++++++++----------------------------
 1 files changed, 32 insertions(+), 57 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index c549912..f90cde9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -60,32 +60,6 @@
         }
         private static readonly Dictionary<string, bool> _deviceLastStatus = new Dictionary<string, bool>();
         public string urlWMSdeverror = WIDESEAWCS_Core.Helper.AppSettings.Configuration["urlWMSdeverror"];
-        private static readonly Dictionary<string, string> _stackerFaultMap = new Dictionary<string, string>
-        {
-            { "DB107.26.0", "杞借揣鍙拌揣鐗╄秴瀹�" },{ "DB107.26.1", "杞借揣鍙拌揣鐗╄秴闀�" },{ "DB107.26.2", "杞借揣鍙拌揣鐗╄秴楂�" },
-            { "DB107.26.3", "杞借揣鍙拌揣鐗╂娴嬩紶鎰熷櫒寮傚父" },{ "DB107.26.4", "璐у弶缂栫爜鍣ㄥ�奸敊璇�" },{ "DB107.26.5", "璐у弶鍔ㄤ綔瓒呮椂" },
-            { "DB107.26.6", "璐у弶缂栫爜鍣ㄥ�间笌涓綅淇″彿涓嶄竴鑷�" },{ "DB107.26.7", "鏃犳晥鐨勪换鍔$被鍨�" },{ "DB107.27.0", "鏃犳晥鐨勪綔涓氬湴鍧�" },
-            { "DB107.27.1", "閲嶅叆搴�" },{ "DB107.27.2", "绌哄嚭搴�" },{ "DB107.27.3", "璐х墿楂樺害涓庤揣浣嶄笉鍖归厤" },
-            { "DB107.27.4", "鍙栬揣閫氶亾鍫靛" },{ "DB107.27.5", "鏀捐揣閫氶亾鍫靛" },{ "DB107.27.6", "鏀捐揣瀹屾垚鍚庤浇璐у彴浠嶇劧鏈夎揣" },
-            { "DB107.27.7", "浠诲姟鏈畬鎴愯秴鏃舵姤璀�" },{ "DB107.28.0", "灏卞湴鏌滄�ュ仠瑙﹀彂" },{ "DB107.28.1", "鏈鸿浇鏌滄�ュ仠瑙﹀彂" },
-            { "DB107.28.2", "杩滅▼鎬ュ仠瑙﹀彂" },{ "DB107.28.3", "瀹夊叏闂ㄨ鎵撳紑" },{ "DB107.28.4", "瀹夊叏缁х數鍣ㄦ柇寮�" },
-            { "DB107.28.5", "鏉剧怀妫�娴�" },{ "DB107.28.6", "瓒呴�熶繚鎶�" },{ "DB107.28.7", "琛岃蛋鍙橀鍣ㄦ晠闅�" },
-            { "DB107.29.0", "鍗囬檷鍙橀鍣ㄦ晠闅�" },{ "DB107.29.1", "璐у弶1鍙橀鍣ㄦ晠闅�" },{ "DB107.29.2", "璐у弶2鍙橀鍣ㄦ晠闅�" },
-            { "DB107.29.3", "鍗囬檷琛岃蛋瀹氫綅瓒呮椂" },{ "DB107.29.4", "璐у弶1缂栫爜鍣ㄥ�间笌涓綅淇″彿涓嶄竴鑷�" },{ "DB107.29.5", "璐у弶2缂栫爜鍣ㄥ�间笌涓綅淇″彿涓嶄竴鑷�" },
-            { "DB107.29.6", "琛岃蛋婵�鍏夊�奸敊璇�" },{ "DB107.29.7", "鍗囬檷婵�鍏夊�奸敊璇�" },{ "DB107.30.0", "鍓嶈繘鏋侀檺琛岀▼" },
-            { "DB107.30.1", "鍚庨��鏋侀檺琛岀▼" },{ "DB107.30.2", "涓婂崌鏋侀檺琛岀▼" },{ "DB107.30.3", "涓嬮檷鏋侀檺琛岀▼" },
-            { "DB107.30.4", "璐у弶1宸︽瀬闄愯绋�" },{ "DB107.30.5", "璐у弶1鍙虫瀬闄愯绋�" },{ "DB107.30.6", "璐у弶2宸︽瀬闄愯绋�" },
-            { "DB107.30.7", "璐у弶2鍙虫瀬闄愯绋�" },{ "DB107.31.0", "鍓嶈繘婵�鍏夋瀬闄愪繚鎶�" },{ "DB107.31.1", "鍚庨��婵�鍏夋瀬闄愪繚鎶�" },
-            { "DB107.31.2", "涓婂崌婵�鍏夋瀬闄愪繚鎶�" },{ "DB107.31.3", "涓嬮檷婵�鍏夋瀬闄愪繚鎶�" },{ "DB107.31.4", "璐у弶1宸﹁蒋鏋侀檺" },
-            { "DB107.31.5", "璐у弶1鍙宠蒋鏋侀檺" },{ "DB107.31.6", "璐у弶2宸﹁蒋鏋侀檺" },{ "DB107.31.7", "璐у弶2鍙宠蒋鏋侀檺" },
-            { "DB107.32.0", "涓庡湴闈㈢珯缃戠粶鏂紑" },{ "DB107.32.1", "涓庤緭閫佺嚎缃戠粶鏂紑" },{ "DB107.32.2", "涓嶹CS缃戠粶鏂紑" },
-            { "DB107.32.3", "鏃犳晥鍛戒护:鍫嗗灈鏈烘湁璐�" },{ "DB107.32.4", "鏃犳晥鍛戒护:鍫嗗灈鏈烘棤璐�" },{ "DB107.32.5", "娑堥槻璇姤" },
-            { "DB107.32.6", "鍓嶈繘闆疯揪鎶ヨ" },{ "DB107.32.7", "鍚庨��闆疯揪鎶ヨ" },{ "DB107.33.0", "宸﹂槻鐏棬瓒呮椂" },
-            { "DB107.33.1", "鍙抽槻鐏棬瓒呮椂" },{ "DB107.33.2", "鏇跨姜缇婃娴嬫姤璀�" },{ "DB107.33.3", "杩戝弶杩愯寮傚父" },
-            { "DB107.33.4", "杩滃弶杩愯寮傚父" },{ "DB107.33.5", "姘村钩杩愯寮傚父" },{ "DB107.33.6", "鍗囬檷杩愯寮傚父" },
-            { "DB107.34.0", "鍗囬檷鍒硅溅寮傚父" },{ "DB107.34.1", "琛岃蛋鍒硅溅寮傚父" },{ "DB107.34.2", "杩戝弶鍒硅溅寮傚父" },
-            { "DB107.34.3", "杩滃弶鍒硅溅寮傚父" },{ "DB107.34.4", "宸︿晶杩囪浇" },{ "DB107.34.5", "鍙充晶杩囪浇" }
-        };
 
 
         public Task Execute(IJobExecutionContext context)
@@ -95,7 +69,7 @@
                 CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                 if (commonStackerCrane != null)
                 {
-                    WriteLog.Write_Log("鍫嗗灈鏈哄綋鍓嶇姸鎬佷俊鎭�", $"{commonStackerCrane.DeviceCode}搴撳爢鍨涙満褰撳墠鐘舵��",
+                WriteLog.Write_Log("鍫嗗灈鏈哄綋鍓嶇姸鎬佷俊鎭�", $"{commonStackerCrane.DeviceCode}搴撳爢鍨涙満褰撳墠鐘舵��",
                                                 $"鍫嗗灈鏈鸿澶囩姸鎬佸湴鍧�:銆怐B105.2.0銆�,璇诲彇鐨勬暟鎹細銆恵commonStackerCrane.StackerCraneAutoStatusDes}銆慭n" +
                                                $"鍫嗗灈鏈哄伐浣滄ā寮忓湴鍧�:銆怐B105.3.0銆�,璇诲彇鐨勬暟鎹細銆恵commonStackerCrane.StackerCraneStatusDes}銆慭n" +
                                                $"鍫嗗灈鏈轰綔涓氱姸鎬佸湴鍧�:銆怐B105.22.0銆�,璇诲彇鐨勬暟鎹細銆恵commonStackerCrane.StackerCraneWorkStatusDes}銆慭n" +
@@ -150,7 +124,7 @@
                             WebResponseContent webResponse = _taskService.StackCraneTaskCompleted(commonStackerCrane.CurrentTaskNum, PalletCode);
                             if (webResponse.Status)
                             {
-                                WriteLog.Write_Log("鍫嗗灈鏈轰换鍔′笂鎶ュ畬鎴愪俊鎭�", "鍫嗗灈鏈轰换鍔′笂鎶ュ畬鎴愪俊鎭�", $"銆恵commonStackerCrane.DeviceCode}銆戝簱鍫嗗灈鏈轰笂鎶ヤ换鍔″彿:銆恵commonStackerCrane.CurrentTaskNum}銆戝畬鎴愪俊鍙凤紒");
+                                Task.Run(() => WriteLog.Write_Log("鍫嗗灈鏈轰换鍔′笂鎶ュ畬鎴愪俊鎭�", "鍫嗗灈鏈轰换鍔′笂鎶ュ畬鎴愪俊鎭�", $"銆恵commonStackerCrane.DeviceCode}銆戝簱鍫嗗灈鏈轰笂鎶ヤ换鍔″彿:銆恵commonStackerCrane.CurrentTaskNum}銆戝畬鎴愪俊鍙凤紒"));
 
                                 bool ddjfk = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                             }
@@ -196,7 +170,7 @@
         /// <summary>
         /// 鏁呴殰涓婃姤锛堟敼涓篴wait璋冪敤锛屼慨澶嶅紓姝UG锛�
         /// </summary>
-        private async Task SendDevError(CommonStackerCrane crane, string errorcode, string dealType, string errorInfo = "")
+        public void SendDevError(CommonStackerCrane crane, string errorcode, string dealType, string errorInfo = "")
         {
             CommandResult commandResult = new CommandResult();
             try
@@ -221,8 +195,7 @@
                     psd = "akjfapjfpadaoif",
                 };
                 
-                // 鍚屾HTTP鏀逛负寮傛锛堟帹鑽愶級锛屼繚鎸佷綘鍘熸湁浠g爜涔熷彲浠�
-                commandResult =  await Task.Run(() => HttpHelper.Post<CommandResult>(urlWMSdeverror, deviceErrorRequest, "璁惧鏁呴殰鍥炶皟"));
+                commandResult = HttpHelper.Post<CommandResult>(urlWMSdeverror, deviceErrorRequest, "璁惧鏁呴殰鍥炶皟");
                 WriteLog.Write_Log("鍚屾缁欎笂娓歌澶囨晠闅滀俊鎭�", "璁惧鏁呴殰淇℃伅", $"璁惧id锛氥�恵crane.DeviceCode}銆戯紝鎴愬姛", $"璁惧鍥炶皟鐘舵�侊細銆恵dealType}銆戯紝寮傚父淇℃伅锛氥�恵errorInfo}銆慭n" +
                     $"璋冪敤涓婃父杩斿洖缁撴灉淇℃伅锛氥�恵commandResult?.ToJsonString() ?? "杩斿洖缁撴灉涓簄ull"}銆�");
             }
@@ -258,9 +231,9 @@
                                 return taskItem;
                             }
                         }
-                        else if (taskItem.TaskType == (int)TaskTypeEnum.Inbound || taskItem.TaskType == (int)TaskTypeEnum.Inventorybound)
+                        else if ((InTaskStationIsOccupied(taskItem.SourceAddress, taskItem.Roadway) && taskItem.TaskType == (int)TaskTypeEnum.Inbound) || taskItem.TaskType == (int)TaskTypeEnum.Inventorybound)
                         {
-                            InTaskStationIsOccupied(taskItem.SourceAddress, taskItem.Roadway);
+                            
                             return taskItem;
                         }
                     }
@@ -284,12 +257,9 @@
         {
             try
             {
-                CommonConveyorLine? conveyorLine = null;
-                lock (Storage.Devices)
-                {
+                    CommonConveyorLine? conveyorLine = null;
                     string deviceCode = Roadway == "C" ? "1004" : "1003";
                     conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == deviceCode) as CommonConveyorLine;
-                }
                 if (conveyorLine == null) return false;
 
                 DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == NextAddress && x.DeviceProParamName == "StationNum");
@@ -299,44 +269,42 @@
                 int StationNum = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
                 int HandShake = conveyorLine.Communicator.Read<ushort>(HandShakeprodto.DeviceProAddress);
 
-                Task.Run(() => WriteLog.Write_Log("鍑哄簱搴撳彛鐘舵�佷俊鎭�", "鍑哄簱搴撳彛鐘舵�佷俊鎭�", $"搴撳彛鏄�恵NextAddress}銆戯紝鐢宠鐘舵�佸湴鍧�锛氥�恵HandShakeprodto.DeviceProAddress}銆�,璇诲彇鐨勬暟鎹細銆恵HandShake}銆慭n搴撳彛鏄惁鏈夎揣鐘舵�佸湴鍧�锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鐨勬暟鎹�恵StationNum}銆�"));
-
-                if (Roadway == "C") return StationNum == 0 && HandShake == 0;
-                return (StationNum == 1 && HandShake == 0 && Roadway == "B") || (StationNum == 0 && HandShake == 0);
+                WriteLog.Write_Log("鍑哄簱搴撳彛鐘舵�佷俊鎭�", "鍑哄簱搴撳彛鐘舵�佷俊鎭�", $"搴撳彛鏄�恵NextAddress}銆戯紝鐢宠鐘舵�佸湴鍧�锛氥�恵HandShakeprodto.DeviceProAddress}銆�,璇诲彇鐨勬暟鎹細銆恵HandShake}銆慭n搴撳彛鏄惁鏈夎揣鐘舵�佸湴鍧�锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鐨勬暟鎹�恵StationNum}銆�");
+                  if (Roadway == "C" || Roadway == "G") return StationNum == 0 && HandShake == 0;
+                return (StationNum == 1 && HandShake == 0 && Roadway == "B");
             }
             catch (Exception ex)
             {
-                Task.Run(() => Console.WriteLine("璇诲彇绔欏彴淇℃伅閿欒锛�" + ex.Message));
+              Console.WriteLine("璇诲彇绔欏彴淇℃伅閿欒锛�" + ex.Message);
                 return false;
             }
         }
         /// <summary>
         /// 鍏ュ簱浠诲姟搴撳彛鏈夎揣鏃犺揣鐘舵��
         /// </summary>
-        private void InTaskStationIsOccupied(string SourceAddress, string Roadway)
+        public bool InTaskStationIsOccupied(string SourceAddress, string Roadway)
         {
             try
             {
+
                 CommonConveyorLine? conveyorLine = null;
-                lock (Storage.Devices)
-                {
                     string deviceCode = Roadway == "C" ? "1004" : "1003";
                     conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == deviceCode) as CommonConveyorLine;
-                }
-                if (conveyorLine == null) return;
+                if (conveyorLine == null) return false;
 
                 DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SourceAddress && x.DeviceProParamName == "StationNum");
                 DeviceProDTO? HandShakeprodto = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SourceAddress && x.DeviceProParamName == "HandShake");
-                if (deviceProDTO == null || HandShakeprodto == null) return;
+                if (deviceProDTO == null || HandShakeprodto == null) return false;
 
                 int StationNum = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
                 int HandShake = conveyorLine.Communicator.Read<ushort>(HandShakeprodto.DeviceProAddress);
-
-                Task.Run(() => WriteLog.Write_Log("鍏ュ簱搴撳彛鐘舵�佷俊鎭�", "鍏ュ簱搴撳彛鐘舵�佷俊鎭�", $"搴撳彛鏄�恵SourceAddress}銆戯紝鐢宠鐘舵�佸湴鍧�锛氥�恵HandShakeprodto.DeviceProAddress}銆�,璇诲彇鐨勬暟鎹細銆恵HandShake}銆慭n搴撳彛鏄惁鏈夎揣鐘舵�佸湴鍧�锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鐨勬暟鎹�恵StationNum}銆�"));
+                WriteLog.Write_Log("鍏ュ簱搴撳彛鐘舵�佷俊鎭�", "鍏ュ簱搴撳彛鐘舵�佷俊鎭�", $"搴撳彛鏄�恵SourceAddress}銆戯紝鐢宠鐘舵�佸湴鍧�锛氥�恵HandShakeprodto.DeviceProAddress}銆�,璇诲彇鐨勬暟鎹細銆恵HandShake}銆慭n搴撳彛鏄惁鏈夎揣鐘舵�佸湴鍧�锛氥�恵deviceProDTO.DeviceProAddress}銆戯紝璇诲彇鐨勬暟鎹�恵StationNum}銆�");
+                return StationNum == 1;
             }
             catch (Exception ex)
             {
-                Task.Run(() => Console.WriteLine("璇诲彇绔欏彴淇℃伅閿欒锛�" + ex.Message));
+               Console.WriteLine("璇诲彇绔欏彴淇℃伅閿欒锛�" + ex.Message);
+                return false;
             }
         }
 
@@ -534,17 +502,24 @@
         /// </summary>
         public string ReadStackerFaults(CommonStackerCrane crane)
         {
-
-            string activeFaults = "";
             try
             {
-                foreach (var fault in _stackerFaultMap)
+                foreach (StackerFault fault in Enum.GetValues(typeof(StackerFault)))
                 {
-                    try { bool isFault = crane.Communicator.Read<bool>(fault.Key); if (isFault) { activeFaults = fault.Value; break; } } catch { }
+                    try
+                    {
+                        bool isFault = crane.Communicator.Read<bool>(fault.ToPlcAddress());
+                        if (isFault)
+                            return fault.GetDesc();
+                    }
+                    catch { }
                 }
             }
-            catch (Exception ex) { WriteLog.Write_Log("DB107鏁呴殰璇诲彇寮傚父", "閿欒", ex.ToString()); }
-            return activeFaults;
+            catch (Exception ex)
+            {
+                WriteLog.Write_Log("DB107鏁呴殰璇诲彇寮傚父", "閿欒", ex.ToString());
+            }
+            return string.Empty;
         }
     }
 }

--
Gitblit v1.9.3