From 1f361850d35ba47225951efbc49d592eea685cf8 Mon Sep 17 00:00:00 2001
From: z8018 <1282578289@qq.com>
Date: 星期三, 16 四月 2025 17:35:53 +0800
Subject: [PATCH] 1

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs |  184 ++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 160 insertions(+), 24 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs"
index f3ce8eb..30a28cd 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs"
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using HslCommunication.WebSocket;
 using Quartz;
 using WIDESEAWCS_Common;
 using WIDESEAWCS_Core.Helper;
@@ -23,37 +24,38 @@
         private readonly ITaskRepository _taskRepository;
         private readonly ITaskService _taskService;
         private readonly IContainerItemRepository _containerItemRepository;
-        public GantryJob(ITaskRepository taskRepository, ITaskService taskService, IContainerItemRepository containerItemRepository)
+        private readonly WebSocketServer _webSocketServer;
+        public GantryJob(ITaskRepository taskRepository, ITaskService taskService, IContainerItemRepository containerItemRepository, WebSocketServer webSocketServer)
         {
             _taskRepository = taskRepository;
             _taskService = taskService;
             _containerItemRepository = containerItemRepository;
+            _webSocketServer = webSocketServer;
         }
 
         public Task Execute(IJobExecutionContext context)
         {
-            try
+            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
+            if (flag && value != null && value is OtherDevice)
             {
-                bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
-                if (flag && value != null && value is OtherDevice)
+                OtherDevice otherDevice = (OtherDevice)value;
+                try
                 {
-                    OtherDevice otherDevice = (OtherDevice)value;
-
                     byte gantryStatus = otherDevice.GetValue<GantryDBName, byte>(GantryDBName.GantryStatus);
                     byte gantryAutoStatus = otherDevice.GetValue<GantryDBName, byte>(GantryDBName.GantryAutoStatus);
                     byte gantryWorkStatus = otherDevice.GetValue<GantryDBName, byte>(GantryDBName.GantryWorkStatus);
 
-                    if(gantryStatus == 1 && gantryAutoStatus == 3 && gantryWorkStatus == 0)
+                    if (gantryStatus == 1 && gantryAutoStatus == 3 && gantryWorkStatus == 0)
                     {
                         // 閫昏緫澶勭悊
                         // 1. 璇诲彇浠诲姟
                         // 2. 浠诲姟鎵ц
                         // 3. 浠诲姟瀹屾垚
                         Dt_Task? task = _taskService.QueryAGantryUnExecuteTask(otherDevice.DeviceCode);
-                        if(task != null)
+                        if (task != null)
                         {
                             string[] takePositions = task.CurrentAddress.Split("*");
-                            if(takePositions.Length != 5)
+                            if (takePositions.Length != 5)
                             {
                                 //WriteError
                                 return Task.CompletedTask;
@@ -72,20 +74,127 @@
                                 //WriteError
                                 return Task.CompletedTask;
                             }
+                            if (LightStatusStorage.LightStatusDic.TryGetValue(putPositions[0], out LightStatusEnum lightStatusDic))
+                            {
+                                if (lightStatusDic != LightStatusEnum.LightWorking)
+                                {
+                                    LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightWorking;
+                                }
+                            }
 
                             otherDevice.SetValue(GantryDBName.TwoHand, true);
-
                             otherDevice.SetValue(GantryDBName.TaskNum, task.TaskNum);
-                            //otherDevice.SetValue(GantryDBName.TakePosition, Convert.ToInt32(takePositions[0]));
-                            otherDevice.SetValue(GantryDBName.TakePositionX, Convert.ToInt32(takePositions[1]));
-                            otherDevice.SetValue(GantryDBName.TakePositionY, Convert.ToInt32(takePositions[2]));
-                            otherDevice.SetValue(GantryDBName.TakePositionZ, Convert.ToInt32(takePositions[3]));
-                            otherDevice.SetValue(GantryDBName.TakePositionR, Convert.ToInt32(takePositions[4]));
-                            //otherDevice.SetValue(GantryDBName.PutPosition, Convert.ToInt32(putPositions[0]));
-                            otherDevice.SetValue(GantryDBName.PutPositionX, Convert.ToInt32(putPositions[1]));
-                            otherDevice.SetValue(GantryDBName.PutPositionY, Convert.ToInt32(putPositions[2]));
-                            otherDevice.SetValue(GantryDBName.PutPositionZ, Convert.ToInt32(putPositions[3]));
-                            otherDevice.SetValue(GantryDBName.PutPositionR, Convert.ToInt32(putPositions[4]));
+                            int takePoX = Convert.ToInt32(takePositions[1]);
+                            int takePoY = Convert.ToInt32(takePositions[2]);
+                            int takePoZ = OPositions.HPositions[takePositions[0]].PositionZ + 30 * 1000 - Convert.ToInt32(takePositions[3]) * 1000;
+
+                            if(OPositions.HPositions[takePositions[0]].PositionZ == 0)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鍙栬揣Z鍧愭爣璇诲彇涓�0");
+                                return Task.CompletedTask;
+                            }
+
+                            int takePoR = 0;
+
+                            int putPoX = Convert.ToInt32(putPositions[1]);
+                            int putPoY = Convert.ToInt32(putPositions[2]);
+                            int putPoZ = OPositions.HPositions[putPositions[0]].PositionZ - Convert.ToInt32(putPositions[3]) * 1000;
+
+                            if (OPositions.HPositions[takePositions[0]].PositionZ == 0)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鏀捐揣Z鍧愭爣璇诲彇涓�0");
+                                return Task.CompletedTask;
+                            }
+                            int putPoR = 0;
+
+                            if (Convert.ToInt32(takePositions[4]) == 1)
+                            {
+                                takePoX = takePoX * 1000 + OPositions.HPositions[takePositions[0]].PositionX;
+                                takePoY = takePoY * 1000 + OPositions.HPositions[takePositions[0]].PositionY;
+                                putPoX = putPoX * 1000 + OPositions.HPositions[putPositions[0]].PositionX;
+                                putPoY = putPoY * 1000 + OPositions.HPositions[putPositions[0]].PositionY;
+                                takePoR = OPositions.HPositions[takePositions[0]].PositionR;
+                                putPoR = OPositions.HPositions[putPositions[0]].PositionR;
+
+                                WriteDebug($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"鍙栬揣浣嶏細{takePositions[0]},鏀捐揣浣嶏細{putPositions[0]}{Environment.NewLine}鍙栬揣鍧愭爣锛歑:{takePoX} Y:{takePoY} Z:{takePoZ} R:{takePoR}{Environment.NewLine}鏀捐揣鍧愭爣锛歑:{putPoX} Y:{putPoY} Z:{putPoZ} R:{putPoR}{Environment.NewLine}璇诲彇PLC鍙栬揣鍧愭爣锛歑:{OPositions.HPositions[takePositions[0]].PositionX} Y:{OPositions.HPositions[takePositions[0]].PositionY} Z:{OPositions.HPositions[takePositions[0]].PositionZ} R:{OPositions.HPositions[takePositions[0]].PositionR}{Environment.NewLine}璇诲彇PLC鏀捐揣鍧愭爣锛歑:{OPositions.HPositions[putPositions[0]].PositionX} Y:{OPositions.HPositions[putPositions[0]].PositionY} Z:{OPositions.HPositions[putPositions[0]].PositionZ} R:{OPositions.HPositions[putPositions[0]].PositionR}");
+                            }
+                            else
+                            {
+                                takePoX = takePoX * 1000 + OPositions.ZPositions[takePositions[0]].PositionX;
+                                takePoY = takePoY * 1000 + OPositions.ZPositions[takePositions[0]].PositionY;
+                                putPoX = putPoX * 1000 + OPositions.ZPositions[putPositions[0]].PositionX;
+                                putPoY = putPoY * 1000 + OPositions.ZPositions[putPositions[0]].PositionY;
+                                takePoR = OPositions.ZPositions[takePositions[0]].PositionR;
+                                putPoR = OPositions.ZPositions[putPositions[0]].PositionR;
+
+                                WriteDebug($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"鍙栬揣浣嶏細{takePositions[0]},鏀捐揣浣嶏細{putPositions[0]}{Environment.NewLine}鍙栬揣鍧愭爣锛歑:{takePoX} Y:{takePoY} Z:{takePoZ} R:{takePoR}{Environment.NewLine}鏀捐揣鍧愭爣锛歑:{putPoX} Y:{putPoY} Z:{putPoZ} R:{putPoR}{Environment.NewLine}璇诲彇PLC鍙栬揣鍧愭爣锛歑:{OPositions.ZPositions[takePositions[0]].PositionX} Y:{OPositions.ZPositions[takePositions[0]].PositionY} Z:{OPositions.ZPositions[takePositions[0]].PositionZ} R:{OPositions.ZPositions[takePositions[0]].PositionR}{Environment.NewLine}璇诲彇PLC鏀捐揣鍧愭爣锛歑:{OPositions.ZPositions[putPositions[0]].PositionX} Y:{OPositions.ZPositions[putPositions[0]].PositionY} Z:{OPositions.ZPositions[putPositions[0]].PositionZ} R:{OPositions.ZPositions[putPositions[0]].PositionR}");
+                            }
+
+                            int maxX = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxX);
+                            int minX = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinX);
+                            int maxY = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxY);
+                            int minY = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinY);
+                            int maxZ = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxZ);
+                            int minZ = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinZ);
+                            int maxR = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MaxR);
+                            int minR = otherDevice.GetValue<GantryDBName, int>(GantryDBName.MinR);
+
+                            if(takePoX < minX || takePoX > maxX)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"X鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}");
+                                return Task.CompletedTask;
+                            }
+
+                            if(putPoX < minX || putPoX > maxX)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"X鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}");
+                                return Task.CompletedTask;
+                            }
+
+                            if (takePoY < minY || takePoY > maxY)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"Y鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoY},鏈�澶у�硷細{maxY},鏈�灏忓�硷細{minY}");
+                                return Task.CompletedTask;
+                            }
+
+                            if (putPoY < minY || putPoY > maxY)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"Y鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoY},鏈�澶у�硷細{maxY},鏈�灏忓�硷細{minY}");
+                                return Task.CompletedTask;
+                            }
+
+                            if (takePoZ < minZ || takePoZ > maxZ)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"Z鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoZ},鏈�澶у�硷細{maxZ},鏈�灏忓�硷細{minZ}");
+                                return Task.CompletedTask;
+                            }
+
+                            if (putPoZ < minZ || putPoZ > maxZ)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"Z鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoZ},鏈�澶у�硷細{maxZ},鏈�灏忓�硷細{minZ}");
+                                return Task.CompletedTask;
+                            }
+
+                            if (takePoR < minR || takePoR > maxR)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"R鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}");
+                                return Task.CompletedTask;
+                            }
+
+                            if (putPoR < minR || putPoR > maxR)
+                            {
+                                WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"R鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}");
+                                return Task.CompletedTask;
+                            }
+
+                            otherDevice.SetValue(GantryDBName.TakePositionX, takePoX);
+                            otherDevice.SetValue(GantryDBName.TakePositionY, takePoY);
+                            otherDevice.SetValue(GantryDBName.TakePositionZ, takePoZ);
+                            otherDevice.SetValue(GantryDBName.TakePositionR, takePoR);
+                            otherDevice.SetValue(GantryDBName.PutPositionX, putPoX);
+                            otherDevice.SetValue(GantryDBName.PutPositionY, putPoY);
+                            otherDevice.SetValue(GantryDBName.PutPositionZ, putPoZ);
+                            otherDevice.SetValue(GantryDBName.PutPositionR, putPoR);
                             otherDevice.SetValue(GantryDBName.Length, containerItem.ItemLength);
                             otherDevice.SetValue(GantryDBName.Width, containerItem.ItemWidth);
                             otherDevice.SetValue(GantryDBName.Height, containerItem.ItemHeight);
