3. ATP监督人工驾驶模式的超速防护验证
验证对象与判据
ATP监督人工驾驶模式(通常记为ATPM或SM)下,司机负责牵引与制动操作,ATP只做监督:持续比较列车实际速度与当前最严格限速(线路静态限速、临时限速、进路/道岔限速、停车点防护、MA终点等取最小值),一旦触及超速阈值即输出制动。验证的核心不是"车能不能开",而是超速防护曲线是否在正确的位置触发、触发后是否把速度压回安全包络内。
本例采用一个可复现的仿真验证方案:以分段限速的线路数据构造"最严格限速包络",用列车运动学模型模拟司机持续牵引(最不利操作)下的速度上升,观察ATP在报警阈值与常用制动/紧急制动阈值处的动作,并检查制动介入后速度是否回落到限速以下。判据有三条:
- 报警点出现在限速值处(允许±0.5 km/h测量误差),常用制动触发点不高于限速+制动干预余量;
- 触发制动后,列车速度峰值不超过限速+超调量上限(本例设为2 km/h);
- 制动解除后速度稳定在限速以下,且不出现反复触发—解除的抖动。
超速防护的触发逻辑
ATP的监督量是"允许速度",它由若干约束逐段取小得到。工程上常把监督曲线抽象为三级:报警(接近限速)、常用制动(轻微超速)、紧急制动(明显超速或越过停车点)。三级阈值相对限速的偏移量由信号系统参数决定,本例取报警偏移0 km/h、常用制动偏移+3 km/h、紧急制动偏移+5 km/h作为教学示例参数,实际值须以线路ATP参数表为准。
关键点在于:限速包络是分段阶跃的,列车进入更低限速区段时,允许速度会瞬间下降,此时若列车速度高于新限速,ATP应立即触发制动,而不是等司机反应。这正是人工驾驶模式下最容易被忽视的验证点——司机可能"看着前方"却没注意限速台阶。
仿真验证实现
下面用一段自洽的Python脚本完成验证。它把线路限速表、ATP三级阈值、列车运动学模型串起来,模拟司机"一直拉最大牵引"的最不利操作,输出每次制动触发的位置、速度与超调量,并按前述三条判据给出通过/不通过结论。脚本不依赖任何外部库,可直接运行。
import math
# ---------- 1. 线路限速表(教学示例参数) ----------
# (起点m, 终点m, 限速km/h)
speed_profile = [
(0, 1200, 80),
(1200, 2400, 60),
(2400, 3200, 40),
(3200, 5000, 60),
]
# ---------- 2. ATP监督参数(教学示例,实际以线路参数表为准) ----------
ALARM_OFFSET = 0.0 # 报警阈值相对限速偏移 km/h
SERVICE_OFFSET = 3.0 # 常用制动触发偏移 km/h
EMERG_OFFSET = 5.0 # 紧急制动触发偏移 km/h
OVERSHOOT_MAX = 2.0 # 允许超调量上限 km/h
# ---------- 3. 列车运动学模型(简化) ----------
DT = 0.1 # 仿真步长 s
A_TRACTION = 0.8 # 最大牵引加速度 m/s^2
A_SERVICE = -0.9 # 常用制动减速度 m/s^2
A_EMERG = -1.2 # 紧急制动减速度 m/s^2
def limit_at(pos):
for s, e, v in speed_profile:
if s <= pos < e:
return v
return speed_profile[-1][2]
def run():
pos, v = 0.0, 0.0 # m, m/s
braking = None # None / 'service' / 'emerg'
events = []
peak_over = 0.0
t = 0.0
while pos < 5000 and t < 600:
v_kmh = v * 3.6
lim = limit_at(pos)
# 监督判定:取当前最严格限速
if braking is None:
if v_kmh >= lim + EMERG_OFFSET:
braking = 'emerg'
events.append((pos, v_kmh, lim, '紧急制动'))
elif v_kmh >= lim + SERVICE_OFFSET:
braking = 'service'
events.append((pos, v_kmh, lim, '常用制动'))
else:
# 制动解除条件:速度回落到限速以下并留0.5km/h余量
if v_kmh <= lim - 0.5:
braking = None
# 超调统计(仅在制动期间)
if braking is not None:
peak_over = max(peak_over, v_kmh - lim)
# 加速度选择:司机持续最大牵引,ATP制动优先
if braking == 'emerg':
a = A_EMERG
elif braking == 'service':
a = A_SERVICE
else:
a = A_TRACTION
v = max(0.0, v + a * DT)
pos += v * DT
t += DT
return events, peak_over
events, peak_over = run()
print("=== ATP超速防护触发记录 ===")
for pos, v, lim, kind in events:
print(f"位置 {pos:7.1f} m | 速度 {v:5.1f} km/h | 限速 {lim:3d} km/h | {kind}")
print(f"\n最大超调量: {peak_over:.2f} km/h (上限 {OVERSHOOT_MAX} km/h)")
# ---------- 4. 判据检查 ----------
ok_trigger = all(v <= lim + EMERG_OFFSET + 0.5 for _, v, lim, _ in events)
ok_overshoot = peak_over <= OVERSHOOT_MAX
print("\n=== 验证结论 ===")
print(f"[{'通过' if ok_trigger else '不通过'}] 触发点不高于紧急制动阈值")
print(f"[{'通过' if ok_overshoot else '不通过'}] 超调量在允许范围内")
运行后预期会看到两类触发:一是在80 km/h区段末端速度升至约83 km/h时触发常用制动;二是在进入40 km/h限速台阶(x=2400 m)瞬间,由于允许速度从60骤降到40,若列车当时速度仍高于43 km/h,会立即触发制动。这正是人工驾驶模式下"限速台阶"验证的关键——司机未必及时减速,ATP必须兜底。
结果判读与常见问题
| 现象 | 可能原因 | 处理方向 |
|---|---|---|
| 台阶处未触发制动 | 限速表未及时更新,或ATP未将新限速纳入取小 | 核对限速表边界与ATP允许速度计算逻辑 |
| 超调量偏大 | 常用制动偏移过大、制动减速度不足 | 调整偏移参数或核实车辆制动性能 |
| 反复触发—解除抖动 | 解除余量过小,速度在阈值附近振荡 | 增大解除余量(本例0.5 km/h),加迟滞 |
| 紧急制动误触发 | 紧急偏移设置过小或速度测量噪声 | 检查测速误差与滤波,复核阈值 |
验证完成后,应把触发位置、触发速度、限速值、超调量四项记录进测试记录表,作为该线路ATPM模式超速防护功能的验收依据。只有三条判据全部通过,才能确认人工驾驶时列车速度被有效限制在安全包络内。