2. 系统架构:PIS系统与列车控制系统的分层架构与数据流

好,咱们直接切入正题。这一章,我重点聊聊PIS系统和列车控制系统之间,到底是怎么“搭”在一起的。

很多人一上来就盯着接口协议看,其实这是误区。我个人习惯,先看架构。架构对了,接口定义就是水到渠成的事。你想想看,如果两层楼之间的楼梯位置都没定好,你光研究扶手用什么材料,那不是白费劲吗?

2.1 分层架构:谁在上,谁在下?

在轨道交通信号系统里,列车控制系统(ATC)是绝对的核心安全层。PIS系统呢?它是服务于乘客的信息层。这两者之间,存在一个清晰的“上下级”关系。

我把它总结为三层模型:

  • 底层:列车控制层(ATC层) —— 负责安全、速度、车门、定位。这是“大脑”和“神经”。
  • 中间层:数据交换层(骨干网/网关) —— 负责协议转换、数据隔离、安全过滤。这是“桥梁”。
  • 上层:乘客信息层(PIS层) —— 负责广播、显示、对讲、视频监控。这是“嘴巴”和“眼睛”。

这里有个关键点:PIS系统绝对不能直接控制列车。它只能“请求”或“接收”信息。我曾经在一个改造项目中见过,有人试图让PIS直接触发紧急制动,结果被安全评审直接打回。嗯,这是红线,碰不得。

核心原则: PIS是ATC的“数据消费者”,而非“数据生产者”。所有涉及安全的数据流向,必须是单向的,或者经过安全编码的。

2.2 数据流:信息是怎么跑的?

搞清楚了谁在上谁在下,咱们再看数据怎么流。说白了,就两条路:

  1. 下行数据流(ATC → PIS):这是主要流向。ATC告诉PIS:“列车现在到哪了”、“下一站是XX”、“当前速度是多少”、“车门要开了”。
  2. 上行数据流(PIS → ATC):这是受限流向。PIS告诉ATC:“紧急对讲按钮被按下了”、“司机请求开门”、“乘客报警”。

我建议你在设计接口时,把下行数据当成“常态”,上行数据当成“异常”。这样你的逻辑会清晰很多。

2.3 接口位置:数据在哪交接?

数据不是在任意地方都能交换的。在工程实践中,接口位置通常固定在两个点:

接口位置 说明 典型协议
车辆级接口 在每节车厢或每列车内部,PIS控制器与ATC车载设备(VOBC)之间。 MVB、CAN、以太网(TRDP)
轨旁级接口 在控制中心或车站,PIS服务器与ATS(自动列车监控)系统之间。 TCP/IP、UDP、MQTT

这里有个避坑指南:我曾经在一个项目里,把车辆级接口和轨旁级接口混为一谈,结果导致列车在隧道里收不到PIS的实时位置更新。为什么?因为轨旁数据有延迟,而车辆数据是实时的。后来我们不得不增加一个本地缓存机制才解决。

我的经验: 如果你做的是地铁项目,优先保证车辆级接口的实时性。如果是市域铁路或干线铁路,轨旁级接口的可靠性更重要。场景不同,侧重点完全不同。

2.4 典型数据流示例(以到站预报为例)

光说理论太干,咱们看个实际例子。假设列车要进站了,PIS需要显示“下一站:人民广场”。

数据流是这样的:

  1. ATC车载设备 通过信标或测速,计算出列车位置。
  2. ATC通过车辆总线(如MVB),发送一个数据包给PIS控制器。数据包里包含:当前站区ID、下一站ID、预计到达时间。
  3. PIS控制器 收到后,解析数据包,查表找到“下一站ID”对应的中文名和英文名。
  4. PIS控制器将文本和语音指令,分发给车厢内的LCD屏和广播模块。
  5. 乘客看到“下一站:人民广场”,听到“The next station is People's Square”。

你看,整个过程里,PIS没有参与任何定位计算,它只是忠实地执行了ATC的指令。这就是分层架构的好处——各司其职。

2.5 数据流中的“坑”

最后,我分享几个实际项目中踩过的坑:

  • 数据延迟: 我曾经遇到PIS显示的车门状态比实际慢了2秒。排查发现是ATC发送的数据包在网关里排队了。解决办法是给PIS相关的数据包设置最高优先级。
  • 数据丢包: 在无线环境下,PIS偶尔收不到ATC的广播。后来我们增加了“心跳包”和“重传机制”。
  • 数据格式不统一: 不同厂家的ATC,发送的“站区ID”编码方式不同。有的用整数,有的用字符串。PIS这边必须做一个适配层。

注意: 千万不要在PIS系统里写死ATC的数据格式。一定要做成可配置的。否则换一个车型,你的PIS就得重新开发。我见过太多这样的教训了。

好了,这一章就到这里。下一章,咱们聊聊具体的接口协议——MVB和以太网,到底该怎么选。