协议接入

欧姆龙 PLC 采集:FINS 与 NJ/NX CIP 怎么选

欧姆龙在包装、食品、电子组装和物流分拣线上用量很大,但它的通信被分成明显两代:老的 CJ/CP/CS 系列走 FINS 加内存区地址,新的 NJ/NX 系列走 CIP 加变量名寻址,两套的点表完全不通用。

欧姆龙 PLC 的两代通信方式

从数采角度看,欧姆龙的产品线要先分清是哪一代平台, 因为两代的协议、寻址方式和点表格式完全不同:

平台常见型号通信方式与寻址
老一代CJ1/CJ2、CP1、CS1、CQM 等FINS(TCP/UDP,端口 9600),按内存区 + 地址寻址(DM/CIO/W/H/A)
老一代(串口)同上,无以太网单元时Hostlink(C-mode),编程口即可用,ASCII 帧 + FCS
新一代 SysmacNJ101/301/501、NX1P/NX102/NX7CIP(EtherNet/IP 显式报文),按变量名符号寻址

现场常见的场合是:包装机与后段包装线、食品饮料的灌装与贴标、 电子组装线的传送与检测工站、物流分拣、以及大量日系与台系专机的主控。 敏洽 SCADA 数采软件 提供 omron_fins_tcp、omron_fins_udp、 omron_hostlink、omron_cip 四个驱动, 分别覆盖上面这几种情况,节点号与网络号可配。

实际会遇到的几个坑

1. FINS 节点号撞号

FINS 寻址靠网络号、节点号、单元号三件套,采集端自己也要占一个节点号。 现场最高频的问题是采集端节点号与 PLC、HMI 或已有上位机撞号, 表现不是干脆的连不上,而是间歇性无应答、或者收到不属于自己的应答, 这种「时好时坏」极难定位。 正确做法是接入前向设备厂要一份现场的节点分配表, 新增采集端时占一个空号。 如果 PLC 以太网单元启用了按 IP 末段自动生成节点号的模式, 采集端的 IP 末段也不能与任何 PLC 冲突。 单元号也要注意:CPU 是 0,通过特定通信单元转发时要填该单元的号。

2. FINS/UDP 的丢包错位

FINS 可以走 UDP 也可以走 TCP。UDP 少一次建链、报文开销小, 但不保证到达与顺序:丢一个应答之后, 如果采集侧没有严格做请求应答配对, 就可能把上一次请求的应答当成这一次的结果, 表现是数据整体错位或者偶发出现明显不属于该点的值。 除非以太网单元只开了 UDP,或者对频率要求极高, 否则建议用 omron_fins_tcp。 TCP 侧要注意建链后有一个节点号分配的握手过程, 有些第三方工具跳过这一步会导致后续请求全部被丢弃。

3. 内存区代码与位地址写法

FINS 请求里要指定区域代码,DM、CIO、W、H、A 各有不同代码, 代码填错读的就是另一个区的同号地址, 而且很可能不报错。 位地址的写法是「通道号.位号」,例如 CIO 100.05 是 CIO 100 通道的第 5 位, 配置时只填 100 会被当成整字读。 另外定时器/计数器的当前值区、以及 CP1 系列部分特殊区的可访问性 与 CJ/CS 不完全一样,要查对应型号手册。 32 位整数与浮点数占两个连续字,字序需要实测, 方法是让设备产生一个已知值再反推。

4. NJ/NX 的变量没勾「网络公开」

这是 Sysmac 平台上最高频的问题。NJ/NX 走 CIP 按变量名读, 但全局变量默认对外不可见, 必须在 Sysmac Studio 的全局变量表里把 「网络公开」(Network Publish)属性打开, 改完重新下载程序才生效。 没开时采集端报的是找不到变量或权限相关的错误, 容易被当成协议配置错误来查。 另一个限制是只能读全局变量,程序内的局部变量读不到—— 需要设备厂在程序里把要外发的值赋给全局变量。 这两项都属于设备厂改程序的工作量,要在接口确认阶段提。

5. NJ/NX 的结构体与数组读法

Sysmac 支持用户自定义结构体和数组,采集端可以按 结构体名.成员名 或 数组名[索引] 访问。 两个注意点:一是整体读一个大结构体往往比逐个成员读快得多, 但需要采集侧知道结构体的内存布局与对齐规则, 不确定时按成员逐个读更稳; 二是字符串类型(STRING)在 Sysmac 里是定长的, 读回来会带填充字符,需要在解析时截断。 要求设备厂提供的点表里应写明每个变量的完整数据类型定义, 而不只是「浮点」「整型」这种笼统说法。

6. 以太网单元的并发连接数

CJ 系列的以太网单元可用的 FINS 连接数并不多, HMI、编程软件、已有上位机、新加的采集端都要占用。 占满之后新连接被拒绝,或者把已有连接挤掉—— 挤掉编程软件影响不大,挤掉 HMI 就是生产问题。 接入前必须确认单元型号的连接数上限与当前占用, 必要时加装第二块以太网单元,或者由一路采集统一向上分发数据。 Hostlink 串口是单主站,不存在并发,但也就不能再并一路。

接入方式与硬件条件

