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;
}
编译与运行
- 在Visual Studio中创建Win32控制台项目,将上述代码保存为
main.c。 - 项目属性中配置:包含目录指向
fwlib32.h所在路径,库目录指向fwlib32.lib所在路径,附加依赖项添加fwlib32.lib。 - 编译生成可执行文件。
- 运行前确保机床IP与代码中一致(示例为
192.168.0.1,端口8193),且PC与机床网络互通。
验证方法
- 程序输出三行原始读取值及一行计算值,无错误码返回。
- 在机床面板上手动设置不同进给倍率(如50%、100%),重新运行程序,观察
进给倍率值随之变化。 - 校验逻辑:
计算实际进给速度应等于指令进给速度 × 进给倍率 / 100。若机床正在执行进给运动,实际进给速度应接近计算实际进给速度(允许微小波动);若机床停止,实际进给速度为0,而计算值可能非0,这是正常现象(指令仍在但未执行)。 - 判定通过条件:程序能稳定读取三个参数且计算值与公式一致,无连接错误。
常见问题
- 连接错误(返回非EW_OK):检查IP、端口、子网掩码设置,以及机床侧FOCAS/Ethernet功能是否已启用。
- 读取值为0:机床处于急停、复位或未执行运动指令时,实际进给速度为0属正常;指令进给速度和倍率应始终有值。
- 倍率读取范围:FANUC系统倍率通常为0~254%,程序按short类型接收,无需额外转换。