什么是 FOCAS?FANUC 数控系统的专属数据接口

2026 年 4 月。在一个受控的测试网络中,一台模拟 FANUC 31i 数控系统的服务器正在监听 TCP 8193 端口。测试目标非常明确:验证 FANUC 官方客户端动态链接库在脱离实体机床的环境下,能否与模拟服务正常通信。服务器依据捕获的标准数据帧,返回了握手确认包。然而,对端的客户端库解析数据后,直接切断了连接,日志中只留下一行简洁的错误码:-16,即 EW_PROTOCOL。

这次拒绝道出了认识 FOCAS 的首要准则:FOCAS 不仅仅是一套网络线缆协议,更是 FANUC 专有的软件库架构。官方客户端会在内部严格校验通信序列与数据特征,仅仅在网络层回放或拼装数据包往往无法建立有效通信。当天开展的第二套测试方案则采取了完全不同的路径:彻底弃用官方 DLL,直接通过底层 TCP Socket 发送解析后的指令。这一方案最终揭开了该专有协议在网络线缆上的真实面貌。

FOCAS(FANUC Open CNC API Specifications)是用于访问 FANUC 数控系统内部 CNC 与 PMC(内置可编程控制器)数据的专有应用程序接口家族。行业文档中通常统称为 FOCAS1 和 FOCAS2。它支持通过以太网或专用高速光纤串行总线(HSSB)建立物理连接,通过初始化获取会话句柄(Handle),并在该句柄生命周期内执行各类读取与写入函数。与开源开放的 MTConnect 标准不同,FOCAS 的软件库与技术规范完全由设备厂商分发与授权。[1][2][3]

FANUC 数控系统操作面板,FOCAS 接口提供底层寄存器访问支持
FANUC 数控系统操作面板:FOCAS 通过本地库直接访问机床底层核心数据。图像来源:Lfelipelopezp, CC BY-SA 4.0, Wikimedia Commons.

FOCAS 核心参数速览

开发厂商 FANUC(发那科公司) [1][2]
协议类型 专有 API 库(FOCAS1/FOCAS2)及配套二进制网络通信协议 [2][3]
传输媒介 以太网(TCP,工程常用端口 8193)与 HSSB(专用光纤扩展卡) [1][2]
客户端依赖 核心库 FWLIB32.DLL 及对应控制器型号的专属组件;Linux 平台为 libfwlib32-linux-*.so [2][3]
会话初始化 调用 cnc_allclibhndl3(ip, port, timeout, handle);后续所有读写均绑定该句柄 [3]
数据范围 运行模式、坐标位置、程序代码、报警信息、刀具补偿、宏变量、PMC 寄存器与文件传输 [2]
交互方向 双向读写;写入权限严格受制于机床软硬件配置与安全授权 [2]
支持硬件系列 30i-B、0i-F、0i-D、16i/18i/21i、15i、Power Mate i-D/H、150-B 等主流系列 [1]
技术公开度 专有分发;依赖厂商官方授权与开发套件,无公开免费标准文本 [2]

边界界定:FOCAS 是什么与不是什么

在车间数字化改造中,将 FOCAS 与 MTConnect 混为一谈是极其多见的方案规划失误。MTConnect 是一套通用的、只读的、面向多品牌设备的工业语义标准;而 FOCAS 则是专为 FANUC 深度定制、支持双向读写的高性能接口。前者致力于让全厂异构设备使用同一种数据格式汇报生产进度;后者则允许工程师直接穿透至数控系统最底层的内存空间。此外,FANUC 官方提供的 MT-LINK i 工业软件同样支持以太网和 OPC UA 采集,但它属于上层系统集成产品,并不能替代底层的 FOCAS API。[1][2][6]

FOCAS 也绝非单个文件那么简单。尽管 FWLIB32.DLL 是通用调用入口,但在 Windows 平台下,它必须根据机床的具体世代协同加载配套文件:例如 FWLIB30i、FWLIB0iD、FWLIB0i、FWLIB16W 或 FWLIBNCG。相同的采集代码在面对不同世代的数控柜时,必须匹配不同版本的动态链接库组件。如果不明确指出数控系统的具体型号与固件版本,单纯宣称“系统已成功对接 FOCAS”在工程上是没有明确意义的。[2][3]

