Skip to content

4.3 机器人操作类

4.3.1 执行指定的程序

方法名Execution.Start(string programName )
描述启动执行机器人控制器中指定的程序
请求参数programName : string 需要执行的程序名称
返回值StatusCode: 程序启动操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.3.2 停止正在执行的程序

方法名Execution.Stop(string programName = null)
描述停止正在执行的程序或停止机器人当前正在执行的运动指令
请求参数programName : string 需要停止的程序名称,默认为 null,表示停止当前正在运行的程序或运动指令
返回值StatusCode: 停止操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.3.3 返回所有正在运行的程序详细信息

方法名Execution.AllRunningPrograms()
描述获取所有正在运行程序的详细信息,信息包含程序 ID 和程序名称
请求参数无参数
返回值Dictionary<string, int>: 运行的程序 ID 和程序名列表
StatusCode: 获取操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.3.4 暂停程序运行

方法名Execution.Pause(string programName = null)
描述暂停当前正在执行的程序或暂停当前机器人正在执行的运动
请求参数programName : string 需要暂停的程序名称,不传参时默认控制当前运行程序或正在执行的动作
返回值StatusCode: 暂停操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

4.3.5 恢复程序运行

方法名Execution.Resume(string programName = null)
描述继续运行某个处于暂停状态的程序或恢复当前机器人处于暂停的运动
请求参数programName : string 需要继续运行的程序名称,不传参时默认控制当前运行程序或正在执行的动作
返回值StatusCode: 恢复操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

Execution/ProgramExecution.cs
cs
using Agilebot.IR;
using Agilebot.IR.Types;

public class ProgramExecution
{
    /// <summary>
    /// 测试程序执行完整流程功能
    /// 验证程序的启动、暂停、恢复和停止等完整操作流程
    /// </summary>
    public static StatusCode Run(string controllerIP, bool useLocalProxy = true)
    {
        // [ZH] 初始化捷勃特机器人
        // [EN] Initialize the Agilebot robot
        Arm controller = new Arm(controllerIP, useLocalProxy);

        // [ZH] 连接捷勃特机器人
        // [EN] Connect to the Agilebot robot
        StatusCode code = controller.ConnectSync();
        Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "连接成功/Successfully connected.");

        if (code != StatusCode.OK)
        {
            return code;
        }

