采 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);
三、西门子和通用标准: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,前期工作量不小。
四、老机床没网口怎么办?三种补救办法
车间里跑了十几二十年的机床不少,连不上网不代表没辙,按信号条件分三档:
- 有 RS232 串口(很多老发那科都有):上串口服务器转网口,或经 DNC 口采宏变量,速率慢、点位少,但成本极低;
- 加边缘采集网关:对接 IO 点和三色灯,采运行 / 报警状态和加工计数(从周期信号还原),一台几千元;
- 外加传感器:电流互感器判断主轴启停、震动或计数传感器,间接还原加工状态。
说实话,老机床不必强求采全量数据。能把利用率和报警这两样采上来,管理上基本就已经回本了,剩下的等设备更新再说。
五、落地架构和这几个必踩的坑
比较稳的链路是:机床 → 车间边缘网关(协议解析、断线本地缓存)→ MQTT / OPC UA → MDC / MES 平台。下面这几个坑,几乎人人都踩:
- 报警代码要在平台侧配本地化工单文本库,只存一串代码没人看得懂;
- 所有设备 NTP 对时,时间不齐,节拍和停机分析全乱;
- 程序号不等于工件号,必须和工单 / MES 绑定,否则数据没意义;
- 网关本地 SQLite 缓存断网补传,别让一次网络抖动丢半天数据;
- 机床网段和办公网隔离,只开必要端口,别让车间设备裸奔。
今天就能做的动作:挑车间里数量最多的一款机床,找到它的系统版本和网口情况,列出管理上最想要的 10 个数据项,拿着它去确认 FOCAS 或 OPC UA 能不能采、要不要额外授权。机型摸底走在最前面,后面的预算和方案才不会变成拍脑袋。
