From b6837f097e9cdb2645368aed4ddb03f580c331e4 Mon Sep 17 00:00:00 2001 From: z8018 <1282578289@qq.com> Date: 星期一, 05 五月 2025 17:29:07 +0800 Subject: [PATCH] 1 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs | 135 +++++++++++++++++++++++++++++++++----------- 1 files changed, 100 insertions(+), 35 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 30a28cd..7dfb4a9 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" @@ -8,10 +8,12 @@ using WIDESEAWCS_Common; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_IBasicInfoRepository; +using WIDESEAWCS_IBasicInfoService; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; +using WIDESEAWCS_QuartzJob.DTO; namespace WIDESEAWCS_Tasks { @@ -25,12 +27,14 @@ private readonly ITaskService _taskService; private readonly IContainerItemRepository _containerItemRepository; private readonly WebSocketServer _webSocketServer; - public GantryJob(ITaskRepository taskRepository, ITaskService taskService, IContainerItemRepository containerItemRepository, WebSocketServer webSocketServer) + private readonly IOrderDetailsService _orderDetailsService; + public GantryJob(ITaskRepository taskRepository, ITaskService taskService, IContainerItemRepository containerItemRepository, WebSocketServer webSocketServer, IOrderDetailsService orderDetailsService) { _taskRepository = taskRepository; _taskService = taskService; _containerItemRepository = containerItemRepository; _webSocketServer = webSocketServer; + _orderDetailsService = orderDetailsService; } public Task Execute(IJobExecutionContext context) @@ -57,38 +61,40 @@ string[] takePositions = task.CurrentAddress.Split("*"); if (takePositions.Length != 5) { - //WriteError + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鍙栬揣浣嶇疆閿欒"); return Task.CompletedTask; } string[] putPositions = task.NextAddress.Split("*"); if (putPositions.Length != 5) { - //WriteError + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鏀捐揣浣嶇疆閿欒"); return Task.CompletedTask; } Dt_ContainerItem containerItem = _containerItemRepository.QueryFirst(x => x.ItemCode == task.PalletCode); if (containerItem == null) { - //WriteError + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鏉挎潗灏哄鑾峰彇閿欒"); 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); + if (!LightStatusStorage.StationStautsDic.TryGetValue(putPositions[0],out bool stationStatus)) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", $"宸ヤ綅銆恵putPositions[0]}銆戞湁鏃犲灚鏉挎暟鎹敊璇�,{LightStatusStorage.StationStautsDic.Serialize()}"); + return Task.CompletedTask; + } + if (!stationStatus) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", $"宸ヤ綅銆恵putPositions[0]}銆戞棤鍨澘,{LightStatusStorage.StationStautsDic.Serialize()}"); + return Task.CompletedTask; + } + 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) + if (OPositions.HPositions[takePositions[0]].PositionZ == 0) { WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鍙栬揣Z鍧愭爣璇诲彇涓�0"); return Task.CompletedTask; @@ -107,45 +113,87 @@ } int putPoR = 0; - if (Convert.ToInt32(takePositions[4]) == 1) + int temp = 1000; + if(otherDevice.DeviceCode == "GT02") { - 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; + temp = -1000; + } + + if (Convert.ToInt32(takePositions[4]) == 1 || Convert.ToInt32(takePositions[4]) == 2) + { + takePoX = takePoX * temp + OPositions.HPositions[takePositions[0]].PositionX; + takePoY = takePoY * temp + OPositions.HPositions[takePositions[0]].PositionY; + putPoX = putPoX * temp + OPositions.HPositions[putPositions[0]].PositionX; + putPoY = putPoY * temp + OPositions.HPositions[putPositions[0]].PositionY; takePoR = OPositions.HPositions[takePositions[0]].PositionR; - putPoR = OPositions.HPositions[putPositions[0]].PositionR; + + if (Convert.ToInt32(takePositions[4]) == 1) + putPoR = OPositions.HPositions[putPositions[0]].PositionR; + else + { + if (otherDevice.DeviceCode == "GT03") + putPoR = otherDevice.Communicator.Read<int>("DB10.840"); + else if (otherDevice.DeviceCode == "GT02") + putPoR = otherDevice.Communicator.Read<int>("DB10.836"); + else if (otherDevice.DeviceCode == "GT01") + putPoR = otherDevice.Communicator.Read<int>("DB10.832"); + else + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "R鍧愭爣閿欒"); + return Task.CompletedTask; + } + } 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; + takePoX = takePoX * temp + OPositions.ZPositions[takePositions[0]].PositionX; + takePoY = takePoY * temp + OPositions.ZPositions[takePositions[0]].PositionY; + putPoX = putPoX * temp + OPositions.ZPositions[putPositions[0]].PositionX; + putPoY = putPoY * temp + 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}"); } + #region + List<DeviceProDTO> devicePros = otherDevice.DeviceProDTOs.Where(x => x.DeviceProParamType == "MaxPosition").ToList(); - 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); + DeviceProDTO? devicePro = devicePros.OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + if(devicePro == null) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "璁惧鍗忚鍙傛暟閿欒锛屾湭鎵惧埌鏈�澶ф渶灏忓潗鏍囧湴鍧�"); + return Task.CompletedTask; + } + int[] data = otherDevice.Communicator.Read<int>(devicePro.DeviceProAddress, (ushort)(devicePros.Count)); - if(takePoX < minX || takePoX > maxX) + int maxX = data[0]; + int minX = data[1]; + int maxY = data[2]; + int minY = data[3]; + int maxZ = data[4]; + int minZ = data[5]; + int maxR = data[6]; + int minR = data[7]; + + //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) + if (putPoX < minX || putPoX > maxX) { WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"X鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}"); return Task.CompletedTask; @@ -186,7 +234,10 @@ WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"R鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}"); return Task.CompletedTask; } + #endregion + otherDevice.SetValue(GantryDBName.TwoHand, true); + otherDevice.SetValue(GantryDBName.TaskNum, task.TaskNum); otherDevice.SetValue(GantryDBName.TakePositionX, takePoX); otherDevice.SetValue(GantryDBName.TakePositionY, takePoY); otherDevice.SetValue(GantryDBName.TakePositionZ, takePoZ); @@ -203,11 +254,19 @@ task.TaskState = TaskStatusEnum.Gantry_Executing.ObjToInt(); _taskRepository.UpdateData(task); + + if (LightStatusStorage.LightStatusDic.TryGetValue(putPositions[0], out LightStatusEnum lightStatusDic)) + { + if (lightStatusDic != LightStatusEnum.LightWorking) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightWorking; + } + } } } else if (gantryWorkStatus == 5) { - int currentTaskNum = otherDevice.GetValue<GantryDBName, int>(GantryDBName.CurrentTaskNum); + int currentTaskNum = otherDevice.GetValue<GantryDBName, int>(GantryDBName.TaskNum); if (currentTaskNum > 0) { Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == currentTaskNum); @@ -215,6 +274,12 @@ { _taskService.TaskComplete(task); + Task.Run(() => + { + _orderDetailsService.ToMes(task.PalletCode, 4); + }); + + string[] putPositions = task.NextAddress.Split("*"); if (putPositions.Length != 5) { -- Gitblit v1.9.3