Skip to content

二、IO 控制(nrc_io.h)

IO 基础概念

IO 控制接口用于读写机器人的数字量/模拟量输入输出端口,支持多块 IO 板级联,端口命名格式为 板号-端口号(如 DIN1-1 表示第 1 块 IO 板的第 1 路数字输入)。

类型命名前缀说明典型用途
数字输入DIN接收外部开关/传感器信号(高/低电平)启动按钮、限位开关、传感器检测
数字输出DOUT控制外部设备通断,不接收反馈继电器、指示灯、电磁阀
模拟输入AIN接收连续变化的电压/电流信号模拟传感器、变送器
模拟输出AOUT输出连续变化的电压/电流信号,范围 [0,10]变频器给定、比例阀

IO 板端口命名:DIN1-1DIN 为数字输入、1 为 IO 板号、1 为端口号;模拟量同理为 AIN1-1 / AOUT1-1

2.1 IO 查询与设置

get_io_type

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

函数原型:

cpp
Result get_io_type(SOCKETFD socketFd, IOtype& io_type);

参数说明:

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

IOtype 结构体:

字段类型说明
numintIO 板数量
typevector<string>各 IO 板型号
io_port_sumvector<vector<int>>各 IO 板端口数量,一维数组为 [数字输入数量, 数字输出数量, 模拟输入数量, 模拟输出数量]

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
IOtype io_type;
Result result = get_io_type(fd, io_type);
if (result == SUCCESS) {
    printf("IO板数量: %d\n", io_type.num);
    for (int i = 0; i < io_type.num; i++) {
        printf("IO板%d: %s, DIN:%d DOUT:%d AIN:%d AOUT:%d\n",
            i + 1, io_type.type[i].c_str(),
            io_type.io_port_sum[i][0], io_type.io_port_sum[i][1],
            io_type.io_port_sum[i][2], io_type.io_port_sum[i][3]);
    }
}

set_digital_output

设置数字输出端口状态。

函数原型:

cpp
Result set_digital_output(SOCKETFD socketFd, int port, int value);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 将第 1 块 IO 板的第 3 路数字输出置为高电平
Result result = set_digital_output(fd, 3, 1);
if (result == SUCCESS) {
    printf("数字输出设置成功\n");
}

get_digital_output

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

函数原型:

cpp
Result get_digital_output(SOCKETFD socketFd, std::vector<int>& out);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
outstd::vector<int>&输出参数,存储结果的数组,长度为 64

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
std::vector<int> out(64);
Result result = get_digital_output(fd, out);
if (result == SUCCESS) {
    printf("DOUT1-1 = %d\n", out[0]);
}

get_digital_input

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

函数原型:

cpp
Result get_digital_input(SOCKETFD socketFd, std::vector<int>& in);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
instd::vector<int>&输出参数,存储结果的数组,长度为 64

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
std::vector<int> in(64);
Result result = get_digital_input(fd, in);
if (result == SUCCESS) {
    printf("DIN1-1 = %d\n", in[0]);  // 检测启动按钮状态
}

set_analog_output

设置模拟输出端口数值。

函数原型:

cpp
Result set_analog_output(SOCKETFD socketFd, int port, double value);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 将 AOUT1-1 输出 5V
Result result = set_analog_output(fd, 1, 5.0);
if (result == SUCCESS) {
    printf("模拟输出设置成功\n");
}

get_analog_output

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

函数原型:

cpp
Result get_analog_output(SOCKETFD socketFd, std::vector<double>& aout);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
aoutstd::vector<double>&输出参数,模拟输出数组,最大长度 64

返回值: SUCCESS(0) 表示成功,负数表示失败。


get_analog_input

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

函数原型:

cpp
Result get_analog_input(SOCKETFD socketFd, std::vector<double>& ain);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
ainstd::vector<double>&输出参数,模拟输入数组,最大长度 64

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
std::vector<double> ain(64);
Result result = get_analog_input(fd, ain);
if (result == SUCCESS) {
    printf("AIN1-1 = %.2f\n", ain[0]);
}

set_force_digital_input

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

函数原型:

cpp
Result set_force_digital_input(SOCKETFD socketFd, int port, int force, int value);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 强制将 DIN1-1 置为 1(模拟按钮按下)
Result result = set_force_digital_input(fd, 1, 1, 1);

get_force_digital_input

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