        try
        {
            Console.WriteLine("开始程序执行完整流程/Starting Program Execution Complete Flow");

            // [ZH] 获取测试文件路径
            // [EN] Get test file path
            string file_user_program = GetTestFilePath("test_prog.xml");

            // [ZH] 设置程序名称
            // [EN] Set program name
            string progName = "test_prog";

            // [ZH] 上传用户程序文件
            // [EN] Upload user program file
            code = controller.FileManager.Upload(file_user_program, FileType.UserProgram, true);
            if (code == StatusCode.OK)
            {
                Console.WriteLine($"用户程序文件上传成功/User Program File Upload Success: {progName}");
            }
            else
            {
                Console.WriteLine($"用户程序文件上传失败/User Program File Upload Failed: {code.GetDescription()}");
                return code;
            }

            // [ZH] 等待
            // [EN] Wait
            Thread.Sleep(3000);

            // [ZH] 启动程序
            // [EN] Start program
            code = controller.Execution.Start(progName);
            if (code == StatusCode.OK)
            {
                Console.WriteLine($"程序启动成功/Program Started Successfully: {progName}");
            }
            else
            {
                Console.WriteLine($"程序启动失败/Program Start Failed: {code.GetDescription()}");
                return code;
            }
            Thread.Sleep(2000);

            // [ZH] 获取所有正在运行的程序列表
            // [EN] Get all running programs list
            Dictionary<string, int> progList;
            (progList, code) = controller.Execution.AllRunningPrograms();
            if (code == StatusCode.OK)
            {
                Console.WriteLine("获取运行程序列表成功/Get Running Programs List Success");
                Console.WriteLine($"运行程序数量/Running Programs Count: {progList.Count}");
                foreach (var prog in progList)
                {
                    Console.WriteLine($"  程序/Program: {prog.Key}, 状态/Status: {prog.Value}");
                }
            }
            else
            {
                Console.WriteLine($"获取运行程序列表失败/Get Running Programs List Failed: {code.GetDescription()}");
                return code;
            }
            Thread.Sleep(2000);

            // [ZH] 暂停程序
            // [EN] Pause program
            code = controller.Execution.Pause(progName);
            if (code == StatusCode.OK)
            {
                Console.WriteLine($"程序暂停成功/Program Paused Successfully: {progName}");
            }
            else
            {
                Console.WriteLine($"程序暂停失败/Program Pause Failed: {code.GetDescription()}");
                return code;
            }
            Thread.Sleep(2000);

            // [ZH] 恢复程序
            // [EN] Resume program
            code = controller.Execution.Resume(progName);
            if (code == StatusCode.OK)
            {
                Console.WriteLine($"程序恢复成功/Program Resumed Successfully: {progName}");
            }
            else
            {
                Console.WriteLine($"程序恢复失败/Program Resume Failed: {code.GetDescription()}");
                return code;
            }
            Thread.Sleep(2000);

            // [ZH] 停止程序
            // [EN] Stop program
            code = controller.Execution.Stop(progName);
            if (code == StatusCode.OK)
            {
                Console.WriteLine($"程序停止成功/Program Stopped Successfully: {progName}");
            }
            else
            {
                Console.WriteLine($"程序停止失败/Program Stop Failed: {code.GetDescription()}");
                return code;
            }

            // [ZH] 删除用户程序文件
            // [EN] Delete user program file
            code = controller.FileManager.Delete(progName, FileType.UserProgram);
            if (code == StatusCode.OK)
            {
                Console.WriteLine($"用户程序文件删除成功/User Program File Delete Success: {progName}");
            }
            else
            {
                Console.WriteLine($"用户程序文件删除失败/User Program File Delete Failed: {code.GetDescription()}");
                return code;
            }

            Console.WriteLine("程序执行完整流程结束/Program Execution Complete Flow Test Completed");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"执行过程中发生异常/Exception occurred during execution: {ex.Message}");
            code = StatusCode.OtherReason;
        }
        finally
        {
            // [ZH] 关闭连接
            // [EN] Close the connection
            StatusCode disconnectCode = controller.Disconnect();
            if (disconnectCode != StatusCode.OK)
            {
                Console.WriteLine(disconnectCode.GetDescription());
                if (code == StatusCode.OK)
                    code = disconnectCode;
            }
        }

        return code;
    }

    /// <summary>
    /// 获取test_files文件夹中文件的路径示例方法
    /// 展示如何获取当前程序目录下的test_files文件夹中的文件路径
    /// </summary>
    private static string GetTestFilePath(string fileName)
    {
        // [ZH] 获取当前程序集的目录
        // [EN] Get current assembly directory
        string? codeFilePath = new System.Diagnostics.StackTrace(true).GetFrame(0)?.GetFileName();
        if (string.IsNullOrEmpty(codeFilePath))
        {
            throw new InvalidOperationException("无法获取当前文件路径/Cannot get current file path");
        }

        string? codeDirectory = Path.GetDirectoryName(codeFilePath);
        if (string.IsNullOrEmpty(codeDirectory))
        {
            throw new InvalidOperationException("无法获取当前目录路径/Cannot get current directory path");
        }

        // [ZH] 构建test_files文件夹路径
        // [EN] Build test_files folder path
        string testFilesDirectory = Path.Combine(codeDirectory, "test_files");
        // [ZH] 构建文件完整路径
        // [EN] Build complete file path
        string filePath = Path.Combine(testFilesDirectory, fileName);
        return filePath;
    }
}

4.3.6 执行 BAS 脚本程序

方法名Execution.ExecuteBasScript(BasScript script )
描述执行用户自定义的 BAS 脚本程序
请求参数script : BasScript 用户自定义的 BAS 脚本程序
返回值StatusCode: 脚本执行操作执行结果
备注BAS 脚本程序的暂停、恢复、停止方法同普通程序
兼容的机器人软件版本协作 (Copper): v7.5.2.0+
工业 (Bronze): 不支持
工业机器人: 7.6.0.0

