一、通信协议基础:什么是通信协议、OSI七层模型与TCP/IP四层模型、数据封装与解封装过程

各位同学好,我是老张。在数控行业摸爬滚打了十几年,今天咱们来聊聊通信协议的基础。说实话,我刚入行那会儿,也被这些概念搞得晕头转向。但后来我发现,搞懂这些基础,对理解数控系统怎么跟伺服驱动器、PLC、上位机“说话”,特别有帮助。

1.1 什么是通信协议?

通信协议,说白了就是两台设备之间约定好的“沟通规则”。就像咱们两个人聊天,得用同一种语言,还得有个先后顺序——你一句我一句,不能同时说,对吧?

在数控系统里,CNC控制器要告诉伺服驱动器“转多少圈、多快转”,驱动器得回复“我转到位了”或者“我出故障了”。这些指令和反馈,必须按照特定的格式来组织,否则对方根本看不懂。

核心要点:通信协议定义了三个基本要素——语法(数据怎么组织)、语义(每个字段什么意思)、时序(什么时候发、什么时候收)。

我记得有一次在现场调试,一台国产数控系统死活连不上进口的伺服驱动器。查了半天,发现是协议里的校验位格式对不上。嗯,这就是典型的“语法”不一致。从那以后,我养成了一个习惯:对接任何设备前,先把协议文档翻个底朝天。

1.2 OSI七层模型——通信的“分层哲学”

OSI七层模型,是国际标准化组织(ISO)在1984年提出的一个通信参考模型。你可能会问:“为什么要搞这么复杂,分七层?”

我个人的理解是:分层是为了“解耦”。每一层只管自己的事,出了问题也好定位。比如物理层只负责传比特流,网络层只负责找路,应用层只关心数据内容。这样,换一根网线(物理层)不会影响你写的应用程序(应用层)。

下面这张图是我自己画的OSI七层模型结构,你可以直观地看看每一层的位置和作用:

OSI七层模型 第7层 应用层 (Application) HTTP, FTP, CNC协议 第6层 表示层 (Presentation) 数据加密、压缩 第5层 会话层 (Session) 建立/管理会话 第4层 传输层 (Transport) TCP, UDP 第3层 网络层 (Network) IP, 路由 第2层 数据链路层 (Data Link) MAC, 帧 第1层 物理层 (Physical) 网线、光纤、RS-485 数据流向:从上到下封装,从下到上解封装

在实际的数控系统通信中,我们最常用的是下面几层:

  • 物理层:RS-232、RS-485、以太网物理接口。我调试过一台老式数控机床,用的还是RS-232,波特率只有9600,传个加工程序得等半天。
  • 数据链路层:比如Modbus RTU的帧结构,或者EtherCAT的数据帧。这一层负责把数据打包成“帧”,加上地址和校验。
  • 应用层:这才是咱们数控工程师最关心的——比如发一个“G01 X100 F200”指令,或者读一个“主轴转速”参数。

我的经验:OSI七层模型在实际工程中很少完全实现,但它是一个极好的“思维框架”。遇到通信问题,你可以一层一层排查——先看物理层(线接好了吗?灯亮了吗?),再看数据链路层(CRC校验对吗?),最后看应用层(指令格式对吗?)。

1.3 TCP/IP四层模型——工业通信的“实战派”

OSI七层模型虽然完整,但太“理想化”了。实际互联网和工业以太网用的,是TCP/IP四层模型。它把OSI的上三层(应用层、表示层、会话层)合并成了一层——应用层。

OSI七层 TCP/IP四层 数控系统中的应用举例
应用层、表示层、会话层 应用层 Modbus TCP、OPC UA、EtherNet/IP、FOCAS(发那科协议)
传输层 传输层 TCP(可靠连接,用于参数读写)、UDP(实时性要求高的场合)
网络层 网络层 IP地址分配、子网划分——我见过一个车间,IP地址冲突导致三台机床同时掉线
数据链路层、物理层 网络接口层 以太网帧、MAC地址、网线(建议用屏蔽超五类以上)

你想想看,TCP/IP模型为什么能“赢”?因为它够简单、够实用。在数控系统里,我们经常用TCP来保证指令的可靠传输——比如上位机下发一个“启动加工”指令,如果丢了,机床可能出事故。而UDP则用在一些实时反馈场景,比如伺服的位置数据,丢一帧没关系,下一帧马上补上。

1.4 数据封装与解封装——数据是怎么“穿衣服”的

这个概念,我打个比方你就明白了。假设你要寄一个包裹:

  1. 应用层:你写好了一封信(原始数据)。
  2. 传输层:你把信装进信封,写上“TCP端口号”(源端口、目的端口)。
  3. 网络层:在信封外面再套一个快递袋,写上“发件人IP”和“收件人IP”。
  4. 数据链路层:再套一个防水袋,写上“MAC地址”(物理地址)。
  5. 物理层:最后,快递员把包裹扔到车上,变成电信号传出去。

这个过程,就叫数据封装。每一层都会给数据加上一个“头部”(Header),里面包含这一层需要的控制信息。

反过来,接收方收到数据后,从物理层开始,一层一层地“拆包裹”——去掉物理层信息、去掉MAC地址、去掉IP地址、去掉端口号,最后把原始数据交给应用程序。这就是解封装

封装过程(发送方):

应用层数据 → [应用层数据]
传输层     → [TCP头 + 应用层数据]    ← 加上端口号
网络层     → [IP头 + TCP头 + 应用层数据]  ← 加上IP地址
数据链路层 → [MAC头 + IP头 + TCP头 + 应用层数据 + FCS尾]  ← 加上MAC地址和校验
物理层     → 比特流(电信号/光信号)

避坑指南:我曾经在调试一台五轴加工中心时,发现上位机发送的G代码总是少几个字符。用抓包软件一看,原来是TCP的MSS(最大报文段长度)设置得太小,导致数据被分片了。而接收方的缓冲区又不够大,丢包了。嗯,从那以后,我每次做远程监控方案,都会先确认一下TCP窗口大小和缓冲区配置。

在数控系统里,数据封装和解封装每时每刻都在发生。比如你用PC通过Modbus TCP读取CNC的主轴转速:

  • PC端:应用层构造“读寄存器”请求 → 传输层加TCP头 → 网络层加IP头 → 链路层加MAC头 → 网线发出去
  • CNC端:网线收到信号 → 去掉MAC头 → 去掉IP头 → 去掉TCP头 → 应用层解析“读寄存器”请求 → 返回转速值
  • 然后CNC再把返回值按同样的流程封装回去,PC再解封装拿到数据。

整个过程,从发出请求到收到响应,通常在毫秒级别。但如果网络有延迟或者丢包,这个时间就会变长。我见过一些老机床,用轮询方式读参数,每秒只能读几十个点,实时性根本不够。

我的建议:刚开始学通信协议的同学,可以装一个Wireshark抓包软件。抓一段数控系统与上位机的通信数据,看看每一层的头部信息。你会直观地看到——哦,原来TCP头里真的有源端口和目的端口,IP头里真的有源地址和目的地址。比看书强一百倍。

好了,这一章的内容就到这里。通信协议的基础概念——协议的定义、OSI与TCP/IP模型、封装与解封装——是后面所有章节的基石。下一章我们会深入数控系统里最常用的现场总线协议,比如Modbus、CANopen、EtherCAT,看看它们是怎么在物理层和应用层之间“搭桥”的。


公众号:蓝海资料掘金营,微信deep3321