Skip to content
🤖 AI 助手 / 自动化工具:先读 《AI 助手先读》 《Agent 开发指引》 《生成前信息采集清单》;机器可读入口 /llms.txt;技能包(SKILL)直链:SKILL.md

二、IO 控制(Python) ​

本页对应 C++ 版。函数名与参数顺序与 C++ 完全一致(Python SDK 由 C++ 经 SWIG 生成),差异只在两处:

  1. 返回值形态:C++ 用引用参数回填数据;Python 的返回形态由 SWIG 绑定决定,逐接口实测,不按类型推断。
  2. 少数接口在 Python 中不可直接调用(绑定缺陷),页面内已逐个标注。

本页共 27 个接口,其中 27 个在 Python SDK 中存在。


IO 基础概念 ​

2.1 IO 查询与设置 ​

get_io_type ​

IO 型号查询,获取当前连接的 IO 板数量、型号及各类型端口数量。

python
def get_io_type(socketFd, io_type):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参结构体原地填充——先创建 nrc.IOtype() 传入,调用成功后按字段读取(如 obj.field;结构体不支持 list())。

示例:

python
import nrc_interface as nrc

fd = nrc.connect_robot("192.168.1.13", "6001")
out_io_type = nrc.IOtype()
ret = nrc.get_io_type(fd, out_io_type)
print(ret, out_io_type.type, out_io_type.num)    # 结构体按字段读取

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
io_typeIOtype&输出参数,IO 型号和端口信息

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


set_digital_output ​

设置数字输出端口状态。

python
def set_digital_output(socketFd, port, value):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
portint端口号,范围 [1, 最大端口数]
valueint输出值,0 或 1(0=低电平,1=高电平)

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


get_digital_output ​

一次获取所有数字输出端口状态。

python
def get_digital_output(socketFd, out):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参容器原地填充——先创建 nrc.VectorInt() 传入,调用成功后用 list(obj) 读取。

示例:

python
import nrc_interface as nrc

fd = nrc.connect_robot("192.168.1.13", "6001")
out_out = nrc.VectorInt()
ret = nrc.get_digital_output(fd, out_out)
print(ret, list(out_out))    # 容器用 list() 读取

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
outstd::vector<int>&输出参数,存储结果的数组;长度按 IO 板实际端口数确定(64 为最大长度)——以 get_io_type 的 io_port_sum 为准,不要写死

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


get_digital_input ​

一次获取所有数字输入端口状态。

python
def get_digital_input(socketFd, _in):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参容器原地填充——先创建 nrc.VectorInt() 传入,调用成功后用 list(obj) 读取。

示例:

python
import nrc_interface as nrc

fd = nrc.connect_robot("192.168.1.13", "6001")
out__in = nrc.VectorInt()
ret = nrc.get_digital_input(fd, out__in)
print(ret, list(out__in))    # 容器用 list() 读取

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
instd::vector<int>&输出参数,存储结果的数组;长度按 IO 板实际端口数确定(64 为最大长度)——以 get_io_type 的 io_port_sum 为准,不要写死

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


set_analog_output ​

设置模拟输出端口数值。

python
def set_analog_output(socketFd, port, value):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
portint端口号
valuedouble输出数值,范围 [0, 10]

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


get_analog_output ​

查询所有模拟输出端口数值。

python
def get_analog_output(socketFd, aout):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参容器原地填充——先创建 nrc.VectorDouble() 传入,调用成功后用 list(obj) 读取。

示例:

python
import nrc_interface as nrc

fd = nrc.connect_robot("192.168.1.13", "6001")
out_aout = nrc.VectorDouble()
ret = nrc.get_analog_output(fd, out_aout)
print(ret, list(out_aout))    # 容器用 list() 读取

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
aoutstd::vector<double>&输出参数,模拟输出数组,最大长度 64;实际数量以 get_io_type 的 io_port_sum 为准

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


get_analog_input ​

查询所有模拟输入端口数值。

python
def get_analog_input(socketFd, ain):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参容器原地填充——先创建 nrc.VectorDouble() 传入,调用成功后用 list(obj) 读取。

示例:

python
import nrc_interface as nrc

fd = nrc.connect_robot("192.168.1.13", "6001")
out_ain = nrc.VectorDouble()
ret = nrc.get_analog_input(fd, out_ain)
print(ret, list(out_ain))    # 容器用 list() 读取

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
ainstd::vector<double>&输出参数,模拟输入数组,最大长度 64;实际数量以 get_io_type 的 io_port_sum 为准

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


set_force_digital_input ​

设置数字输入端口是否强制打开(强制置位),用于调试场景模拟输入信号。

