欧姆龙NJ系列控制器在很多自动化项目里都会遇到,尤其是 NJ501 这种中等性能的机器自动化控制器。不过很多工程师第一次接触 NJ501 的无协议串口通信时,往往会卡在一个很基础的问题上:NJ501 的 CPU 本体并没有 RS-232C 或 RS-485 串口。控制器上常见的接口是 EtherNet/IP、EtherCAT、USB 和 SD 卡槽,并没有像 CP1H 那样板载串口。
于是“NJ501 实现无协议串口通信发送”这句话,听起来其实有点反直觉。因为要实现真正的串口数据收发,必须先决定数据从 NJ501 的哪个物理出口出去。围绕这个问题,工程上有两种主流方案:一种是在 NJ501 的 CPU 机架上扩展 CJ 系列串行通信单元;另一种是通过 NJ501 自带的 EtherNet/IP 接口连接一台“串口服务器”,由串口服务器把以太网数据转成 RS-232C/RS-485 字节流。这两种方案都能实现无协议串口通信,但编程思路、调试难度、可维护性差别很大。
这篇文章会把无协议串口通信这个概念讲透,并重点拆解一条适合 NJ501 的落地路线:EtherNet/IP + 串口服务器透明传输。我们从方案选型、原理、硬件连接、串口参数配置,到 NJ501 端的报文构造和发送验证,一步一步展开。如果你是刚接触 NJ501,或者正被“没有串口”这件事卡住,这篇文章值得收藏备查。
1. 为什么 NJ501 做无协议串口通信容易卡住
1.1 NJ501 的硬件现状
先看 NJ501 的硬件构成。NJ501 系列属于 NJ 系列的机器自动化控制器,CPU 单元标配的是 EtherNet/IP 端口和 EtherCAT 主站端口。EtherCAT 用于连接伺服和远程 IO,EtherNet/IP 用于上位机、HMI、其他 PLC 以及支持 EtherNet/IP 协议的设备通信。
所以在硬件层,NJ501 并不是一个天生带着串口接口的控制器。如果项目里的扫码枪、称重仪表、老式打印机、显示屏等设备只支持 RS-232C 或 RS-485 串口,就会出现一个很现实的问题:PLC 程序写好了,但数据从哪个接口发出去?
有些工程师会想到给 NJ501 加装 CJ 单元。NJ/NX 系列控制器可以通过单元适配器连接部分 CJ 系列单元,其中也包括 CJ 系列串行通信单元,例如 CJ1W-SCU41-V1。这种做法的本质,是让 NJ501 通过 CPU 总线去控制一个独立的串行通信单元,由这个单元负责 RS-232C / RS-422A / RS-485 电平转换和数据收发。
不过,这种方式需要仔细确认 NJ501 的 CPU 指令体系和 Sysmac Studio 软件版本是否支持目标功能,不能把 CJ 系列的老程序直接照搬过来。很多工程师就是在这里踩坑:照着 CJ 系列手册写了发送指令,结果在 NJ 的指令集里找不到对应指令,或者变量地址体系完全对不上。
1.2 “无协议串口通信”到底是什么意思
“无协议”这个词听起来像“没有协议”,实际意思是:PLC 不对通信内容做协议封装,也不依赖欧姆龙 HostLink 等专用协议,而是把用户组装的字节数组直接通过串口发送出去。
很多设备的串口通信都采用这种形式。比如:
- 向扫码枪发送一条触发命令,随后接收二维码字符串;
- 向称重仪表发送一条读取重量命令,仪表返回重量数据;
- 向打印机发送一段文本指令;
- 向 LED 显示屏发送显示内容。
这些设备一般会在说明书中给出“报文格式”或“命令格式”,常见为十六进制字节,也可能是一段 ASCII 字符串。
以常见的 Modbus RTU 读寄存器为例,PLC 需要发送类似下面这一串十六进制字节:
01 03 00 00 00 02 C4 0B这串字节的含义是:从站地址 01,功能码 03,起始寄存器地址 0x0000,读取数量 0x0002,最后两个字节是 CRC16 校验。
无协议串口通信时,PLC 不会去解释这些字节的意义,它只负责把这串字节按顺序从串口发出去。设备收到后自行解析。反过来,设备返回的字节也原样交给 PLC,由用户在程序里按设备协议解析。
理解这一点很重要。因为“无协议”不等于“什么都不管”,而是协议帧的组装、校验、超时判断都要用户自己完成。PLC 在这里扮演的是“透明字节管道”的角色。
对于 NJ501 来说,真正的难点不是串口语法,而是:
- 控制器本身没有物理串口;
- NJ 使用基于 IEC 61131-3 的变量编程体系,不像老式 CJ 系列那样直接对内存地址编程;
- 数据帧得在 PLC 内部构造好,并通过某个通信通道发出去。
1.3 两条实现路线对比
针对 NJ501 的无协议串口通信发送,工程上主要就两条路线:
| 对比项 | 路线 A:机架扩展 CJ 串口单元 | 路线 B:EtherNet/IP + 串口服务器 |
|---|---|---|
| 新增硬件 | CJ 串行通信单元、CJ 单元适配器 | 串口服务器、交换机/网线 |
| 数据链路 | NJ CPU 总线 -> CJ 串口单元 -> RS-232/485 | NJ EtherNet/IP -> TCP/IP -> 串口服务器 -> RS-232/485 |
| 编程重点 | 检查 Sysmac 环境下的串口单元通信功能 | Socket 打开、发送、关闭 |
| 排错方式 | 查看串口单元状态字,需接触单元参数 | 网口抓包 + 串口调试助手分段定位 |
| 典型场景 | 无以太网环境,或必须使用 CJ 单元 | 已有工业以太网,设备分散,希望快速落地 |
从工程落地角度看,如果项目允许使用工业以太网,路线 B 往往更容易跑通。原因有三点:
第一,不需要纠结 CJ 单元与 NJ 的指令兼容问题。NJ501 本身就支持 Socket 通信,可以主动向串口服务器的 TCP 端口发送数据。
第二,中间链路可以清晰分界。网络部分出问题查 PLC 和交换机,串口部分出问题查串口服务器和设备接线,排查范围小很多。
第三,串口服务器可以放在设备旁边。RS-232 线可以拉得很短,减少因为通信线过长导致的乱码和干扰。
对于很多需要做扫码枪、仪表采集的项目,这已经是非常实用的架构。
2. 理解一次无协议串口发送的完整链路
在动手配置之前,先把“一次无协议串口发送”的数据流拆开。以路线 B 为例,一次完整发送包括这些环节:
NJ501 内部字节数组