wanshenmean
10 天以前 b1f5b17a608d3d9c06ce216c7e1effc5edcc7b74
更新机器人工作流逻辑、配置并添加电子表格

将 appsettings.json 中活动的数据库连接字符串恢复为先前的值,并注释掉了另一个条目。移除了 RobotJob 中的任务计数防护,以确保始终调用工作流协调器。合并了 RobotSimpleCommandHandler 中重复的机器人状态案例。修改了 RobotWorkflowOrchestrator 的控制逻辑以及取放(pick/put)转换检查(调整了自动控制条件、在当前动作为取货/放货时跳过,并更新了机械臂/物体/动作检查),以改进任务处理。添加了一个二进制的 Excel 电子表格资源
已添加1个文件
已修改5个文件
70 ■■■■ 文件已修改
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/设备协议/机械手协议/~$交互流程表(1).xlsx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/设备协议/机械手协议/交互流程表(1).xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -32,8 +32,8 @@
  //5.PostgreSQL
  "DBType": "SqlServer",
  //连接字符串
  //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_ShanMei;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_ShanMei;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_ShanMei;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_ShanMei;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //跨域
  "Cors": {
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
@@ -229,12 +229,12 @@
                    }
                    // æ£€æŸ¥ä»»åŠ¡æ€»æ•°æ˜¯å¦æœªè¾¾åˆ°ä¸Šé™
                    if (latestState.RobotTaskTotalNum < MaxTaskTotalNum)
                    {
                    //if (latestState.RobotTaskTotalNum < MaxTaskTotalNum)
                    //{
                        // è°ƒç”¨å·¥ä½œæµç¼–排器执行任务
                        // ç¼–排器会根据当前状态决定下一步动作
                        await _workflowOrchestrator.ExecuteAsync(latestState, task, ipAddress);
                    }
                    //}
                }
            }
            catch (Exception ex)
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
@@ -79,6 +79,26 @@
                    state.OperStatus = "Homed";
                    return true;
                // æœºå™¨äººæ­£åœ¨è¿è¡Œ
                case "running":
                    state.OperStatus = "Running";
                    return true;
                // æœºå™¨äººæ­£åœ¨æš‚停
                case "pausing":
                    state.OperStatus = "Pausing";
                    return true;
                // æœºå™¨äººæ­£åœ¨é¢„热
                case "warming":
                    state.OperStatus = "Warming";
                    return true;
                // æœºå™¨äººæ­£åœ¨æ€¥åœ
                case "emstoping":
                    state.OperStatus = "Emstoping";
                    return true;
                // æœºå™¨äººæ­£åœ¨å–è´§
                case "picking":
                    state.CurrentAction = "Picking";
@@ -158,28 +178,6 @@
                    }
                    return false;
                }
                // ==================== è¿è¡ŒçŠ¶æ€å‘½ä»¤ï¼ˆç»­ï¼‰ ====================
                // æœºå™¨äººæ­£åœ¨è¿è¡Œ
                case "running":
                    state.OperStatus = "Running";
                    return true;
                // æœºå™¨äººæ­£åœ¨æš‚停
                case "pausing":
                    state.OperStatus = "Pausing";
                    return true;
                // æœºå™¨äººæ­£åœ¨é¢„热
                case "warming":
                    state.OperStatus = "Warming";
                    return true;
                // æœºå™¨äººæ­£åœ¨æ€¥åœ
                case "emstoping":
                    state.OperStatus = "Emstoping";
                    return true;
                // ==================== æ¨¡å¼åˆ‡æ¢å‘½ä»¤ ====================
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
@@ -1,6 +1,7 @@
using Microsoft.Extensions.Logging;
using WIDESEA_Core;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
@@ -109,16 +110,21 @@
            // æ£€æŸ¥æ˜¯å¦æ»¡è¶³è‡ªåŠ¨æŽ§åˆ¶æ¡ä»¶ï¼š
            // 1. è¿è¡Œæ¨¡å¼ä¸ºè‡ªåŠ¨ï¼ˆ2)
            // 2. æŽ§åˆ¶æ¨¡å¼ä¸ºå®¢æˆ·ç«¯æŽ§åˆ¶ï¼ˆ1)
            // 3. è¿è¡ŒçŠ¶æ€ä¸æ˜¯ Running(说明已完成当前动作)
            if (latestState.RobotRunMode == 2 && latestState.RobotControlMode == 1 && latestState.OperStatus != "Running")
            // 3. è¿è¡ŒçŠ¶æ€æ˜¯ Running
            if (latestState.RobotRunMode == 2 /*&& latestState.RobotControlMode == 1*/ && latestState.OperStatus == "Running")
            {
                if(latestState.CurrentAction == "Picking" ||  latestState.CurrentAction == "Puting")
                {
                    return;
                }
                // ========== å–货完成后的放货处理 ==========
                // æ¡ä»¶ï¼š
                // - å½“前动作是 PickFinished æˆ– AllPickFinished(取货完成)
                // - æ‰‹è‡‚上有物料(RobotArmObject == 1)
                // - ä»»åŠ¡çŠ¶æ€ä¸º RobotPickFinish(已记录取货完成)
                if ((latestState.CurrentAction == "PickFinished" || latestState.CurrentAction == "AllPickFinished")
                    && latestState.RobotArmObject == 1
                    && latestState.RobotArmObject == 0
                    && task.RobotTaskState == TaskRobotStatusEnum.RobotPickFinish.GetHashCode())
                {
                    _logger.LogInformation("ExecuteAsync:满足放货条件,开始处理取货完成,任务号: {TaskNum}", task.RobotTaskNum);
@@ -126,14 +132,14 @@
                    // å‘送放货指令
                    await HandlePickFinishedStateAsync(task, ipAddress);
                }
                // ========== æ”¾è´§å®ŒæˆåŽçš„取货处理 ==========
                // ========== åˆå§‹åŒ–或者放货完成后的取货处理 ==========
                // æ¡ä»¶ï¼š
                // - å½“前动作是 PutFinished、AllPutFinished æˆ– null(放货完成)
                // - è¿è¡ŒçŠ¶æ€ä¸º Homed(已归位)
                // - æ‰‹è‡‚上无物料(RobotArmObject == 0)
                // - ä»»åŠ¡çŠ¶æ€ä¸º RobotPutFinish æˆ–不是 RobotExecuting
                else if ((latestState.CurrentAction == "PutFinished" || latestState.CurrentAction == "AllPutFinished" || latestState.CurrentAction == null)
                    && latestState.OperStatus == "Homed"
                else if ((latestState.CurrentAction == "PutFinished" || latestState.CurrentAction == "AllPutFinished" || latestState.CurrentAction.IsNullOrEmpty())
                    && latestState.RobotArmObject == 0
                    && (task.RobotTaskState == TaskRobotStatusEnum.RobotPutFinish.GetHashCode()
                    || task.RobotTaskState != TaskRobotStatusEnum.RobotExecuting.GetHashCode()))
ÏîÄ¿×ÊÁÏ/É豸ЭÒé/»úеÊÖЭÒé/~$½»»¥Á÷³Ì±í(1).xlsx
Binary files differ
ÏîÄ¿×ÊÁÏ/É豸ЭÒé/»úеÊÖЭÒé/½»»¥Á÷³Ì±í(1).xlsx
Binary files differ