2. PIS系统简介:从一块屏幕说起

大家好,我是你们的嵌入式讲师。今天咱们聊聊PIS系统——乘客信息系统。

说实话,我第一次接触PIS系统是在一个地铁项目里。当时甲方扔过来一本几百页的规格书,我翻到第三页就懵了。后来慢慢啃下来,才发现这东西其实没那么玄乎。说白了,PIS就是让乘客知道「车到哪了」「下一站是哪」「别坐过站」的一套系统。

2.1 PIS系统的功能——它到底干些啥?

你想想看,你坐地铁时抬头看到的那些屏幕、听到的报站声,都是PIS在干活。它的核心功能其实就三块:

  • 信息显示:LCD/LED屏上滚动的到站信息、换乘指引、时间表。我记得有个项目,屏幕在强光下根本看不清,后来换了高亮屏才解决。
  • 语音播报:中英文报站、紧急广播。这里有个坑——语音和画面必须同步,否则乘客会以为车坏了。
  • 紧急通信:乘客按下紧急按钮后,司机室能直接通话。嗯,这个功能我调试时被吓过好几次,突然一声尖叫从喇叭里传出来。

重要提醒:PIS不是简单的「播放器」。它必须和列车控制系统(TCMS)实时交互。比如车门关了,屏幕才能显示下一站。顺序错了,轻则被投诉,重则出安全事故。

除了这些,现代PIS还多了些「花活」:

  • 动态路径图:LED灯带跟着列车走,亮到哪站一目了然
  • 拥挤度提示:通过车厢重量传感器估算,告诉你哪节车厢人少
  • 多媒体广告:嗯,这个大家都懂,但实时更新广告内容其实挺考验网络稳定性的

2.2 PIS系统的硬件架构——拆开看看里面

我习惯把PIS硬件分成三层来看。这样设计时思路清晰,出了问题也好定位。

层级 核心设备 我的经验
中央控制层 主控制器(CCU)、交换机、GPS/4G模块 CCU必须双冗余,我见过单机运行时死机,整列车没声音的惨状
车厢分布层 车厢控制器(VCU)、LCD屏、LED屏、扬声器 VCU和CCU之间用CAN或以太网,我个人偏爱以太网,调试方便
终端设备层 紧急对讲器、动态地图、乘客计数器 紧急对讲器的音频编解码芯片选型要慎重,回声消除做不好会被骂

这里有个关键点——实时性。你想想看,列车时速80公里,从「当前站」到「下一站」可能就30秒。如果屏幕切换慢了,乘客看到的信息就是错的。所以主控制器和车厢控制器之间,通信延迟必须控制在100ms以内。

我的小技巧:硬件设计时,给每个车厢控制器配一个独立的电源模块。我曾经遇到整列车因为一个车厢短路,导致所有屏幕黑屏的故障。从那以后,我坚持每节车厢独立供电。

2.3 PIS系统的软件架构——灵魂在哪里

硬件是骨架,软件才是灵魂。PIS的软件架构,我习惯画成四层:

  1. 驱动层:管屏幕、喇叭、按键这些硬件的底层驱动。说白了就是让硬件「动起来」。
  2. 操作系统层:这里就是咱们课程的主角——实时操作系统(RTOS)。为什么不用Linux?因为PIS要求确定性。Linux调度延迟可能几十毫秒,但RTOS可以控制在微秒级。
  3. 中间件层:负责通信协议、数据同步、日志管理。比如CCU和VCU之间的心跳包,丢了就得重连。
  4. 应用层:显示逻辑、语音合成、紧急处理。这部分最灵活,也最容易出bug。

我举个例子。显示逻辑里有个「到站触发」功能:

// 伪代码:到站触发显示更新
void onStationArrive(uint8_t stationID) {
    // 1. 锁定显示缓冲区,防止撕裂
    displayLock();
    
    // 2. 更新下一站信息
    updateNextStation(stationID + 1);
    
    // 3. 触发语音播报
    playAudio("下一站:" + getStationName(stationID + 1));
    
    // 4. 解锁缓冲区
    displayUnlock();
    
    // 5. 记录日志
    logEvent("到站", stationID);
}

你看,就这么几行代码,但实际项目中要考虑的事情多了去了:

  • 如果语音播报还没播完,下一站又到了怎么办?——需要任务优先级管理
  • 如果显示缓冲区被多个任务同时访问怎么办?——需要互斥锁
  • 如果日志写入太慢,阻塞了显示更新怎么办?——需要异步处理

避坑指南:我曾经在一个项目里,把语音播报和显示更新放在同一个任务里。结果语音播报因为网络延迟卡了2秒,显示也跟着卡了2秒。乘客投诉说「屏幕不动了」。后来我把它们拆成两个独立任务,用消息队列通信,问题就解决了。

说到RTOS,PIS系统里常用的有FreeRTOS、uC/OS-II、RT-Thread。我个人比较推荐RT-Thread,因为它对国产芯片支持好,而且组件丰富。但如果你做的是欧洲项目,可能FreeRTOS更常见。嗯,选型这事,看甲方爸爸的脸色。

最后说一句,PIS系统的软件架构设计,核心就四个字——可靠、实时。你设计的每一个任务、每一条消息队列、每一个信号量,都要问自己:如果这里出错了,乘客会怎么样?

好了,这一章就到这里。下一章咱们深入RTOS,看看任务调度到底是怎么让这些功能「各司其职」的。