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 0F和00 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网关统一接入上层系统。
下一章我会讲具体的硬件选型和接线方法,到时候咱们再聊。