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