示例代码

Execution/ExecuteBasScript.cs
cs
using Agilebot.IR;
using Agilebot.IR.BasScript;
using Agilebot.IR.Execution;
using Agilebot.IR.Types;

public class ExecuteBasScript
{
    /// <summary>
    /// 测试执行Bas脚本功能
    /// 验证能否成功执行包含条件判断、运动控制和赋值操作的Bas脚本
    /// </summary>
    public static StatusCode Run(string controllerIP, bool useLocalProxy = true)
    {
        // [ZH] 初始化捷勃特机器人
        // [EN] Initialize the Agilebot robot
        Arm controller = new Arm(controllerIP, useLocalProxy);

        // [ZH] 连接捷勃特机器人
        // [EN] Connect to the Agilebot robot
        StatusCode code = controller.ConnectSync();
        Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "连接成功/Successfully connected.");

        if (code != StatusCode.OK)
        {
            return code;
        }

        try
        {
            Console.WriteLine("开始执行Bas脚本程序/Starting Execute BasScript");

            // [ZH] 创建BAS脚本程序
            // [EN] Create BAS script program
            BasScript script = new BasScript("test_bas");

            // [ZH] 添加条件判断到脚本
            // [EN] Add conditional statement to script
            code = script.Logical.IF(RegisterType.R, 1, OtherType.VALUE, 0);
            if (code != StatusCode.OK)
            {
                Console.WriteLine($"添加条件判断失败/Add Conditional Statement Failed: {code.GetDescription()}");
                return code;
            }

            // [ZH] 添加运动控制到脚本
            // [EN] Add motion control to script
            BasScript.ExtraParam param = new BasScript.ExtraParam();
            param.Acceleration(80);
            code = script.Motion.MoveJoint(
                MovePoseType.PR,
                1,
                SpeedType.VALUE,
                30,
                SmoothType.SD,
                10,
                extraParam: param
            );
            if (code != StatusCode.OK)
            {
                Console.WriteLine($"添加运动控制失败/Add Motion Control Failed: {code.GetDescription()}");
                return code;
            }

            // [ZH] 添加赋值操作到脚本
            // [EN] Add assignment operation to script
            code = script.AssignValue(AssignType.R, 1, 99);
            if (code != StatusCode.OK)
            {
                Console.WriteLine($"添加赋值操作失败/Add Assignment Operation Failed: {code.GetDescription()}");
                return code;
            }

            // [ZH] 结束条件判断
            // [EN] End conditional statement
            code = script.Logical.END_IF();
            if (code != StatusCode.OK)
            {
                Console.WriteLine($"结束条件判断失败/End Conditional Statement Failed: {code.GetDescription()}");
                return code;
            }

            // [ZH] 等待上一个测试结束
            // [EN] Wait for previous test to end
            Thread.Sleep(1000);

            // [ZH] 执行BAS脚本程序
            // [EN] Execute BAS script program
            code = controller.Execution.ExecuteBasScript(script);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("BAS脚本执行成功/Execute BasScript Success");
                Console.WriteLine(
                    "脚本包含条件判断、运动控制和赋值操作/Script includes conditional statements, motion control and assignment operations"
                );
            }
            else
            {
                Console.WriteLine($"BAS脚本执行失败/Execute BasScript Failed: {code.GetDescription()}");
            }

            Console.WriteLine("执行Bas脚本测试完成/Execute BasScript Test Completed");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"执行过程中发生异常/Exception occurred during execution: {ex.Message}");
            code = StatusCode.OtherReason;
        }
        finally
        {
            // [ZH] 关闭连接
            // [EN] Close the connection
            StatusCode disconnectCode = controller.Disconnect();
            if (disconnectCode != StatusCode.OK)
            {
                Console.WriteLine(disconnectCode.GetDescription());
                if (code == StatusCode.OK)
                    code = disconnectCode;
            }
        }

        return code;
    }
}