Skip to content

4.3 Robot Program Execution Class

4.3.1 Executing a Specified Program

Method NameExecution.Start(string programName )
DescriptionStarts execution of the specified program in the robot controller.
Request ParametersprogramName : string Name of the program to be executed
Return ValueStatusCode: Program start operation execution result
Compatible robot software versionCollaborative (Copper): v7.5.0.0+
Industrial (Bronze): v7.5.0.0+

4.3.2 Stopping the Currently Executing Program

Method NameExecution.Stop(string programName = null)
DescriptionStops the currently executing program or stops the robot's current motion command.
Request ParametersprogramName : string Name of the program to be stopped, default is null, meaning stop the currently running program or motion command
Return ValueStatusCode: Stop operation execution result
Compatible robot software versionCollaborative (Copper): v7.5.0.0+
Industrial (Bronze): v7.5.0.0+

4.3.3 Returning Details of All Running Programs

Method NameExecution.AllRunningPrograms()
DescriptionGets detailed information of all running programs, including program IDs and program names.
Request ParametersNone
Return ValueDictionary<string, int>: List of running program IDs and program names
StatusCode: Get operation execution result
Compatible robot software versionCollaborative (Copper): v7.5.0.0+
Industrial (Bronze): v7.5.0.0+

4.3.4 Pausing Program Execution

Method NameExecution.Pause(string programName = null)
DescriptionPauses the currently executing program or pauses the robot's current motion.
Request ParametersprogramName : string Name of the program to be paused, when not passed, defaults to controlling the currently running program or executing action
Return ValueStatusCode: Pause operation execution result
Compatible robot software versionCollaborative (Copper): v7.5.0.0+
Industrial (Bronze): v7.5.0.0+

4.3.5 Resuming Program Execution

Method NameExecution.Resume(string programName )
DescriptionContinues running a program in paused state or resumes the robot's paused motion.
Request ParametersprogramName : string Name of the program to be resumed, when not passed, defaults to controlling the currently running program or executing action
Return ValueStatusCode: Resume operation execution result
Compatible robot software versionCollaborative (Copper): v7.5.0.0+
Industrial (Bronze): v7.5.0.0+

Example Code

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 Executing a BAS Script Program

Method NameExecution.ExecuteBasScript(BasScript script )
DescriptionExecutes a user-defined BAS script program.
Request Parametersscript : BasScript User-defined BAS script program
Return ValueStatusCode: Script execution operation execution result
NoteBAS script program pause, resume, and stop methods are the same as regular programs.
Compatible robot software versionCollaborative (Copper): v7.5.2.0+
Industrial (Bronze): Not supported
Industrial Robot: v7.6.0.0+

Example Code

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;
    }
}