| | |
| | | using Autofac.Core; |
| | | using Microsoft.AspNetCore.Components.Routing; |
| | | using Microsoft.AspNetCore.Hosting; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
| | | using Newtonsoft.Json; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; |
| | | using Quartz; |
| | | using System; |
| | | using SqlSugar; |
| | | using SqlSugar.Extensions; |
| | | using System.Collections.Generic; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using System.Diagnostics.Eventing.Reader; |
| | | using System.Linq; |
| | | using System.Reflection.Metadata; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Common.Log; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Enums; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEAWCS_Core.Caches; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.HttpContextUser; |
| | | using WIDESEAWCS_IBasicInfoRepository; |
| | | using WIDESEAWCS_ISystemRepository; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane.Enum; |
| | | using WIDESEAWCS_SignalR; |
| | | using WIDESEAWCS_Tasks.StackerCraneJob; |
| | | using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | |
| | | private readonly ITaskService _taskService; |
| | | private readonly ITaskExecuteDetailService _taskExecuteDetailService; |
| | | private readonly ITaskRepository _taskRepository; |
| | | private readonly IRouterService _routerService; |
| | | private readonly IDt_StationManagerRepository _stationManagerRepository; |
| | | private readonly ICacheService _cacheService; |
| | | private readonly INoticeService _noticeService; |
| | | |
| | | public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService) |
| | | public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository,IDt_StationManagerRepository stationManagerRepository, ICacheService cacheService, INoticeService noticeService) |
| | | { |
| | | _taskService = taskService; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | | _taskRepository = taskRepository; |
| | | _routerService = routerService; |
| | | _stationManagerRepository = stationManagerRepository; |
| | | _cacheService = cacheService; |
| | | _noticeService = noticeService; |
| | | } |
| | | |
| | | public Task Execute(IJobExecutionContext context) |
| | |
| | | try |
| | | { |
| | | CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams"); |
| | | |
| | | if (commonStackerCrane != null) |
| | | { |
| | | //æ·»å 夿agvç¶ææ¯å¦å¯ä¸å |
| | | if (ReadAGVstatus(commonStackerCrane) == 1 && ReadAGVworkingmode(commonStackerCrane) == 1) |
| | | if (!commonStackerCrane.IsEventSubscribed) |
| | | { |
| | | commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订é
ä»»å¡å®æäºä»¶ |
| | | } |
| | | |
| | | if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal) |
| | | { |
| | | commonStackerCrane.CheckStackerCraneTaskCompleted();//æ£æµå åæºä»»å¡å®æäºä»¶ |
| | | |
| | | if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Idle) |
| | | { |
| | | GetTask(commonStackerCrane); |
| | | } |
| | | } |
| | | |
| | | //å¤çagvæ¯å¦å®æä»»å¡ |
| | | #region è°ç¨äºä»¶æ»çº¿éç¥å端 |
| | | |
| | | var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken"); |
| | | if (tokenInfos != null && tokenInfos.Any()) |
| | | { |
| | | var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList(); |
| | | var userIds = tokenInfos?.Select(x => x.UserId).ToList(); |
| | | object obj = new |
| | | { |
| | | commonStackerCrane.StackerCraneStatusDes, |
| | | commonStackerCrane.StackerCraneAutoStatusDes, |
| | | commonStackerCrane.StackerCraneWorkStatusDes, |
| | | commonStackerCrane.DeviceCode, |
| | | commonStackerCrane.DeviceName, |
| | | commonStackerCrane.CurrentTaskNum, |
| | | commonStackerCrane.LastTaskNum, |
| | | SourceAddress = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.SourceAddress), |
| | | TargetAddress = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TargetAddress), |
| | | Command = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.Command), |
| | | Electricity = commonStackerCrane.GetValue<StackerCraneDBName, float>(StackerCraneDBName.Electricity), |
| | | }; |
| | | |
| | | _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { commonStackerCrane.DeviceName, data = obj }); |
| | | } |
| | | |
| | | #endregion è°ç¨äºä»¶æ»çº¿éç¥å端 |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | /// </summary> |
| | | /// <param name="sender"></param> |
| | | /// <param name="e"></param> |
| | | private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e) |
| | | private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e) |
| | | { |
| | | CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane; |
| | | if (commonStackerCrane != null) |
| | | { |
| | | if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5) |
| | | { |
| | | |
| | | Console.Out.WriteLine("TaskCompleted" + e.TaskNum); |
| | | _taskService.StackCraneTaskCompleted(e.TaskNum); |
| | | commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5); |
| | | } |
| | | commonStackerCrane.SetValue(StackerCraneDBName.TaskCompleted, 1); |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | if (stackerCraneTaskCommand != null) |
| | | { |
| | | bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); |
| | | if (sendFlag) |
| | | Thread.Sleep(1000); |
| | | if (ReadReceived(commonStackerCrane) == 1) |
| | | { |
| | | WriteConfirm(commonStackerCrane); |
| | | _taskService.UpdateTaskStatusToNext(task.TaskNum); |
| | | } |
| | | } |
| | |
| | | return deviceProDTO != null ? commonStackerCrane.Communicator.Read<int>(deviceProDTO.DeviceProAddress) : 99; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 读åAGVæ¶å°ä½ä¸ä¿¡å· |
| | | /// </summary> |
| | | /// <param name="commonStackerCrane"></param> |
| | | /// <returns></returns> |
| | | public int ReadReceived(CommonStackerCrane commonStackerCrane) |
| | | { |
| | | return commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.Received); |
| | | } |
| | | public void WriteConfirm(CommonStackerCrane commonStackerCrane) |
| | | { |
| | | commonStackerCrane.SetValue(StackerCraneDBName.WriteConfirm, 1); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è°åº¦AGVå»å°è¾¹åºå |
| | | /// </summary> |
| | | /// <param name="commonStackerCrane"></param> |
| | | /// <param name="value"></param> |
| | | public void AGVToEdgeBanding(CommonStackerCrane commonStackerCrane) |
| | | { |
| | | commonStackerCrane.SetValue(StackerCraneDBName.AreaWrite, true); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è°åº¦AGVå»ç è¾¹åºå |
| | | /// </summary> |
| | | /// <param name="commonStackerCrane"></param> |
| | | /// <param name="value"></param> |
| | | public void AGVToSandyEdge(CommonStackerCrane commonStackerCrane) |
| | | { |
| | | DeviceProDTO? devicePro = commonStackerCrane.DeviceProDTOs.Where(x => x.DeviceProParamType == "AreaWrite" && x.DeviceChildCode == commonStackerCrane.DeviceCode && x.DeviceProParamName == "AreaWrite").OrderBy(x => x.DeviceProOffset).FirstOrDefault(); |
| | | |
| | | if(devicePro == null) |
| | | { |
| | | ConsoleHelper.WriteColorLine($"ãæªæ¾å°é
ç½®è°åº¦AGVåºååè®®ã", ConsoleColor.Magenta); |
| | | return; |
| | | } |
| | | var writeBool = commonStackerCrane.Communicator.Read<bool>(devicePro.DeviceProAddress+0.1); |
| | | if (!writeBool) |
| | | { |
| | | commonStackerCrane.Communicator.Write(devicePro.DeviceProAddress + 0.1, true); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// ä»»å¡å®ä½è½¬æ¢æå½ä»¤Model |
| | | /// </summary> |
| | |
| | | /// <exception cref="Exception"></exception> |
| | | public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task) |
| | | { |
| | | var SourceAddress = _stationManagerRepository.QueryFirst(x => x.stationName == task.SourceAddress); |
| | | var TargetAddress = _stationManagerRepository.QueryFirst(x => x.stationName == task.TargetAddress); |
| | | |
| | | if(SourceAddress == null || TargetAddress == null) |
| | | { |
| | | ConsoleHelper.WriteColorLine($"ãä»»å¡{JsonConvert.SerializeObject(task)}æªæ¾å°ç«å°é
ç½®ã", ConsoleColor.Magenta); |
| | | return null; |
| | | } |
| | | StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand(); |
| | | |
| | | stackerCraneTaskCommand.TaskNum = task.TaskNum; |
| | | stackerCraneTaskCommand.WorkType = 1; |
| | | stackerCraneTaskCommand.TrayType = 0; |
| | | stackerCraneTaskCommand.StartAdder = Convert.ToInt16(task.SourceAddress); |
| | | stackerCraneTaskCommand.EndAdder = Convert.ToInt16(task.TargetAddress); |
| | | stackerCraneTaskCommand.TaskType = 0; |
| | | stackerCraneTaskCommand.StartAddress = Convert.ToInt16(SourceAddress.stationCode); |
| | | stackerCraneTaskCommand.EndAddress = Convert.ToInt16(TargetAddress.stationCode); |
| | | |
| | | return stackerCraneTaskCommand; |
| | | |
| | | |
| | | } |
| | | } |
| | | } |