函数原型:

cpp
Result get_force_digital_input(SOCKETFD socketFd, std::vector<int>& port, std::vector<double>& status);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。


2.2 IO 复位与报警

IO 复位功能说明

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

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

IO 报警信息说明

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

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

三种报警类型的表现:

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

set_IO_reset_function

设置 IO 复位功能。

函数原型:

cpp
Result set_IO_reset_function(SOCKETFD socketFd, int robotNum, int type, std::vector<int> enable, std::vector<int> value);

参数说明:

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

注意

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

使用示例(两块 IO 板,每块输出 16 路):

cpp
// 1-1 端口选择复位,复位值 1;2-1 端口选择复位,复位值 1
std::vector<int> enable(32, 0);
std::vector<int> value(32, 0);
enable[0] = 1;   value[0] = 1;   // 第 1 块 IO 板 1 端口
enable[16] = 1;  value[16] = 1;  // 第 2 块 IO 板 1 端口

Result result = set_IO_reset_function(fd, 1, 1, enable, value);

get_IO_reset_function

获取 IO 复位相关参数。

函数原型:

cpp
Result get_IO_reset_function(SOCKETFD socketFd, int robotNum, int type, std::vector<int>& enable, std::vector<int>& value);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。


set_error_msg_of_digital_input / set_error_msg_of_digital_output

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

函数原型:

cpp
Result set_error_msg_of_digital_input(SOCKETFD socketFd, std::vector<AlarmdIO> msg);
Result set_error_msg_of_digital_output(SOCKETFD socketFd, std::vector<AlarmdIO> msg);

参数说明:

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

AlarmdIO 结构体:

字段类型说明
msgTypeint消息类型:0=普通消息,1=警告消息,2=错误消息(22.07 版本无此参数,全部设为 0)
valueintIO 有效参数 (0/1),0=端口为 0 时触发,1=端口为 1 时触发
enableint使能设置 (0/1)
msgstd::string消息内容

注意

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

使用示例(两块 IO 板,每块输入输出各 16 位):

cpp
std::vector<AlarmdIO> msg(32);
// IO 板1 输出端口 1:错误消息 "QQQ",类型 2,参数 1,使能 1
msg[0].msgType = 2; msg[0].enable = 1; msg[0].value = 1; msg[0].msg = "QQQ";
// 中间 15 个端口不设置
for (int i = 1; i < 16; i++) {
    msg[i].msgType = 0; msg[i].enable = 0; msg[i].value = 0; msg[i].msg = "";
}
// IO 板2 输出端口 1:错误消息 "YYY"
msg[16].msgType = 2; msg[16].enable = 1; msg[16].value = 1; msg[16].msg = "YYY";

Result result = set_error_msg_of_digital_output(fd, msg);

get_error_msg_of_digital_input / get_error_msg_of_digital_output

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

函数原型:

cpp
Result get_error_msg_of_digital_input(SOCKETFD socketFd, std::vector<AlarmdIO>& msg);
Result get_error_msg_of_digital_output(SOCKETFD socketFd, std::vector<AlarmdIO>& msg);

参数说明:

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

返回值: 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

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

函数原型:

cpp
Result set_remote_param(SOCKETFD socketFd, int robotNum, int speed, bool start, int time, int startTime, int num = 10);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 设置远程参数:速度 50,不自动启动,屏蔽时间 500ms,启动确认 100ms,10 路远程 IO
Result result = set_remote_param(fd, 1, 50, false, 500, 100, 10);

get_remote_param

获取远程参数设置数据。

函数原型:

cpp
Result get_remote_param(SOCKETFD socketFd, int robotNum, int& speed, bool& start, int& time, int& startTime, int& num);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。


set_remote_function

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

函数原型:

cpp
Result set_remote_function(SOCKETFD socketFd, int robotNum, RemoteControl general, std::vector<RemoteProgram> program, int num = 10);

参数说明:

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

RemoteControl 结构体:

字段类型说明
clearStashPort / clearStashValueint清除断电保持数据端口及有效参数 (0/1)
faultResetPort / faultResetValueint清除报警端口及有效参数 (0/1)
pausePort / pauseValueint暂停端口及有效参数 (0/1)
startPort / startValueint启动端口及有效参数 (0/1)
stopPort / stopValueint停止端口及有效参数 (0/1)
programvector<RemoteProgram>远程程序端口设置

