欧姆龙 PLC 的两代通信方式
从数采角度看,欧姆龙的产品线要先分清是哪一代平台, 因为两代的协议、寻址方式和点表格式完全不同:
| 平台 | 常见型号 | 通信方式与寻址 |
|---|---|---|
| 老一代 | CJ1/CJ2、CP1、CS1、CQM 等 | FINS(TCP/UDP,端口 9600),按内存区 + 地址寻址(DM/CIO/W/H/A) |
| 老一代(串口) | 同上,无以太网单元时 | Hostlink(C-mode),编程口即可用,ASCII 帧 + FCS |
| 新一代 Sysmac | NJ101/301/501、NX1P/NX102/NX7 | CIP(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/NX | omron_cip 按变量名寻址,变量须在 Sysmac Studio 里开启网络公开 |
| 节点分配 | 接入前索取现场 FINS 节点分配表,避免与 PLC、HMI、既有上位机撞号 |
| 连接数 | 确认以太网单元的 FINS 连接数上限与当前占用,避免挤掉 HMI 连接 |
| 数据集中 | 要求设备厂把外发数据集中到连续的 DM 区(老平台)或专用全局变量(NJ/NX) |
| 件级结果 | 需 PLC 侧锁存 + 序号/握手位,采集侧按序号变化触发读取并回写确认 |
| 点表必备字段 | 老平台:区域代码、地址、位号、数据类型、字序;NJ/NX:完整变量名与完整数据类型定义 |
需要客户或设备厂准备的是:以太网单元(老平台无网口时)、 节点号分配、NJ/NX 侧的变量公开设置与全局变量赋值、 以及交换机端口与 IP 规划。 以太网单元与串口服务器型号敏洽可以给建议, PLC 程序侧的改动由设备厂电控工程师实现。
相关交付情况
欧姆龙现场的经验是:先问清平台代次, 再决定点表格式。 老平台的沟通重点在内存区规划与节点号; NJ/NX 的沟通重点在变量命名规范与网络公开设置—— 后者如果等到现场联调才发现,需要设备厂重新下载程序, 往往要停机配合。 所以敏洽的做法是接口确认阶段就把「变量清单 + 公开属性已设置」 作为一条明确的交付前置条件写进接口文档。
接口先定后开发的切分方式见 上位机软件外包怎么切分, 更多交付情况见 案例中心。
常见问题
有具体设备清单或工件样品,可以直接给判断
提供设备型号、PLC 品牌与需要采集的数据项,或提供被检工件照片与精度要求,敏洽可先给出可行性判断与硬件前置条件,再谈软件工作量与报价。