关于商业授权,FOCAS 并不属于公有领域工具。其技术库的分发与商用部署需遵从厂商的许可协议。工程团队在项目立项阶段,必须将接口选件费用和开发套件授权单独纳入预算规划。[2]

两种物理链路,统一会话句柄

FOCAS 在物理层支持以太网与 HSSB 两种通道。以太网采用标准 TCP 协议,车间实施普遍固定于 8193 端口。HSSB 则依托专用的光纤总线接口卡,提供高确定性与极低延迟的通信保障。在官方函数兼容性矩阵中,每项功能都会标注适用范围:O 代表同时支持两种通道,E 代表仅限以太网,H 代表仅限 HSSB 专有卡。[1][2]

整个 API 的运行模型严格围绕会话句柄(Handle)展开。客户端通过调用 cnc_allclibhndl3 传入目标 IP、网络端口以及超时阈值,成功后系统返回一个整型句柄。后续所有的状态轮询、程序读写操作都必须传入该句柄;通信任务终止时再予以显式释放。长连接句柄避免了反复建立 TCP 握手的资源开销,但同时也要求应用系统必须具备严密的断线重连逻辑。若在链路断开后依然调用失效句柄,将导致持续的静默超时。[3]

网络层二进制数据帧结构

通过开源社区的独立逆向工程(例如 pyfanuc 项目)以及车间现场的抓包分析,FOCAS 在 TCP 上的二进制传输格式已经被系统化梳理。这些技术数据反映了网络层面的实际通信特征,但并非厂商签署的官方规范。[4][5]

每个数据帧均由 10 字节的固定报头起始:包含 4 字节的特征签名 A0 A0 A0 A0,紧接着是 2 字节版本号、2 字节帧类型代码和 2 字节有效载荷长度。所有多字节整数均按大端序(Big-Endian)排列:

报文头结构(10 字节):
[A0 A0 A0 A0] [版本号:u16] [帧类型:u16] [载荷长度:u16]

0x0101 / 0x0102  会话建立:请求帧 / 应答帧
0x0201 / 0x0202  会话断开:请求帧 / 应答帧
0x2101 / 0x2102  业务数据:请求帧 / 应答帧
0x2103           拒绝帧(格式校验异常时返回)

在数据请求帧内部,载荷被细分为若干个 28 字节的子命令单元:每个单元包含长度标记(通常为 0x001C)、三层指令标识码以及五个 32 位整型参数。若执行成功,控制器将回送包含指令回显与实际数据的响应帧;若执行出错,则返回一个 14 字节的紧凑型错误包。该设计允许采集软件在单个 TCP 报文中复合打包运行模式、加工程序号、实际进给速度与报警状态等多项查询。[4]

命令编码 (c1/c2/c3) 采集数据类型 典型生产应用场景
0x01/0x01/0x18 系统核心信息(CNC 型号、系列代号、固件版本、受控轴数) 设备资产自动盘点与功能兼容性检查
0x01/0x01/0x19 运行状态(工作模式、运行状态、急停标志、报警位) 车间设备综合利用率(OEE)计算与实时监控
0x01/0x01/0x1A 活动报警详细信息 故障停机报警推送与维保响应调度
0x01/0x01/0x1C · 0x20 当前主程序号与正在执行的代码段文件名 生产工单追溯与工艺文件核验
0x01/0x01/0x24 · 0x25 各轴实际进给速率与主轴转速反馈 切削工况稳定性与能效监控
0x01/0x01/0x26 轴坐标数据(绝对坐标、相对坐标、机床机械坐标) 刀具轨迹分析与工作空间位置校核
0x01/0x01/0x61 倍率旋钮信号(进给倍率、主轴倍率、快移倍率) 操作人员干预识别与节拍损失分析
0x01/0x01/0x22 模态辅助数据(当前 T 刀号、M 代码、S 设定值等) 刀具寿命管理与动作逻辑追踪
0x02/0x01/0x8001 PMC 寄存器数据窗口 机床外围传感器与 PLC 逻辑信号直读

