| | |
| | | using Microsoft.AspNetCore.Components.Routing; |
| | | using HslCommunication; |
| | | using Microsoft.AspNetCore.Components.Routing; |
| | | using Newtonsoft.Json; |
| | | using Quartz; |
| | | using System; |
| | | using System.Collections.Generic; |
| | |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Common.ServiceLog; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Communicator; |
| | | using WIDESEAWCS_Core.Enums; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_IBasicRepository; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.DeviceBase; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane.Enum; |
| | | using WIDESEAWCS_TaskInfoService; |
| | | using WIDESEAWCS_Tasks.StackerCraneJob; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | | [DisallowConcurrentExecution] |
| | | public class CommonStackerCraneJob : IJob |
| | | public class CommonStackerCraneJob : JobBase, IJob |
| | | { |
| | | private readonly ITaskService _taskService; |
| | | private readonly ITaskExecuteDetailService _taskExecuteDetailService; |
| | | private readonly ITaskRepository _taskRepository; |
| | | private readonly IRouterService _routerService; |
| | | private readonly ILocationInfoRepository _locationInfoRepository; |
| | | |
| | | public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService) |
| | | public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, ILocationInfoRepository locationInfoRepository) |
| | | { |
| | | _taskService = taskService; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | | _taskRepository = taskRepository; |
| | | _routerService = routerService; |
| | | _locationInfoRepository = locationInfoRepository; |
| | | } |
| | | |
| | | public Task Execute(IJobExecutionContext context) |
| | | { |
| | | WriteDebug("大å åæºè¿è¡æ¥å¿", "å¼å§æ¶é´" + DateTime.Now); |
| | | WriteDebug("大å åæºè¿è¡æ¥å¿", $"大å åæºä»»å¡æ§è¡ä¸..."); |
| | | //CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams"); |
| | | CommonStackerCrane commonStackerCrane = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC01") as CommonStackerCrane; |
| | | try |
| | | { |
| | | CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams"); |
| | | { |
| | | if (commonStackerCrane != null) |
| | | { |
| | | if (!commonStackerCrane.IsEventSubscribed) |
| | |
| | | if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal) |
| | | { |
| | | commonStackerCrane.CheckStackerCraneTaskCompleted();//鲿¢ä»»å¡å®æäºä»¶çæµè¶
æ¶ï¼åæå¨è§¦å䏿¬¡ |
| | | |
| | | |
| | | if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) |
| | | { |
| | | Dt_Task? task = GetTask(commonStackerCrane); |
| | | if (task != null) |
| | | { |
| | | WriteDebug("大å åæºè¿è¡æ¥å¿", $"大å åæºä»»å¡å·{task.TaskNum}"); |
| | | StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); |
| | | if (stackerCraneTaskCommand != null) |
| | | { |
| | | bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); |
| | | if (sendFlag) |
| | | { |
| | | commonStackerCrane.LastTaskType = task.TaskType; |
| | | _taskService.UpdateTaskStatusToNext(task.TaskNum); |
| | | |
| | | if (task.TaskType == (int)TaskInboundTypeEnum.Inbound) |
| | | { |
| | | _taskService.UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.SC_InExecuting); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºå
¥åºæ§è¡ä¸"); |
| | | } |
| | | else if(task.TaskType == (int)TaskOutboundTypeEnum.OutInventory|| task.TaskType == (int)TaskOutboundTypeEnum.OutPick|| task.TaskType == (int)TaskRelocationTypeEnum.Relocation) |
| | | { |
| | | _taskService.UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutExecuting); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºæ§è¡ä¸"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, "å åæºæ§è¡ä»»å¡å½ä»¤å¤±è´¥ï¼"); |
| | | WriteDebug(nameof(CommonStackerCraneJob), "å åæºæ§è¡ä»»å¡å½ä»¤å¤±è´¥ï¼"); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString()); |
| | | WriteError(nameof(CommonStackerCraneJob), "大å åæºæ§è¡ä»»å¡å¼å¸¸ï¼",ex); |
| | | } |
| | | |
| | | |
| | | //æ¥è¯¢æåæº/ç»ç«æºä¿¡å· |
| | | //Task.Run(delegate |
| | | //{ |
| | | try |
| | | { |
| | | if (commonStackerCrane != null) |
| | | { |
| | | |
| | | Dt_Task? task1001 = _taskService.QueryStackerCraneTaskByAGVRequest("SC01"); |
| | | if (task1001 != null) |
| | | { |
| | | //读åæåæºä¿¡å·ï¼ç¡®å®æ¯å¦å¯ä»¥è¿å
¥ |
| | | int IsAllow = 0; |
| | | if (task1001.SourceAddress == "SC01-002-000-001")//WMS 1001ç«ç¹ |
| | | { |
| | | IsAllow = commonStackerCrane.Communicator.Read<short>("DB2.0.0"); |
| | | } |
| | | else if (task1001.SourceAddress == "SC01-002-000-002")//WMS 1002ç«ç¹ |
| | | { |
| | | IsAllow = commonStackerCrane.Communicator.Read<short>("DB2.8.0"); |
| | | } |
| | | if (IsAllow == 1)//å¦æä¸º1ï¼åå
计AGVè¿å
¥ï¼åä¼ WMS |
| | | { |
| | | MESSendCMD sendcmd = new MESSendCMD { cmd = 2001, task_id = task1001.TaskNum, status = 6 }; |
| | | MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); |
| | | if (res != null && res.code != 0) |
| | | { |
| | | WriteDebug(nameof(CommonStackerCraneJob), $"æåæºæå宿ï¼åä¼ WMS失败ï¼ä»»å¡å·{task1001.TaskNum}"); |
| | | } |
| | | } |
| | | } |
| | | Dt_Task? task3001 = _taskService.QueryStackerCraneTaskByAGVPutFinish("SC01"); |
| | | if (task3001 != null) |
| | | { |
| | | int IsFinish = 0; |
| | | int IsWriteOne = 0; |
| | | int IsWriteTwo = 0; |
| | | if (task3001.SourceAddress == "SC01-002-000-001")//WMS 1001ç«ç¹ |
| | | { |
| | | //æåæºæ¯å¦å¤äºå°±ç»ªç¶æ |
| | | int IsReady= commonStackerCrane.Communicator.Read<short>("DB2.0.0"); |
| | | //åå
¥æåä¿¡æ¯ |
| | | IsWriteOne = commonStackerCrane.Communicator.Read<short>("DB1.0.0"); |
| | | if(IsWriteOne == 0&& IsReady == 1) |
| | | { |
| | | commonStackerCrane.Communicator.Write<short>("DB1.0.0", 1); |
| | | } |
| | | //读åæåæºä¿¡å·ï¼ç¡®å®æ¯å¦æå宿 |
| | | |
| | | IsFinish= commonStackerCrane.Communicator.Read<short>("DB2.2.0"); |
| | | } |
| | | else if (task3001.SourceAddress == "SC01-002-000-002")//WMS 1002ç«ç¹ |
| | | { |
| | | //æåæºæ¯å¦å¤äºå°±ç»ªç¶æ |
| | | int IsReady = commonStackerCrane.Communicator.Read<short>("DB2.0.0"); |
| | | //åå
¥æåä¿¡æ¯ |
| | | IsWriteTwo = commonStackerCrane.Communicator.Read<short>("DB1.6.0"); |
| | | if (IsWriteTwo == 0 && IsReady == 1) |
| | | { |
| | | commonStackerCrane.Communicator.Write<short>("DB1.6.0", 1); |
| | | } |
| | | //读åæåæºä¿¡å·ï¼ç¡®å®æ¯å¦æå宿 |
| | | IsFinish = commonStackerCrane.Communicator.Read<short>("DB2.10.0"); |
| | | } |
| | | if (IsFinish == 1)//å¦æä¸º1ï¼å表示æå宿ï¼åä¼ WMS |
| | | { |
| | | MESSendCMD sendcmd = new MESSendCMD { cmd = 2002, task_id = task3001.TaskNum, status = 6 }; |
| | | MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); |
| | | string inparam = JsonConvert.SerializeObject(sendcmd); |
| | | WriteDebug(nameof(CommonStackerCraneJob), $"æåæºæå宿ï¼åä¼ WMS,å
¥åï¼{inparam}"); |
| | | |
| | | if (res != null && res.code != 0) |
| | | { |
| | | WriteDebug(nameof(CommonStackerCraneJob), $"æåæºæå宿ï¼åä¼ WMS失败ï¼ä»»å¡å·{task3001.TaskNum}"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //å°å åæºåºåºå®æä»»å¡ |
| | | Dt_Task? taskSmall = _taskService.QueryStackerCraneFinishTask(); |
| | | if(taskSmall != null) |
| | | { |
| | | //æ ¹æ®ä»»å¡æºå°åç¡®å®åå
¥PLCä½ç½® Depth |
| | | Dt_LocationInfo location = _locationInfoRepository.QueryFirst(x=>x.LocationCode==taskSmall.SourceAddress); |
| | | if(location != null) |
| | | { |
| | | string[] Levels = taskSmall.Remark.Split("-"); |
| | | if (Levels.Length == 2) |
| | | { |
| | | if (!string.IsNullOrEmpty(Levels[0]) && !string.IsNullOrEmpty(Levels[1])) |
| | | { |
| | | int level = Convert.ToInt16(Levels[0]) - Convert.ToInt16(Levels[1]); |
| | | |
| | | //å©ä½å±æ°åå
¥ |
| | | bool issuccess = commonStackerCrane.Communicator.Write<short>("DB28." + location.Depth + ".0", Convert.ToInt16(level)); |
| | | WriteDebug(nameof(CommonStackerCraneJob), $"å©ä½å±æ°ä¿¡å·åå
¥{level}-ä»»å¡å·{taskSmall.TaskNum}"); |
| | | |
| | | |
| | | //妿å½åæå屿°çäºæ»å±æ°ï¼å表示æè½¦ææç屿°åå® |
| | | if (level == 0) |
| | | { |
| | | //æºå°åï¼æåä½ï¼å¯¹åºçç®æ å°åï¼ç»ç«æºï¼location.Remark |
| | | if (!string.IsNullOrEmpty(location.Remark)) |
| | | { |
| | | //æ ¹æ®ç®æ å°åæ¥è¯¢ç»ç«æºç«ç¹ä¿¡æ¯ï¼è·ååå
¥æ´è½¦å®æçDBå Depth |
| | | Dt_LocationInfo location2 = _locationInfoRepository.QueryFirst(x => x.LocationCode == location.Remark); |
| | | //æ´è½¦å®æåå
¥å±æ° |
| | | int sn = 0; |
| | | if(taskSmall.SourceAddress== "SC01-001-006-001"|| taskSmall.SourceAddress == "SC01-001-012-001"|| taskSmall.SourceAddress == "SC01-001-018-001" || taskSmall.SourceAddress == "SC01-001-022-001"|| taskSmall.SourceAddress == "SC01-001-026-001") |
| | | { |
| | | sn = 1; |
| | | } |
| | | else if(taskSmall.SourceAddress == "SC01-001-007-001" || taskSmall.SourceAddress == "SC01-001-013-001" || taskSmall.SourceAddress == "SC01-001-019-001" || taskSmall.SourceAddress == "SC01-001-023-001" || taskSmall.SourceAddress == "SC01-001-027-001") |
| | | { |
| | | sn = 2; |
| | | } |
| | | else |
| | | { |
| | | sn = 3; |
| | | } |
| | | bool issuccess2 = commonStackerCrane.Communicator.Write<short>("DB28." + location2.Depth+".0", Convert.ToInt16(sn)); |
| | | if (issuccess2&&issuccess) |
| | | { |
| | | _taskService.UpdateTaskStatus(taskSmall.TaskId, (int)TaskOutStatusEnum.OutFinish); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(taskSmall.TaskId, $"åºåºä»»å¡å®æ"); |
| | | } |
| | | else |
| | | { |
| | | WriteDebug(nameof(CommonStackerCraneJob), $"æ´è½¦å®æä¿¡å·åå
¥å¤±è´¥ï¼ä»»å¡å·{taskSmall.TaskNum}"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | |
| | | if (issuccess) |
| | | { |
| | | _taskService.UpdateTaskStatus(taskSmall.TaskId, (int)TaskOutStatusEnum.OutFinish); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(taskSmall.TaskId, $"åºåºä»»å¡å®æ"); |
| | | } |
| | | else |
| | | { |
| | | WriteDebug(nameof(CommonStackerCraneJob), $"å©ä½å±æ°ä¿¡å·åå
¥å¤±è´¥ï¼ä»»å¡å·{taskSmall.TaskNum}"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteError(nameof(CommonStackerCraneJob), "æ¥è¯¢æåå
¥PLCç¶æå¤±è´¥ï¼", ex); |
| | | } |
| | | WriteDebug("大å åæºè¿è¡æ¥å¿", "ç»ææ¶é´" + DateTime.Now); |
| | | //}); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | |
| | | private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane) |
| | | { |
| | | Dt_Task task; |
| | | if (commonStackerCrane.LastTaskType == null) |
| | | { |
| | | task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode); |
| | | } |
| | | else |
| | | { |
| | | if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | | { |
| | | task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); |
| | | if (task == null) |
| | | { |
| | | task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode); |
| | | } |
| | | } |
| | | |
| | | if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | | { |
| | | if (OutTaskStationIsOccupied(task) != null) |
| | | { |
| | | return task; |
| | | } |
| | | else |
| | | { |
| | | List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList(); |
| | | List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStaionCodes); |
| | | foreach (var item in tasks) |
| | | { |
| | | if (OutTaskStationIsOccupied(task) != null) |
| | | { |
| | | return task; |
| | | } |
| | | } |
| | | task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); |
| | | } |
| | | } |
| | | |
| | | task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode); |
| | | return task; |
| | | } |
| | | |
| | |
| | | stackerCraneTaskCommand.TaskNum = task.TaskNum; |
| | | stackerCraneTaskCommand.WorkType = 1; |
| | | stackerCraneTaskCommand.TrayType = 0; |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//夿æ¯å¦æ¯å
¥åºä»»å¡ |
| | | string[] SourceCodes = task.SourceAddress.Split("-"); |
| | | if (SourceCodes.Length == 4) |
| | | { |
| | | List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway); |
| | | if (routers.Count > 0) |
| | | { |
| | | stackerCraneTaskCommand.StartRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow); |
| | | stackerCraneTaskCommand.StartColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn); |
| | | stackerCraneTaskCommand.StartLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer); |
| | | |
| | | string[] targetCodes = task.NextAddress.Split("-"); |
| | | if (targetCodes.Length == 3) |
| | | { |
| | | stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]); |
| | | stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]); |
| | | stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]); |
| | | } |
| | | else |
| | | { |
| | | //æ°æ®é
ç½®é误 |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"å
¥åºä»»å¡ç»ç¹é误ï¼èµ·ç¹ï¼ã{task.NextAddress}ã"); |
| | | return null; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"æªæ¾å°ç«å°ã{task.NextAddress}ãä¿¡æ¯ï¼æ æ³è·å对åºçå åæºåè´§ç«å°ä¿¡æ¯"); |
| | | return null; |
| | | } |
| | | stackerCraneTaskCommand.StartRow = Convert.ToInt16(SourceCodes[1]); |
| | | stackerCraneTaskCommand.StartColumn = Convert.ToInt16(SourceCodes[2]); |
| | | stackerCraneTaskCommand.StartLayer = Convert.ToInt16(SourceCodes[3]); |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | | else |
| | | { |
| | | List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress); |
| | | if (routers.Count > 0) |
| | | { |
| | | stackerCraneTaskCommand.EndRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow); |
| | | stackerCraneTaskCommand.EndColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn); |
| | | stackerCraneTaskCommand.EndLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer); |
| | | |
| | | string[] sourceCodes = task.CurrentAddress.Split("-"); |
| | | if (sourceCodes.Length == 3) |
| | | { |
| | | stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]); |
| | | stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]); |
| | | stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]); |
| | | } |
| | | else |
| | | { |
| | | //æ°æ®é
ç½®é误 |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"åºåºä»»å¡èµ·ç¹é误ï¼èµ·ç¹ï¼ã{task.CurrentAddress}ã"); |
| | | return null; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"æªæ¾å°ç«å°ã{task.NextAddress}ãä¿¡æ¯ï¼æ æ³è·å对åºçå åæºæ¾è´§ç«å°ä¿¡æ¯"); |
| | | return null; |
| | | } |
| | | //æ°æ®é
ç½®é误 |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任塿ºå°åé
ç½®é误ï¼"); |
| | | return null; |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) |
| | | string[] targetCodes = task.TargetAddress.Split("-"); |
| | | if (targetCodes.Length == 4) |
| | | { |
| | | string[] targetCodes = task.NextAddress.Split("-"); |
| | | if (targetCodes.Length == 3) |
| | | { |
| | | stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]); |
| | | stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]); |
| | | stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]); |
| | | } |
| | | else |
| | | { |
| | | //æ°æ®é
ç½®é误 |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ç§»åºä»»å¡ç»ç¹é误ï¼èµ·ç¹ï¼ã{task.NextAddress}ã"); |
| | | return null; |
| | | } |
| | | string[] sourceCodes = task.CurrentAddress.Split("-"); |
| | | if (sourceCodes.Length == 3) |
| | | { |
| | | stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]); |
| | | stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]); |
| | | stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]); |
| | | } |
| | | else |
| | | { |
| | | //æ°æ®é
ç½®é误 |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ç§»åºä»»å¡èµ·ç¹é误ï¼èµ·ç¹ï¼ã{task.CurrentAddress}ã"); |
| | | return null; |
| | | } |
| | | stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]); |
| | | stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]); |
| | | stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]); |
| | | } |
| | | else |
| | | { |
| | | //æ°æ®é
ç½®é误 |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ä»»å¡ç®æ å°åé
ç½®é误"); |
| | | return null; |
| | | } |
| | | return stackerCraneTaskCommand; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |