Skip to content

九、焊接工艺(nrc_craft_weld.h)

焊接工艺接口提供焊接参数配置、送丝/退丝/送气控制、焊接使能、手动点焊、摆焊参数设置以及焊接状态监控等功能。支持单机器人和多机器人(_robot 后缀)两种调用方式。

数据结构

ArcParam —— 焊接工艺参数

cpp
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 —— 摆焊参数

cpp
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 —— 焊接监控状态

cpp
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

获取指定工艺号的焊接参数。

函数签名:

cpp
Result weld_get_config(SOCKETFD socketFd, int index, ArcParam& param);
Result weld_get_config_robot(SOCKETFD socketFd, int robotNum, int index, ArcParam& param);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
indexint输入工艺号
paramArcParam&输出焊接工艺参数

返回值: Result 枚举,0 表示成功,负数表示失败(-1: 接收失败,-2: 断开连接,-6: 超时)。

使用示例:

cpp
// 获取工艺号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

设置指定工艺号的焊接参数。

函数签名:

cpp
Result weld_set_config(SOCKETFD socketFd, int index, ArcParam& param);
Result weld_set_config_robot(SOCKETFD socketFd, int robotNum, int index, ArcParam& param);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
indexint输入工艺号
paramArcParam&输入焊接工艺参数

返回值: Result 枚举,0 表示成功,负数表示失败。

使用示例:

cpp
// 配置工艺号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

控制送丝功能。

函数签名:

cpp
Result weld_set_feed_wire(SOCKETFD socketFd, int state);
Result weld_set_feed_wire_robot(SOCKETFD socketFd, int robotNum, int state);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
stateint输入1: 开启送丝,0: 关闭送丝

返回值: Result 枚举,0 表示成功,负数表示失败。

注意事项: 送丝功能通常用于手动调试场景,在自动焊接过程中不建议单独调用。

使用示例:

cpp
// 开启送丝
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

控制退丝功能。

函数签名:

cpp
Result weld_set_rewind_wire(SOCKETFD socketFd, int state);
Result weld_set_rewind_wire_robot(SOCKETFD socketFd, int robotNum, int state);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
stateint输入1: 开启退丝,0: 关闭退丝

返回值: Result 枚举,0 表示成功,负数表示失败。

使用示例:

cpp
// 开启退丝
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

控制送气功能。

函数签名:

cpp
Result weld_set_supply_gas(SOCKETFD socketFd, int state);
Result weld_set_supply_gas_robot(SOCKETFD socketFd, int robotNum, int state);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
stateint输入1: 开启送气,0: 关闭送气

返回值: Result 枚举,0 表示成功,负数表示失败。

使用示例:

cpp
// 焊前预送气
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

控制焊接使能状态。

函数签名:

cpp
Result weld_set_enable(SOCKETFD socketFd, int state);
Result weld_set_enable_robot(SOCKETFD socketFd, int robotNum, int state);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
stateint输入1: 使能焊接,0: 关闭焊接使能

返回值: Result 枚举,0 表示成功,负数表示失败。

注意事项: 在自动焊接前需要先调用此接口使能焊接功能。关闭焊接使能后,焊接相关的 IO 输出将被禁用。

使用示例:

cpp
// 使能焊接
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

控制手动点焊功能。

函数签名:

cpp
Result weld_set_hand_spot(SOCKETFD socketFd, int state);
Result weld_set_hand_spot_robot(SOCKETFD socketFd, int robotNum, int state);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
stateint输入1: 开启手动点焊,0: 关闭手动点焊

返回值: Result 枚举,0 表示成功,负数表示失败。

注意事项: 手动点焊用于调试或临时焊接需求,开启后会立即执行点焊操作。请确保焊枪已到达目标位置后再调用。

使用示例:

cpp
// 先移动到焊接位置
// 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

获取送丝、退丝、送气、焊接使能、手动点焊的状态。

函数签名:

cpp
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);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
statusstd::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 表示成功,负数表示失败。

使用示例:

cpp
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

获取焊接实时监控状态,包括焊枪开关、引弧状态、电流电压等实时数据。

函数签名:

cpp
Result weld_get_monitor_status(SOCKETFD socketFd, WeldState& status);
Result weld_get_monitor_status_robot(SOCKETFD socketFd, int robotNum, WeldState& status);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
statusWeldState&输出焊接状态结构体

WeldState 字段说明:

字段类型说明
pistolSwitchint焊枪开关:-1=未使能,0=错误,1=使能
arcingSuccessint引弧成功:-1=未使能,0=错误,1=使能
handWireFeedint手动送丝:-1=未使能,0=错误,1=使能
weldCurrentdouble当前焊接电流(A)
weldVoltagedouble当前焊接电压(V)
weldTimedouble累计焊接时间(S)
weldPWMdouble焊接占空比(%)

返回值: Result 枚举,0 表示成功,负数表示失败。

注意事项: 该接口可用于焊接质量监控,建议在焊接过程中周期性调用(如每 100ms 一次),以实时获取焊接参数变化。

使用示例:

cpp
// 焊接过程监控
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 组摆焊参数文件。

函数签名:

cpp
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);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
numint输入摆焊文件编号,范围 [1, 9]
paramWaveParam&输出摆焊参数

返回值: Result 枚举,0 表示成功,负数表示失败。

使用示例:

cpp
// 获取第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 组摆焊参数文件。

函数签名:

cpp
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);

参数说明:

参数类型输入/输出说明
socketFdSOCKETFD输入连接句柄
robotNumint输入机器人编号(仅 _robot 版本)
numint输入摆焊文件编号,范围 [1, 9]
paramconst WaveParam&输入摆焊参数

WaveParam 字段说明:

字段类型说明
typeint摆动方式:0=正弦摆,1=Z字形摆,2=圆形摆,3=外部轴定点摆
swingFreqdouble摆动频率(Hz)
swingAmplitudedouble摆动幅度(mm)
radiusdouble摆动半径(mm),圆形摆时有效
LTypeAngledoubleL型角度,Z字形摆时有效
moveWhenEdgeStaybool边缘是否停留
leftStayTimedouble左侧边缘停留时间(S)
rightStayTimedouble右侧边缘停留时间(S)
initialDirint初始摆动方向
horizontalDeflectiondouble水平方向偏转角度
verticalDeflectiondouble垂直方向偏转角度

返回值: Result 枚举,0 表示成功,负数表示失败。

注意事项: 摆焊参数配置后,在焊接作业文件中引用对应的摆焊文件编号即可生效。支持 1~9 共 9 组独立的摆焊参数。

使用示例:

cpp
// 配置正弦摆焊参数
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 完整焊接流程示例

cpp
#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;
}