python
def set_force_digital_input(socketFd, port, force, value):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
portint输入端口号
forceint是否强制,1=强制,0=非强制
valueint强制状态,0 或 1

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


get_force_digital_input ​

获取当前已打开强制功能的输入端口及其状态。

python
def get_force_digital_input(socketFd, port, status):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参容器原地填充——先创建 nrc.VectorInt() 传入,调用成功后用 list(obj) 读取。

示例:

python
import nrc_interface as nrc

fd = nrc.connect_robot("192.168.1.13", "6001")
out_port = nrc.VectorInt()
out_status = nrc.VectorDouble()
ret = nrc.get_force_digital_input(fd, out_port, out_status)
print(ret, list(out_status))    # 容器用 list() 读取

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
portstd::vector<int>&输出参数,当前打开强制输入的端口
statusstd::vector<double>&输出参数,对应端口状态,下标与 port 一一对应

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


2.2 IO 复位与报警 ​

IO ​

当程序运行停止或报错时,IO 复位功能能使 IO 输出端口恢复到初始状态。共分三种复位类型:

复位类型type 值触发条件
远程 IO 复位1远程模式给复位信号,机器人执行复位程序回到复位点时,将设置的 IO 端口复位到复位值;若复位程序中途停止则不复位
切模式停止2运行程序时切换到示教/远程模式导致程序停止,将设置的 IO 端口复位到复位值
程序报错3程序发生错误导致程序停止,将设置的 IO 端口复位到复位值(伺服报错、IO 设置的报错、系统运行中的报错)

Python 中定义:nrc_interface.IO(构造:nrc.IO())。

可用字段(共 17 个,实测 dir()):

AO_laserPower、AO_pressure、DI_backMiddleArrival、DI_capacitance_、DI_followArrival、DI_liftUpArrival、DI_perforateArrival、DO_aspiration、DO_backMiddle、DO_capacitance_、DO_follow、DO_highPressgas、DO_liftUp、DO_lightGate、DO_lowPressgas、DO_redLight、pwm_port_


IO ​

可自定义 IO 输入输出端口触发报警时的提示信息,报警优先级高于其他类型 IO 报警。每条报警包含:

参数说明
端口绑定报警的 IO 端口
类型消息(msgType=0)/ 警告(msgType=1)/ 错误(msgType=2)
消息触发报警后输出的内容
参数0=端口为 0 时触发,1=端口为 1 时触发
使能关闭后无论 IO 状态如何都不触发报警

三种报警类型的表现:

类型界面表现对机器人的影响
消息右下角白色提示条无影响
警告右下角黄色提示条无影响
错误右下角红色提示条若机器人正在运行会强制下使能

Python 中定义:nrc_interface.IO(构造:nrc.IO())。

可用字段(共 17 个,实测 dir()):

AO_laserPower、AO_pressure、DI_backMiddleArrival、DI_capacitance_、DI_followArrival、DI_liftUpArrival、DI_perforateArrival、DO_aspiration、DO_backMiddle、DO_capacitance_、DO_follow、DO_highPressgas、DO_liftUp、DO_lightGate、DO_lowPressgas、DO_redLight、pwm_port_


set_IO_reset_function ​

设置 IO 复位功能。

python
def set_IO_reset_function(socketFd, robotNum, type, enable, value):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
typeint复位类型:1=远程 IO 复位,2=切模式停止,3=程序报错
enablestd::vector<int>是否复位容器,大小等于所有 IO 板输出端口总数
valuestd::vector<int>复位值容器,大小等于所有 IO 板输出端口总数

注意

每次设置需包含所有端口,否则会覆盖上一次的修改。多块 IO 板时端口顺序为上一块 IO 板末位端口的顺延。


get_IO_reset_function ​

获取 IO 复位相关参数。

python
def get_IO_reset_function(socketFd, robotNum, type, enable, value):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参容器原地填充——先创建 nrc.VectorInt() 传入,调用成功后用 list(obj) 读取。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
typeint复位类型:1=远程 IO 复位,2=切模式停止,3=程序报错
enablestd::vector<int>&输出参数,是否复位容器
valuestd::vector<int>&输出参数,复位值容器

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


set_error_msg_of_digital_input / set_error_msg_of_digital_output ​

设置 IO 报警信息数字输入/输出端口报警功能。

set_error_msg_of_digital_input

python
def set_error_msg_of_digital_input(socketFd, msg):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

set_error_msg_of_digital_output

python
def set_error_msg_of_digital_output(socketFd, msg):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
msgstd::vector<AlarmdIO>消息设置结构体数组,大小与 IO 板端口数一致

注意

msg 数组大小必须与 IO 板端口数一致,每次设置相应端口均不能忽略,否则会覆盖上一次的设置。


get_error_msg_of_digital_input / get_error_msg_of_digital_output ​

