4. 读取进给速度与倍率

任务目标

通过FOCAS/Ethernet库读取FANUC数控系统的三个关键进给参数:实际进给速度、指令进给速度和进给倍率,并据此计算实际进给速度的校验值。本案例使用C语言实现最小可复现客户端。

必要环境与依赖

  • FANUC FOCAS1/Ethernet开发库(fwlib32.h、fwlib32.lib)
  • 支持FOCAS/Ethernet的FANUC数控系统(如0i系列),并已开启以太网功能
  • Windows环境(示例使用Win32控制台),Linux需替换链接库为libfwlib32.so

关键完整代码

#include <stdio.h>
#include <string.h>
#include "fwlib32.h"

int main(void) {
    unsigned short handle;
    short ret;
    short actual_feed = 0;      // 实际进给速度 (mm/min)
    short cmd_feed = 0;         // 指令进给速度 (mm/min)
    short feed_override = 0;    // 进给倍率 (%)
    short calc_feed = 0;        // 计算所得实际进给速度

    // 1. 建立连接(IP和端口需按实际机床修改)
    ret = cnc_allclibhndl3("192.168.0.1", 8193, 10, &handle);
    if (ret != EW_OK) {
        printf("连接失败,错误码: %d\n", ret);
        return 1;
    }

    // 2. 读取实际进给速度(地址:实际进给速度)
    ret = cnc_rdactualspdl(handle, &actual_feed);
    if (ret != EW_OK) {
        printf("读取实际进给速度失败,错误码: %d\n", ret);
        cnc_freelibhndl(handle);
        return 1;
    }

    // 3. 读取指令进给速度(地址:指令进给速度)
    ret = cnc_rdspeed(handle, &cmd_feed);
    if (ret != EW_OK) {
        printf("读取指令进给速度失败,错误码: %d\n", ret);
        cnc_freelibhndl(handle);
        return 1;
    }

    // 4. 读取进给倍率(地址:进给倍率)
    ret = cnc_rdfeedovr(handle, &feed_override);
    if (ret != EW_OK) {
        printf("读取进给倍率失败,错误码: %d\n", ret);
        cnc_freelibhndl(handle);
        return 1;
    }

    // 5. 计算实际进给速度 = 指令进给速度 × 倍率 / 100
    calc_feed = (short)((cmd_feed * feed_override) / 100);

    // 6. 输出结果
    printf("实际进给速度: %d mm/min\n", actual_feed);
    printf("指令进给速度: %d mm/min\n", cmd_feed);
    printf("进给倍率: %d %%\n", feed_override);
    printf("计算实际进给速度: %d mm/min\n", calc_feed);

    // 7. 断开连接
    cnc_freelibhndl(handle);
    return 0;
}

编译与运行

  1. 在Visual Studio中创建Win32控制台项目,将上述代码保存为main.c。
  2. 项目属性中配置:包含目录指向fwlib32.h所在路径,库目录指向fwlib32.lib所在路径,附加依赖项添加fwlib32.lib。
  3. 编译生成可执行文件。
  4. 运行前确保机床IP与代码中一致(示例为192.168.0.1,端口8193),且PC与机床网络互通。

验证方法

  • 程序输出三行原始读取值及一行计算值,无错误码返回。
  • 在机床面板上手动设置不同进给倍率(如50%、100%),重新运行程序,观察进给倍率值随之变化。
  • 校验逻辑:计算实际进给速度应等于指令进给速度 × 进给倍率 / 100。若机床正在执行进给运动,实际进给速度应接近计算实际进给速度(允许微小波动);若机床停止,实际进给速度为0,而计算值可能非0,这是正常现象(指令仍在但未执行)。
  • 判定通过条件:程序能稳定读取三个参数且计算值与公式一致,无连接错误。

常见问题

  • 连接错误(返回非EW_OK):检查IP、端口、子网掩码设置,以及机床侧FOCAS/Ethernet功能是否已启用。
  • 读取值为0:机床处于急停、复位或未执行运动指令时,实际进给速度为0属正常;指令进给速度和倍率应始终有值。
  • 倍率读取范围:FANUC系统倍率通常为0~254%,程序按short类型接收,无需额外转换。