Skip to content

4.5 IO 信号

4.5.1 读取指定类型指定端口 IO 的值

方法名Signals.Read(SignalType type , int index )
描述读取指定类型指定端口的 IO 信号值
请求参数type : SignalType 要读取的 IO 信号类型
index : int 要读取的 IO 端口序号,从 1 开始
返回值int: IO 信号值,1 代表高电平,0 代表低电平
StatusCode: 读取操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

Signals/ReadSignal.cs
cs
using Agilebot.IR;
using Agilebot.IR.Types;

public class ReadSignal
{
    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
        {
            // [ZH] 设置IO信号类型和索引
            // [EN] Set IO signal type and index
            SignalType type = SignalType.DI;
            int index = 1;

            // [ZH] 读取指定类型指定端口IO的值
            // [EN] Read specified type and port IO value
            int res;
            (res, code) = controller.Signals.Read(type, index);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("读取IO信号成功/Read Signal Success");
                Console.WriteLine($"{type}:{index} 的值为/has value {res}");
                Console.WriteLine($"信号状态/Signal Status: {(res == 1 ? "高电平/High Level" : "低电平/Low Level")}");
            }
            else
            {
                Console.WriteLine($"读取IO信号失败/Read Signal Failed: {code.GetDescription()}");
            }
        }
        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;
    }
}

4.5.2 写指定类型指定端口 IO 的值

方法名Signals.Write(SignalType type , int index , double value )
描述写入指定类型指定端口的 IO 信号值
请求参数type : SignalType 要写入的 IO 信号类型
index : int 要写入的 IO 端口序号,从 1 开始
value : double 要写入的信号值,1 代表高电平,0 代表低电平
返回值StatusCode: 写入操作执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+
备注UI/UO 信号只能读取不能写入

示例代码

Signals/WriteSignal.cs
cs
using Agilebot.IR;
using Agilebot.IR.Types;

public class WriteSignal
{
    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
        {
            // [ZH] 设置IO信号类型、索引和值
            // [EN] Set IO signal type, index and value
            SignalType type = SignalType.DO;
            int index = 1;
            int value = 1;

            // [ZH] 写指定类型指定端口IO的值
            // [EN] Write specified type and port IO value
            code = controller.Signals.Write(type, index, value);
            if (code == StatusCode.OK)
            {
                Console.WriteLine("写入IO信号成功/Write Signal Success");
                Console.WriteLine($"{type}:{index} 设置为/set to value {value}");
                Console.WriteLine($"信号状态/Signal Status: {(value == 1 ? "高电平/High Level" : "低电平/Low Level")}");
            }
            else
            {
                Console.WriteLine($"写入IO信号失败/Write Signal Failed: {code.GetDescription()}");
            }
        }
        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;
    }
}

4.5.3 批量写入 DO 信号

方法名Signals.MultiWrite(SignalType type , List<int> ioData )
描述批量写入多个 DO 端口的值,参数为扁平化端口 - 值对。
请求参数type : SignalType 仅支持 DO
ioData : List<int> 形如 [port1, state1, port2, state2, ...] ,长度需为偶数
返回值StatusCode 写入执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+
备注仅支持 DO 批量写入;UI/UO 不支持写入,DI/RI 仅支持单点读取

示例代码

cs
using Agilebot.IR;
using Agilebot.IR.Types;

public class Test
{
    public static async Task Main()
    {
        string controllerIP = "10.27.1.254";
        Arm controller = new Arm(controllerIP);
        StatusCode code = await controller.Connect();
        Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "Successfully connected.");

        // 批量写入 DO1=1, DO2=0
        code = controller.Signals.MultiWrite(SignalType.DO, new List<int> { 1, 1, 2, 0 });
        Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "MultiWrite Success");

        code = controller.Disconnect();
        Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "Successfully disconnected.");
    }
}

4.5.4 批量读取 DO 信号

方法名Signals.MultiRead(SignalType type , List<int> indexes )
描述批量读取多个 DO 端口的值,返回顺序与输入索引一致。
请求参数type : SignalType 仅支持 DO
indexes : List<int> 待读取的端口序号列表,至少包含一个端口
返回值List<int> 端口值列表(顺序与输入一致)与 StatusCode
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+
备注仅支持 DO 批量读取;UI/UO 不支持写入,DI/RI 仅支持单点读取

示例代码

cs
using Agilebot.IR;
using Agilebot.IR.Types;

public class Test
{
    public static async Task Main()
    {
        string controllerIP = "10.27.1.254";
        Arm controller = new Arm(controllerIP);
        StatusCode code = await controller.Connect();
        Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "Successfully connected.");

        // 批量读取 DO1、DO2
        (List<int> values, StatusCode readCode) = controller.Signals.MultiRead(SignalType.DO, new List<int> { 1, 2 });
        if (readCode == StatusCode.OK)
        {
            Console.WriteLine($"MultiRead Success: DO1={values[0]}, DO2={values[1]}");
        }

        code = controller.Disconnect();
        Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "Successfully disconnected.");
    }
}