获取 IO 报警信息数字输入/输出端口报警设置。

get_error_msg_of_digital_input

python
def get_error_msg_of_digital_input(socketFd, msg):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参对象原地填充——先创建出参对象传入,调用成功后从该对象读取。

get_error_msg_of_digital_output

python
def get_error_msg_of_digital_output(socketFd, msg):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参对象原地填充——先创建出参对象传入,调用成功后从该对象读取。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
msgstd::vector<AlarmdIO>&输出参数,消息设置结构体数组

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


2.3 远程 IO ​

远程模式信号说明 ​

远程模式下可通过 IO 信号控制机器人启停及程序预约,标准信号功能如下:

数字 IO 输入(远程控制信号):

功能触发方式说明
启动上升沿参数为 1 时,信号 0 变 1 有效
停止持续有效参数为 1 时,信号持续有效
暂停持续有效参数为 1 时,信号持续有效
清除报警上升沿参数为 1 时,信号 0 变 1 有效
预约即启动无打开时,预约成功即上电
IO 远程程序 1-10脉冲(周期 0.6s)参数为 1 时,信号 0-1-0 有效,程序预约成功至少需触发 0.6 秒以上
紧急停止 1/2高电平1ms 扫描一次,扫描到即触发
安全光幕 1/2高电平运行中触发机器人暂停
屏蔽紧急停止 1/2配合紧急停止按钮打开即屏蔽,设置时间到后重新检测

数字 IO 输出(状态提示信号):

功能说明
Robot1 运行程序运行时输出高电平
Robot1 暂停程序暂停时输出高电平
Robot1 停止程序停止时输出高电平
报错提示常亮输出高电平,闪烁输出脉冲(周期 1s)
使能输出高电平
IO 远程程序 1-10 预约输出预约中闪烁(周期 1.2s),运行中常亮
主程序首行输出一个高电平参数为 1 的信号,程序光标跳至主程序首行
可继续执行输出高电平,可运行暂停的程序
拔出示教盒拔出示教盒后输出高/低电平

远程模式状态说明:

状态说明
未预约进入远程模式后未预约过程序,或预约后取消
预约中预约成功显示预约中
运行中程序正在运行
已预约程序运行完成或被触发停止

远程模式不能修改速度,速度修改需提前在【设置-远程程序设置】中修改;触发对应程序的 IO 口即预约程序,取消需再次触发。



set_remote_param ​

设置远程模式参数(速度、启动方式、屏蔽时间等)。

python
def set_remote_param(socketFd, robotNum, speed, start, time, startTime, num=10):

返回值:⚠️ 该接口在 Python 中不可调用。C++ 原型的出参为结构体容器(如 std::vector<struct>&),SWIG 未生成可用的填充绑定,调用会抛 TypeError。请改用 C++ SDK 调用该接口。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
speedint远程模式默认速度 [1,100]
startbool是否自动启动
timeintIO 重复触发屏蔽时间,单位 ms
startTimeint启动确认时间
numint远程 IO 数量,默认 10

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


get_remote_param ​

获取远程参数设置数据。

python
def get_remote_param(socketFd, robotNum, speed, start, time, startTime, num):

返回值:list,共 6 个元素,形如 [结果码, 数据...]。下标 0 是结果码,下标 1 是出参值。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)

示例:

python
import nrc_interface as nrc

fd = nrc.connect_robot("192.168.1.13", "6001")
ret, val = nrc.get_remote_param(fd, 1, 0, False, 0, 0, 0)
print(ret, val)      # 返回 list,可直接解包

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
speedint&输出参数,远程模式默认速度
startbool&输出参数,是否自动启动
timeint&输出参数,IO 重复触发屏蔽时间 (ms)
startTimeint&输出参数,启动确认时间
numint&输出参数,远程 IO 数量

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


set_remote_function ​

设置远程 IO 功能(通用控制信号 + 程序预约信号绑定)。

python
def set_remote_function(socketFd, robotNum, general, program, num=10):

返回值:⚠️ 该接口在 Python 中不可调用。C++ 原型的出参为结构体容器(如 std::vector<struct>&),SWIG 未生成可用的填充绑定,调用会抛 TypeError。请改用 C++ SDK 调用该接口。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
generalRemoteControl通用功能远程 IO 参数(启动/暂停/停止/清除报警等)
programstd::vector<RemoteProgram>远程控制程序参数,program.size() 必须与 num 相等
numint远程 IO 数量(24.03 版本必须与 set_remote_param 中的 num 一致)

get_remote_function ​

获取远程 IO 功能设置数据。

python
def get_remote_function(socketFd, robotNum, num, time, general, program):

