From e46aa927d231af83724683c7286d9db503e24cf7 Mon Sep 17 00:00:00 2001 From: z8018 <1282578289@qq.com> Date: 星期二, 10 六月 2025 11:46:20 +0800 Subject: [PATCH] 1 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Gantry/GantryJob.cs | 490 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 453 insertions(+), 37 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..bb389c8 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,115 +3,531 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using HslCommunication.WebSocket; using Quartz; 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 { /// <summary> - /// 榫欓棬鏋� + /// 榫欓棬鏋朵换鍔″鐞嗙被锛岀户鎵胯嚜JobBase骞跺疄鐜癐Job鎺ュ彛 <br/> + /// 鐗规�DisallowConcurrentExecution]琛ㄧず绂佹骞跺彂鎵ц /// </summary> + /// <remarks> + /// 涓昏鍔熻兘锛� <br/> + /// 1. 妫�鏌ラ緳闂ㄥ悐鐘舵�侊紙鑷姩鐘舵��/宸ヤ綔鐘舵�侊級 <br/> + /// 2. 澶勭悊鍙栬揣/鏀捐揣浠诲姟锛� <br/> + /// - 楠岃瘉浣嶇疆鍧愭爣鏍煎紡 <br/> + /// - 鑾峰彇鏉挎潗灏哄淇℃伅 <br/> + /// - 鏍¢獙宸ヤ綅鍜屽鍣ㄤ俊鎭� <br/> + /// - 璁$畻骞舵牎楠屽潗鏍囪寖鍥� <br/> + /// - 鏇存柊PLC鎺у埗鍙傛暟 <br/> + /// 3. 澶勭悊浠诲姟瀹屾垚鐘舵�侊細 <br/> + /// - 鏇存柊浠诲姟鐘舵�� <br/> + /// - 閫氱煡MES绯荤粺 <br/> + /// - 閲嶇疆宸ヤ綅鐘舵�� <br/> + /// 4. 閿欒澶勭悊锛氳褰曞悇绉嶆牎楠屽け璐ョ殑寮傚父鎯呭喌 <br/> + /// 渚濊禆澶氫釜浠撳偍鍜屾湇鍔℃帴鍙h繘琛屾暟鎹搷浣� + /// </remarks> [DisallowConcurrentExecution] public class GantryJob : JobBase, IJob { private readonly ITaskRepository _taskRepository; private readonly ITaskService _taskService; private readonly IContainerItemRepository _containerItemRepository; - public GantryJob(ITaskRepository taskRepository, ITaskService taskService, IContainerItemRepository containerItemRepository) + private readonly WebSocketServer _webSocketServer; + private readonly IOrderDetailsService _orderDetailsService; + private readonly IContainerRepository _containerRepository; + private readonly IOrderContainerRepository _orderContainerRepository; + + public GantryJob(ITaskRepository taskRepository, ITaskService taskService, IContainerItemRepository containerItemRepository, WebSocketServer webSocketServer, IOrderDetailsService orderDetailsService, IContainerRepository containerRepository, IOrderContainerRepository orderContainerRepository) { _taskRepository = taskRepository; _taskService = taskService; _containerItemRepository = containerItemRepository; + _webSocketServer = webSocketServer; + _orderDetailsService = orderDetailsService; + _containerRepository = containerRepository; + _orderContainerRepository = orderContainerRepository; } public Task Execute(IJobExecutionContext context) { - try + bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); + if (flag && value is OtherDevice otherDevice) { - bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); - if (flag && value != null && value is OtherDevice) + 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) { + #region 鍙栬揣浣嶇疆鍒ゆ柇 string[] takePositions = task.CurrentAddress.Split("*"); - if(takePositions.Length != 5) + if (takePositions.Length != 5) { - //WriteError + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鍙栬揣浣嶇疆閿欒"); + if (task.ExceptionMessage?.Contains("鍙栬揣浣嶇疆閿欒") ?? true) + { + task.ExceptionMessage = "鍙栬揣浣嶇疆閿欒"; + _taskRepository.UpdateData(task); + } return Task.CompletedTask; } + #endregion + #region 鏀捐揣浣嶇疆鍒ゆ柇 string[] putPositions = task.NextAddress.Split("*"); if (putPositions.Length != 5) { - //WriteError + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鏀捐揣浣嶇疆閿欒"); + if (task.ExceptionMessage?.Contains("鏀捐揣浣嶇疆閿欒") ?? true) + { + task.ExceptionMessage = "鏀捐揣浣嶇疆閿欒"; + _taskRepository.UpdateData(task); + } return Task.CompletedTask; } + #endregion + #region 鏉挎潗灏哄鑾峰彇 Dt_ContainerItem containerItem = _containerItemRepository.QueryFirst(x => x.ItemCode == task.PalletCode); if (containerItem == null) { - //WriteError + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鏉挎潗灏哄鑾峰彇閿欒"); + if (task.ExceptionMessage?.Contains("鏉挎潗灏哄鑾峰彇閿欒") ?? true) + { + task.ExceptionMessage = "鏉挎潗灏哄鑾峰彇閿欒"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + #endregion + + #region 鏀捐揣宸ヤ綅鍒ゆ柇 + Dt_Container container = _containerRepository.QueryFirst(x => x.ContainerCode == putPositions[0]); + if (container == null) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", $"鏀捐揣宸ヤ綅銆恵takePositions[0]}銆戞湭鎵惧埌"); + if (task.ExceptionMessage?.Contains($"鏀捐揣宸ヤ綅銆恵takePositions[0]}銆戞湭鎵惧埌") ?? true) + { + task.ExceptionMessage = $"鏀捐揣宸ヤ綅銆恵takePositions[0]}銆戞湭鎵惧埌"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + #endregion + + #region 宸ヤ綅璁㈠崟淇℃伅鍒ゆ柇 + Dt_OrderContainer orderContainer = _orderContainerRepository.QueryFirst(x => x.ContainerCode == putPositions[0] && x.ContainerId == container.Id); + if (orderContainer == null && container.ContainerType != ContainerTypeEnum.ExceptionContainer.ObjToInt()) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", $"鏀捐揣宸ヤ綅銆恵takePositions[0]}銆戞湭鎵惧埌璁㈠崟淇℃伅"); + if (task.ExceptionMessage?.Contains($"鏀捐揣宸ヤ綅銆恵takePositions[0]}銆戞湭鎵惧埌璁㈠崟淇℃伅") ?? true) + { + task.ExceptionMessage = $"鏀捐揣宸ヤ綅銆恵takePositions[0]}銆戞湭鎵惧埌璁㈠崟淇℃伅"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + #endregion + + #region 宸ヤ綅鍨澘璇诲彇鏁版嵁鍒ゆ柇 + if (!LightStatusStorage.StationStautsDic.TryGetValue(putPositions[0], out bool stationStatus)) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", $"宸ヤ綅銆恵putPositions[0]}銆戞湁鏃犲灚鏉挎暟鎹敊璇�,{LightStatusStorage.StationStautsDic.Serialize()}"); + if (task.ExceptionMessage?.Contains($"宸ヤ綅銆恵putPositions[0]}銆戞湁鏃犲灚鏉挎暟鎹敊璇�") ?? true) + { + task.ExceptionMessage = $"宸ヤ綅銆恵putPositions[0]}銆戞湁鏃犲灚鏉挎暟鎹敊璇�"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + #endregion + + #region 宸ヤ綅鍨澘鐘舵�佸垽鏂� + if (!stationStatus) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", $"宸ヤ綅銆恵putPositions[0]}銆戞棤鍨澘,{LightStatusStorage.StationStautsDic.Serialize()}"); + if (task.ExceptionMessage?.Contains($"宸ヤ綅銆恵putPositions[0]}銆戞棤鍨澘") ?? true) + { + task.ExceptionMessage = $"宸ヤ綅銆恵putPositions[0]}銆戞棤鍨澘"; + _taskRepository.UpdateData(task); + } + return Task.CompletedTask; + } + #endregion + + #region 鍙栬揣Z鍧愭爣鍒ゆ柇 + if (OPositions.HPositions[takePositions[0]].PositionZ == 0) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "璇诲彇鍙栬揣Z鍧愭爣璇诲彇涓�0"); + if (task.ExceptionMessage?.Contains($"璇诲彇鍙栬揣Z鍧愭爣璇诲彇涓�0") ?? true) + { + task.ExceptionMessage = $"璇诲彇鍙栬揣Z鍧愭爣璇诲彇涓�0"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + #endregion + + #region 鏀捐揣Z鍧愭爣鍒ゆ柇 + if (OPositions.HPositions[putPositions[0]].PositionZ == 0) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "璇诲彇鏀捐揣Z鍧愭爣璇诲彇涓�0"); + if (task.ExceptionMessage?.Contains($"璇诲彇鏀捐揣Z鍧愭爣璇诲彇涓�0") ?? true) + { + task.ExceptionMessage = $"璇诲彇鏀捐揣Z鍧愭爣璇诲彇涓�0"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + #endregion + + #region 浠诲姟瀹炰綋鍙傛暟杞崲澶勭悊 + 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; + + 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; + + int putPoR = 0; + #endregion + + #region 鍧愭爣涔樹互1000澶勭悊,2#榫欓棬鏋跺彇鍙�(涔樹互-1000) + int temp = 1000; + if (otherDevice.DeviceCode == "GT02") + { + temp = -1000; + } + #endregion + + #region 鍧愭爣璁$畻 + 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; + + 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鍧愭爣閿欒"); + if (task.ExceptionMessage?.Contains($"R鍧愭爣閿欒") ?? true) + { + task.ExceptionMessage = $"R鍧愭爣閿欒"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + } + } + else + { + 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; + } + #endregion + + #region Debug鏃ュ織璁板綍,璁板綍鍙栬揣鍜屾斁璐у潗鏍囦俊鎭� + 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}"); + #endregion + + #region 瓒呰繃瀹瑰櫒瀹藉害澶勭悊 + bool isMoreWidth = orderContainer == null ? false : orderContainer.MaxWidth > container.ContainerWidth; + if (isMoreWidth) + { + putPoX = putPoX - (orderContainer.MaxWidth - container.ContainerWidth) / 2 * temp; + } + #endregion + + #region 鍧愭爣鑼冨洿鍒ゆ柇 + List<DeviceProDTO> devicePros = otherDevice.DeviceProDTOs.Where(x => x.DeviceProParamType == "MaxPosition").ToList(); + + DeviceProDTO? devicePro = devicePros.OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + if (devicePro == null) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "璁惧鍗忚鍙傛暟閿欒锛屾湭鎵惧埌鏈�澶ф渶灏忓潗鏍囧湴鍧�"); + if (task.ExceptionMessage?.Contains($"璁惧鍗忚鍙傛暟閿欒锛屾湭鎵惧埌鏈�澶ф渶灏忓潗鏍囧湴鍧�") ?? true) + { + task.ExceptionMessage = $"璁惧鍗忚鍙傛暟閿欒锛屾湭鎵惧埌鏈�澶ф渶灏忓潗鏍囧湴鍧�"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } return Task.CompletedTask; } - otherDevice.SetValue(GantryDBName.TwoHand, true); + int[] data = otherDevice.Communicator.Read<int>(devicePro.DeviceProAddress, (ushort)(devicePros.Count)); + 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]; + + if (takePoX < minX || takePoX > maxX) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"X鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}"); + if (task.ExceptionMessage?.Contains($"X鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}") ?? true) + { + task.ExceptionMessage = $"X鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + + if (putPoX < minX || putPoX > maxX) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"X鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}"); + if (task.ExceptionMessage?.Contains($"X鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}") ?? true) + { + task.ExceptionMessage = $"X鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + + if (takePoY < minY || takePoY > maxY) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"Y鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoY},鏈�澶у�硷細{maxY},鏈�灏忓�硷細{minY}"); + if (task.ExceptionMessage?.Contains($"Y鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoY},鏈�澶у�硷細{maxY},鏈�灏忓�硷細{minY}") ?? true) + { + task.ExceptionMessage = $"Y鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoY},鏈�澶у�硷細{maxY},鏈�灏忓�硷細{minY}"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + + if (putPoY < minY || putPoY > maxY) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"Y鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoY},鏈�澶у�硷細{maxY},鏈�灏忓�硷細{minY}"); + if (task.ExceptionMessage?.Contains($"Y鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoY},鏈�澶у�硷細{maxY},鏈�灏忓�硷細{minY}") ?? true) + { + task.ExceptionMessage = $"Y鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoY},鏈�澶у�硷細{maxY},鏈�灏忓�硷細{minY}"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + + if (takePoZ < minZ || takePoZ > maxZ) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"Z鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoZ},鏈�澶у�硷細{maxZ},鏈�灏忓�硷細{minZ}"); + if (task.ExceptionMessage?.Contains($"Z鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoZ},鏈�澶у�硷細{maxZ},鏈�灏忓�硷細{minZ}") ?? true) + { + task.ExceptionMessage = $"Z鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoZ},鏈�澶у�硷細{maxZ},鏈�灏忓�硷細{minZ}"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + + if (putPoZ < minZ || putPoZ > maxZ) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"Z鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoZ},鏈�澶у�硷細{maxZ},鏈�灏忓�硷細{minZ}"); + if (task.ExceptionMessage?.Contains($"Z鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoZ},鏈�澶у�硷細{maxZ},鏈�灏忓�硷細{minZ}") ?? true) + { + task.ExceptionMessage = $"Z鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoZ},鏈�澶у�硷細{maxZ},鏈�灏忓�硷細{minZ}"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + + if (takePoR < minR || takePoR > maxR) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"R鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}"); + if (task.ExceptionMessage?.Contains($"R鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}") ?? true) + { + task.ExceptionMessage = $"R鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + + if (putPoR < minR || putPoR > maxR) + { + WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"R鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}"); + if (task.ExceptionMessage?.Contains($"R鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}") ?? true) + { + task.ExceptionMessage = $"R鏀捐揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿putPoR},鏈�澶у�硷細{maxR},鏈�灏忓�硷細{minR}"; + _taskRepository.UpdateData(task); + } + if (LightStatusStorage.LightStatusDic.ContainsKey(putPositions[0])) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightError; + } + return Task.CompletedTask; + } + #endregion + + #region 浠诲姟鍙戦�� + 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])); + 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); otherDevice.SetValue(GantryDBName.WorkType, 1); otherDevice.SetValue(GantryDBName.StartCommand, 1); + #endregion + #region 浠诲姟鐘舵�佹洿鏂� task.TaskState = TaskStatusEnum.Gantry_Executing.ObjToInt(); _taskRepository.UpdateData(task); + #endregion + + #region 涓夎壊鐏姸鎬佹洿鏂� + if (LightStatusStorage.LightStatusDic.TryGetValue(putPositions[0], out LightStatusEnum lightStatusDic)) + { + if (lightStatusDic != LightStatusEnum.LightWorking) + { + LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightWorking; + } + } + #endregion } } - else if(gantryWorkStatus == 5) + else if (gantryWorkStatus == 5) { - + int currentTaskNum = otherDevice.GetValue<GantryDBName, int>(GantryDBName.TaskNum); + if (currentTaskNum > 0) + { + Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == currentTaskNum); + if (task != null) + { + _taskService.TaskComplete(task); + + Task.Run(() => + { + _orderDetailsService.ToMes(task.PalletCode, 4); + }); + + string[] putPositions = task.NextAddress.Split("*"); + if (putPositions.Length != 5) + { + 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; - } - - public Dt_Task GetTask() - { - return new Dt_Task(); } } } -- Gitblit v1.9.3