| | |
| | | using HslCommunication; |
| | | using Mapster; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using System.Text; |
| | | using System.Text.RegularExpressions; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Common; |
| | |
| | | using WIDESEAWCS_Model.BasicInfo; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.DeviceBase; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_Tasks.ConveyorLineJob; |
| | | using WIDESEAWCS_Tasks.StackerCraneJob; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | |
| | | case 1: |
| | | await RequestTask(conveyorLine, command, childDeviceCode, stationManager); |
| | | break; |
| | | |
| | | case 9: |
| | | RequestWMSTask(conveyorLine, stationManager); |
| | | break; |
| | | case 2: |
| | | case 3: |
| | | RequestInOrOutbound(command, conveyorLine, stationManager, task); |
| | | RequestNextAddress(command, conveyorLine, stationManager, task); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | public void HandleFinishTaskAsync(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, Dt_Task task=null) |
| | | { |
| | | var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationPLC == conveyorLine.DeviceCode); |
| | | |
| | | switch (stationManager.stationType) |
| | | { |
| | | case 4: |
| | | case 5: |
| | | ConveyorLineInOrOutFinish(conveyorLine, command, stationManager, task); |
| | | break; |
| | | case 7: |
| | | ConveyorLineOutFinish(conveyorLine, command, stationManager, task); |
| | | task = _taskService.QueryConveyorLineFinishTask(stationManager.stationChildCode, command.TaskNum); |
| | | if (task != null) |
| | | { |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | |
| | | private async Task RequestTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, Dt_StationManager stationManager) |
| | | { |
| | | var hasTask = await _taskRepository.QueryFirstAsync(x => x.SourceAddress == childDeviceCode); |
| | | var hasTask = await _taskRepository.QueryFirstAsync(x => x.SourceAddress == childDeviceCode && x.TaskState < (int)TaskInStatusEnum.RGV_InExecutingFinish && x.TaskState >= (int)TaskInStatusEnum.InNew); |
| | | if (hasTask != null) |
| | | { |
| | | var log = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{hasTask.TaskNum}ã,æçæ¡ç ï¼ã{hasTask.PalletCode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线åå¨ä»»å¡"; |
| | | ConsoleHelper.WriteWarningLine(log); |
| | | |
| | | await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, log); |
| | | return; |
| | | } |
| | | var RGVName = string.Empty; |
| | | if (stationManager.stationFloor == "1F") |
| | | { |
| | | var RGVOne = _taskRepository.QueryData(x => x.RGVName == "RGV01").ToList(); |
| | | var RGVTwo = _taskRepository.QueryData(x => x.RGVName == "RGV02").ToList(); |
| | | if (RGVOne.Count > RGVTwo.Count) |
| | | { |
| | | RGVName = "RGV01"; |
| | | } |
| | | else |
| | | { |
| | | RGVName = "RGV02"; |
| | | } |
| | | RGVName = stationManager.RGVName; |
| | | } |
| | | |
| | | else |
| | | { |
| | | RGVName = "RGV03"; |
| | | } |
| | | Dt_Task task = new Dt_Task() |
| | | { |
| | | TaskNum = _taskRepository.GetTaskNo().Result, |
| | |
| | | TaskState = (int)TaskInStatusEnum.InNew, |
| | | SourceAddress = childDeviceCode, |
| | | Dispatchertime = DateTime.Now, |
| | | Grade = 1, // 设置é»è®¤ä¼å
级为1 |
| | | Grade = 1, |
| | | Creater = "System", |
| | | Floor = stationManager.stationFloor, |
| | | RGVName = stationManager.RGVName != null ? stationManager.RGVName : RGVName, |
| | | RGVName = RGVName, |
| | | SourceStation= stationManager.remark, |
| | | }; |
| | | |
| | | _taskRepository.AddData(task); |
| | | } |
| | | private void RequestWMSTask(CommonConveyorLine conveyorLine, Dt_StationManager stationManager) |
| | | { |
| | | if (stationManager.stationChildCode == "3002") |
| | | { |
| | | DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == stationManager.stationChildCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault(); |
| | | var x = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 5); |
| | | |
| | | string Barcode = Encoding.UTF8.GetString(x); |
| | | |
| | | if (Barcode == null) |
| | | { |
| | | conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode); |
| | | } |
| | | var task = _taskRepository.QueryFirst(x => x.PalletCode == Barcode && x.TaskState == (int)TaskInStatusEnum.HoistNew); |
| | | |
| | | if (task != null) |
| | | { |
| | | ConveyorLineTaskCommandWrite taskCommand = new ConveyorLineTaskCommandWrite() |
| | | { |
| | | TaskNum = Convert.ToInt16(task.TaskNum), |
| | | TargetAddress = Convert.ToInt16(task.NextAddress), |
| | | WriteInteractiveSignal = task.TaskType == (int)TaskOutboundTypeEnum.Outbound ? (byte)Convert.ToSByte(2) : (byte)Convert.ToSByte(1) |
| | | }; |
| | | var result = SendCommand(taskCommand, conveyorLine, stationManager.stationChildCode); |
| | | if (result) |
| | | { |
| | | task.TaskState = (int)TaskInStatusEnum.HoistInExecuting; |
| | | _taskRepository.UpdateData(task); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); |
| | | var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; |
| | | var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue; |
| | | |
| | | WMSTaskDTO taskDTO = new WMSTaskDTO() |
| | | { |
| | | TPbarcode = Barcode, |
| | | WhCode = "1001", |
| | | BeginPoint = stationManager.stationChildCode |
| | | }; |
| | | if (wmsBase == null || requestTask == null) |
| | | { |
| | | throw new InvalidOperationException("WMS IP æªé
ç½®"); |
| | | } |
| | | var wmsIpAddress = wmsBase + requestTask; |
| | | var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == stationManager.stationNextChildCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault(); |
| | | var x = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 5); |
| | | |
| | | string Barcode = Encoding.UTF8.GetString(x); |
| | | if (Barcode == "") |
| | | { |
| | | conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode); |
| | | } |
| | | var task = _taskRepository.QueryFirst(x => x.PalletCode == Barcode); |
| | | if (task != null) |
| | | { |
| | | |
| | | } |
| | | else |
| | | { |
| | | var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); |
| | | var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; |
| | | var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue; |
| | | |
| | | WMSTaskDTO taskDTO = new WMSTaskDTO() |
| | | { |
| | | TPbarcode = Barcode, |
| | | WhCode = "1001", |
| | | BeginPoint = stationManager.stationChildCode |
| | | }; |
| | | if (wmsBase == null || requestTask == null) |
| | | { |
| | | throw new InvalidOperationException("WMS IP æªé
ç½®"); |
| | | } |
| | | var wmsIpAddress = wmsBase + requestTask; |
| | | var result = WIDESEA_Comm.Http.HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |