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 IO 值 (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+