2. 数控系统通信协议基础:RS232/RS485串口通信、Modbus协议、OPC UA协议介绍

各位好,我是老张。在数控这行摸爬滚打了十几年,今天咱们聊聊通信协议。说实话,很多刚入行的朋友一听到「协议」两个字就头大,觉得是搞软件的人该操心的事。其实不然,你想想看,数控机床要跟PLC通信、要跟MES系统对接、要远程监控,哪一步离得开这些协议?

我个人习惯把通信协议比作「语言」。你讲中文,我讲英文,咱俩没法聊。设备也一样,得说同一种「话」才能交换数据。今天我就把最常用的三种协议——RS232/RS485、Modbus、OPC UA,掰开了揉碎了讲清楚。

2.1 RS232与RS485串口通信

先说串口通信。这玩意儿年头可长了,但你别小看它。我在车间里见过不少老设备,控制系统还是用RS232接口。为什么?稳定、简单、成本低。

RS232,全称是「推荐标准232」。它最大的特点是点对点通信,也就是一台设备只能跟另一台设备连。传输距离嘛,也就15米左右,再远信号就衰减得厉害了。我记得有一次帮客户调试一台老式数控车床,RS232线缆拉了20多米,数据死活传不过去。后来换了RS485,问题立马解决。

这里有个关键参数:波特率。说白了就是每秒传多少位数据。常见的波特率有9600、19200、115200。你可能会问,是不是越高越好?不一定。波特率越高,抗干扰能力越差。在工厂这种电磁环境复杂的地方,我建议你从9600开始试,稳定了再往上调。

RS485就不一样了。它支持多点通信,一条总线上可以挂32个设备(用中继器还能更多)。传输距离能到1200米,抗干扰能力也强。为什么?因为它用的是差分信号传输。嗯,这个技术细节咱们不深究,你只要记住:RS485适合车间级别的设备联网。

实战经验:我在做数控机床数据采集时,最常用的方案就是RS485总线。把十几台机床的控制器串起来,通过一个串口服务器转成以太网,再上传到上位机。成本低、实施快,小工厂特别适用。

串口通信的参数配置,我列个表,你照着设就行:

参数 常见值 说明
波特率 9600 / 19200 / 115200 速度与稳定性要平衡
数据位 8 大多数设备用8位
停止位 1 偶尔用2位,看设备手册
校验位 无 / 奇校验 / 偶校验 无校验最常用

小技巧:调试串口通信时,先用串口调试助手发个简单的指令,看设备有没有回应。我曾经遇到过一台设备,波特率设成19200能通,9600反而通不了。所以别想当然,多试几个组合。

2.2 Modbus协议

Modbus协议,这可是工业通信的「通用语言」。1979年由Modicon公司发明,到现在40多年了,依然活跃在数控系统、PLC、变频器、仪表等各种设备中。

为什么它这么长寿?说白了就两个字:简单。Modbus的报文结构非常清晰,一个请求帧包含:设备地址、功能码、数据区、校验码。你只要知道这四部分,就能跟任何Modbus设备通信。

Modbus有两种传输模式:

  • Modbus RTU:二进制传输,效率高,最常用。我90%的项目都用这个。
  • Modbus ASCII:用ASCII字符传输,可读性好,但效率低。很少用了。

还有一种是Modbus TCP,跑在以太网上。如果你用网线连数控系统,多半是走Modbus TCP。它的报文格式跟RTU略有不同,但核心思想一样。

咱们看个实际例子。假设你要读取一台数控机床的主轴转速,设备地址是1,功能码03表示读保持寄存器,起始地址是1000,读2个寄存器。Modbus RTU的报文长这样:

请求:01 03 03 E8 00 02 C5 B7
回应:01 03 04 00 0F 00 1E 7A 45

解释一下:

  • 01:设备地址
  • 03:功能码(读保持寄存器)
  • 03 E8:起始地址(1000的十六进制)
  • 00 02:读2个寄存器
  • C5 B7:CRC校验码

回应里的00 0F00 1E就是转速值,换算成十进制分别是15和30。嗯,这里要注意,Modbus的数据可能是整数、浮点数,也可能是高低字节互换的,得看设备手册。

避坑指南:我曾经遇到过一台国产数控系统,它的Modbus地址跟标准Modbus差了1。标准地址1000,它非要写成1001。折腾了我一整天。所以拿到新设备,第一件事就是看它的Modbus地址映射表,别想当然。

Modbus的功能码,常用的就这几个:

功能码 含义 用途
01 读线圈 读取开关量(如启停状态)
02 读离散输入 读取输入开关量
03 读保持寄存器 读取模拟量(如转速、温度)
04 读输入寄存器 读取只读模拟量
05 写单个线圈 控制开关量
06 写单个寄存器 设置参数

2.3 OPC UA协议

最后说说OPC UA。这个协议是近十年才火起来的,但它的前身OPC DA(数据访问)已经用了二十多年。OPC UA跟前面两个协议最大的区别是什么?它不依赖Windows的COM/DCOM技术,跨平台、安全性高、信息模型丰富。

你想想看,Modbus只能传原始数据,比如「寄存器1000的值是1500」。但OPC UA可以告诉你:「主轴转速是1500转/分钟,单位是rpm,上限是8000,下限是0」。这就是信息模型的好处——数据自带语义。

我建议你在做大型项目时优先考虑OPC UA。比如工厂有几十台数控机床,要跟MES系统对接,用OPC UA就特别合适。为什么?因为它支持订阅机制。你不需要轮询每台设备,设备有变化时会主动推送数据。这大大减轻了网络负担。

OPC UA的地址空间结构,有点像文件系统:

Objects
├── 设备1
│   ├── 主轴
│   │   ├── 转速 (1500 rpm)
│   │   └── 负载 (80%)
│   └── 进给轴
│       ├── X轴位置 (123.45 mm)
│       └── Y轴位置 (67.89 mm)
├── 设备2
│   └── ...
└── 报警
    └── 当前报警 (无)

每个节点都有唯一的NodeId,客户端通过NodeId来读写数据。OPC UA还支持方法调用,比如你可以远程启动一台机床的加工程序。

个人经验:我去年帮一家汽车零部件厂做数据采集,他们要求所有数控机床的数据必须实时上传到云端。我选了OPC UA作为车间层协议,通过OPC UA网关把数据转成MQTT发到云平台。效果非常好,延迟不到100毫秒。

不过OPC UA也有缺点:实现复杂。它的协议栈比Modbus重得多,对硬件要求高。一些老旧的数控系统根本跑不动OPC UA。这时候怎么办?我的做法是:老设备用Modbus转OPC UA网关,新设备直接支持OPC UA。

选型建议:

  • 小项目、老设备、简单数据采集 → 用Modbus RTU/RS485
  • 中等规模、需要远程监控 → 用Modbus TCP
  • 大型项目、需要语义化数据、跨平台 → 用OPC UA

好了,三种协议都讲完了。总结一下:RS232/RS485是物理层,解决怎么传数据的问题;Modbus是应用层,解决数据怎么组织的问题;OPC UA是更高级的应用层,解决数据怎么理解的问题。三者不是互斥的,而是可以组合使用的。比如用RS485传Modbus RTU,再用OPC UA网关统一接入上层系统。

下一章我会讲具体的硬件选型和接线方法,到时候咱们再聊。