Skip to content

4.5 IO 信号

说明

Signals 模块提供对控制器 IO 的统一读写接口,涵盖数字 / 模拟输入输出以及多路批量操作和定时触发能力。通过 signals 可以读取当前信号状态、批量写入 DO/RO/GO 等端口或根据时间间隔触发脉冲,用于与外部夹爪、传感器或生产线设备的联动。

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

方法名signals.read( signal_type : SignalType, index : int) -> tuple[float, StatusCodeEnum]
描述读取指定类型指定端口 IO 的值(支持 DI/DO/UI/UO/RI/RO/GI/GO/TAI/TDI/TDO/AI/AO)
请求参数signal_type : SignalType 要读取的 IO 类型
index : int 要读取的 IO 的序号,从 1 开始
返回值float: IO 值,DI/DO/RI/RO/TAI/TDI/TDO/AI/AO 返回 0 或 1,GI/GO 返回整型数值(负数表示 Off 状态)
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+
备注UI/UO 只能读不能写

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

方法名signals.write( signal_type : SignalType, index : int, value : float) -> StatusCodeEnum
描述写指定类型指定端口 IO 的值,当前仅支持 DO/RO/GO/TDO/AO
请求参数signal_type : SignalType 要写入的 IO 类型
index : int 要写入的 IO 的序号,从 1 开始
value : float 要写入的值,DO/RO/TDO 仅允许 0 或 1,GO 为整型数值,AO 接受浮点模拟量
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

signals/signals.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 单信号IO读写示例 / Example of single-signal I/O reading and writing
"""

from Agilebot import Arm, SignalType, SignalValue, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize the robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the robot
ret = arm.connect("10.27.1.254")
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 读取IO
# [EN] Read IO
do_value, ret = arm.signals.read(SignalType.DO, 1)
if ret == StatusCodeEnum.OK:
    print("读取IO成功 / Read IO successfully")
    print(f"DO 1 状态 / DO 1 status:{do_value}")
else:
    print(f"读取IO失败,错误代码 / Read IO failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 写入IO
# [EN] Write IO
ret = arm.signals.write(SignalType.DO, 1, SignalValue.ON)
if ret == StatusCodeEnum.OK:
    print("写入IO成功 / Write IO successfully")
else:
    print(f"写入IO失败,错误代码 / Write IO failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.5.3 批量获取 DO (数字输出) 端口值

方法名signals.multi_read( signal_type : SignalType, io_list : list) -> tuple[list, StatusCodeEnum]
描述批量获取 DO (数字输出) 端口值
请求参数signal_type : SignalType 要读取的 IO 类型,当前只支持 DO
io_list : list 包含要读取的端口号,不能为空
返回值list: 控制器返回的端口值列表,形式为 [port1, state1, port2, state2, ...]
StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+
备注UI/UO 只能读不能写

4.5.4 多路设置 DO (数字输出) 信号

方法名signals.multi_write( signal_type : SignalType, io_list : list) -> StatusCodeEnum
描述多路设置 DO (数字输出) 信号
请求参数signal_type : SignalType 要写入的 IO 类型,当前只支持 DO
io_list : list 包含端口号和端口值的列表,例如 [port1, state1, port2, state2],列表长度必须为偶数且大于 0
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

示例代码

signals/multi_read_write.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 多信号IO读写示例 / Example of multi-signal I/O reading and writing
"""

from Agilebot import Arm, SignalType, SignalValue, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize the robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the robot
ret = arm.connect("10.27.1.254")
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 读取IO
# [EN] Read IO
do_value, ret = arm.signals.multi_read(SignalType.DO, [1, 2])
if ret == StatusCodeEnum.OK:
    print("读取IO成功 / Read IO successfully")
    print(f"DO 1 状态 / DO 1 status:{do_value}")
else:
    print(f"读取IO失败,错误代码 / Read IO failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 写入IO
# [EN] Write IO
ret = arm.signals.multi_write(SignalType.DO, [1, SignalValue.ON, 2, SignalValue.ON])
if ret == StatusCodeEnum.OK:
    print("写入IO成功 / Write IO successfully")
else:
    print(f"写入IO失败,错误代码 / Write IO failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from the robot
arm.disconnect()
print("机器人断开连接成功 / Robot disconnected successfully")

4.5.5 根据时间间隔触发多路 IO

方法名signals.trigger_io_with_intervals( in_port : int = -1, intervals : list, out_ports : list, pulse_duration : int) -> StatusCodeEnum
描述基于一组时间间隔触发多路输出端口,可选地在检测到某个 DI 输入口上升沿后开始计时
请求参数in_port : int 输入端口号,默认为 -1(表示无需等待输入触发)
intervals : list 以毫秒为单位的触发时间间隔列表
out_ports : list 要触发的输出端口号列表
pulse_duration : int 输出脉冲持续时间(毫秒)
返回值StatusCodeEnum: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+