上表清晰展示了 FOCAS 具备深度穿透力的原因:通过同一通信通道,工程师可以无缝跨越 CNC 控制器状态、外围 PLC 寄存器乃至宏程序变量,其广度与深度远非通用开放协议所能涵盖。

工程认知转折之一:庞大的 API 家族而非单一协议

将 FOCAS 理解为一条孤立的通信协议是常见的认知偏差。在它的顶层,是一个由数百个标准 C 函数组成的庞大软件库:诸如 cnc_statinfo、cnc_absolute、cnc_rdprgnum、cnc_exeprgname、cnc_rdopnlsgnl、cnc_rdmacro 以及 pmc_rdpmcrng 等接口。在它的底层,则是高度适配各世代数控控制器的专用二进制帧与动态库。[1][2]

正因如此,为 30i-B 系统编写的应用程序在 0i-F 机床上未必能正常运行。官方兼容性矩阵中,符号 X 明确指出了特定型号上无法支持的调用。车间现场经常反馈的“FOCAS 采集失败”,有很大一部分实际上是版本依赖文件配置错误,或者是调用了当前机床不支持的高阶功能。[1]

工程认知转折之二:写入权限背后的严峻安全风险

FOCAS 最显著的工程优势,同时也是其最大风险所在,便是对数控系统底层的直接写入能力。通过该接口,外部系统可以直接修改机床坐标原点偏置、宏变量、PMC 逻辑位甚至系统参数。这种深度交互通常用于自动化产线上下料联锁与高级调试,而非单纯的看板监控。一个错误的偏置写入或者未经验证的 PLC 位改动,可能引发严重的刀具碰撞甚至损伤机床导轨。[2]

车间实践中必须建立严格的管控机制:具备写入权限的客户端必须部署在隔离网段中;所有数据写入操作必须建立严格的版本审批、参数备份与故障回滚机制,且必须先在模拟仿真软件中进行验证。FANUC 定期发布的产品安全公告也印证了严格防范非法写入访问的必要性。[7]

操作类别 FOCAS 支持度 车间安全管控规范
状态、坐标、报警与加工代码读取 完全支持 部署纯只读客户端;实施标准网络分流隔离。
数控参数与工件零点偏置写入 完全支持 实施修改审计与前置备份;禁止生产过程中的无序写入。
宏程序变量与 PMC 内存位写入 完全支持 仅限维保与自动化联锁授权;必须具备严格的点位映射与安全回滚计划。
加工程序文件上传与下载 完全支持 基于数字哈希校验文件完整性;未经车间工艺确认不得直接写入加工区。

工程认知转折之三:DLL 依赖壁垒与双轨开发路线

重新回顾测试开局遇到的连接失败。为什么官方客户端库会拒绝模拟器的握手并报错 -16 EW_PROTOCOL?抓包表明,官方库在建立连接时会并发开启双通道,并针对特定系统特征进行交互式校验。这表明,仅仅熟悉报文结构并不意味着能够完全复制官方客户端的行为。

这一现象决定了 FOCAS 集成的两种技术路线:一是使用厂商提供的官方二进制库,二是基于网络层逆向成果编写自主 Socket 驱动(如 pyfanuc)。自主网络驱动在 Linux、ARM 板卡及容器化部署中极为便利,但它脱离了厂商官方技术支持,在不同版本固件间的通用性需要大量实机测试验证。[4][5]

因此在技术选型中,选择何种客户端路线远比设定网络端口更为关键。官方库具备稳定性与厂商技术保障;纯 Socket 路线摆脱了运行环境依赖,但必须自行承担底层兼容性维护成本。在同一生产线中混用两种方案,往往会引入双重故障排查难度。

另外需要指出,NCGuide 等官方仿真软件在某些指令的执行上与物理实体机床存在差异。在测试环境下,CMD_READ_OPNLSGNL (0x61) 返回了 E6 错误,CMD_READ_MACRO (0x15) 触发了 0x2103 拒绝帧,而 CMD_READ_PMC (0x02) 则导致 TCP 连接意外重置;但刀具号依然可以在 CMD_READ_MODAL_AUX (0x22) 响应报文的第 24 字节中正确提取。这些经验数据属于特定仿真环境下的行为,在实机部署前必须在硬件机床上重新核验。

技术选型权衡:FOCAS 与 MTConnect