RemoteProgram 结构体:

字段类型说明
portint远程程序端口绑定
valueint使用远程 IO 功能时有效参数 (0/1);使用远程状态提示功能时有效参数 (0/1/2)

使用示例:

cpp
RemoteControl general;
general.startPort = 1;   general.startValue = 1;    // DIN1-1 启动
general.stopPort = 2;    general.stopValue = 1;     // DIN1-2 停止
general.pausePort = 3;   general.pauseValue = 1;    // DIN1-3 暂停
general.faultResetPort = 4; general.faultResetValue = 1;  // DIN1-4 清除报警

std::vector<RemoteProgram> program(10);
program[0].port = 5; program[0].value = 1;  // DIN1-5 预约程序 1

Result result = set_remote_function(fd, 1, general, program, 10);

get_remote_function

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

函数原型:

cpp
Result get_remote_function(SOCKETFD socketFd, int robotNum, int& num, int& time, RemoteControl& general, std::vector<RemoteProgram>& program);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。


set_remote_status_tips

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

函数原型:

cpp
Result set_remote_status_tips(SOCKETFD socketFd, int robotNum, int outagePort, int outageValue, std::vector<RemoteProgram> program);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。


get_remote_status_tips

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

函数原型:

cpp
Result get_remote_status_tips(SOCKETFD socketFd, int robotNum, int& num, int& outagePort, int& outageValue, std::vector<RemoteProgram>& program);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。


set_remote_program

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

函数原型:

cpp
Result set_remote_program(SOCKETFD socketFd, int robotNum, std::vector<RemoteProgramSetting> program);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4)
programstd::vector<RemoteProgramSetting>远程程序设置,22.07 版本固定大小为 10

RemoteProgramSetting 结构体:

字段类型说明
jobstd::string远程程序选择(作业文件名)
timesint远程程序运行次数

使用示例:

cpp
std::vector<RemoteProgramSetting> program(10);
program[0].job = "main.job";  // 预约主程序
program[0].times = 1;         // 运行 1 次

Result result = set_remote_program(fd, 1, program);

get_remote_program

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

函数原型:

cpp
Result get_remote_program(SOCKETFD socketFd, int robotNum, int& num, std::vector<RemoteProgramSetting>& program);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。


2.4 安全 IO

安全 IO 说明

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

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

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


set_hard_enable_port

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

函数原型:

cpp
Result set_hard_enable_port(SOCKETFD socketFd, int enable, int port1, int port2);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 使能硬接线:端口 1 绑定 DIN1-5,端口 2 绑定 DIN1-6
Result result = set_hard_enable_port(fd, 1, 5, 6);

get_hard_enable_port

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

函数原型:

cpp
Result get_hard_enable_port(SOCKETFD socketFd, int& enable, int& port1, int& port2);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。


set_safe_IO_function

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

函数原型:

cpp
Result set_safe_IO_function(SOCKETFD socketFd, int robotNum, SafeIO safeIO);

参数说明:

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

SafeIO 结构体:

字段类型说明
quickStopPort1 / quickStopPort2int紧急停止端口 1/2
quickStopValue1 / quickStopValue2int紧急停止参数 (0/1)
quickStopEnablebool紧急停止使能
quickStopShied1 / quickStopShied2bool屏蔽紧急停止 1/2
quickStopTimedouble快速停止时间,单位 ms,范围 [50,100]
quickStopShiedTimeint屏蔽紧急停止时间,单位 s
screenPort1 / screenPort2int安全光幕端口 1/2
screenValue1 / screenValue2int安全光幕参数 (0/1)
screenEnablebool安全光幕使能

使用示例:

cpp
SafeIO safe;
safe.quickStopPort1 = 15;  safe.quickStopValue1 = 1;  safe.quickStopEnable = true;
safe.quickStopTime = 100;   // 快速停止时间 100ms
safe.screenPort1 = 7;      safe.screenValue1 = 1;    safe.screenEnable = true;

Result result = set_safe_IO_function(fd, 1, safe);

get_safe_IO_function

获取 IO 安全设置参数。

函数原型:

cpp
Result get_safe_IO_function(SOCKETFD socketFd, int robotNum, SafeIO& safeIO);

参数说明:

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

返回值: SUCCESS(0) 表示成功,负数表示失败。