简介:这份轨道实验资源聚焦轨道交通信号系统中的车载系统与控制模式,适合学习目标检测及轨道交通信号控制的学生与从业者。实验报告基于CBTC环境,完整记录了从区域控制器软件开启、车载软件初始化到RM/CM/AM模式转换、运行计划接收与列车运行模拟的全过程;同时结合OpenCV与Anaconda环境,展示了目标检测在车载界面识别、列车位置与速度追踪等场景的应用思路。资源采用单个doc文档形式,压缩包约27.52MB,目前已有135人学习。报告内包含实验目的、所需器材、分步操作说明、关键界面截图,并针对列车运行路线设计、任务下发、驾驶台操作、提前发车、跳停设置等环节展开了实验分析与经验总结。读者既能对照步骤进行仿真演练,也能从中提取车载控制模式转换条件、ATS运行曲线含义以及目标检测在轨道场景中的落地方法,为后续轨道交通信号系统相关项目或课程设计提供直接参考。
1. 轨道交通里的“目标检测”:先搞清楚它检测的不是图像
很多人第一次听到轨道交通实验中的“目标检测”,下意识以为是拿摄像头识别列车、信号灯或者障碍物,类似YOLO那一套。其实在CBTC(基于通信的列车控制系统)语境下,目标检测指的是信号系统对列车位置、控制模式、运行曲线和信号状态的全方位感知——系统必须“知道列车在哪、在什么模式下、前方有没有授权”。这份实验资源就是一套完整的车载系统与控制模式仿真实验,从加车、ATC初始化到RM/CM/AM模式转换,再到ATS下发计划、开关车门、提前发车和跳停处理,全部都有操作记录和实验分析。适合轨道交通信号专业的学生、刚入行的信号系统从业者,以及需要写这类实验报告又没有头绪的人。
2. 实验环境与初始化:CBTCZC注册、加车位置与ATC启动顺序
2.1 CBTC系统里“目标检测”的真实含义
先把概念对齐。CBTC系统里的列车定位不是靠摄像头,而是靠车地通信、轨道电路、应答器和车载测速测距设备共同完成的。列车实时把位置、速度、运行方向通过无线通信上报给区域控制器(ZC),ZC结合进路状态、前车位置和其他列车信息,给每一列车计算移动授权(MA),告诉这列车“你能跑到哪、以什么速度跑”。
车载系统在收到MA之后,再结合ATS下发的运行计划,生成列车实际运行的曲线。所以你在车载界面上看到的“目标检测”,是系统对列车位置(红色线段)的实时标定、对运行曲线的计算、对控制模式状态的判断。这份实验报告里,车载软件界面右上角的运行曲线、右下角的重要信息显示,就是这个“检测”结果的可视化。
实验用的两个核心软件是区域控制器软件(CBTCZC)和车载软件。CBTCZC就是ZC的仿真实现,负责注册列车、计算MA、管理信号状态;车载软件则运行在模拟驾驶台上,接收ZC的信息并执行驾驶指令。两者通过仿真网络通信,构成一个最小可用的CBTC闭环。
2.2 实验拓扑:三台机器的分工
做这个实验最少需要三台计算机协同工作:
| 设备 | 软件 | 职责 |
|---|---|---|
| 计算机1 | 区域控制器CBTCZC软件 | 注册列车、计算移动授权、管理信号状态 |
| 计算机2 | 车载软件(驾驶台) | 显示车载界面、执行驾驶操作、展示运行曲线 |
| 计算机3 | ATS系统 | 下发运行计划、设置发车任务、管理运营调度 |
实验报告里写“每台列车的操作至少需要3台计算机设备”,实际上就是这套拓扑。先打开ZC软件,再打开车载软件,然后加车到列车初始位置,车载软件会向ZC发起注册请求,ZC侧提示“注册成功”,这辆车才正式进入CBTC管辖区段。
我操作的时候习惯先把两台软件的窗口都最大化,车载软件界面分四个区域——左上是车载显示界面,左下是方向选择、牵引制动选择和目标速度显示,右上为运行曲线,右下为运行过程中的重要信息。每一步操作之后先看右下角的信息栏有没有状态刷新,不要只盯曲线变化。
2.3 初始化关键步骤与顺序逻辑
加车完成后,核心操作是ATC初始化。在车载软件的“ATC初始化”区域里,有两个按钮:ATC钥匙接通和ATC初始化。顺序必须是先钥匙接通,再初始化。
# 按操作顺序记录的状态流转(伪代码) 1. 加车到列车初始位置 2. 点击 "ATC钥匙接通" # 模拟列车钥匙档位打到ATC位 3. 点击 "ATC初始化" # 车载开始与ZC通信、加载配置 4. 观察ZC界面提示 "注册成功" 5. 车载界面显示当前控制模式这个顺序为什么不能反?因为“ATC钥匙接通”对应的是列车驾驶台钥匙从手动位打到ATC位,相当于激活了ATC设备的上电条件;“ATC初始化”是在设备上电后才能执行的软件初始化流程。如果先点初始化,软件会发现ATC设备未上电,直接报错或卡死。实验总结里提到“若一步操作失误可能导致所有计算机重启,特别是在ATC初始化和ATC钥匙接通时顺序不能搞错”,就是这个原因。
另外要注意上下行方向。在点击“列车初始位置”选择存车线位置时,界面约定向右为上行,反之为下行。选错了方向,列车注册的位置和后续ATS计划匹配不上,运行曲线会显示异常。常见做法是先确认本组要跑的车次方向,再去选位置。
2.4 车辆段出发与存车线出发的差异
实验里区分了两种出车场景:
- 从车辆段或停车场出发:等车辆段/停车场的信号开放后,以RM模式把车运行到转换轨。转换轨是车辆段与正线的接口区段,车到了转换轨才算“接入正线”。
- 从存车线出发:直接点击“列车初始位置”选择存车线位置,再顺序做ATC钥匙接通和ATC初始化,把车载放到RM模式。
存车线方式跳过了车辆段到转换轨这一段,直接把车放在正线附近,适合快速开展模式转换实验。而车辆段出发方式更接近真实运营场景,能让学生同时看到RM模式在段内运行的限制条件——信号不开放,RM模式也不能动车。
3. 三种车载控制模式:RM、CM、AM的转换条件与参数操作
3.1 RM模式:限速下的人工驾驶
RM(Restricted Manual,限制人工驾驶)是人控优先、系统限速的一种模式。在RM模式下,列车由司机人工控制牵引和制动,但车载系统会限制最高运行速度——通常不超过25km/h,具体限速值由线路和ZC参数决定。这也是为什么实验里从车辆段到转换轨这段路要开RM:段内信号条件简单,不需要高速度,RM模式足够安全。
RM模式的操作套路看起来有点绕:先“参数选择RM点亮”,再“列车方向按钮中向前”,最后“RM点熄”。
# 以状态机形式描述RM模式操作序列 actions = [ ("RM", "点亮"), # 请求进入RM模式,车载接收指令 ("方向", "向前"), # 设定列车运行方向 ("RM", "点熄"), # 确认RM模式生效,开始牵引 ]我一开始不理解为什么要“点亮再点熄”,后来实际操作才明白:点亮是向车载发送模式请求,方向按钮是给列车牵引指令,点熄是确认这个模式已经生效。这个仿真软件里的按钮不是简单的开关,更像“请求-确认-执行”三段式。如果你点了RM点亮但忘了按方向,列车是不会动的;如果把方向设置好了但RM没有点熄,列车会停在待命状态,速度显示始终为0。
3.2 CM模式:转入CBTC人工驾驶
RM跑起来之后,下一步是切到CM模式。CM(CBTC Manual,CBTC人工驾驶)模式下,列车还是由司机人工操作,但移动授权和超速防护全部由ZC和车载ATP接管。这时候列车的安全完全靠系统来保障,司机只负责驾驶,不需要像RM那样处处盯着速度限制。
实验里的操作很简单:点击“CM可用”,车载就转入CM模式。但这里有一个前提条件没有在界面上明说——列车必须已经被ZC注册成功、且ZC给出了有效的移动授权,CM才能转得过去。如果ZC侧显示注册失败,或者列车当前位置不在ZC管辖区段内,你点CM可用会没反应。
所以我的习惯是:在点CM之前,先切到ZC界面看一眼注册状态;如果是多车实验,还要确认本车的车号跟ZC里注册的车号一致。
3.3 AM模式:ATO自动运行与发车时序
AM(Automatic Mode)是ATO(列车自动运行)模式,列车在ATC系统的控制下自动运行,司机不参与牵引和制动操作,只负责监控。从CM切AM,操作是:先点击“ATO点亮”,后点击“ATO发车点熄”。
需要注意,AM模式不是切过去就立刻跑的。ATS必须已经给这列车下发了运行计划,车载接收到计划后在界面右上角显示出运行曲线,这时AM模式才真正具备自动运行条件。实验里特别提到,运行曲线有两条:一条是绿色的,依据计划生成的站间曲线;一条是黄色的,依据进路开放情况生成的运行曲线。两者同时显示,黄色曲线就是系统在告诉司机:计划有了,但前面的进路还没完全给你,你要按黄色曲线的约束跑。
跑AM模式的时候,我建议先看黄色曲线的形态,如果黄色曲线和绿色曲线偏差很大,大概率是进路没有排通,先别急着发车,去检查信号和进路状态。
3.4 模式转换的整体流程串讲
把三种模式放到一条完整链路里看:
RM(限速人工)→ CM(CBTC防护人工)→ AM(ATO自动运行)每一步都对应一个先决条件:
| 模式转换 | 先决条件 | 操作要点 |
|---|---|---|
| 待机→RM | 车已注册、信号已开放 | RM点亮→方向向前→RM点熄 |
| RM→CM | ZC移动授权有效 | 点击CM可用 |
| CM→AM | ATS计划已下发、运行曲线已显示 | ATO点亮→ATO发车点熄 |
我在实验里见过几次“CM转AM点不动”的情况,最后发现都是因为ATS计划还没下发到车载。车载没有运行曲线,ATO就没有目标速度,自然进不了AM。先等在车上把计划刷出来,再去做模式转换,顺序错一步就是要重启的命。
4. 运行计划与驾驶操作:从发车、开关车门到跳停
4.1 运行线设计与任务下发
模式转换做完,车还不能跑,必须先设计运行线。实验里设计了一条从文澜站到沙河站的运行路线,并把当天运行路线上传到ATS。“先对列车进行线路设置,要先设置成功才会有列车在存车线显示,要在列车计划表里查看是否设置成功。”
这一步是容易忽略的。你加了车、初始化了,但存车线上没看到车,第一反应可能是车没加上。其实更可能是运行线没有设置成功,列车不认为自己被排进了运营计划。去列车计划表里确认线路是否存在,而不是反复加车。
运行图上的细节值得注意:可以在运行图上拖拉路线两点的横坐标距离,这个距离对应的是两站之间预计的运行时间。运行图的横轴是时间轴,纵轴是车站/线路位置,所以两个点之间的横向距离拉得越长,列车跑完这段的计划时间就越久。实验里这组把两站时间点拉得过长,结果车提前到站了,AM发车没反应,最后点了提前发车才解决——这个坑下面细说。
运行线设置完成后,还要“运行任务,等待发车”。ATS侧下发发车任务,车载才会进入待发车状态。实验报告中特意写了一句“若没有下发任务直接操作驾驶,列车是没有运行速度的”。我专门试过一次不点任务直接推驾驶杆,列车速度显示纹丝不动。这个设计其实合理——CBTC系统里,列车没有运营计划授权就不允许移动,是安全逻辑的一部分。
4.2 驾驶台操作与行车
在AM模式下,驾驶台操作由ATO执行,司机的推杆动作更多是逻辑上的确认。实验里以3号车为例,操作了驾驶台驶出列车,驾驶台显示列车速度和运行状态。
到站后要人工开关车门:点击“打开左边车门”或者“打开右边车门”,然后再点击“关闭左边车门”或者“关闭右边车门”。车门关闭后,车载运行曲线会发生变化,系统重新计算下一站的运行计划,然后继续以AM模式操作列车运行。
这里有一个时序要点:必须先确认车门完全关闭,再操作发车。如果车门状态没有刷新到车载系统,AM模式不会给出牵引指令,列车的速度曲线会直接停在零位。我在实验中遇到过关右边车门后曲线没有变化的情况,检查发现是左边车门虽然显示关闭但状态没有同步,重新点击后才正常。
4.3 提前发车与跳停处理
实验里遇到了一次真实的运营场景:因为设计运行线时两站之间的预计时间设置过长,列车提前到站了,但时刻表上还没到发车时间点。这时候操作AM模式发车没有响应——列车在等时刻表授权,司机不能强行发车。
解决办法是点击列车处的“提前发车”按钮,相当于调度员授权这列车提前离开车站,然后再操作AM模式,列车重新驶出。
另一个场景是跳停。为了观察列车在高速段的运行表现,在列车处设置了跳停,让列车跳过下一站不停车。跳停设置后,列车运行速度很快达到了80km/h。从原理上说,跳停本质上是修改了ATS计划——列车不再需要进站减速停车,所以目标速度曲线不再包含站前减速段。如果你的实验目标是看列车高速运行下的牵引特性,跳停是很好用的手段。
5. 常见问题与避坑:顺序出错就要整体重启
这一章是我根据实验过程和市场里同类仿真系统的经验整理的坑,每一条都是实际操作中验证过的,按“现象→原因→解决”的格式记录。
5.1 运行线设置后存车线看不到列车
现象:加车和ATC初始化都完成了,但存车线上没有显示本组列车。
原因:运行线没有设置成功,或者设置后没有上传到ATS。列车没有被纳入运营计划,系统不认为这列车具备出库条件,所以不显示。
解决:先到列车计划表里查看运行线是否存在,确认线路上传成功后,再回到车载界面操作。如果计划表里确实没有,重新设计运行线并上传,不要反复点加车。
5.2 驾驶台操作了但列车速度始终为零
现象:所有驾驶操作都做了,RM、CM模式都切过,列车就是不走,速度显示为零。
原因:ATS没有下发发车任务,列车没有收到运营授权。CBTC逻辑下,没有计划授权的列车不允许移动。
解决:在ATS侧下发发车任务,等待车载界面出现运行曲线后再操作驾驶。每次实验前先确认本列车有计划、有任务、有曲线,三样齐了再动车。
5.3 ATC钥匙接通和初始化顺序反了导致所有计算机重启
现象:先点了ATC初始化,再点ATC钥匙接通,ZC界面没有注册成功,随后整套仿真系统卡死,所有计算机需要重启。
原因:初始化请求在ATC设备未上电的情况下发出,软件状态机直接异常退出。
解决:强制固定顺序——加车完成后,先点“ATC钥匙接通”,再点“ATC初始化”。我从那以后每次都把这两个按钮的顺序写在纸上贴在屏幕边上,这个顺序是整套实验里最不能翻车的环节。
5.4 提前到站后AM模式无响应
现象:列车到达车站后,开关车门完成,重新操作AM模式,列车没有反应,运行曲线不变。
原因:列车早于时刻表规定的时间点到达,ATS没有下达发车指令,AM模式下ATO不会执行未授权动作。
解决:点击“提前发车”按钮,授权列车提前出发,然后再操作AM模式。注意做这个操作前先确认车门状态是关闭的,否则仍然无法发车。
5.5 RM模式下按了方向键但列车不动
现象:RM模式参数已点亮,方向也选择了向前,列车还是静止。
原因:RM模式下的“点亮”只是模式请求,方向按钮设定了运行方向,但最后一个“RM点熄”动作是确认执行。三个动作缺一不可,很多人漏了最后一步。
解决:严格按照“RM点亮→方向向前→RM点熄”的顺序操作,每做一步看一次车载界面的状态栏,确认模式状态刷新后再进行下一步。
6. 把实验沉淀为自检表:模式转换检查与视觉检测扩展
6.1 模式转换操作自检表
这套实验做完,我手里最值钱的东西不是实验报告本身,而是一张手写的模式转换自检表。每次做实验前都按这个顺序过一遍,基本不会出问题:
| 阶段 | 操作项 | 确认状态 |
|---|---|---|
| 出库前 | 运行线设置并上传 | 列车计划表可见 |
| 出库前 | 加车到初始位置 | 车载界面显示车位置 |
| 加车后 | ATC钥匙接通 | ZC界面待命 |
| 加车后 | ATC初始化 | ZC提示注册成功 |
| 模式1 | RM点亮→方向向前→RM点熄 | 列车开始牵引 |
| 模式2 | 点击CM可用 | 车载显示CM模式 |
| 模式3 | ATS下发任务后,ATO点亮→ATO发车点熄 | 运行曲线出现、列车自动运行 |
这个表不只在实验里用。后来我做其他仿真项目,也习惯先把操作序列拆成“动作-确认状态”两列,写清楚每个操作之后系统应该显示什么,再动手。这比反复试错要省时间得多。
6.2 用Anaconda+OpenCV把视觉目标检测接进来
实验本身是信号系统仿真,但如果你想在这个基础上做视觉方向的目标检测扩展——比如用摄像头识别驾驶台信号灯颜色、检测车门状态指示灯——常规做法是用Anaconda配置Python环境,通过OpenCV读取仿真画面做颜色检测。环境配置的思路一般是:
# 创建独立环境并安装OpenCV conda create -n signal_lab python=3.8 conda activate signal_lab pip install opencv-python numpy针对信号灯颜色识别,可以用HSV色彩空间做阈值提取:
import cv2 import numpy as np frame = cv2.imread("driving_console.png") hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 绿色信号灯范围 lower_green = np.array([35, 100, 100]) upper_green = np.array([85, 255, 255]) mask_green = cv2.inRange(hsv, lower_green, upper_green) # 计算绿色像素占比 ratio = cv2.countNonZero(mask_green) / (mask_green.shape[0] * mask_green.shape[1]) if ratio > 0.01: print("信号灯状态:允许发车") else: print("信号灯状态:未开放")HSV阈值的设定要看你实际截图的信号灯颜色,荧光屏的绿色和LED的绿色色相范围不完全一样,一般先截一帧保存下来,用取色工具确认H值再写进代码。
还记得第一次做这套实验的时候,我在ATC初始化上栽了跟头,两台计算机直接重启,被同组人念叨了一整节课。从那以后,每一次动手前我都强制自己先走一遍自检表,确认运行线、任务、模式三样都齐了才碰驾驶台。信号系统这种东西,操作顺序就是安全逻辑本身,跳一步、反一步,系统就会用最难看的方式提醒你。希望这份实验拆解和避坑记录能帮你少走几步冤枉路。
本文还有配套的精品资源,点击获取