| | |
| | | private readonly ICacheService _cacheService; private readonly IRepository<Dt_Router> _routerRepository; |
| | | private readonly IRepository<Dt_StationManger> _stationMangerRepository; |
| | | private readonly IRepository<Dt_Task> _taskRepository; |
| | | private readonly CommonConveyorLineJob _lineJob; |
| | | //bool SCres = false; |
| | | |
| | | public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, ICacheService cacheService, IRepository<Dt_Router> routerRepository, IRepository<Dt_StationManger> stationMangerRepository, IRepository<Dt_Task> taskRepository) |
| | | public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, ICacheService cacheService, IRepository<Dt_Router> routerRepository, IRepository<Dt_StationManger> stationMangerRepository, IRepository<Dt_Task> taskRepository, CommonConveyorLineJob lineJob) |
| | | { |
| | | _taskService = taskService; |
| | | _routerService = routerService; |
| | |
| | | _routerService = routerService; |
| | | _stationMangerRepository = stationMangerRepository; |
| | | _taskRepository = taskRepository; |
| | | _lineJob = lineJob; |
| | | } |
| | | |
| | | public Task Execute(IJobExecutionContext context) |
| | |
| | | } |
| | | |
| | | |
| | | /* |
| | | // æ·»å äºä»¶è®¢é
ç¶ææ è®° |
| | | private static readonly Dictionary<string, bool> _eventSubscribedMap = new Dictionary<string, bool>(); |
| | | private static readonly object _lockObject = new object(); |
| | | public Task Execute(IJobExecutionContext context) |
| | | { |
| | | try |
| | | { |
| | | SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams"); |
| | | if (speStackerCrane != null) |
| | | { |
| | | GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane); |
| | | |
| | | // 使ç¨éç¡®ä¿çº¿ç¨å®å
¨çäºä»¶è®¢é
|
| | | lock (_lockObject) |
| | | { |
| | | string deviceKey = speStackerCrane.DeviceCode; |
| | | if (!_eventSubscribedMap.ContainsKey(deviceKey) || !_eventSubscribedMap[deviceKey]) |
| | | { |
| | | getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler; |
| | | _eventSubscribedMap[deviceKey] = true; |
| | | } |
| | | } |
| | | |
| | | getStackerObject.CheckStackerCraneTaskCompleted(); |
| | | if (getStackerObject.StackerCraneStatusValue == StackerCraneStatus.Normal) |
| | | { |
| | | Dt_Task? task = GetTasks(speStackerCrane); |
| | | if (task != null) |
| | | { |
| | | WriteInfo("æ¥æ¾å åæºä»»å¡å·", $"ä»»å¡ä¿¡æ¯,ä»»å¡å·:{task.TaskNum}ï¼å åæºç¼å·{speStackerCrane.DeviceCode}"); |
| | | bool sendFlag = true; |
| | | if (sendFlag) |
| | | { |
| | | StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); //转æ¢ä¸ºå åæºä»»å¡ |
| | | if (stackerCraneTaskCommand != null) |
| | | { |
| | | sendFlag = getStackerObject.SendCommand(stackerCraneTaskCommand); //åéå åæºä»»å¡ |
| | | if (sendFlag) |
| | | { |
| | | speStackerCrane.SetValue(StackerCraneDBName.CommandSend, 1);//å¯å¨å½ä»¤ |
| | | speStackerCrane.LastTaskType = task.TaskType; |
| | | task.Dispatchertime = DateTime.Now; |
| | | task.ExceptionMessage = ""; |
| | | |
| | | WebResponseContent webResponseContent = _taskService.UpdateTaskStatusToNext(task.TaskNum); |
| | | //å»¶æ¶1s |
| | | Thread.Sleep(1000); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteError("å åæºä»»å¡æ§è¡å¼å¸¸", ex.Message); |
| | | throw; |
| | | } |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e) |
| | | { |
| | | SpeStackerCrane? speStackerCrane = sender as SpeStackerCrane; |
| | | if (speStackerCrane != null) |
| | | { |
| | | // 使ç¨éç¡®ä¿åä¸ä»»å¡ä¸ä¼è¢«å¹¶åå¤ç |
| | | lock (_lockObject) |
| | | { |
| | | if (speStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5) |
| | | { |
| | | var currentTaskNum = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum); |
| | | WriteInfo("å åæºä»»å¡å®æ", $"PLCä»»å¡å·:{currentTaskNum}, ç³»ç»ä»»å¡å·:{e.TaskNum}, æ¶é´:{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}"); |
| | | |
| | | _taskService.StackCraneTaskCompleted(e.TaskNum); |
| | | WriteInfo("å åæºä»»å¡å®æåé¦ä»»å¡å·", $"ä»»å¡ä¿¡æ¯,ä»»å¡å·:{e.TaskNum}"); |
| | | speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5); |
| | | |
| | | WriteInfo("å åæºä»»å¡ç¶ææ´æ°", $"ä»»å¡{e.TaskNum}å®æç¶æå·²è®¾ç½®"); |
| | | } |
| | | else |
| | | { |
| | | WriteInfo("å åæºä»»å¡éå¤å®æäºä»¶", $"ä»»å¡å·:{e.TaskNum} 已被å¤çï¼å¿½ç¥éå¤äºä»¶"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | */ |
| | | |
| | | private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e) |
| | | { |
| | | SpeStackerCrane? speStackerCrane = sender as SpeStackerCrane; |
| | |
| | | private Dt_Task? GetTasks(SpeStackerCrane commonStackerCrane) |
| | | { |
| | | Dt_Task? task; |
| | | // PLCç¶ææ£æ¥ï¼WorkTypeå¿
须为0ï¼ç©ºé²ç¶æï¼ |
| | | var workType = commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.StackerCraneWorkStatus); |
| | | //var workType = commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.StackerCraneWorkStatus); |
| | | if (workType != 0) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | //å åæºæ§è¡ä¸ |
| | | if (_taskRepository.QueryFirst(x => x.DeviceCode == commonStackerCrane.DeviceCode && x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt()) != null) |
| | |
| | | |
| | | if (task != null) |
| | | { |
| | | if(task.Roadway=="SC02") return task; //妿æä»»å¡åç´æ¥ä¸åç»å åæº |
| | | if(task.Depth==1) return task; |
| | | //2æ·±ä½è¿è¡å¤ææ¯å¦è¦ç§»åº |
| | | |
| | | if (task.Roadway == "SC02") return task; //妿æä»»å¡åç´æ¥ä¸åç»å åæº |
| | | if (task.Depth == 1) return task; |
| | | //2æ·±ä½è¿è¡å¤ææ¯å¦è¦ç§»åº |
| | | Dt_Task dt_Task = _taskService.RequestWMSTaskMovelibrary(task); |
| | | if (dt_Task != null) return dt_Task; |
| | | } |
| | | else if (YKtasks.Count > 0) |
| | | else if (YKtasks.Count > 0) //åºä½è°æ¨ |
| | | { |
| | | foreach (var item in YKtasks) |
| | | { |
| | | if (item.Roadway == "SC01") |
| | | { |
| | | if (item.Depth == 1) return item; |
| | | //è°åWMSæ¥å£è¿è¡å¤ææ¯å¦éè¦è¿è¡ç§»åº |
| | | Dt_Task dt_Task = OutTaskMovelibrary(item); |
| | | if (dt_Task != null) return dt_Task; |
| | | if (item.Roadway == "SC01") |
| | | { |
| | | if (item.Depth == 1) return item; |
| | | //è°åWMSæ¥å£è¿è¡å¤ææ¯å¦éè¦è¿è¡ç§»åº |
| | | Dt_Task dt_Task = OutTaskMovelibrary(item); |
| | | if (dt_Task != null) return dt_Task; |
| | | |
| | | else |
| | | { |
| | |
| | | { |
| | | //è¿è¡è·åå åæºåºåºä»»å¡ |
| | | List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode); |
| | | foreach (var item in tasks) |
| | | { |
| | | if (OutTaskStationIsOccupied(item) != null) |
| | | { |
| | | if (item.Roadway == "SC01") |
| | | { |
| | | if (item.Depth == 1) return item; |
| | | //è°åWMSæ¥å£è¿è¡å¤ææ¯å¦éè¦è¿è¡ç§»åº |
| | | Dt_Task dt_Task = OutTaskMovelibrary(item); |
| | | if (dt_Task != null) return dt_Task; |
| | | |
| | | } |
| | | else |
| | | foreach (var item in tasks) |
| | | { |
| | | //if (item.TargetAddress == "2021"||item.TargetAddress == "2020") |
| | | //{ |
| | | // ////bool IsOccupied = _lineJob.GetPick(); |
| | | |
| | | // //if (!IsOccupied) |
| | | // //{ |
| | | // // return null; |
| | | // //} |
| | | //} |
| | | if (OutTaskStationIsOccupied(item) != null) |
| | | { |
| | | return item; |
| | | if (item.Roadway == "SC01") |
| | | { |
| | | if (item.Depth == 1) return item; |
| | | //è°åWMSæ¥å£è¿è¡å¤ææ¯å¦éè¦è¿è¡ç§»åº |
| | | Dt_Task dt_Task = OutTaskMovelibrary(item); |
| | | if (dt_Task != null) return dt_Task; |
| | | |
| | | } |
| | | else |
| | | { |
| | | return item; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | return task; |
| | | } |
| | | } |
| | | //if (task.NextAddress == "2021" || task.NextAddress == "2020") |
| | | //{ |
| | | // DeviceProDTO? deviceProDTO1 = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == "2008" || x.DeviceChildCode == "2009" || x.DeviceChildCode == "2015" || x.DeviceChildCode == "2016" && x.DeviceProParamName == "IsOccupied"); //æ ¹æ®å åæºå°åï¼å°ååç§°æ¾åè®® |
| | | // if (deviceProDTO != null) |
| | | // { |
| | | // bool IsOccupied2008 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2008"); |
| | | // bool IsOccupied2009 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2009"); |
| | | // bool IsOccupied2015 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2015"); |
| | | // bool IsOccupied2016 = conveyorLine.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.IsOccupied, "2016"); |
| | | |
| | | // //夿æ¯å¦æç« |
| | | // if (IsOccupied2008 && IsOccupied2009 && IsOccupied2015 && IsOccupied2016) |
| | | // { |
| | | // return null; |
| | | // } |
| | | // else |
| | | // { |
| | | // return task; |
| | | // } |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | catch (Exception ex) |