| | |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Masuit.Tools; |
| | | using Newtonsoft.Json; |
| | | using WIDESEAWCS_Common; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_DTO.WMS; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_Tasks.ConveyorLineJob; |
| | | using HslCommunication; |
| | | using WIDESEAWCS_DTO.WMS; |
| | | using WIDESEAWCS_Common; |
| | | using Masuit.Tools; |
| | | using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | |
| | | case 9: |
| | | case 11: |
| | | case 12: |
| | | var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); |
| | | var task = _taskService.QueryExecutingTaskByBarcode(command.ConveyorLineBarcode, childDeviceCode); |
| | | if (task != null) |
| | | { |
| | | ExecuteStationAction(stationManager, conveyorLine, command, childDeviceCode); |
| | |
| | | case 10: |
| | | ExecuteStationAction(stationManager, conveyorLine, command, childDeviceCode); |
| | | break; |
| | | //case 16: |
| | | // ExecuteStationAction(stationManager, conveyorLine, command, childDeviceCode); |
| | | // break; |
| | | } |
| | | |
| | | #region |
| | |
| | | // } |
| | | //} |
| | | #endregion |
| | | |
| | | } |
| | | |
| | | private void ExecuteStationAction(Dt_StationManager stationManager, CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) |
| | |
| | | case 8: |
| | | RequestInNextAddress(conveyorLine, command, childDeviceCode); |
| | | break; |
| | | |
| | | case 9: |
| | | ConveyorLineInFinish(conveyorLine, command, childDeviceCode); |
| | | break; |
| | | |
| | | case 10: |
| | | RequestOutbound(conveyorLine, command, childDeviceCode); |
| | | break; |
| | | |
| | | case 11: |
| | | RequestOutNextAddress(conveyorLine, command, childDeviceCode); |
| | | break; |
| | | |
| | | case 12: |
| | | ConveyorLineOutFinish(conveyorLine, command, childDeviceCode); |
| | | break; |
| | | |
| | | case 6: |
| | | CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode); |
| | | break; |
| | | case 16: |
| | | AbNormalStationBZTask(conveyorLine, command, childDeviceCode); |
| | | break; |
| | | case 1: |
| | | |
| | | //if (stationManager.stationArea.Contains("GW")) |
| | | //{ |
| | | // var taskGW = _taskRepository.QueryFirst(x => x.TargetAddress == childDeviceCode && (x.TaskState == (int)TaskOutStatusEnum.OutFinish || x.TaskState == (int)TaskOutStatusEnum.OutPending)); |
| | | // if (taskGW != null) |
| | | // { |
| | | // command.ConveyorLineBarcode = taskGW.PalletCode; |
| | | // } |
| | | //var taskGW = _taskRepository.QueryFirst(x => x.TargetAddress == childDeviceCode && (x.TaskState == (int)TaskOutStatusEnum.OutFinish || x.TaskState == (int)TaskOutStatusEnum.OutPending)); |
| | | //if (taskGW != null) |
| | | //{ |
| | | // command.ConveyorLineBarcode = taskGW.PalletCode; |
| | | //} |
| | | RequestWmsTask(conveyorLine, command, childDeviceCode); |
| | | //} |
| | | //如高温出库后任务标记NG异常则将任务更新为异常排出任务 --冠宇取消超时检测后 托盘超时不在出库至异常口 |
| | | //Dt_Task NGtask = _taskRepository.QueryFirst(x => x.Remark == "NG" && x.Roadway == stationManager.Roadway && x.Roadway.Contains("GW")); |
| | | //if (NGtask != null) |
| | | //{ |
| | | // CreateAbNormalOutbound(conveyorLine, command, childDeviceCode, NGtask); |
| | | // break; |
| | | //} |
| | | |
| | | RequestWmsTask(conveyorLine, command, childDeviceCode,stationManager); |
| | | break; |
| | | } |
| | | } |
| | |
| | | { |
| | | if (command.ConveyorLineBarcode != "NoRead") |
| | | { |
| | | //var config = _sys_ConfigService.GetByConfigKey("SYS_BASE", "ISFRINTRAY"); |
| | | //if (config.ConfigValue == "1") |
| | | //{ |
| | | // Random random = new Random(); |
| | | // var task = new Dt_Task() |
| | | // { |
| | | // CurrentAddress = childDeviceCode, |
| | | // Grade = 1, |
| | | // NextAddress = "2066", |
| | | // PalletCode = command.ConveyorLineBarcode, |
| | | // Roadway = "FR", |
| | | // SourceAddress = childDeviceCode, |
| | | // TargetAddress = "2066", |
| | | // TaskNum = random.Next(1,9999), |
| | | // TaskType = (int)TaskInboundTypeEnum.InTray, |
| | | // TaskState = (int)TaskInStatusEnum.Line_InExecuting, |
| | | // WMSId = 0 |
| | | // }; |
| | | // var taskCommand = MapTaskCommand(task, command); |
| | | // conveyorLine.SendCommand(taskCommand, childDeviceCode); |
| | | //} |
| | | //else |
| | | //{ |
| | | var taskDTO = CreateEmptyTrayTaskDto(command.ConveyorLineBarcode, childDeviceCode); |
| | | |
| | | if (_taskRepository.QueryFirst(x => x.PalletCode == taskDTO.PalletCode) != null) |
| | |
| | | var content = CreateAndSendTask(taskDTO); |
| | | if (content.Status) |
| | | { |
| | | var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); |
| | | var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode, command.ConveyorLineBarcode); |
| | | if (task != null) |
| | | { |
| | | var taskCommand = MapTaskCommand(task, command); |
| | |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | } |
| | | //} |
| | | } |
| | | } |
| | | |
| | |
| | | /// <summary> |
| | | /// 请求WMS任务 |
| | | /// </summary> |
| | | private async void RequestWmsTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) |
| | | private async void RequestWmsTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, Dt_StationManager stationManager) |
| | | { |
| | | //var taskGW = _taskRepository.QueryFirst(x => x.TargetAddress == childDeviceCode && (x.TaskState == (int)TaskOutStatusEnum.OutFinish || x.TaskState == (int)TaskOutStatusEnum.OutPending)); |
| | | //if (taskGW != null) |
| | |
| | | //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, task.TaskNum, childDeviceCode); |
| | | //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, task.NextAddress, childDeviceCode); |
| | | //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, command.ConveyorLineBarcode, childDeviceCode); |
| | | var GWTask = _taskRepository.QueryData(x => x.Roadway.Contains("GWSC2") && x.SourceAddress == "1039" && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskInStatusEnum.Line_InFinish)).ToList(); |
| | | if (GWTask.Count >= 2 && childDeviceCode == "1039") |
| | | { |
| | | ConsoleHelper.WriteErrorLine($"托盘号:【{command.ConveyorLineBarcode}】高温二已存在【{GWTask.Count}】个任务大于2个任务不可下发"); |
| | | return; |
| | | } |
| | | ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); |
| | | conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); |
| | | conveyorLine.SendCommand(taskCommand, childDeviceCode); |
| | | //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); |
| | | conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); |
| | | |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | WriteInfo(conveyorLine.DeviceName, content.Message); |
| | | conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, stationManager.stationNGChildCode, childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode); |
| | | ConsoleHelper.WriteErrorLine($"【{conveyorLine.DeviceName}】托盘号:【{command.ConveyorLineBarcode}】请求点位:【{childDeviceCode}】异常信息【{content.Message}】"); |
| | | //_taskRepository.AddData(taskGW); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 高温出库后任务完成 如果任务标识NG则将任务改为异常排出任务 |
| | | /// </summary> |
| | | /// <param name="conveyorLine"></param> |
| | | /// <param name="command"></param> |
| | | /// <param name="childDeviceCode"></param> |
| | | /// <param name="task"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | private void CreateAbNormalOutbound(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, Dt_Task task) |
| | | { |
| | | Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode); |
| | | |
| | | if (stationManager == null || string.IsNullOrWhiteSpace(stationManager.stationNGChildCode) || string.IsNullOrWhiteSpace(stationManager.stationNGLocation)) |
| | | { |
| | | throw new Exception("未配置站台的对应NG口信息"); |
| | | } |
| | | |
| | | task.SourceAddress = task.TargetAddress; |
| | | task.TargetAddress = stationManager.stationNGLocation; |
| | | task.TaskState = (int)TaskOutStatusEnum.OutNew; |
| | | task.TaskType = (int)TaskOutboundTypeEnum.InToOut; |
| | | task.Grade = 10; //此处 出库至异常排出口的任务应除火警外最优先执行 |
| | | |
| | | _taskRepository.UpdateData(task); |
| | | //Dt_Task task= _taskRepository.QueryFirst(x=>) |
| | | //_taskRepository.QueryFirst() |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 包装异常排出口逻辑 |
| | | /// </summary> |
| | | /// <param name="conveyorLine"></param> |
| | | /// <param name="command"></param> |
| | | /// <param name="childDeviceCode"></param> |
| | | private void AbNormalStationBZTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) |
| | | { |
| | | Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationPLC == conveyorLine.DeviceCode); |
| | | |
| | | if (command.ConveyorLineBarcode.IsNullOrEmpty()) |
| | | { |
| | | conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 2, childDeviceCode); |
| | | return; |
| | | } |
| | | |
| | | |
| | | if (conveyorLine.ReadValue(ConveyorLineDBName_After.InteractiveSignal, childDeviceCode).ObjToInt() == 0) //托盘正反信号 |
| | | { |
| | | |
| | | }; |
| | | |
| | | conveyorLine.ReadValue(ConveyorLineDBName_After.InteractiveSignal, childDeviceCode); //托盘有无电芯信号 |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |