3. PIS核心协议概览
好,咱们进入正题。PIS系统说白了就是让乘客知道「车什么时候来、往哪开、下一站是哪」的那套系统。但要让显示屏、广播、车地通信这些设备协同工作,背后得有一套严谨的协议体系。今天我就带大家把PIS核心协议的骨架摸清楚。
3.1 协议分层模型
我个人习惯把PIS协议分成四层来看,这样思路最清晰。你想想看,从地面控制中心到车载终端,中间要经过多少环节?不分层的话,调试起来简直要命。
| 层级 | 名称 | 职责 | 典型协议 |
|---|---|---|---|
| L4 | 应用层 | 定义业务逻辑,如到站信息、广播触发 | PIS-APP, TIS-IP |
| L3 | 传输层 | 保证数据可靠到达,处理重传和排序 | PIS-TP, 自定义可靠UDP |
| L2 | 网络层 | 路由寻址,跨网段通信 | IP, PIS-NET |
| L1 | 链路层 | 物理介质访问,帧同步 | Ethernet, CAN, RS-485 |
这里要注意,L1和L2其实更多是借用通用网络协议。真正体现PIS特色的,是L3和L4。我在项目中遇到过有人把TCP直接拿来传PIS数据,结果在隧道里频繁断连——嗯,这就是没理解分层的重要性。
3.2 协议栈结构
协议栈长什么样?我画个简化的结构给你看。从上往下,数据一路封装,到了物理层再发出去。反过来,收到数据后一层层解封装。
+-------------------------------+
| 应用层 (PIS-APP) | ← 原始数据:到站信息、广播指令
+-------------------------------+
| 传输层 (PIS-TP) | ← 加上序列号、校验码
+-------------------------------+
| 网络层 (PIS-NET / IP) | ← 加上源/目的地址
+-------------------------------+
| 链路层 (Ethernet / CAN) | ← 加上帧头帧尾、CRC
+-------------------------------+
| 物理层 (电信号 / 光信号) |
+-------------------------------+
说白了,每一层只关心自己的事。应用层不管数据怎么传,链路层不管数据是什么内容。这种解耦设计,让PIS系统能灵活适配不同的硬件平台。我记得有一次在改造老旧线路时,只换了链路层驱动,上层协议完全没动——这就是分层的好处。
3.3 协议数据单元(PDU)定义
PDU,说白了就是每一层的数据包格式。咱们重点看应用层PDU,因为这是PIS协议的核心。
一个典型的PIS应用层PDU长这样:
+--------+--------+--------+--------+--------+--------+
| 起始符 | 版本号 | 消息类型 | 数据长度 | 消息体 | 校验和 |
| (2B) | (1B) | (2B) | (2B) | (N B) | (2B) |
+--------+--------+--------+--------+--------+--------+
字段说明:
- 起始符:固定为0xAA 0x55,用于帧同步。我曾经见过有人把起始符写反了,结果整个系统收不到数据——这种低级错误排查起来最费时间。
- 版本号:当前版本0x01。升级协议时改这个字段,新旧设备就能兼容。
- 消息类型:0x0001表示到站信息,0x0002表示广播指令,0x0003表示紧急信息。
- 数据长度:消息体的字节数,最大1024字节。
- 消息体:具体业务数据,格式由消息类型决定。
- 校验和:从起始符到消息体的CRC16校验。
3.4 协议交互流程
光有数据格式还不够,得知道数据怎么流。PIS系统的典型交互流程,我总结为「一问一答」加「主动推送」两种模式。
3.4.1 一问一答模式
地面控制中心向车载终端查询状态时,用这种模式。流程如下:
地面控制中心 车载终端
| |
|--- 查询请求 (MsgType=0x0010) -->|
| |
|<-- 状态响应 (MsgType=0x0011) ---|
| |
这种模式简单可靠,但效率不高。你想想看,如果每站都要查询一次,列车高速运行时根本来不及。所以实际系统中,更多用的是第二种模式。
3.4.2 主动推送模式
车载终端主动上报信息,地面中心只管接收。比如列车到站信息:
车载终端 地面控制中心
| |
|--- 到站通知 (MsgType=0x0020) -->|
| |
|--- 下一站预告 (MsgType=0x0021) ->|
| |
|--- 离站通知 (MsgType=0x0022) -->|
| |
这种模式的好处是实时性强。但坏处是——如果网络丢包,地面中心就漏掉了信息。所以实际部署时,我建议关键信息(比如紧急广播)用一问一答模式,普通信息(比如到站通知)用主动推送模式。
好了,协议概览就讲到这里。下一章咱们深入消息类型定义,看看每个PDU里到底装了什么数据。到时候我会拿一个真实项目的报文出来,手把手教你怎么解析。