第三章:系统总体架构设计

好,咱们进入正题。前面两章聊了PIS系统是什么,以及核心需求。这一章,咱们要真正动手画图了——系统总体架构设计。

说实话,架构设计这活儿,最怕的就是「纸上谈兵」。我见过太多方案,画得漂漂亮亮,一到现场就崩。为什么?因为没把硬件、软件、网络、数据流、分层这五件事揉在一起想。

这一章,我就把这五块掰开揉碎了讲。你跟着我的思路走一遍,基本就能搭出一个靠谱的PIS系统骨架。

3.1 硬件架构设计:选型与布局

硬件是PIS的「骨架」。骨架歪了,后面软件再牛也白搭。

我个人习惯,先画一张物理拓扑图。把设备摆上去,看看谁跟谁连,谁管谁。

核心硬件模块:

  • 中央控制器(CCU):整列车的大脑。一般放在司机室或设备柜里。我建议用工业级ARM Cortex-A系列处理器,比如i.MX8或RK3588。别用消费级芯片,车上振动大、温度高,消费级芯片撑不过三个月。
  • 客室控制器(VCU):每节车厢一个。负责本车厢的LCD屏、LED屏、广播、紧急对讲。我习惯用STM32MP1系列,双核A7+M4,既能跑Linux做应用,又能跑裸机做实时控制。
  • LCD显示屏:现在主流是21.5寸或24寸,1080P起步。嗯,这里要注意——屏的亮度必须≥1000cd/m²,否则阳光一照啥也看不见。我在项目里吃过这个亏,后来全换了高亮屏。
  • LED信息屏:车头、车侧、车内。车头屏要能显示线路号、终点站。车侧屏显示当前站和下一站。
  • 广播功放:每节车厢一个,驱动4-8个喇叭。功率建议60W-100W。
  • 紧急对讲装置:每节车厢2-4个。要带麦克风和摄像头。

硬件架构要点:

  • CCU和VCU之间用工业以太网(M12接口,防震防松)
  • VCU到LCD屏用LVDS或HDMI,距离别超过5米
  • 所有设备供电统一用DC 24V或DC 110V(看列车制式)
  • 别忘了加防反接、防浪涌电路——我曾经有一批板子因为没加TVS管,被雷击浪涌打坏了一半

3.2 软件架构设计:分层与模块

软件架构,说白了就是「谁负责什么,谁跟谁说话」。

我习惯把PIS软件分成四层。你想想看,这样分层之后,每一层只关心自己的事,改起来也方便。

层级名称职责技术栈
L4应用层UI显示、广播调度、紧急对讲逻辑Qt/QML、C++、Python
L3业务逻辑层到站判断、语音合成、信息同步C++、状态机
L2通信中间件层数据收发、协议转换、心跳检测DDS、MQTT、自定义TCP协议
L1硬件抽象层驱动LCD、LED、功放、GPIOC、Linux驱动、RTOS

为什么要这么分?我举个例子。有一次客户要求换一种LCD屏,接口从LVDS改成eDP。如果没分层,我得改UI代码、改业务逻辑、改驱动——全乱套。但有了硬件抽象层,我只需要改L1的驱动,上面三层完全不动。这就是分层的价值。

我的经验:通信中间件层一定要用DDS(数据分发服务)。为什么?因为PIS系统里数据种类太多——到站信息、故障告警、广播状态、视频流...DDS的发布/订阅模型天然适合这种多对多通信。我早期用MQTT,后来发现实时性不够,果断换了DDS。

3.3 网络架构设计:冗余与隔离

网络是PIS的「血管」。血管堵了,系统就瘫了。

列车环境有个特点:电磁干扰大、振动大、空间有限。所以网络设计要特别讲究。

网络拓扑:

  • 采用环形冗余网络。每节车厢一个工业交换机,首尾相连成环。万一某节车厢的交换机坏了,数据还能从另一条路走。我记得第一次做环网测试时,故意拔掉一节车厢的网线,数据延迟只增加了2ms——嗯,这效果让我放心了。
  • 控制网和乘客网要物理隔离。控制网走CCU到VCU的实时数据,乘客网走Wi-Fi和4G/5G。别混在一起,否则乘客刷视频可能把控制数据挤掉。
  • VLAN做逻辑隔离。如果物理条件不允许双网,至少用VLAN把控制流和媒体流分开。

避坑指南:我曾经在一个项目里,为了省成本,用了消费级交换机。结果列车过隧道时,交换机频繁重启。后来查原因——隧道里湿度大,消费级交换机没有防潮涂层。从那以后,我坚持用工业级交换机,至少IP40防护等级。

3.4 数据流设计:谁产生,谁消费

数据流设计,说白了就是搞清楚「数据从哪里来,到哪里去,经过谁的手」。

我习惯画一张数据流图。咱们以「到站信息显示」这个场景为例:

  1. 数据源:列车TCMS(列车控制管理系统)发出「下一站:人民广场」信号。格式通常是MVB或CAN总线数据。
  2. 数据接收:CCU通过MVB/CAN接口卡接收,解析成内部格式。
  3. 数据分发:CCU通过DDS发布到「到站信息Topic」。所有VCU订阅这个Topic。
  4. 数据消费:VCU收到后,做三件事:
    • 更新LCD屏上的站点地图(高亮当前站)
    • 更新LED屏显示文字
    • 触发语音合成模块,播报「下一站,人民广场」
  5. 数据反馈:VCU把执行结果(屏是否正常显示、喇叭是否正常播放)上报给CCU。

你看,这个流程里,数据是单向流动的,但又有反馈闭环。我建议所有关键数据都要有确认机制——CCU发出去的命令,VCU必须回ACK。如果3秒内没收到ACK,CCU要重发。我曾经遇到过VCU死机的情况,就是因为没有重发机制,结果整列车的信息都不更新了。

3.5 系统分层设计:从物理到应用

最后,咱们把前面四块整合起来,看看完整的系统分层。

我习惯用「五层模型」来描述PIS系统:

层级名称内容示例
L5应用交互层乘客看到的、听到的LCD界面、LED文字、广播语音
L4业务逻辑层数据处理、决策、调度到站判断、语音合成、故障诊断
L3通信网络层数据传输、协议转换DDS、TCP/IP、MVB/CAN网关
L2硬件控制层设备驱动、IO控制LCD驱动、LED驱动、功放控制
L1物理设备层实际硬件CCU、VCU、屏、喇叭、交换机

这个分层的好处是:每一层都可以独立升级、独立测试。比如,我想换一种语音合成算法,只需要改L4,L5的界面完全不用动。反过来,我想把LCD屏从21.5寸换成32寸,只需要改L2和L5,L3和L4不受影响。

核心原则:层与层之间通过标准接口通信。我建议用JSON或Protobuf作为数据格式。别用自定义二进制协议——虽然省带宽,但调试起来能把你逼疯。我早期就吃过这个亏,后来全部改成Protobuf,开发效率提升了一倍。

好了,这一章的内容就这些。硬件、软件、网络、数据流、分层——五件事,一个都不能少。你把这些想清楚了,PIS系统的骨架就搭起来了。下一章,咱们开始聊具体的硬件选型和电路设计。