技术需求 FOCAS 专有接口 MTConnect 开放标准
CNC、PMC 及宏变量深度数据采集 完全支持 仅限标准定义的有限子集
远程参数与坐标写入控制 完全支持 不支持(设计即为只读)
多品牌异构设备统一接入 不支持(仅限 FANUC) 完全支持(跨厂商通用词典)
技术文档公开获取 否 是
典型部署定位 产线单元控制、维保诊断、深度优化 全厂 MES 对接、OEE 看板、跨品牌分析

主流的工业架构往往结合两者的长处:边缘端利用 FOCAS 获取 FANUC 机床的高精度专有数据并实现必要的写入联动,随后通过 MTConnect 适配器将标准化指标推送至全厂监控层。将控制写入职责严格限定在边缘侧,将全厂数据分发展示保持在只读层,是保障生产连续性的可靠模式。[8]

车间工程落地实施的七项准则

  1. 确认机床以太网选件: FOCAS 在出厂机床上并非全部默认开通,必须核验硬件物理网口与数控软件的授权状态。
  2. 实施端口访问隔离: 将 TCP 8193 端口严格限制在采集机专属网段,杜绝与办公局域网直接相通。
  3. 准确匹配 DLL 依赖文件: 根据机床控制器的实际硬件版本,合理搭配 FWLIB32 与对应的子库,注意 32 位与 64 位运行时的一致性。
  4. 严密管理句柄生命周期: 轮询周期内保持句柄常驻,停机时规范注销;针对偶发断网设计完善的重连状态机。
  5. 合理控制轮询频次与超时: 避免高频并发轮询冲垮控制器通信单元;发生传输错误时采用指数退避机制。
  6. 严格隔离写入系统: 拥有写入权限的工控系统必须使用专用账户、划分独立权限并记录详尽的操作日志。
  7. 建立系统异常监控: 集中监控并记录动态库返回的各类异常状态码(包括 EW_PROTOCOL),使潜在故障尽早暴露。

结语:工程掌控力体现于对写入权限的审慎

评估 FOCAS 接口的价值,不在于其提供的函数数量多么庞大,而在于工程师是否清晰界定了哪些功能可以在何种约束下被调用。同一个会话句柄,既能精准读取轴坐标,也能悄然重写工件坐标系。区分这两者的分界线,不是单纯的软件技术,而是严谨的工程管理流程。

您的车间在接入 FANUC 机床时,是否确保了监控系统仅工作在安全的只读模式?在确实需要下发控制指令时,现场又是否准备了详尽的操作审计与安全回退方案?

本文为数控系统控制协议系列的第二篇深度文章。如需了解开放数据模型,请阅读我们的 MTConnect 指南;物理层串行总线技术请查阅 RS-232 深度解析;嵌入式信号底层机理可参考 I2C、SPI 与 UART 协议物理分析。


权威来源与工程参考

  1. Ladder99 fanuc-driver • FOCAS 函数矩阵(支持代码 O/E/H/X 及数控系统系列对照) • github.com/Ladder99/fanuc-driver
  2. Ladder99 fanuc-driver • Windows 部署、8193 端口配置与 FOCAS DLL 依赖矩阵 • installation-windows.md
  3. strangesast/fwlib • FANUC FOCAS 头文件定义与 fwlib32.h(cnc_allclibhndl3) • github.com/strangesast/fwlib
  4. pyfanuc • FOCAS 二进制网络协议逆向笔记(数据帧、命令集与实测日志) • pyfanuc/protocol.txt
  5. pyfanuc • FANUC FOCAS 协议独立 Python Socket 实现工程 • github.com/diohpix/pyfanuc
  6. FANUC America • MT-LINK i:基于以太网与 OPC UA 的机床监控系统 • fanucamerica.com
  7. FANUC Corporation • 官方安全通告与产品安全更新 • fanuc.co.jp/en/product/vulnerability
  8. MTConnect Institute • C++ 官方参考 Agent 源码库及信息架构规范 • github.com/mtconnect/cppagent

The DigiLiner editorial team publishes with dual-source verification, a public corrections log, and human-supervised AI assistance. Editorial Policy

发表评论

评论经审核后显示。含链接或推广内容的留言不会发布。