采 CNC 机床数据,核心就三个问题:机床品牌决定能用什么协议、想采的点位决定接入方式、老机床决定要不要加硬件。发那科走 FOCAS、新系统走 OPC UA、跨品牌统一选 MTConnect;没网口的老机床加边缘网关或 IO 采集也能联网。机床联网最怕的不是采不到,而是各品牌数据口径不统一、报警代码对不上。

一、采CNC数据到底图什么?先想清楚再动手

别急着铺网线,先问车间要拿这些数据干嘛。通常是这么四类:

  • 设备状态:运行 / 待机 / 报警 / 关机,用来算设备利用率和 OEE;
  • 加工数据:主轴转速、进给速度、主轴负载、当前程序号、刀号;
  • 工件计数:节拍、加工件数、废品数;
  • 报警维修:报警代码、报警文本、维修响应时间。

说白了,先有管理诉求再联网。只为"上系统"而联网,最后数据全躺在库里没人看,网口倒是接了一堆。

二、发那科FOCAS:最主流,但版本和授权要先确认

发那科 0i-MF、31i 等系统,通过以太网口用 FOCAS2 协议(对应 Fwlib32 / Fwlib64 动态库)采集。动手之前有几件事必须确认:

  • 系统是否已开通以太网功能,部分老机型要加网卡板或单独购买选项;
  • 默认端口 8193,CNC 侧设好 IP,PMC 参数放行;
  • 采集频率别猛刷,1~2 秒一次足够,多台机床用网关汇聚,别各自直连。
// C# 通过 P/Invoke 调 FOCAS2:先拿句柄,再读状态,用完释放
[DllImport("Fwlib32.dll")]
static extern short cnc_allclibhndl3(string ip, ushort port, int timeout, out ushort handle);

[DllImport("Fwlib32.dll")]
static extern short cnc_statinfo(ushort h, ref ODBSYS s);   // 自动/手动/MDI状态

[DllImport("Fwlib32.dll")]
static extern short cnc_alarm(ushort h, ref short alm);     // 当前报警号

ushort h;
short ret = cnc_allclibhndl3("192.168.1.10", 8193, 3000, out h);
if (ret == 0) { cnc_statinfo(h, ref sys); cnc_alarm(h, ref alm); }
cnc_freelibhndl(h);
新手最常卡的地方:FOCAS 版本和 DLL 位数(32 / 64 位)必须和你的程序匹配。程序是 x64 却引用 32 位 Fwlib32,调用直接崩,跟代码写得对不对一点关系都没有。

三、西门子和通用标准:OPC UA与MTConnect怎么选

路线适用设备优点要注意
FOCAS发那科全系列点位全、实时性好需授权、DLL 平台坑
OPC UA西门子 840D sl 等新系统标准化、跨品牌、可订阅老系统不支持
MTConnect多品牌混合车间语义统一、设备模型清晰要配 Agent / Adapter
私有 SDK / TCP三菱 M70 / M80、兄弟等直连、响应快协议封闭、文档少

西门子 840D sl 可以直接通过 Sinumerik 自带的 OPC UA 服务器读节点;三菱 M70 / M80 有专用 SDK(EZSocket 一类),老款 M70 还常走串口或网卡二次开发。

MTConnect 是 MTConnect Institute 推的开放标准,用 HTTP 暴露设备数据流,设备模型按 Device — Component — DataItem 分层定义,多品牌机床的数据口径能做到完全统一。代价是每类设备要写对应的 Adapter 或 Agent,前期工作量不小。

四、老机床没网口怎么办?三种补救办法

车间里跑了十几二十年的机床不少,连不上网不代表没辙,按信号条件分三档:

  1. 有 RS232 串口(很多老发那科都有):上串口服务器转网口,或经 DNC 口采宏变量,速率慢、点位少,但成本极低;
  2. 加边缘采集网关:对接 IO 点和三色灯,采运行 / 报警状态和加工计数(从周期信号还原),一台几千元;
  3. 外加传感器:电流互感器判断主轴启停、震动或计数传感器,间接还原加工状态。

说实话,老机床不必强求采全量数据。能把利用率和报警这两样采上来,管理上基本就已经回本了,剩下的等设备更新再说。

五、落地架构和这几个必踩的坑

比较稳的链路是:机床 → 车间边缘网关(协议解析、断线本地缓存)→ MQTT / OPC UA → MDC / MES 平台。下面这几个坑,几乎人人都踩:

  • 报警代码要在平台侧配本地化工单文本库,只存一串代码没人看得懂;
  • 所有设备 NTP 对时,时间不齐,节拍和停机分析全乱;
  • 程序号不等于工件号,必须和工单 / MES 绑定,否则数据没意义;
  • 网关本地 SQLite 缓存断网补传,别让一次网络抖动丢半天数据;
  • 机床网段和办公网隔离,只开必要端口,别让车间设备裸奔。
我个人的经验:先挑一两种主力机型打样跑两周,把点位表和报警字典磨准,再批量推广。一口气全厂铺开,最后一定是数据质量参差不齐,还得回头一个个补。

今天就能做的动作:挑车间里数量最多的一款机床,找到它的系统版本和网口情况,列出管理上最想要的 10 个数据项,拿着它去确认 FOCAS 或 OPC UA 能不能采、要不要额外授权。机型摸底走在最前面,后面的预算和方案才不会变成拍脑袋。