| | |
| | | CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams"); |
| | | if (conveyorLine != null) |
| | | { |
| | | // æ¥è¯¢ææå设å¤çä½ç½® |
| | | List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); |
| | | // è·åææç«ç¹ç®¡çå¨ |
| | | List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode); |
| | | |
| | | // å¹¶è¡å¤çæ¯ä¸ªåè®¾å¤ |
| | | var tasks = childDeviceCodes.Select(childDeviceCode => ProcessDeviceAsync(conveyorLine, childDeviceCode)).ToList(); |
| | | |
| | | // å¹¶è¡å¤çæ¯ä¸ªç«ç¹ç®¡çå¨ |
| | | tasks = stationManagers.Select(station => Task.Run(async () => |
| | | { |
| | | ConveyorLineTaskCommand command = ReadCommand(conveyorLine, station.stationChildCode); |
| | | if (command == null ) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | IStationHandler handler = StationHandlerFactory.GetHandler(station.stationType, this); |
| | | await handler.HandleStationAsync(conveyorLine, station, command); |
| | | })).ToList(); |
| | | |
| | | await Task.WhenAll(tasks); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | private Task ProcessDeviceAsync(CommonConveyorLine conveyorLine, string childDeviceCode) |
| | | { |
| | | try |
| | | { |
| | | // 读åä»»å¡å½ä»¤å设å¤å½ä»¤ |
| | | ConveyorLineTaskCommand command = ReadCommand(conveyorLine, childDeviceCode); |
| | | if (command != null) |
| | | { |
| | | #region è°ç¨äºä»¶æ»çº¿éç¥å端 |
| | | |
| | | // è·åç¼åä¸çç¨æ·ä¿¡æ¯ |
| | | var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken"); |
| | | if (tokenInfos != null && tokenInfos.Any()) |
| | | { |
| | | userTokenIds = tokenInfos.Select(x => x.Token_ID).ToList(); |
| | | userIds = tokenInfos.Select(x => x.UserId).ToList(); |
| | | |
| | | // æé éç¥æ°æ® |
| | | object obj = new |
| | | { |
| | | command |
| | | }; |
| | | // åééç¥ |
| | | _noticeService.LineData(userIds.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, childDeviceCode, data = obj }); |
| | | } |
| | | |
| | | #endregion è°ç¨äºä»¶æ»çº¿éç¥å端 |
| | | |
| | | var structs = BitConverter.GetBytes(command.InteractiveSignal).Reverse().ToArray().ToBoolArray(); |
| | | // è·å设å¤å议详æ
|
| | | List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal)).ToList(); |
| | | |
| | | if (deviceProtocolDetails != null) |
| | | { |
| | | foreach (var item in deviceProtocolDetails) |
| | | { |
| | | int itemValue = item.ProtocalDetailValue.ObjToInt(); |
| | | if (structs[itemValue] == true) |
| | | { |
| | | // è·åå¤çæ¹æ³ |
| | | MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType); |
| | | if (method != null) |
| | | { |
| | | // è°ç¨å¤çæ¹æ³ |
| | | method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, itemValue }); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | } |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | #region å
¥åº |
| | | |
| | | /// <summary> |
| | | /// è¾é线请æ±å
¥åº |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> |
| | | public async Task RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) |
| | | { |
| | | try |
| | | { |
| | | // è¾åºè¦åä¿¡æ¯ï¼è¡¨ç¤ºä»»å¡å·²å°è¾¾å设å¤å¹¶è¯·æ±æ«ç å
¥åº |
| | | var log = $"æ¶é´ï¼ã{DateTime.Now}ãã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¯·æ±æ«ç å
¥åº"; |
| | | ConsoleHelper.WriteWarningLine(log); |
| | | // åééç¥ |
| | | await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, log); |
| | | |
| | | // æ¥è¯¢æ¡ç 对åºçä»»å¡ |
| | | var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode.ToString(), childDeviceCode); |
| | | if (task != null) |
| | | { |
| | | // 妿任å¡ç±»åæ¯åºåºæåºæçï¼åå¤çåºåºä»»å¡ |
| | | if (task.TaskType == (int)TaskOutboundTypeEnum.OutTray || task.TaskType == (int)TaskOutboundTypeEnum.Outbound) |
| | | { |
| | | HandleTaskOut(conveyorLine, command, childDeviceCode, ProtocalDetailValue, task); |
| | | } |
| | | else |
| | | { |
| | | // è·åä»»å¡çä¸ä¸ç®æ å°å |
| | | var next = task.NextAddress; |
| | | // å°ä»»å¡æ å°ä¸ºå½ä»¤ |
| | | var taskCommand = MapTaskCommand(task, command); |
| | | // æ¢å¤ä»»å¡çä¸ä¸ç®æ å°å |
| | | task.NextAddress = next; |
| | | // åéå½ä»¤å°åè®¾å¤ |
| | | conveyorLine.SendCommand(taskCommand, childDeviceCode); |
| | | |
| | | // è¾åºè¦åä¿¡æ¯ï¼è¡¨ç¤ºä»»å¡å·²å°è¾¾å设å¤å¹¶è¯·æ±æ«ç å
¥åºï¼ä¸ä¸ç®æ å°å |
| | | var logs = $"æ¶é´ï¼ã{DateTime.Now}ãã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¯·æ±æ«ç å
¥åº,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"; |
| | | ConsoleHelper.WriteWarningLine(logs); |
| | | |
| | | await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | |
| | | // åéä»»å¡å®æéç¥ |
| | | ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); |
| | | // æ´æ°ä»»å¡ç¶æä¸ºä¸ä¸ç¶æ |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 妿任å¡ä¸ºç©ºä¸æ¡ç ä¸ä¸º"NoRead"䏿¡ç ä¸ä¸ºç©ºï¼åå¤çæ°ä»»å¡ |
| | | if (task == null && command.Barcode.ToString() != "NoRead" && command.Barcode.IsNotEmptyOrNull()) |
| | | { |
| | | // æ¥è¯¢æ¡ç 对åºçä»»å¡ |
| | | task = _taskService.QueryBarcodeTask(command.Barcode.ToString(), childDeviceCode); |
| | | if (task == null) |
| | | // 弿¥å¤çæ°ä»»å¡ |
| | | await HandleNewTaskAsync(conveyorLine, command, childDeviceCode, ProtocalDetailValue); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // æè·å¹¶è¾åºå¼å¸¸ä¿¡æ¯ |
| | | Console.Out.WriteLine(ex.ToString()); |
| | | } |
| | | } |
| | | |
| | | #region è¾é线请æ±å
¥åºä¸ä¸å°å |
| | | |
| | | /// <summary> |
| | | /// è¾é线请æ±å
¥åºä¸ä¸å°å |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | public void RequestInNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode) |
| | | { |
| | | var log = $"æ¶é´ï¼ã{DateTime.Now}ãã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ã请æ±å
¥åºä¸ä¸å°å"; |
| | | ConsoleHelper.WriteWarningLine(log); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, log); |
| | | |
| | | Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode, command.Barcode.ToString()); |
| | | if (task != null) |
| | | { |
| | | if (command.Barcode.ToString() == task.PalletCode) |
| | | { |
| | | Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); |
| | | if (newTask != null) |
| | | { |
| | | //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask); |
| | | //taskCommand.InteractiveSignal = command.InteractiveSignal; |
| | | var next = newTask.NextAddress; |
| | | var taskCommand = MapTaskCommand(newTask, command); |
| | | newTask.NextAddress = next; |
| | | |
| | | var logs = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ã请æ±å
¥åºä¸ä¸å°å,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"; |
| | | ConsoleHelper.WriteWarningLine(logs); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | |
| | | conveyorLine.SendCommand(taskCommand, childDeviceCode); |
| | | _taskService.UpdateData(newTask); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | #endregion è¾é线请æ±å
¥åºä¸ä¸å°å |
| | | |
| | | /// <summary> |
| | | /// è¾é线å
¥åºå®æ |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> |
| | | public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) |
| | | { |
| | | try |
| | | { |
| | | var log = $"æ¶é´ï¼ã{DateTime.Now}ãã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线å
¥åºå®æ"; |
| | | ConsoleHelper.WriteWarningLine(log); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, log); |
| | | |
| | | var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode, command.Barcode.ToString()); |
| | | if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) |
| | | { |
| | | if (command.Barcode.ToString() == task.PalletCode && childDeviceCode == task.NextAddress) |
| | | { |
| | | if (task.TaskType == (int)TaskInboundTypeEnum.InNG) |
| | | { |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); |
| | | |
| | | var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress); |
| | | task.CurrentAddress = station.stationLocation; |
| | | task.NextAddress = station.stationNGLocation; |
| | | task.TargetAddress = task.NextAddress; |
| | | task.TaskState = nextStatus; |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | _taskRepository.UpdateData(task); |
| | | |
| | | conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, "1000", childDeviceCode); |
| | | |
| | | var logs = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线å
¥åºå®æ,ä¸ä¸ç®æ å°åãçå¾
åé
è´§ä½,å¹¶åå
¥1000ã"; |
| | | ConsoleHelper.WriteWarningLine(logs); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | |
| | | ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); |
| | | } |
| | | else |
| | | { |
| | | WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); |
| | | WriteInfo(conveyorLine.DeviceName, content.ToJsonString()); |
| | | if (!content.Status) |
| | | { |
| | | ConsoleHelper.WriteWarningLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线å
¥åºå®æ,任塿§è¡å¤±è´¥{JsonConvert.SerializeObject(content)}"); |
| | | return; |
| | | } |
| | | |
| | | conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, "1000", childDeviceCode); |
| | | |
| | | var logs = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线å
¥åºå®æ,ä¸ä¸ç®æ å°åãçå¾
åé
è´§ä½,å¹¶åå
¥1000ã"; |
| | | ConsoleHelper.WriteWarningLine(logs); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | |
| | | ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); |
| | | Console.Out.WriteLine(content.ToJsonString()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | } |
| | | } |
| | | |
| | | #endregion å
¥åº |
| | | |
| | | #region åºåº |
| | | |
| | | /// <summary> |
| | | /// è¾é线请æ±åºä¿¡æ¯ |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> |
| | | public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) |
| | | { |
| | | try |
| | | { |
| | | // æ¥è¯¢è¾é线任å¡ï¼æ ¹æ®è¾é线设å¤åå设å¤ä»£ç è·åä»»å¡ä¿¡æ¯ |
| | | var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); |
| | | |
| | | // è¾åºæåä¿¡æ¯ï¼å
æ¬è¾é线åç§°ãä»»å¡å·ãæçæ¡ç åå设å¤ä»£ç ï¼ä»¥åä»»å¡ä¿¡æ¯ |
| | | var logs = $"æ¶é´ï¼ã{DateTime.Now}ãã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线请æ±åºåº,task{task.ToJsonString()}"; |
| | | ConsoleHelper.WriteSuccessLine(logs); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | |
| | | // 妿任å¡ä¸ä¸ºç©ºï¼åæ§è¡ä»¥ä¸æä½ |
| | | if (task != null) |
| | | { |
| | | // è·åä»»å¡çä¸ä¸ç®æ å°å |
| | | var next = task.NextAddress; |
| | | |
| | | // å°ä»»å¡å½ä»¤æ å°å°å½åä»»å¡ |
| | | var taskCommand = MapTaskCommand(task, command); |
| | | |
| | | // æ¢å¤ä»»å¡çä¸ä¸ç®æ å°å |
| | | task.NextAddress = next; |
| | | |
| | | // è¾åºæåä¿¡æ¯ï¼å
æ¬è¾é线åç§°ãä»»å¡å·ãæçæ¡ç ãå设å¤ä»£ç åä¸ä¸ç®æ å°å |
| | | var log = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线请æ±åºåº,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"; |
| | | ConsoleHelper.WriteSuccessLine(log); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, log); |
| | | |
| | | // åè¾é线åéå½ä»¤ |
| | | conveyorLine.SendCommand(taskCommand, childDeviceCode); |
| | | |
| | | // 宿è¾é线åéä»»å¡ï¼å¹¶æ´æ°ä»»å¡ç¶æ |
| | | ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æå°ä¸ä¸ä¸ªç¶æ |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | |
| | | // 妿任å¡çç®æ å°åæ¯"1020-1"ï¼å忬¡æ´æ°ä»»å¡ç¶æå°ä¸ä¸ä¸ªç¶æ |
| | | if (task.TargetAddress == "1020-1"|| task.TargetAddress == "1049-8") |
| | | { |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è¾é线请æ±åºåºä¸ä¸å°å |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | public void RequestOutNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) |
| | | { |
| | | // æå°æåæ¥å¿ï¼æ¾ç¤ºå½å设å¤åç§°ãä»»å¡å·ãæçæ¡ç 以å请æ±åºåºä¸ä¸å°åçå设å¤ä»£ç |
| | | var log = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线请æ±åºåºä¸ä¸å°å"; |
| | | ConsoleHelper.WriteSuccessLine(log); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, log); |
| | | |
| | | // æ¥è¯¢æ£å¨æ§è¡çè¾é线任å¡ï¼æ ¹æ®ä»»å¡å·åå设å¤ä»£ç è·åä»»å¡ä¿¡æ¯ |
| | | Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode, command.Barcode.ToString()); |
| | | |
| | | // 妿任å¡åå¨ |
| | | if (task != null) |
| | | { |
| | | // æ£æ¥ä»»å¡ä¸çæçæ¡ç æ¯å¦ä¸å½ä»¤ä¸çæçæ¡ç ä¸è´ |
| | | if (command.Barcode.ToString() == task.PalletCode) |
| | | { |
| | | // æ´æ°ä»»å¡çä½ç½®ä¿¡æ¯ï¼å¹¶è·åæ´æ°åçä»»å¡å¯¹è±¡ |
| | | Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); |
| | | |
| | | // å¦ææ´æ°åçä»»å¡å¯¹è±¡ä¸ä¸ºç©º |
| | | if (newTask != null) |
| | | { |
| | | // è·åä¸ä¸ç®æ å°å |
| | | var next = newTask.NextAddress; |
| | | |
| | | // å°æ°ä»»å¡å¯¹è±¡æ å°ä¸ºä»»å¡å½ä»¤å¯¹è±¡ |
| | | var taskCommand = MapTaskCommand(newTask, command); |
| | | |
| | | // æ¢å¤æ°ä»»å¡å¯¹è±¡çä¸ä¸ç®æ å°å |
| | | newTask.NextAddress = next; |
| | | |
| | | // æå°æåæ¥å¿ï¼æ¾ç¤ºå½å设å¤åç§°ãä»»å¡å·ãæçæ¡ç ãå设å¤ä»£ç 以åä¸ä¸ç®æ å°å |
| | | var logs = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线请æ±åºåºä¸ä¸å°å,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"; |
| | | ConsoleHelper.WriteSuccessLine(logs); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | |
| | | // åéä»»å¡å½ä»¤å°åè®¾å¤ |
| | | conveyorLine.SendCommand(taskCommand, childDeviceCode); |
| | | |
| | | // æ è®°è¾é线åéä»»å¡å®æ |
| | | ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); |
| | | |
| | | _taskService.UpdateData(newTask); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è¾é线åºåºå®æ |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="command">读åç请æ±ä¿¡æ¯</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) |
| | | { |
| | | try |
| | | { |
| | | // æå°æåä¿¡æ¯ï¼è¡¨ç¤ºæçå·²å°è¾¾æå®è¾éçº¿å¹¶å®æåºåº |
| | | var logs = $"ã{conveyorLine.DeviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线åºåºå®æ"; |
| | | ConsoleHelper.WriteSuccessLine(logs); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, logs); |
| | | |
| | | // æ¥è¯¢æ£å¨æ§è¡çè¾éçº¿ä»»å¡ |
| | | var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode, command.Barcode.ToString()); |
| | | |
| | | // 妿任å¡åå¨ |
| | | if (task != null) |
| | | { |
| | | // 妿任å¡ä¸çæçæ¡ç ä¸å½ä»¤ä¸çæçæ¡ç ä¸è´ |
| | | if (command.Barcode.ToString() == task.PalletCode) |
| | | { |
| | | // å建ä¸ä¸ªç©ºçWebResponseContent对象 |
| | | WebResponseContent content = new WebResponseContent(); |
| | | |
| | | // ä¿åä»»å¡çä¸ä¸ç®æ å°å |
| | | var next = task.NextAddress; |
| | | // å°ä»»å¡æ å°ä¸ºå½ä»¤ |
| | | var taskCommand = MapTaskCommand(task, command); |
| | | // æ¢å¤ä»»å¡çä¸ä¸ç®æ å°å |
| | | task.NextAddress = next; |
| | | |
| | | // 妿任å¡çæçæ¡ç ä¸å½ä»¤ä¸çæçæ¡ç ä¸ä¸è´æè
ä»»å¡å¤æ³¨ä¸º"NG" |
| | | if (task.PalletCode != command.Barcode.ToString() || task.Remark == "NG") |
| | | { |
| | | // 设置å½ä»¤çç®æ å°å为NGå°å |
| | | taskCommand.TargetAddress = 1; |
| | | } |
| | | else |
| | | { |
| | | // 设置å½ä»¤çç®æ å°å为1000 |
| | | taskCommand.TargetAddress = 1000; |
| | | } |
| | | |
| | | // æå°æåä¿¡æ¯ï¼è¡¨ç¤ºæçå·²å°è¾¾æå®è¾éçº¿å¹¶å®æåºåºï¼ä¸ä¸ç®æ å°åå·²ç¡®å® |
| | | var log = $"ã{conveyorLine.DeviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线åºåºå®æ,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"; |
| | | ConsoleHelper.WriteSuccessLine(log); |
| | | |
| | | _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); |
| | | WriteInfo(conveyorLine.DeviceName, log); |
| | | |
| | | // åéå½ä»¤å°è¾é线 |
| | | conveyorLine.SendCommand(taskCommand, childDeviceCode); |
| | | // 宿è¾é线åé |
| | | ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); |
| | | // æ´æ°ä»»å¡ç¶æå°ä¸ä¸ä¸ªç¶æ |
| | | content = _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | else |
| | | { |
| | | |
| | | // 宿è¾é线åé |
| | | ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); |
| | | // æ´æ°ä»»å¡ç¶æå°ä¸ä¸ä¸ªç¶æ |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | } |
| | | } |
| | | |
| | | #endregion åºåº |
| | | |
| | | /// <summary> |
| | | /// è¾é线交äºå®æ |
| | | /// </summary> |
| | | /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼å·</param> |
| | | /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> |
| | | /// <param name="value">å¼</param> |
| | | public void ConveyorLineSendFinish(CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value) |
| | | { |
| | | // ä»conveyorLineä¸çDeviceProDTOsåè¡¨ä¸æ¥æ¾ç¬¬ä¸ä¸ªç¬¦åæ¡ä»¶çDeviceProDTO对象 |
| | | // æ¡ä»¶æ¯DeviceProParamTypeçäºDeviceCommandï¼ä¸DeviceChildCodeçäºchildDeviceCode |
| | | // æ¥æ¾ç»ææDeviceProOffsetååºæå |
| | | DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); |
| | | |
| | | // å°deviceProçDeviceProAddressæ'.'å岿å符串æ°ç»x |
| | | string[] x = devicePro.DeviceProAddress.Split('.'); |
| | | |
| | | // å°æ°ç»xçæåä¸ä¸ªå
ç´ æ¿æ¢ä¸ºProtocalDetailValueå 1åçåç¬¦ä¸²å½¢å¼ |
| | | x[x.Length - 1] = (ProtocalDetailValue + 1).ToString(); |
| | | |
| | | // å°ä¿®æ¹åçæ°ç»xéæ°æ¼æ¥æå符串ï¼ä½ä¸ºæ°çDeviceProAddress |
| | | string DeviceProAddress = string.Join(".", x); |
| | | |
| | | var writeBool = conveyorLine.Communicator.Read<bool>(DeviceProAddress); |
| | | if (writeBool != value) |
| | | { |
| | | // 使ç¨conveyorLineçCommunicator对象çWriteæ¹æ³ï¼å°valueåå
¥æ°çDeviceProAddresså°å |
| | | conveyorLine.Communicator.Write(DeviceProAddress, value); |
| | | } |
| | | } |
| | | |
| | | public async Task LogAndWarn(string deviceName, string log, string color = "red") |
| | | { |
| | | ConsoleHelper.WriteWarningLine(log); |
| | | await _noticeService.Logs(userTokenIds, new { deviceName, log = log, time = DateTime.Now.ToString("G"), color = color }); |
| | | WriteInfo(deviceName, log); |
| | | } |
| | | |
| | | private ConveyorLineTaskCommand ReadCommand(CommonConveyorLine conveyorLine,string childDeviceCode) |
| | | { |
| | | ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode); |
| | | |
| | | DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == childDeviceCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault(); |
| | | byte[] Barcode = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 10); |
| | | |
| | | command.Barcode = Encoding.ASCII.GetString(Barcode); |
| | | return command; |
| | | } |
| | | |
| | | } |