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应立即触发制动,而不是等司机反应。这正是人工驾驶模式下最容易被忽视的验证点——司机可能"看着前方"却没注意限速台阶。

ATP监督人工驾驶:分段限速包络与超速触发验证 位置 / m 速度 km/h 0 20 40 60 80 限速 80 限速 60 限速 40 限速 60 x=1200 x=2400 x=3200 ① 超速触发常用制动 ② 进入40限速台阶即触发 超调 ≤2 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必须兜底。

若仿真中最大超调量超过2 km/h,说明常用制动触发偏移设置过大或制动减速度不足。可先减小SERVICE_OFFSET,再检查A_SERVICE是否与车辆实际制动性能匹配。注意:偏移量过小会导致频繁触发,影响运营效率,需在安全与效率间权衡。

结果判读与常见问题

现象可能原因处理方向
台阶处未触发制动限速表未及时更新,或ATP未将新限速纳入取小核对限速表边界与ATP允许速度计算逻辑
超调量偏大常用制动偏移过大、制动减速度不足调整偏移参数或核实车辆制动性能
反复触发—解除抖动解除余量过小,速度在阈值附近振荡增大解除余量(本例0.5 km/h),加迟滞
紧急制动误触发紧急偏移设置过小或速度测量噪声检查测速误差与滤波,复核阈值

验证完成后,应把触发位置、触发速度、限速值、超调量四项记录进测试记录表,作为该线路ATPM模式超速防护功能的验收依据。只有三条判据全部通过,才能确认人工驾驶时列车速度被有效限制在安全包络内。