wanshenmean
8 天以前 adb4016b5eb5b119a899480c321be996d9bf10bd
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Logging;
using Quartz;
using System.Net;
using WIDESEA_Core;
using WIDESEAWCS_Common;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.LogHelper;
@@ -29,15 +29,6 @@
    [DisallowConcurrentExecution]
    public class RobotJob : IJob
    {
        /// <summary>
        /// 任务总数上限
        /// </summary>
        /// <remarks>
        /// 当机器人处理的货物数量达到此上限时,不再下发新任务。
        /// 防止机器人过度劳累或系统过载。
        /// </remarks>
        private const int MaxTaskTotalNum = 48;
        /// <summary>
        /// 消息事件订阅标志
        /// </summary>
@@ -116,7 +107,7 @@
            ILogger<RobotJob> logger)
        {
            // 初始化状态管理器,传入缓存服务
            _stateManager = new RobotStateManager(cache);
            _stateManager = new RobotStateManager(cache, _logger);
            _logger = logger;
            // 创建 Socket 网关,封装 TcpSocketServer 的访问
@@ -124,14 +115,14 @@
            ISocketClientGateway socketGateway = new SocketClientGateway(tcpSocket);
            // 初始化任务处理器
            _taskProcessor = new RobotTaskProcessor(socketGateway, _stateManager, robotTaskService, taskService, httpClientHelper);
            _taskProcessor = new RobotTaskProcessor(socketGateway, _stateManager, robotTaskService, taskService, httpClientHelper, _logger);
            // 初始化客户端管理器
            _clientManager = new RobotClientManager(tcpSocket, _stateManager);
            _clientManager = new RobotClientManager(tcpSocket, _stateManager, _logger);
            // 初始化命令处理器
            // 简单命令处理器:处理状态更新等简单命令
            var simpleCommandHandler = new RobotSimpleCommandHandler(_taskProcessor);
            var simpleCommandHandler = new RobotSimpleCommandHandler(_taskProcessor, socketGateway);
            // 前缀命令处理器:处理 pickfinished、putfinished 等带参数的命令
            var prefixCommandHandler = new RobotPrefixCommandHandler(robotTaskService, _taskProcessor, _stateManager, socketGateway);
@@ -139,7 +130,7 @@
            _messageRouter = new RobotMessageHandler(socketGateway, _stateManager, cache, simpleCommandHandler, prefixCommandHandler, logger);
            // 初始化工作流编排器
            _workflowOrchestrator = new RobotWorkflowOrchestrator(_stateManager, _clientManager, _taskProcessor, robotTaskService);
            _workflowOrchestrator = new RobotWorkflowOrchestrator(_stateManager, _clientManager, _taskProcessor, robotTaskService, _logger);
            // 订阅客户端断开连接事件
            _clientManager.OnClientDisconnected += OnClientDisconnected;
@@ -214,8 +205,19 @@
                    return;
                }
                if (state.CurrentAction == "Picking" || state.CurrentAction == "Puting")
                {
                    return;
                }
                // 轮询获取该设备的待处理任务
                var task = _taskProcessor.GetTask(robotCrane);
                // 如果没有获取到待处理任务,且RobotArmObject为1(有物料),则获取该设备执行中的任务
                if (task == null && state.RobotArmObject == 1)
                {
                    task = _taskProcessor.GetExecutingTask(robotCrane);
                }
                // 如果有待处理任务
                if (task != null)
@@ -229,7 +231,7 @@
                    }
                    // 检查任务总数是否未达到上限
                    if (latestState.RobotTaskTotalNum < MaxTaskTotalNum)
                    if (latestState.RobotTaskTotalNum < RobotConst.MaxTaskTotalNum)
                    {
                        // 调用工作流编排器执行任务
                        // 编排器会根据当前状态决定下一步动作
@@ -246,4 +248,4 @@
            }
        }
    }
}
}