3. 读取主轴转速与倍率

任务目标

通过FOCAS库连接FANUC数控系统,实时读取主轴实际转速、指令转速及主轴倍率,并在控制台显示当前值。本案例实现最小可复现的读取闭环,不涉及界面开发。

环境依赖

需要FANUC FOCAS2库(fwlib32.dll/fwlib32.lib或Linux对应版本),C语言编译器。连接前确认机床开启FOCAS以太网功能,并已知IP地址与端口号(默认8193)。

关键完整代码


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

int main() {
    unsigned short handle;
    short ret;
    short actual_speed = 0;      // 实际转速 rpm
    short command_speed = 0;     // 指令转速 rpm
    short override = 0;          // 主轴倍率 %
    short dummy = 0;

    // 1. 建立连接
    ret = cnc_allclibhndl3("192.168.0.1", 8193, 10, &handle);
    if (ret != EW_OK) {
        printf("连接失败,错误码: %d\n", ret);
        return 1;
    }

    // 2. 读取主轴实际转速(地址 SACT)
    ret = cnc_rdspindle(handle, &actual_speed, &dummy);
    if (ret != EW_OK) {
        printf("读取实际转速失败,错误码: %d\n", ret);
        cnc_freelibhndl(handle);
        return 1;
    }

    // 3. 读取主轴指令转速(地址 SCMD)
    ret = cnc_rdspindle(handle, &dummy, &command_speed);
    if (ret != EW_OK) {
        printf("读取指令转速失败,错误码: %d\n", ret);
        cnc_freelibhndl(handle);
        return 1;
    }

    // 4. 读取主轴倍率(地址 SOVO)
    ret = cnc_rdspindle(handle, &dummy, &dummy);  // 先清空
    ret = cnc_rdparam(handle, 0, 0, 0, 0, &override);  // 实际使用参数读取
    if (ret != EW_OK) {
        // 备选:通过系统变量读取倍率
        ODBT sysvar;
        ret = cnc_rdmacro(handle, 0, 0, 0, &sysvar);
        if (ret != EW_OK) {
            printf("读取倍率失败,错误码: %d\n", ret);
            cnc_freelibhndl(handle);
            return 1;
        }
    }

    // 5. 显示结果
    printf("主轴实际转速: %d rpm\n", actual_speed);
    printf("主轴指令转速: %d rpm\n", command_speed);
    printf("主轴倍率: %d%%\n", override);

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

编译与运行


# Windows (MSVC)
cl read_spindle.c /I "C:\FOCAS\include" /link fwlib32.lib

# Linux (gcc)
gcc read_spindle.c -o read_spindle -I /usr/local/focas/include -L /usr/local/focas/lib -lfwlib32

# 运行
./read_spindle

验证方法

在机床面板上手动改变主轴转速(如从500rpm调到800rpm)或调整倍率旋钮,重新运行程序,观察输出值是否随之变化。若输出值与机床面板显示一致,且连续多次运行结果稳定,则判定通过。

常见问题

  • 连接失败(错误码非0):检查IP地址、端口号是否正确,机床FOCAS功能是否启用,网络是否可达。
  • 读取倍率返回错误:不同系统倍率地址可能不同,可尝试通过cnc_rdmacro读取系统宏变量(如#3004)获取倍率值。
  • 数值为0:确认主轴处于旋转状态,且系统参数允许外部读取。