返回值:list,共 3 个元素,形如 [结果码, 数据...]。下标 0 是结果码,其余为各出参值(按 C++ 参数顺序)。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
numint&输出参数,远程 IO 数量
timeint&输出参数,IO 重复触发屏蔽时间 (ms)
generalRemoteControl&输出参数,通用功能远程 IO 参数
programstd::vector<RemoteProgram>&输出参数,远程控制程序参数

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


set_remote_status_tips ​

设置远程状态提示功能(运行/暂停/停止等状态输出端口)。

python
def set_remote_status_tips(socketFd, robotNum, outagePort, outageValue, program):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
outagePortint断电保持数据恢复端口
outageValueint断电保持数据恢复端口有效值 (0/1/2)
programstd::vector<RemoteProgram>远程状态提示参数(size 必须与 set_remote_param 的 num 相等)

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


get_remote_status_tips ​

获取远程状态提示功能数据。

python
def get_remote_status_tips(socketFd, robotNum, num, outagePort, outageValue, program):

返回值:list,共 4 个元素,形如 [结果码, 数据...]。下标 0 是结果码,其余为各出参值(按 C++ 参数顺序)。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
numint&输出参数,远程 IO 数量
outagePortint&输出参数,断电保持数据恢复端口
outageValueint&输出参数,断电保持数据恢复端口有效值
programstd::vector<RemoteProgram>&输出参数,远程控制程序参数

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


set_remote_program ​

设置 IO 远程程序选择(预约哪个作业文件、运行次数)。

python
def set_remote_program(socketFd, robotNum, program):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
programstd::vector<RemoteProgramSetting>远程程序设置

get_remote_program ​

获取 IO 远程程序设置数据。

python
def get_remote_program(socketFd, robotNum, num, program):

返回值:list,共 2 个元素,形如 [结果码, 数据...]。下标 0 是结果码,其余为各出参值(按 C++ 参数顺序)。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
numint&输出参数,远程 IO 数量
programstd::vector<RemoteProgramSetting>&输出参数,远程程序设置

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


2.4 安全 IO ​

安全 IO 说明 ​

安全 IO 用于紧急停止、安全光幕等安全功能的端口绑定与电平设置:

功能说明
紧急停止触发后机器人下电并切至伺服停止;解除后需先清错才可继续操作
安全光幕触发后机器人暂停,再次按下启动按钮可继续运行
屏蔽紧急停止打开后屏蔽时间内紧急停止信号被屏蔽
使能硬接线使用使能硬接线示教盒时绑定 DIN 端口,上电使能由 IO 板输入信号控制

使能端口 1 为上电使能,使能端口 2 为下电使能;打开此功能后示教盒使能按钮失效。非使能硬接线示教盒请勿设置。



set_hard_enable_port ​

设置是否使能硬接及相关端口。

python
def set_hard_enable_port(socketFd, enable, port1, port2):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
enableint是否打开使能硬接 (0/1)
port1int使能硬接端口 1(上电使能)
port2int使能硬接端口 2(下电使能)

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


get_hard_enable_port ​

获取使能硬接开关是否打开及相关绑定端口。

python
def get_hard_enable_port(socketFd, enable, port1, port2):

返回值:list,共 4 个元素,形如 [结果码, 数据...]。下标 0 是结果码,下标 1 是出参值。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)

示例:

python
import nrc_interface as nrc

fd = nrc.connect_robot("192.168.1.13", "6001")
ret, val = nrc.get_hard_enable_port(fd, 0, 0, 0)
print(ret, val)      # 返回 list,可直接解包

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
enableint&输出参数,是否打开使能硬接
port1int&输出参数,使能硬接端口 1
port2int&输出参数,使能硬接端口 2

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。


set_safe_IO_function ​

设置 IO 安全设置参数(紧急停止、安全光幕、屏蔽时间等)。

python
def set_safe_IO_function(socketFd, robotNum, safeIO):

返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
safeIOSafeIOIO 安全设置参数结构体

get_safe_IO_function ​

获取 IO 安全设置参数。

python
def get_safe_IO_function(socketFd, robotNum, safeIO):

返回值:int 结果码(0 成功,负数为错误码)。数据通过出参结构体原地填充——先创建 nrc.SafeIO() 传入,调用成功后按字段读取(如 obj.field;结构体不支持 list())。

示例:

python
import nrc_interface as nrc

fd = nrc.connect_robot("192.168.1.13", "6001")
out_safeIO = nrc.SafeIO()
ret = nrc.get_safe_IO_function(fd, 1, out_safeIO)
print(ret, out_safeIO.type, out_safeIO.num)    # 结构体按字段读取

参数说明(与 C++ 一致):

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
safeIOSafeIO&输出参数,IO 安全设置参数

C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。