feat: 添加消防任务支持并修复堆垛机状态处理
fix: 修正堆垛机状态枚举值拼写错误
refactor: 优化输送线任务处理逻辑
fix: 修复入库任务完成通知WMS系统的返回状态
perf: 减少日志输出提升性能
fix: 修正堆垛机任务选择逻辑中的站台占用判断
feat: 启用自动出库任务功能
fix: 修正堆垛机命令构建逻辑
style: 清理无用代码和注释
docs: 删除过时的README文件
fix: 调整堆垛机状态检查逻辑
refactor: 优化输送线任务处理流程
fix: 修正入库任务完成时的出库日期计算逻辑
feat: 添加VS Code调试配置文件
fix: 更新堆垛机状态枚举描述
fix: 修正输送线任务处理中的ACK标志设置
| | |
| | | { |
| | | return DeviceStatus.Idle; |
| | | } |
| | | else if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Putting || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUp || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpCompleted || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutCompleted) |
| | | else if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Putting || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUp || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutMove || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutCompleted) |
| | | { |
| | | return DeviceStatus.Working; |
| | | } |
| | |
| | | { |
| | | return deviceProtocolDetail.ProtocolDetailType; |
| | | } |
| | | return StackerCraneStatus.Unkonw.ToString(); |
| | | return StackerCraneStatus.Unknown.ToString(); |
| | | } |
| | | } |
| | | return StackerCraneStatus.Unkonw.ToString(); |
| | | return StackerCraneStatus.Unknown.ToString(); |
| | | } |
| | | |
| | | private void CheckConnect() |
| | |
| | | public enum StackerCraneStatus |
| | | { |
| | | /// <summary> |
| | | /// æ£å¸¸ |
| | | /// 空é²&èæº |
| | | /// </summary> |
| | | [Description("æ£å¸¸")] |
| | | Normal, |
| | | [Description("空é²&èæº")] |
| | | Normal = 1, |
| | | |
| | | /// <summary> |
| | | /// æ
é |
| | |
| | | /// æªç¥ |
| | | /// </summary> |
| | | [Description("æªç¥")] |
| | | Unkonw |
| | | Unknown |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// ç»´ä¿®/ç»´æ¤/ä¿å
» |
| | | /// </summary> |
| | | [Description("ç»´ä¿®")] |
| | | Maintenance, |
| | | Maintenance = 2, |
| | | |
| | | /// <summary> |
| | | /// æå¨ |
| | |
| | | /// æªç¥ |
| | | /// </summary> |
| | | [Description("æªç¥")] |
| | | Unkonw |
| | | Unknown |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// å¾
æº |
| | | /// </summary> |
| | | [Description("å¾
æº")] |
| | | Standby, |
| | | Standby = 1, |
| | | |
| | | /// <summary> |
| | | /// æ¥æ¶ä»»å¡ |
| | | /// </summary> |
| | | [Description("æ¥æ¶ä»»å¡")] |
| | | AcceptTask, |
| | | |
| | | /// <summary> |
| | | /// åè´§ç§»å¨ä¸ |
| | | /// </summary> |
| | | [Description("åè´§ç§»å¨ä¸")] |
| | | PickMove, |
| | | |
| | | /// <summary> |
| | | /// åè´§ä¸ |
| | |
| | | PickUp, |
| | | |
| | | /// <summary> |
| | | /// åè´§å®æ |
| | | /// æ¾è´§ç§»å¨ä¸ |
| | | /// </summary> |
| | | [Description("åè´§å®æ")] |
| | | PickUpCompleted, |
| | | [Description("æ¾è´§ç§»å¨ä¸")] |
| | | PutMove, |
| | | |
| | | /// <summary> |
| | | /// æ¾è´§ä¸ |
| | |
| | | /// æªç¥ |
| | | /// </summary> |
| | | [Description("æªç¥")] |
| | | Unkonw |
| | | Unknown |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | if (!Communicator.IsConnected) |
| | | { |
| | | return StackerCraneStatus.Unkonw.ToString(); |
| | | return StackerCraneStatus.Unknown.ToString(); |
| | | } |
| | | |
| | | List<DeviceProDTO> devicePros = _deviceProDTOs.Where(x => x.DeviceProParamType == protocolParamType).ToList(); |
| | |
| | | } |
| | | } |
| | | |
| | | return StackerCraneStatus.Unkonw.ToString(); |
| | | return StackerCraneStatus.Unknown.ToString(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | if (!Communicator.IsConnected) |
| | | { |
| | | return StackerCraneStatus.Unkonw.ToString(); |
| | | return StackerCraneStatus.Unknown.ToString(); |
| | | } |
| | | |
| | | List<DeviceProDTO> devicePros = _deviceProDTOs.Where(x => x.DeviceProParamType == protocolParamType).ToList(); |
| | |
| | | } |
| | | } |
| | | |
| | | return StackerCraneStatus.Unkonw.ToString(); |
| | | return StackerCraneStatus.Unknown.ToString(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | |  |
| | | Microsoft Visual Studio Solution File, Format Version 12.00 |
| | | # Visual Studio Version 18 |
| | | VisualStudioVersion = 18.2.11415.280 d18.0 |
| | | VisualStudioVersion = 18.2.11415.280 |
| | | MinimumVisualStudioVersion = 10.0.40219.1 |
| | | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_Server", "WIDESEAWCS_Server\WIDESEAWCS_Server.csproj", "{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}" |
| | | EndProject |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "version": "3.0", |
| | | "defaultProvider": "cdnjs", |
| | | "libraries": [] |
| | | } |
| | |
| | | return content.Error($"éç¥WMSç³»ç»å åæºå
¥åºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | return content.Error($"éç¥WMSç³»ç»å åæºå
¥åºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); |
| | | return content.OK($"éç¥WMSç³»ç»å åæºå
¥åºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | using Newtonsoft.Json; |
| | | using Quartz; |
| | | using SqlSugar; |
| | | using System.Text; |
| | | using System.Text.Json; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | |
| | | private readonly ILogger<CommonConveyorLineNewJob> _logger; |
| | | |
| | | /// <summary> |
| | | /// ç®æ å°åå°è®¾å¤ç±»åçæ å° |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// </remarks> |
| | | private static List<string> AddressToDeviceType = new List<string> { "11020", "11028" }; |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | | /// </summary> |
| | | /// <param name="taskService">任塿å¡</param> |
| | |
| | | // MaxDegreeOfParallelism = Math.Min(childDeviceCodes.Count, Environment.ProcessorCount * 2), |
| | | //}; |
| | | |
| | | _logger.LogDebug("Executeï¼å¼å§å¹¶è¡å¤çè¾é线 {DeviceCode}ï¼åè®¾å¤æ°é: {Count}", conveyorLine.DeviceCode, childDeviceCodes.Count); |
| | | QuartzLogger.Debug($"å¼å§å¹¶è¡å¤çè¾é线ï¼åè®¾å¤æ°é: {childDeviceCodes.Count}", conveyorLine.DeviceCode); |
| | | //_logger.LogDebug("Executeï¼å¼å§å¹¶è¡å¤çè¾é线 {DeviceCode}ï¼åè®¾å¤æ°é: {Count}", conveyorLine.DeviceCode, childDeviceCodes.Count); |
| | | //QuartzLogger.Debug($"å¼å§å¹¶è¡å¤çè¾é线ï¼åè®¾å¤æ°é: {childDeviceCodes.Count}", conveyorLine.DeviceCode); |
| | | |
| | | // å¹¶è¡å¤çæ¯ä¸ªåè®¾å¤ |
| | | //Parallel.For(0, childDeviceCodes.Count, parallelOptions, i => |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 妿 WCS_ACK 为 1ï¼å
æ¸
é¤ï¼è¡¨ç¤ºå¤çè¿ä¸ä¸æ¬¡è¯·æ±ï¼ |
| | | if (command.WCS_ACK == 1) |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 0, childDeviceCode); |
| | | |
| | | // ========== æ£æ¥ç¹å®ä½ç½®æ¯å¦ææç ========== |
| | | // ä»é
ç½®ä¸è¯»åéè¦æ£æ¥æççä½ç½®å表 |
| | |
| | | // åªæå½ PLC_STB 为 1 æ¶æå¤çä»»å¡ |
| | | if (command.PLC_STB != 1) |
| | | { |
| | | return Task.CompletedTask; |
| | | // 妿 WCS_ACK 为 1ï¼å
æ¸
é¤ï¼è¡¨ç¤ºå¤çè¿ä¸ä¸æ¬¡è¯·æ±ï¼ |
| | | if (command.WCS_ACK == 1) |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 0, childDeviceCode); |
| | | continue; |
| | | } |
| | | |
| | | // ========== å¤çæ æçæ¡ç çæ
åµ ========== |
| | |
| | | _logger.LogDebug("Executeï¼åè®¾å¤ {ChildDeviceCode} æ æçæ¡ç ï¼è¯·æ±åºåºä»»å¡", childDeviceCode); |
| | | QuartzLogger.Debug($"åè®¾å¤ {childDeviceCode} æ æçæ¡ç ï¼è¯·æ±åºåºä»»å¡", conveyorLine.DeviceCode); |
| | | _conveyorLineDispatch.RequestOutbound(conveyorLine, command, childDeviceCode); |
| | | return Task.CompletedTask; |
| | | continue; |
| | | } |
| | | |
| | | // ========== å¤çå·²æä»»å¡å·çæ
åµ ========== |
| | |
| | | { |
| | | case InExecuting: |
| | | // å
¥åºæ§è¡ä¸ï¼è°ç¨ä¸ä¸å°åå¤ç |
| | | _conveyorLineDispatch.RequestInNextAddress(conveyorLine, command, childDeviceCode); |
| | | |
| | | if (AddressToDeviceType.Contains(childDeviceCode)) |
| | | // å°è¾¾ç®æ å°åï¼è°ç¨å
¥åºå®æ |
| | | _conveyorLineDispatch.ConveyorLineInFinish(conveyorLine, command, childDeviceCode); |
| | | else |
| | | // æªå°è¾¾ç®æ å°åï¼è°ç¨å
¥åºä¸ä¸å°åå¤ç |
| | | _conveyorLineDispatch.RequestInNextAddress(conveyorLine, command, childDeviceCode); |
| | | break; |
| | | |
| | | case OutExecuting: |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | _ = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); |
| | | |
| | | // 设置 WCS_STB æ å¿ï¼è¡¨ç¤º WCS å·²å¤ç |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_STB, 1, childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | Dt_Task? task = _taskFilter.QueryExecutingTask(command.TaskNo, childDeviceCode); |
| | | if (task != null) |
| | | { |
| | | // åå¤ ACK 确认 |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 1, childDeviceCode); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æå°ä¸ä¸é¶æ®µï¼é常æ¯å®æï¼ |
| | | WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); |
| | | if (_taskService.UpdateTaskStatusToNext(task).Status) |
| | | { |
| | | |
| | | } |
| | | |
| | | // åå¤ ACK 确认 |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | |
| | | _logger.LogInformation("ConveyorLineInFinishï¼å
¥åºå®æï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", task.TaskNum, childDeviceCode); |
| | | QuartzLogger.Info($"å
¥åºå®æï¼ä»»å¡å·: {task.TaskNum}", conveyorLine.DeviceCode); |
| | |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.Target, task.NextAddress, childDeviceCode); |
| | | |
| | | // åå¤ ACK 确认 |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 1, childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æ |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | |
| | | _ = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); |
| | | |
| | | // åå¤ ACK 确认 |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 1, childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); |
| | | |
| | | // åå¤ ACK 确认 |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 1, childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | |
| | | _logger.LogInformation("ConveyorLineOutFinishï¼åºåºå®æï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", task.TaskNum, childDeviceCode); |
| | | QuartzLogger.Info($"åºåºå®æï¼ä»»å¡å·: {task.TaskNum}", conveyorLine.DeviceCode); |
| | |
| | | // 设置è¾é线çä»»å¡å· |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, taskInfo.TaskNum, sourceAddress); |
| | | |
| | | // 触åè¾é线å¼å§æ§è¡ï¼åå
¥ WCS_STB = 1ï¼ |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_STB, 1, sourceAddress); |
| | | // 触åè¾é线å¼å§æ§è¡ï¼åå
¥ WCS_ACK = 1ï¼ |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, sourceAddress); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æå°ä¸ä¸é¶æ®µ |
| | | if (_taskService.UpdateTaskStatusToNext(taskInfo).Status) |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using Quartz; |
| | | using System; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using System.IO; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane; |
| | | using WIDESEAWCS_Tasks.StackerCraneJob; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane.Enum; |
| | | using WIDESEAWCS_Tasks.StackerCraneJob; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | |
| | | { |
| | | // ä» JobDataMap è·åå åæºè®¾å¤åæ° |
| | | bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); |
| | | if (!flag || value is not IStackerCrane commonStackerCrane) |
| | | if (!flag || value is not CommonStackerCrane commonStackerCrane) |
| | | { |
| | | // åæ°æ æï¼ç´æ¥è¿å |
| | | _logger.LogWarning("Executeï¼åæ°æ æ"); |
| | |
| | | |
| | | // ========== æ£æ¥å åæºä»»å¡å®æç¶æ ========== |
| | | commonStackerCrane.CheckStackerCraneTaskCompleted(); |
| | | _logger.LogDebug("Executeï¼æ£æ¥ä»»å¡å®æç¶æï¼è®¾å¤: {DeviceCode}", _deviceCode); |
| | | QuartzLogger.Debug($"æ£æ¥ä»»å¡å®æç¶æï¼è®¾å¤: {_deviceCode}", _deviceCode); |
| | | //_logger.LogDebug("Executeï¼æ£æ¥ä»»å¡å®æç¶æï¼è®¾å¤: {DeviceCode}", _deviceCode); |
| | | //QuartzLogger.Debug($"æ£æ¥ä»»å¡å®æç¶æï¼è®¾å¤: {_deviceCode}", _deviceCode); |
| | | |
| | | // ========== æ£æ¥æ¯å¦å¯ä»¥åéæ°ä»»å¡ ========== |
| | | if (!commonStackerCrane.IsCanSendTask(commonStackerCrane.Communicator, commonStackerCrane.DeviceProDTOs, commonStackerCrane.DeviceProtocolDetailDTOs)) |
| | | //if (!commonStackerCrane.IsCanSendTask(commonStackerCrane.Communicator, commonStackerCrane.DeviceProDTOs, commonStackerCrane.DeviceProtocolDetailDTOs)) |
| | | if (commonStackerCrane.StackerCraneStatusValue != StackerCraneStatus.Normal) |
| | | { |
| | | // å åæºä¸å¯ç¨ï¼å¦æ£å¨æ§è¡ä¸ä¸ä»»å¡ï¼ï¼ç´æ¥è¿å |
| | | _logger.LogDebug("Executeï¼å åæºä¸å¯ç¨ï¼è®¾å¤: {DeviceCode}", _deviceCode); |
| | |
| | | if (task == null) |
| | | { |
| | | // 没æå¯ç¨ä»»å¡ |
| | | _logger.LogDebug("Executeï¼æ²¡æå¯ç¨ä»»å¡ï¼è®¾å¤: {DeviceCode}", _deviceCode); |
| | | QuartzLogger.Debug($"没æå¯ç¨ä»»å¡ï¼è®¾å¤: {_deviceCode}", _deviceCode); |
| | | //_logger.LogDebug("Executeï¼æ²¡æå¯ç¨ä»»å¡ï¼è®¾å¤: {DeviceCode}", _deviceCode); |
| | | //QuartzLogger.Debug($"没æå¯ç¨ä»»å¡ï¼è®¾å¤: {_deviceCode}", _deviceCode); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | _logger.LogInformation("Executeï¼éæ©ä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", _deviceCode, task.TaskNum); |
| | | QuartzLogger.Info($"鿩任å¡ï¼ä»»å¡å·: {task.TaskNum}", _deviceCode); |
| | | //_logger.LogInformation("Executeï¼éæ©ä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", _deviceCode, task.TaskNum); |
| | | //QuartzLogger.Info($"鿩任å¡ï¼ä»»å¡å·: {task.TaskNum}", _deviceCode); |
| | | |
| | | // ========== æå»ºå½ä»¤ ========== |
| | | // å½ä»¤æå»ºä¸æ²å°ä¸ç¨æå»ºå¨ |
| | |
| | | bool sendFlag = SendStackerCraneCommand(commonStackerCrane, stackerCraneTaskCommand); |
| | | if (sendFlag) |
| | | { |
| | | Task.Delay(1000).Wait(); |
| | | commonStackerCrane.SetValue(StackerCraneDBName.WorkAction, (short)1); |
| | | // åéæåï¼æ´æ°ç¶æ |
| | | commonStackerCrane.LastTaskType = task.TaskType; |
| | | _taskService.UpdateTaskStatusToNext(task.TaskNum); |
| | |
| | | QuartzLogger.Info($"ä»»å¡å®æï¼ä»»å¡å·: {e.TaskNum}", stackerCrane.DeviceCode); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æä¸ºå®æ |
| | | _taskService.StackCraneTaskCompleted(e.TaskNum); |
| | | |
| | | // æ¸
é¤å åæºçä½ä¸æä»¤ï¼è®¾ç½®ä¸º 2ï¼è¡¨ç¤ºç©ºé²ï¼ |
| | | stackerCrane.SetValue(StackerCraneDBName.WorkAction, 2); |
| | | if (_taskService.StackCraneTaskCompleted(e.TaskNum).Status) |
| | | { |
| | | // æ¸
é¤å åæºçä½ä¸æä»¤ï¼è®¾ç½®ä¸º 2ï¼è¡¨ç¤ºç©ºé²ï¼ |
| | | stackerCrane.SetValue(StackerCraneDBName.WorkAction, 2); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | }; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | /// <returns>å åæºå½ä»¤å¯¹è±¡ï¼è½¬æ¢å¤±è´¥è¿å null</returns> |
| | | public object? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task) |
| | | { |
| | | return BuildCommand(task, CreateStandardCommand(task)); |
| | | // æ ¹æ®å··éè·åå½ä»¤ç±»å |
| | | string commandType = GetCommandType(task.Roadway); |
| | | //string commandType = GetCommandType(task.Roadway); |
| | | |
| | | _logger.LogInformation("ConvertToStackerCraneTaskCommandï¼æå»ºå½ä»¤ï¼ä»»å¡å·: {TaskNum}ï¼å··é: {Roadway}ï¼å½ä»¤ç±»å: {CommandType}", task.TaskNum, task.Roadway, commandType); |
| | | QuartzLogger.Info($"æå»ºå½ä»¤ï¼ä»»å¡å·: {task.TaskNum}ï¼å··é: {task.Roadway}ï¼å½ä»¤ç±»å: {commandType}", task.Roadway); |
| | | //_logger.LogInformation("ConvertToStackerCraneTaskCommandï¼æå»ºå½ä»¤ï¼ä»»å¡å·: {TaskNum}ï¼å··é: {Roadway}ï¼å½ä»¤ç±»å: {CommandType}", task.TaskNum, task.Roadway, commandType); |
| | | //QuartzLogger.Info($"æå»ºå½ä»¤ï¼ä»»å¡å·: {task.TaskNum}ï¼å··é: {task.Roadway}ï¼å½ä»¤ç±»å: {commandType}", task.Roadway); |
| | | |
| | | // æ ¹æ®å½ä»¤ç±»åè°ç¨ç¸åºçæå»ºæ¹æ³ |
| | | return commandType switch |
| | | { |
| | | "Formation" => BuildCommand(task, CreateFormationCommand(task)), // æåå½ä»¤ |
| | | _ => BuildCommand(task, CreateStandardCommand(task)) // æ åå½ä»¤ |
| | | }; |
| | | //// æ ¹æ®å½ä»¤ç±»åè°ç¨ç¸åºçæå»ºæ¹æ³ |
| | | //return commandType switch |
| | | //{ |
| | | // "Formation" => BuildCommand(task, CreateFormationCommand(task)), // æåå½ä»¤ |
| | | // _ => BuildCommand(task, CreateStandardCommand(task)) // æ åå½ä»¤ |
| | | //}; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | TaskNum = task.TaskNum, // ä»»å¡å· |
| | | WorkType = 1, // ä½ä¸ç±»å |
| | | WorkAction = 1 // ä½ä¸æä»¤ï¼å¼å§æ§è¡ |
| | | //WorkAction = 1 // ä½ä¸æä»¤ï¼å¼å§æ§è¡ |
| | | }; |
| | | } |
| | | |
| | |
| | | /// æ§å¶å åæºçå¨ä½ï¼ |
| | | /// - 1: å¼å§æ§è¡ä»»å¡ |
| | | /// - 2: ä»»å¡å®æ/忢 |
| | | /// - 3: æ¶é²ä»»å¡å¼å§ |
| | | /// </remarks> |
| | | WorkAction, |
| | | |
| | |
| | | /// æ§å¶å åæºçå¨ä½ï¼ |
| | | /// - 1: å¼å§æ§è¡ä»»å¡ |
| | | /// - 2: ä»»å¡å®æ/忢 |
| | | /// - 3: æ¶é²ä»»å¡å¼å§ |
| | | /// </remarks> |
| | | public short WorkAction { get; set; } |
| | | |
| | |
| | | Dt_Task? candidateTask; |
| | | var deviceCode = commonStackerCrane.DeviceCode; |
| | | |
| | | _logger.LogInformation("SelectTaskï¼å¼å§éæ©ä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä¸ä¸ä»»å¡ç±»å: {LastTaskType}", deviceCode, commonStackerCrane.LastTaskType); |
| | | QuartzLogger.Info($"å¼å§éæ©ä»»å¡ï¼è®¾å¤: {deviceCode}ï¼ä¸ä¸ä»»å¡ç±»å: {commonStackerCrane.LastTaskType}", deviceCode); |
| | | //_logger.LogInformation("SelectTaskï¼å¼å§éæ©ä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä¸ä¸ä»»å¡ç±»å: {LastTaskType}", deviceCode, commonStackerCrane.LastTaskType); |
| | | //QuartzLogger.Info($"å¼å§éæ©ä»»å¡ï¼è®¾å¤: {deviceCode}ï¼ä¸ä¸ä»»å¡ç±»å: {commonStackerCrane.LastTaskType}", deviceCode); |
| | | |
| | | // æ ¹æ®ä¸ä¸ä»»å¡ç±»åå³å®æ¥è¯¢çç¥ |
| | | if (commonStackerCrane.LastTaskType == null) |
| | |
| | | _logger.LogInformation("IsOutTaskStationAvailableï¼ç«å° {ChildPosi}ï¼æ¯å¦è¢«å ç¨: {IsOccupied}ï¼ä»»å¡å·: {TaskNum}", router.ChildPosi, isOccupied, task.TaskNum); |
| | | QuartzLogger.Info($"IsOutTaskStationAvailableï¼ç«å° {router.ChildPosi}ï¼æ¯å¦è¢«å ç¨: {isOccupied}", task.Roadway); |
| | | |
| | | return !isOccupied; |
| | | return isOccupied; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "version": "0.2.0", |
| | | "configurations": [ |
| | | { |
| | | // ä½¿ç¨ IntelliSense æ¾åº C# è°è¯åå¨åªäºå±æ§ |
| | | // å°æ¬åç¨äºç°æå±æ§ç说æ |
| | | // æå
³è¯¦ç»ä¿¡æ¯ï¼è¯·è®¿é® https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.mdã |
| | | "name": ".NET Core Launch (web)", |
| | | "type": "coreclr", |
| | | "request": "launch", |
| | | "preLaunchTask": "build", |
| | | // å¦æå·²æ´æ¹ç®æ æ¡æ¶ï¼è¯·ç¡®ä¿æ´æ°ç¨åºè·¯å¾ã |
| | | "program": "${workspaceFolder}/WIDESEA_WMSServer/bin/Debug/net8.0/WIDESEA_WMSServer.dll", |
| | | "args": [], |
| | | "cwd": "${workspaceFolder}/WIDESEA_WMSServer", |
| | | "stopAtEntry": false, |
| | | // å¯ç¨å¨å¯å¨ ASP.NET Core æ¶å¯å¨ Web æµè§å¨ãæå
³è¯¦ç»ä¿¡æ¯: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser |
| | | "serverReadyAction": { |
| | | "action": "openExternally", |
| | | "pattern": "\\bNow listening on:\\s+(https?://\\S+)" |
| | | }, |
| | | "env": { |
| | | "ASPNETCORE_ENVIRONMENT": "Development" |
| | | }, |
| | | "sourceFileMap": { |
| | | "/Views": "${workspaceFolder}/Views" |
| | | } |
| | | }, |
| | | { |
| | | "name": ".NET Core Attach", |
| | | "type": "coreclr", |
| | | "request": "attach" |
| | | } |
| | | ] |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "version": "2.0.0", |
| | | "tasks": [ |
| | | { |
| | | "label": "build", |
| | | "command": "dotnet", |
| | | "type": "process", |
| | | "args": [ |
| | | "build", |
| | | "${workspaceFolder}/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj", |
| | | "/property:GenerateFullPaths=true", |
| | | "/consoleloggerparameters:NoSummary;ForceNoAlign" |
| | | ], |
| | | "problemMatcher": "$msCompile" |
| | | }, |
| | | { |
| | | "label": "publish", |
| | | "command": "dotnet", |
| | | "type": "process", |
| | | "args": [ |
| | | "publish", |
| | | "${workspaceFolder}/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj", |
| | | "/property:GenerateFullPaths=true", |
| | | "/consoleloggerparameters:NoSummary;ForceNoAlign" |
| | | ], |
| | | "problemMatcher": "$msCompile" |
| | | }, |
| | | { |
| | | "label": "watch", |
| | | "command": "dotnet", |
| | | "type": "process", |
| | | "args": [ |
| | | "watch", |
| | | "run", |
| | | "--project", |
| | | "${workspaceFolder}/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj" |
| | | ], |
| | | "problemMatcher": "$msCompile" |
| | | } |
| | | ] |
| | | } |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | stockInfo.LocationCode = location.LocationCode; |
| | | stockInfo.LocationId = location.Id; |
| | | stockInfo.OutboundDate = task.Roadway switch |
| | | |
| | | var now = DateTime.Now; |
| | | if (task.Roadway.Contains("GW")) |
| | | { |
| | | var r when r.Contains("GW") => DateTime.Now.AddHours(2), |
| | | var r when r.Contains("CW") => DateTime.Now.AddHours(1), |
| | | _ => DateTime.Now |
| | | }; |
| | | if (stockInfo.Remark.IsNullOrEmpty()) |
| | | { |
| | | stockInfo.OutboundDate = now.AddHours(16); |
| | | stockInfo.Remark = "GW_1"; |
| | | } |
| | | else if (stockInfo.Remark == "GW_1") |
| | | { |
| | | stockInfo.OutboundDate = now.AddHours(24); |
| | | stockInfo.Remark = "GW_2"; |
| | | } |
| | | else |
| | | { |
| | | stockInfo.OutboundDate = now.AddHours(16); |
| | | } |
| | | } |
| | | else if (task.Roadway.Contains("CW")) |
| | | { |
| | | if (stockInfo.Remark == "GW_2") |
| | | { |
| | | stockInfo.OutboundDate = now.AddHours(12); |
| | | stockInfo.Remark = "CW_1"; |
| | | } |
| | | else |
| | | { |
| | | stockInfo.OutboundDate = now.AddHours(12); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | stockInfo.OutboundDate = now; |
| | | } |
| | | |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºå®æ.GetHashCode(); |
| | | |
| | | location.LocationStatus = LocationStatusEnum.InStock.GetHashCode(); |
| | |
| | | if (!updateLocationResult || !updateStockResult) |
| | | return WebResponseContent.Instance.Error("ä»»å¡å®æå¤±è´¥"); |
| | | // è°ç¨MESæçè¿ç« |
| | | var inboundRequest = new InboundInContainerRequest |
| | | { |
| | | EquipmentCode = "STK-GROUP-001", |
| | | ResourceCode = "STK-GROUP-001", |
| | | LocalTime = DateTime.Now, |
| | | ContainerCode = taskDto.PalletCode |
| | | }; |
| | | var inboundResult = _mesService.InboundInContainer(inboundRequest); |
| | | if (inboundResult == null || inboundResult.Data == null || !inboundResult.Data.IsSuccess) |
| | | { |
| | | return content.Error($"ä»»å¡å®æå¤±è´¥ï¼MESè¿ç«å¤±è´¥: {inboundResult?.Data?.Msg ?? inboundResult?.ErrorMessage ?? "æªç¥é误"}"); |
| | | } |
| | | //var inboundRequest = new InboundInContainerRequest |
| | | //{ |
| | | // EquipmentCode = "STK-GROUP-001", |
| | | // ResourceCode = "STK-GROUP-001", |
| | | // LocalTime = DateTime.Now, |
| | | // ContainerCode = taskDto.PalletCode |
| | | //}; |
| | | //var inboundResult = _mesService.InboundInContainer(inboundRequest); |
| | | //if (inboundResult == null || inboundResult.Data == null || !inboundResult.Data.IsSuccess) |
| | | //{ |
| | | // return content.Error($"ä»»å¡å®æå¤±è´¥ï¼MESè¿ç«å¤±è´¥: {inboundResult?.Data?.Msg ?? inboundResult?.ErrorMessage ?? "æªç¥é误"}"); |
| | | //} |
| | | return await CompleteTaskAsync(task, "å
¥åºå®æ"); |
| | | }); |
| | | } |
| | |
| | | if (stockInfo.LocationId > 0 || !string.IsNullOrWhiteSpace(stockInfo.LocationCode)) |
| | | return WebResponseContent.Instance.Error($"æç[{stockPalletCode}]åºåå·²ç»å®è´§ä½ï¼ä¸è½åå»ºæºæ¢°æ{taskName}ä»»å¡"); |
| | | } |
| | | var section = App.Configuration.GetSection("RobotTaskAddressRules").GetSection(targetLineNo).GetChildren().Select(c => c.Value).ToArray(); |
| | | var section = App.Configuration.GetSection("RobotTaskAddressRules").GetSection(targetLineNo).GetChildren().Select(c => c.Value).ToArray(); |
| | | |
| | | var task = new Dt_Task |
| | | { |
| | |
| | | "DBSeedEnable": false, |
| | | "PDAVersion": "4", |
| | | "WebSocketPort": 9296, |
| | | "AutoOutboundTask": { |
| | | "Enable": false, /// æ¯å¦å¯ç¨èªå¨åºåºä»»å¡ |
| | | "AutoOutboundTask": { |
| | | "Enable": true, /// æ¯å¦å¯ç¨èªå¨åºåºä»»å¡ |
| | | "CheckIntervalSeconds": 300, /// æ£æ¥é´éï¼ç§ï¼ |
| | | "TargetAddresses": { /// æå··éåç¼é
ç½®ç®æ å°åï¼æ¯æå¤åºåºå£ï¼ |
| | | "GW": [ "11001", "11010", "11068" ], |