@@ -96,15 +205,42 @@
                             _taskRepository.UpdateData(task);
                         }
                     }
-                    else if(gantryWorkStatus == 5)
+                    else if (gantryWorkStatus == 5)
                     {
-                        
+                        int currentTaskNum = otherDevice.GetValue<GantryDBName, int>(GantryDBName.CurrentTaskNum);
+                        if (currentTaskNum > 0)
+                        {
+                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == currentTaskNum);
+                            if (task != null)
+                            {
+                                _taskService.TaskComplete(task);
+
+                                string[] putPositions = task.NextAddress.Split("*");
+                                if (putPositions.Length != 5)
+                                {
+                                    //WriteError
+                                    return Task.CompletedTask;
+                                }
+                                if (LightStatusStorage.LightStatusDic.TryGetValue(putPositions[0], out LightStatusEnum lightStatusDic))
+                                {
+                                    if (lightStatusDic != LightStatusEnum.Ready)
+                                    {
+                                        LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.Ready;
+                                    }
+                                }
+                            }
+                        }
+                        otherDevice.SetValue(GantryDBName.WorkType, 5);
                     }
                 }
+                catch (Exception ex)
+                {
+                    WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", ex.Message, ex);
+                }
             }
-            catch (Exception ex)
+            else
             {
-
+                WriteError(nameof(GantryJob), "鍙傛暟閿欒,鏈紶閫掕澶囧弬鏁版垨璁惧绫诲瀷閿欒");
             }
             return Task.CompletedTask;
         }

--
Gitblit v1.9.3