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 | 406 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 343 insertions(+), 63 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..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" @@ -8,16 +8,35 @@ 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 { @@ -25,20 +44,26 @@ 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; + 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) { bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); - if (flag && value != null && value is OtherDevice) + if (flag && value is OtherDevice otherDevice) { - OtherDevice otherDevice = (OtherDevice)value; try { byte gantryStatus = otherDevice.GetValue<GantryDBName, byte>(GantryDBName.GantryStatus); @@ -47,52 +72,159 @@ if (gantryStatus == 1 && gantryAutoStatus == 3 && gantryWorkStatus == 0) { - // 閫昏緫澶勭悊 - // 1. 璇诲彇浠诲姟 - // 2. 浠诲姟鎵ц - // 3. 浠诲姟瀹屾垚 Dt_Task? task = _taskService.QueryAGantryUnExecuteTask(otherDevice.DeviceCode); if (task != null) { + #region 鍙栬揣浣嶇疆鍒ゆ柇 string[] takePositions = task.CurrentAddress.Split("*"); 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; } - if (LightStatusStorage.LightStatusDic.TryGetValue(putPositions[0], out LightStatusEnum lightStatusDic)) - { - if (lightStatusDic != LightStatusEnum.LightWorking) - { - LightStatusStorage.LightStatusDic[putPositions[0]] = LightStatusEnum.LightWorking; - } - } + #endregion - otherDevice.SetValue(GantryDBName.TwoHand, true); - otherDevice.SetValue(GantryDBName.TaskNum, task.TaskNum); + #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; - - if(OPositions.HPositions[takePositions[0]].PositionZ == 0) - { - WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", "鍙栬揣Z鍧愭爣璇诲彇涓�0"); - return Task.CompletedTask; - } int takePoR = 0; @@ -100,93 +232,229 @@ 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; + #endregion - if (Convert.ToInt32(takePositions[4]) == 1) + #region 鍧愭爣涔樹互1000澶勭悊,2#榫欓棬鏋跺彇鍙�(涔樹互-1000) + 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; - takePoR = OPositions.HPositions[takePositions[0]].PositionR; - putPoR = OPositions.HPositions[putPositions[0]].PositionR; + temp = -1000; + } + #endregion - 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}"); + #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 * 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}"); } + #endregion - 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); + #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 - if(takePoX < minX || takePoX > maxX) + #region 瓒呰繃瀹瑰櫒瀹藉害澶勭悊 + bool isMoreWidth = orderContainer == null ? false : orderContainer.MaxWidth > container.ContainerWidth; + if (isMoreWidth) { - WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}-鍧愭爣", $"X鍙栬揣鍧愭爣瓒呭嚭鑼冨洿,鍙栬揣鍧愭爣锛歿takePoX},鏈�澶у�硷細{maxX},鏈�灏忓�硷細{minX}"); + 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; } - if(putPoX < minX || putPoX > maxX) + 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.TakePositionX, takePoX); otherDevice.SetValue(GantryDBName.TakePositionY, takePoY); otherDevice.SetValue(GantryDBName.TakePositionZ, takePoZ); @@ -200,14 +468,27 @@ 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) { - 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,10 +496,14 @@ { _taskService.TaskComplete(task); + Task.Run(() => + { + _orderDetailsService.ToMes(task.PalletCode, 4); + }); + string[] putPositions = task.NextAddress.Split("*"); if (putPositions.Length != 5) { - //WriteError return Task.CompletedTask; } if (LightStatusStorage.LightStatusDic.TryGetValue(putPositions[0], out LightStatusEnum lightStatusDic)) @@ -243,11 +528,6 @@ WriteError(nameof(GantryJob), "鍙傛暟閿欒,鏈紶閫掕澶囧弬鏁版垨璁惧绫诲瀷閿欒"); } return Task.CompletedTask; - } - - public Dt_Task GetTask() - { - return new Dt_Task(); } } } -- Gitblit v1.9.3