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+ |
示例代码
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+ |
示例代码
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+ |