九、焊接工艺(nrc_craft_weld.h)
焊接工艺接口提供焊接参数配置、送丝/退丝/送气控制、焊接使能、手动点焊、摆焊参数设置以及焊接状态监控等功能。支持单机器人和多机器人(_robot 后缀)两种调用方式。
数据结构
ArcParam —— 焊接工艺参数
struct ArcParam {
double weldVoltage; // 焊接电压 范围[-1000,1000]V
double weldCurrent; // 焊接电流 范围[0,1000]A
double arcOnCurrent; // 起弧电流 范围[0,1000]A
double arcOnVoltage; // 起弧电压 范围[-1000,1000]V
double arcOnTime; // 起弧时间 范围[0,5]S
bool arcOnRampEnable; // 起弧渐变 false:未使能 true:使能
int arcOnRampMode; // 起弧方式 时间渐变
double arcOnRampTime; // 起弧渐变时间 范围[0,100000]ms
double arcOffCurrent; // 收弧电流 范围[0,1000]A
double arcOffVoltage; // 收弧电压 范围[-1000,1000]V
double arcOffTime; // 收弧时间 范围[0,5]S
bool arcOffRampEnable; // 收弧渐变 false:未使能 true:使能
int arcOffRampMode; // 收弧方式 时间渐变
double arcOffRampTime; // 收弧渐变时间 范围[0,100000]ms
};WaveParam —— 摆焊参数
struct WaveParam {
int type; // 摆法方式 0:正弦摆 1:Z字形 2:圆形摆 3:外部轴定点摆
double swingFreq; // 摆动频率
double swingAmplitude; // 摆动幅度
double radius; // 半径
double LTypeAngle; // L型角度
bool moveWhenEdgeStay; // 边缘停留
double leftStayTime; // 左停留时间
double rightStayTime; // 右停留时间
int initialDir; // 初始方向
double horizontalDeflection; // 水平偏转
double verticalDeflection; // 垂直偏转
};WeldState —— 焊接监控状态
struct WeldState {
int pistolSwitch; // 焊枪开关 -1:未使能 0:错误 1:使能
int arcingSuccess; // 引弧成功 -1:未使能 0:错误 1:使能
int handWireFeed; // 手动送丝 -1:未使能 0:错误 1:使能
double weldCurrent; // 焊接电流
double weldVoltage; // 焊接电压
double weldTime; // 焊接时间
double weldPWM; // 焊接占空比
};9.1 焊接参数配置
weld_get_config / weld_get_config_robot
获取指定工艺号的焊接参数。
函数签名:
Result weld_get_config(SOCKETFD socketFd, int index, ArcParam& param);
Result weld_get_config_robot(SOCKETFD socketFd, int robotNum, int index, ArcParam& param);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| index | int | 输入 | 工艺号 |
| param | ArcParam& | 输出 | 焊接工艺参数 |
返回值: Result 枚举,0 表示成功,负数表示失败(-1: 接收失败,-2: 断开连接,-6: 超时)。
使用示例:
// 获取工艺号1的焊接参数
ArcParam param;
Result result = weld_get_config(fd, 1, param);
if (result == 0) {
printf("工艺号1的焊接参数:\n");
printf(" 焊接电压: %.2f V\n", param.weldVoltage);
printf(" 焊接电流: %.2f A\n", param.weldCurrent);
printf(" 起弧电流: %.2f A\n", param.arcOnCurrent);
printf(" 起弧时间: %.2f S\n", param.arcOnTime);
printf(" 收弧电流: %.2f A\n", param.arcOffCurrent);
printf(" 收弧时间: %.2f S\n", param.arcOffTime);
}weld_set_config / weld_set_config_robot
设置指定工艺号的焊接参数。
函数签名:
Result weld_set_config(SOCKETFD socketFd, int index, ArcParam& param);
Result weld_set_config_robot(SOCKETFD socketFd, int robotNum, int index, ArcParam& param);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| index | int | 输入 | 工艺号 |
| param | ArcParam& | 输入 | 焊接工艺参数 |
返回值: Result 枚举,0 表示成功,负数表示失败。
使用示例:
// 配置工艺号1的焊接参数
ArcParam param;
param.weldVoltage = 25.0; // 焊接电压 25V
param.weldCurrent = 180.0; // 焊接电流 180A
param.arcOnCurrent = 200.0; // 起弧电流 200A
param.arcOnVoltage = 28.0; // 起弧电压 28V
param.arcOnTime = 0.5; // 起弧时间 0.5秒
param.arcOnRampEnable = true; // 使能起弧渐变
param.arcOnRampMode = 0; // 起弧方式:时间渐变
param.arcOnRampTime = 200.0; // 起弧渐变时间 200ms
param.arcOffCurrent = 150.0; // 收弧电流 150A
param.arcOffVoltage = 22.0; // 收弧电压 22V
param.arcOffTime = 0.5; // 收弧时间 0.5秒
param.arcOffRampEnable = true; // 使能收弧渐变
param.arcOffRampMode = 0; // 收弧方式:时间渐变
param.arcOffRampTime = 200.0; // 收弧渐变时间 200ms
Result result = weld_set_config(fd, 1, param);
if (result == 0) {
printf("焊接参数设置成功\n");
}9.2 送丝/退丝/送气控制
weld_set_feed_wire / weld_set_feed_wire_robot
控制送丝功能。
函数签名:
Result weld_set_feed_wire(SOCKETFD socketFd, int state);
Result weld_set_feed_wire_robot(SOCKETFD socketFd, int robotNum, int state);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| state | int | 输入 | 1: 开启送丝,0: 关闭送丝 |
返回值: Result 枚举,0 表示成功,负数表示失败。
注意事项: 送丝功能通常用于手动调试场景,在自动焊接过程中不建议单独调用。
使用示例:
// 开启送丝
Result result = weld_set_feed_wire(fd, 1);
if (result == 0) {
printf("送丝已开启\n");
sleep(3); // 送丝3秒
// 关闭送丝
weld_set_feed_wire(fd, 0);
}weld_set_rewind_wire / weld_set_rewind_wire_robot
控制退丝功能。
函数签名:
Result weld_set_rewind_wire(SOCKETFD socketFd, int state);
Result weld_set_rewind_wire_robot(SOCKETFD socketFd, int robotNum, int state);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| state | int | 输入 | 1: 开启退丝,0: 关闭退丝 |
返回值: Result 枚举,0 表示成功,负数表示失败。
使用示例:
// 开启退丝
Result result = weld_set_rewind_wire(fd, 1);
if (result == 0) {
printf("退丝已开启\n");
sleep(2); // 退丝2秒
// 关闭退丝
weld_set_rewind_wire(fd, 0);
}weld_set_supply_gas / weld_set_supply_gas_robot
控制送气功能。
函数签名:
Result weld_set_supply_gas(SOCKETFD socketFd, int state);
Result weld_set_supply_gas_robot(SOCKETFD socketFd, int robotNum, int state);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| state | int | 输入 | 1: 开启送气,0: 关闭送气 |
返回值: Result 枚举,0 表示成功,负数表示失败。
使用示例:
// 焊前预送气
Result result = weld_set_supply_gas(fd, 1);
if (result == 0) {
printf("送气已开启,预送气中...\n");
sleep(1); // 预送气1秒
// 开始焊接...
// 焊接完成后关气
// weld_set_supply_gas(fd, 0);
}9.3 焊接使能与手动点焊
weld_set_enable / weld_set_enable_robot
控制焊接使能状态。
函数签名:
Result weld_set_enable(SOCKETFD socketFd, int state);
Result weld_set_enable_robot(SOCKETFD socketFd, int robotNum, int state);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| state | int | 输入 | 1: 使能焊接,0: 关闭焊接使能 |
返回值: Result 枚举,0 表示成功,负数表示失败。
注意事项: 在自动焊接前需要先调用此接口使能焊接功能。关闭焊接使能后,焊接相关的 IO 输出将被禁用。
使用示例:
// 使能焊接
Result result = weld_set_enable(fd, 1);
if (result == 0) {
printf("焊接使能已开启,可以开始焊接\n");
}
// 焊接完成后关闭使能
// weld_set_enable(fd, 0);weld_set_hand_spot / weld_set_hand_spot_robot
控制手动点焊功能。
函数签名:
Result weld_set_hand_spot(SOCKETFD socketFd, int state);
Result weld_set_hand_spot_robot(SOCKETFD socketFd, int robotNum, int state);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| state | int | 输入 | 1: 开启手动点焊,0: 关闭手动点焊 |
返回值: Result 枚举,0 表示成功,负数表示失败。
注意事项: 手动点焊用于调试或临时焊接需求,开启后会立即执行点焊操作。请确保焊枪已到达目标位置后再调用。
使用示例:
// 先移动到焊接位置
// robot_movel(fd, ...);
// 执行手动点焊
Result result = weld_set_hand_spot(fd, 1);
if (result == 0) {
printf("手动点焊完成\n");
}9.4 状态获取
weld_get_feed_wire_status / weld_get_feed_wire_status_robot
获取送丝、退丝、送气、焊接使能、手动点焊的状态。
函数签名:
Result weld_get_feed_wire_status(SOCKETFD socketFd, std::vector<int>& status);
Result weld_get_feed_wire_status_robot(SOCKETFD socketFd, int robotNum, std::vector<int>& status);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| status | std::vector<int>& | 输出 | 状态数组,长度 5 |
status 数组说明:
| 索引 | 含义 | 取值 |
|---|---|---|
| status[0] | 送丝状态 | 0: 关闭,1: 开启 |
| status[1] | 退丝状态 | 0: 关闭,1: 开启 |
| status[2] | 送气状态 | 0: 关闭,1: 开启 |
| status[3] | 焊接使能 | 0: 关闭,1: 使能 |
| status[4] | 手动点焊 | 0: 关闭,1: 开启 |
返回值: Result 枚举,0 表示成功,负数表示失败。
使用示例:
std::vector<int> status;
Result result = weld_get_feed_wire_status(fd, status);
if (result == 0) {
printf("焊接状态:\n");
printf(" 送丝: %s\n", status[0] ? "开启" : "关闭");
printf(" 退丝: %s\n", status[1] ? "开启" : "关闭");
printf(" 送气: %s\n", status[2] ? "开启" : "关闭");
printf(" 焊接使能: %s\n", status[3] ? "使能" : "关闭");
printf(" 手动点焊: %s\n", status[4] ? "开启" : "关闭");
}weld_get_monitor_status / weld_get_monitor_status_robot
获取焊接实时监控状态,包括焊枪开关、引弧状态、电流电压等实时数据。
函数签名:
Result weld_get_monitor_status(SOCKETFD socketFd, WeldState& status);
Result weld_get_monitor_status_robot(SOCKETFD socketFd, int robotNum, WeldState& status);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| status | WeldState& | 输出 | 焊接状态结构体 |
WeldState 字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
| pistolSwitch | int | 焊枪开关:-1=未使能,0=错误,1=使能 |
| arcingSuccess | int | 引弧成功:-1=未使能,0=错误,1=使能 |
| handWireFeed | int | 手动送丝:-1=未使能,0=错误,1=使能 |
| weldCurrent | double | 当前焊接电流(A) |
| weldVoltage | double | 当前焊接电压(V) |
| weldTime | double | 累计焊接时间(S) |
| weldPWM | double | 焊接占空比(%) |
返回值: Result 枚举,0 表示成功,负数表示失败。
注意事项: 该接口可用于焊接质量监控,建议在焊接过程中周期性调用(如每 100ms 一次),以实时获取焊接参数变化。
使用示例:
// 焊接过程监控
WeldState state;
Result result = weld_get_monitor_status(fd, state);
if (result == 0) {
printf("焊接监控数据:\n");
printf(" 焊枪开关: %d\n", state.pistolSwitch);
printf(" 引弧成功: %d\n", state.arcingSuccess);
printf(" 焊接电流: %.2f A\n", state.weldCurrent);
printf(" 焊接电压: %.2f V\n", state.weldVoltage);
printf(" 焊接时间: %.2f S\n", state.weldTime);
printf(" 焊接占空比: %.2f%%\n", state.weldPWM);
}9.5 摆焊参数
weld_get_wave_weld_param / weld_get_wave_weld_param_robot
获取摆焊参数数据。控制器支持最多 9 组摆焊参数文件。
函数签名:
Result weld_get_wave_weld_param(SOCKETFD socketFd, int num, WaveParam& param);
Result weld_get_wave_weld_param_robot(SOCKETFD socketFd, int robotNum, int num, WaveParam& param);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| num | int | 输入 | 摆焊文件编号,范围 [1, 9] |
| param | WaveParam& | 输出 | 摆焊参数 |
返回值: Result 枚举,0 表示成功,负数表示失败。
使用示例:
// 获取第1组摆焊参数
WaveParam param;
Result result = weld_get_wave_weld_param(fd, 1, param);
if (result == 0) {
printf("摆焊参数(文件1):\n");
printf(" 摆动方式: %d (0:正弦摆 1:Z字形 2:圆形摆 3:外部轴定点摆)\n", param.type);
printf(" 摆动频率: %.2f Hz\n", param.swingFreq);
printf(" 摆动幅度: %.2f mm\n", param.swingAmplitude);
printf(" 半径: %.2f mm\n", param.radius);
printf(" 左停留时间: %.2f S\n", param.leftStayTime);
printf(" 右停留时间: %.2f S\n", param.rightStayTime);
}weld_set_wave_weld_param / weld_set_wave_weld_param_robot
设置摆焊参数。控制器支持最多 9 组摆焊参数文件。
函数签名:
Result weld_set_wave_weld_param(SOCKETFD socketFd, int num, const WaveParam& param);
Result weld_set_wave_weld_param_robot(SOCKETFD socketFd, int robotNum, int num, const WaveParam& param);参数说明:
| 参数 | 类型 | 输入/输出 | 说明 |
|---|---|---|---|
| socketFd | SOCKETFD | 输入 | 连接句柄 |
| robotNum | int | 输入 | 机器人编号(仅 _robot 版本) |
| num | int | 输入 | 摆焊文件编号,范围 [1, 9] |
| param | const WaveParam& | 输入 | 摆焊参数 |
WaveParam 字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
| type | int | 摆动方式:0=正弦摆,1=Z字形摆,2=圆形摆,3=外部轴定点摆 |
| swingFreq | double | 摆动频率(Hz) |
| swingAmplitude | double | 摆动幅度(mm) |
| radius | double | 摆动半径(mm),圆形摆时有效 |
| LTypeAngle | double | L型角度,Z字形摆时有效 |
| moveWhenEdgeStay | bool | 边缘是否停留 |
| leftStayTime | double | 左侧边缘停留时间(S) |
| rightStayTime | double | 右侧边缘停留时间(S) |
| initialDir | int | 初始摆动方向 |
| horizontalDeflection | double | 水平方向偏转角度 |
| verticalDeflection | double | 垂直方向偏转角度 |
返回值: Result 枚举,0 表示成功,负数表示失败。
注意事项: 摆焊参数配置后,在焊接作业文件中引用对应的摆焊文件编号即可生效。支持 1~9 共 9 组独立的摆焊参数。
使用示例:
// 配置正弦摆焊参数
WaveParam param;
param.type = 0; // 正弦摆
param.swingFreq = 2.5; // 摆动频率 2.5Hz
param.swingAmplitude = 5.0; // 摆动幅度 5mm
param.radius = 0.0; // 正弦摆不需要半径
param.LTypeAngle = 0.0;
param.moveWhenEdgeStay = true; // 边缘停留
param.leftStayTime = 0.1; // 左停留 0.1秒
param.rightStayTime = 0.1; // 右停留 0.1秒
param.initialDir = 0; // 初始方向
param.horizontalDeflection = 0.0;
param.verticalDeflection = 0.0;
Result result = weld_set_wave_weld_param(fd, 1, param);
if (result == 0) {
printf("摆焊参数(文件1)设置成功\n");
}9.6 完整焊接流程示例
#include "nrc_craft_weld.h"
#include <stdio.h>
int main() {
// 1. 连接机器人(假设已完成)
SOCKETFD fd = connect_robot("192.168.1.15", "6001");
if (fd <= 0) {
printf("连接失败\n");
return -1;
}
// 2. 配置焊接参数
ArcParam arcParam;
arcParam.weldVoltage = 25.0;
arcParam.weldCurrent = 180.0;
arcParam.arcOnCurrent = 200.0;
arcParam.arcOnVoltage = 28.0;
arcParam.arcOnTime = 0.5;
arcParam.arcOffCurrent = 150.0;
arcParam.arcOffVoltage = 22.0;
arcParam.arcOffTime = 0.5;
Result ret = weld_set_config(fd, 1, arcParam);
if (ret != 0) {
printf("焊接参数配置失败\n");
return -1;
}
// 3. 配置摆焊参数(可选)
WaveParam waveParam;
waveParam.type = 0; // 正弦摆
waveParam.swingFreq = 2.5;
waveParam.swingAmplitude = 3.0;
ret = weld_set_wave_weld_param(fd, 1, waveParam);
if (ret != 0) {
printf("摆焊参数配置失败\n");
}
// 4. 预送气
weld_set_supply_gas(fd, 1);
sleep(1);
// 5. 使能焊接
weld_set_enable(fd, 1);
// 6. 启动焊接作业文件
// run_job_file(fd, "weld_job_001");
// 7. 监控焊接状态
for (int i = 0; i < 100; i++) {
WeldState state;
ret = weld_get_monitor_status(fd, state);
if (ret == 0) {
printf("焊接中: 电流=%.1fA 电压=%.1fV 时间=%.1fS\n",
state.weldCurrent, state.weldVoltage, state.weldTime);
}
usleep(100000); // 100ms
}
// 8. 焊接完成,关闭焊接使能和送气
weld_set_enable(fd, 0);
weld_set_supply_gas(fd, 0);
printf("焊接流程完成\n");
return 0;
}