项目要求与说明
CJ/CP/CS 首选以太网单元 + omron_fins_tcp,需分配不冲突的网络号/节点号/单元号
CJ/CP/CS 备选只开 UDP 时用 omron_fins_udp;无以太网单元时用 omron_hostlink 走串口
NJ/NXomron_cip 按变量名寻址,变量须在 Sysmac Studio 里开启网络公开
节点分配接入前索取现场 FINS 节点分配表,避免与 PLC、HMI、既有上位机撞号
连接数确认以太网单元的 FINS 连接数上限与当前占用,避免挤掉 HMI 连接
数据集中要求设备厂把外发数据集中到连续的 DM 区(老平台)或专用全局变量(NJ/NX)
件级结果需 PLC 侧锁存 + 序号/握手位,采集侧按序号变化触发读取并回写确认
点表必备字段老平台:区域代码、地址、位号、数据类型、字序;NJ/NX:完整变量名与完整数据类型定义

需要客户或设备厂准备的是:以太网单元(老平台无网口时)、 节点号分配、NJ/NX 侧的变量公开设置与全局变量赋值、 以及交换机端口与 IP 规划。 以太网单元与串口服务器型号敏洽可以给建议, PLC 程序侧的改动由设备厂电控工程师实现。

相关交付情况

欧姆龙现场的经验是:先问清平台代次, 再决定点表格式。 老平台的沟通重点在内存区规划与节点号; NJ/NX 的沟通重点在变量命名规范与网络公开设置—— 后者如果等到现场联调才发现,需要设备厂重新下载程序, 往往要停机配合。 所以敏洽的做法是接口确认阶段就把「变量清单 + 公开属性已设置」 作为一条明确的交付前置条件写进接口文档。

接口先定后开发的切分方式见 上位机软件外包怎么切分, 更多交付情况见 案例中心。

常见问题

FINS 是欧姆龙的网络层协议,寻址靠三个号:网络号(Network,同一网段内一般填 0)、节点号(Node,以太网单元通常取 IP 的最后一段)、单元号(Unit,CPU 是 0,特定通信单元按其设定)。采集端自己也要有一组号,且必须与 PLC 侧的路由表和节点号不冲突。最常见的错误是采集端节点号与 PLC 或 HMI 撞号,现象是间歇性无应答或应答错乱。稳妥做法是向设备厂要一份现场的 FINS 节点分配表,新增采集端时占用一个没人用的号;如果 PLC 侧启用了自动节点号(按 IP 末段),采集端所在网段的 IP 末段就不能与 PLC 冲突。
优先 TCP。FINS/UDP 报文更小、少一次握手,但 UDP 不保证到达也不保证顺序,采集侧必须自己做超时重试与请求应答配对,丢包时容易出现「读到上一次请求的应答」这类错位问题。FINS/TCP 有连接概念,链路断了能明确感知,异常处理简单得多。用 UDP 的合理场景只有两个:PLC 的以太网单元只开了 UDP,或者采集频率很高且能容忍偶发丢点。要注意 FINS/TCP 建链后有一个节点号分配握手过程,端口默认 9600,与 UDP 的 9600 是两回事。
欧姆龙的内存区是分区的:DM(数据存储,D0 开始,字为单位)、CIO(I/O 与内部继电器,按通道编号,位可单独访问)、W(工作区)、H(保持区)、A(辅助区)、以及定时器/计数器的当前值区。FINS 请求里要同时指定「区域代码 + 起始地址 + 位号 + 读取长度」,区域代码填错读的就是另一个区。位地址的写法是通道号.位号(如 CIO 100.05),采集侧配置时不能只填通道号。另外欧姆龙的 32 位数与浮点数占两个连续字,字序需要实测确认,做法与 Modbus 一样:用一个已知值反推。
NJ/NX 是 Sysmac 平台,走 CIP 符号寻址(按变量名读),但变量默认是不对外可见的。必须在 Sysmac Studio 的全局变量表里,把要采集的变量的「网络公开」属性设为「输入/输出」或「发布」(不同版本叫法略有差异,英文是 Network Publish),改完还要重新下载程序。没勾这个属性时采集端会报找不到变量或权限错误,很容易被误判成协议不对。另外 NJ/NX 只能读全局变量,程序内的局部变量不管怎么配都读不到——需要设备厂在程序里把要外发的值赋给全局变量。
走 Hostlink(C-mode)串口协议,这是欧姆龙的老式上位链接协议,CPU 的编程口就能用,ASCII 帧、带 FCS 校验、单元号用两位数字。缺点是速度慢、功能受限(部分内存区不能访问),适合点数少的老站。另一条路是给 CJ 系列加装以太网单元(CJ1W-EIP21 等)走 FINS,或者在 485 侧加协议网关。选择依据是点数与频率:十几个点、几秒一次,Hostlink 够用;要几十个点、秒级更新,值得加以太网单元。
以太网侧要看以太网单元的 FINS 并发连接数,CJ 系列的以太网单元这个数字不大,HMI、编程软件、采集端加起来很容易占满,超了会拒绝新连接或挤掉旧连接——挤掉编程软件问题不大,挤掉 HMI 就是生产事故。所以上线前要确认单元的连接数上限与当前占用情况。串口的 Hostlink 是单主站,不能再并一路。稳妥做法仍然是一台设备只保留一路采集,由这一路向上分发。

有具体设备清单或工件样品,可以直接给判断

提供设备型号、PLC 品牌与需要采集的数据项,或提供被检工件照片与精度要求,敏洽可先给出可行性判断与硬件前置条件,再谈软件工作量与报价。