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