第1章:通信协议基础——OSI七层模型、TCP/IP协议栈、串口通信(RS485/RS232)基础
各位同学好,我是老张。在光伏储能这个行当摸爬滚打了十几年,今天咱们来聊聊通信协议的基础。说实话,很多刚入行的工程师一上来就盯着Modbus、IEC 104这些应用层协议,结果底层出了bug抓耳挠腮。我个人习惯是,先把地基打牢,再盖楼。
这一章,咱们就啃下三块硬骨头:OSI七层模型、TCP/IP协议栈、串口通信。这三样东西,是理解所有通信协议的基石。
核心观点:通信协议的本质,就是双方约定好的「说话方式」。你想想看,两个人聊天,得用同一种语言,还得知道什么时候该谁说话,说完怎么确认对方听懂了。通信协议干的就是这个事。
1.1 OSI七层模型:通信界的「通用语言」
OSI七层模型,全称是开放系统互连参考模型。1984年由国际标准化组织提出。说实话,这个模型在实际工程中很少被完整实现,但它提供了一个绝佳的「思维框架」。我在项目中遇到过不少工程师,把TCP/IP和OSI搞混,调试时走了很多弯路。
七层模型从下到上分别是:
| 层数 | 名称 | 核心功能 | 常见协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 为用户提供网络服务接口 | HTTP、FTP、Modbus TCP |
| 6 | 表示层 | 数据格式转换、加密、压缩 | SSL/TLS、JPEG、ASCII |
| 5 | 会话层 | 建立、管理、终止会话 | NetBIOS、RPC |
| 4 | 传输层 | 端到端可靠传输 | TCP、UDP |
| 3 | 网络层 | 路由选择、逻辑寻址 | IP、ICMP、路由器 |
| 2 | 数据链路层 | 帧封装、差错检测、MAC寻址 | 以太网、PPP、交换机 |
| 1 | 物理层 | 比特流传输、电气特性 | RS485、RS232、网线 |
为什么要分这么多层?说白了,就是解耦。每一层只关心自己的事,下层为上层提供服务。比如物理层只管把0和1变成电信号,它不关心这些比特是HTTP请求还是Modbus报文。这种分层思想,在嵌入式软件架构中同样适用。
我的经验:在光伏储能项目中,我习惯用「数据封装」来理解分层。比如一个逆变器的状态数据,从应用层一路往下,每经过一层就加一个「信封」(头部信息),到了物理层变成比特流发出去。接收方再一层层拆信封。这个过程,我称之为「俄罗斯套娃」。
1.2 TCP/IP协议栈:互联网的「事实标准」
OSI模型太理想化了,实际互联网用的是TCP/IP协议栈。它只有四层:应用层、传输层、网络层、网络接口层。说白了,就是把OSI的上三层合并成应用层,下两层合并成网络接口层。
在光伏储能系统中,TCP/IP协议栈最常见的应用场景有两个:
- 电站级通信:EMS(能量管理系统)与云端平台之间,走以太网,用TCP/IP协议栈。
- 设备级通信:逆变器、BMS、电表之间,走串口,用RS485/RS232。
这里有个关键点:TCP和UDP的区别。TCP是面向连接的,可靠但慢;UDP是无连接的,快但不可靠。我在做储能EMS时,对于遥测数据(电压、电流、温度)用UDP,因为丢一帧无所谓,下一帧马上来;对于遥控指令(跳闸、并网)必须用TCP,丢了会出大事。
避坑指南:我曾经在一个项目中,用UDP传输断路器分合闸指令,结果因为网络拥塞丢包,导致断路器没跳开。从那以后,凡是涉及安全控制的指令,我强制要求用TCP,并且加上应用层确认机制。
1.3 串口通信基础:RS485与RS232
串口通信,是嵌入式工程师的「基本功」。在光伏储能领域,90%以上的设备间通信都走串口。为什么?因为成本低、抗干扰强、距离远。
RS232和RS485,是两种最常用的串口标准。它们的区别,我整理了一张表:
| 特性 | RS232 | RS485 |
|---|---|---|
| 传输方式 | 单端(不平衡) | 差分(平衡) |
| 最大距离 | 约15米 | 约1200米 |
| 最大节点数 | 1对1 | 最多256个节点 |
| 信号电平 | ±3V ~ ±15V | ±1.5V ~ ±6V |
| 抗干扰能力 | 弱 | 强(共模抑制) |
| 典型应用 | 调试口、短距离设备 | 光伏逆变器、电表、BMS |
你想想看,一个光伏电站可能有几十台逆变器,分布在几百米范围内。用RS232?根本不行。RS485支持多点通信,距离远,抗干扰强,所以成了行业标准。
串口通信的参数配置,我建议你记住这五个:波特率、数据位、停止位、校验位、流控制。其中波特率最常用的是9600和115200。在光伏储能项目中,我习惯用9600,因为距离远时稳定性更好。
关键知识点:RS485是半双工通信,同一时刻只能一个设备发送数据。所以需要「主从模式」——主机轮询,从机应答。Modbus RTU协议就是基于这个机制。我曾经见过一个新手,把两个从机同时配置成「主动上报」,结果总线冲突,数据全乱了。
1.4 知识体系结构图
下面这张图,是我自己画的通信协议知识体系。你可以把它当作本章的「思维导图」:
1.5 实战中的避坑指南
讲完理论,咱们聊聊实战中容易踩的坑。我总结了三条:
- RS485的终端电阻:很多新手不知道,RS485总线两端需要各加一个120欧姆的终端电阻。不加的话,信号反射会导致通信不稳定。我曾经在一个项目中,因为少加了一个电阻,导致距离超过500米时数据频繁出错,排查了两天才找到原因。
- 波特率匹配:所有设备的波特率必须一致。这个看似简单,但我在现场遇到过好几次,因为某个设备默认是19200,其他设备是9600,结果通信失败。嗯,这里要注意,有些设备支持自动波特率检测,但我不建议依赖这个功能。
- 地线连接:RS485虽然用差分信号,但设备之间仍然需要共地。如果不共地,共模电压可能超出芯片承受范围,烧毁收发器。我建议在RS485总线上加一条地线,或者使用隔离型RS485模块。
一个小技巧:在调试串口通信时,我习惯先用示波器看波形。正常的RS485波形应该是清晰的差分信号,幅值在±1.5V以上。如果波形畸变或者幅值太小,基本可以断定是硬件问题,不用浪费时间查软件。
好了,这一章的内容就到这里。通信协议基础是后面所有章节的「前置技能」,尤其是OSI模型的分层思想和RS485的物理特性,在后续的Modbus、IEC 104、DNP3等协议中会反复用到。建议你把这张知识体系图保存下来,后面学新协议时,随时回来对照。