2. 牵引力与电制动力的量纲统一与单位换算

为什么必须先统一量纲

城轨牵引试验的原始数据往往来自不同设备:牵引变电所录波装置可能以 kN 记录车钩力,电机控制器以 N 输出轮周牵引力,而部分老式测力计或制动台架以 kgf(千克力)标定。若直接把这些通道放进同一张曲线或同一个统计表,数值会相差 9.8 倍甚至 1000 倍,导致"牵引力峰值"这类结论完全失真。因此本案例的任务是:把混合单位的牵引/电制动通道统一到试验大纲规定的标准单位(本案例取 kN,电制动力取负号表示制动方向),并输出可追溯的换算审计表。

换算基准与符号约定

先固定三条约定,后续所有计算与判读都以此为准:

  • 标准单位:力通道统一为 kN,保留 3 位小数。
  • 换算系数:1 N = 0.001 kN;1 kgf = 9.80665 N = 0.00980665 kN(取标准重力加速度 9.80665 m/s²)。
  • 符号约定:牵引力为正,电制动力为负。若原始电制动通道以正值记录制动力大小,换算时须乘以 −1;若原始数据已带负号,则只做量纲换算,不重复取反。
符号重复取反是本环节最常见的错误:某通道原始值已是负的制动力,若再乘 −1 会变成"牵引",曲线方向整体翻转,且量级检查无法发现。审计表必须单独记录"是否取反"这一列。

换算审计表的结构

审计表按"通道一行"组织,核心字段包括:通道名、物理量、原始单位、原始量级抽样、换算系数、是否取反、换算后抽样值、量级校验结论。下表用一组教学示例数据演示(数值为假设示例,非实测):

通道物理量原始单位原始抽样值系数取反换算后(kN)量级校验
TC01车钩牵引力kN42.5001否42.500通过
TC02轮周牵引力N386000.001否38.600通过
TC03电制动力kgf21500.00980665是−21.084通过
TC04电制动力N−198000.001否−19.800通过
TC05辅助制动力kgf−3200.00980665否−3.138通过

量级校验的做法是:对每个通道取换算后绝对值的中位数,与同物理量参考通道(如 TC01)比较,若比值落在 0.5~2.0 之外则标记"待复核"。TC03 换算后 21.084 kN 与 TC04 的 19.800 kN 同量级,说明 kgf 系数使用正确;若误用 0.001,TC03 会变成 2.15 kN,比值约 0.11,立即被标记。

可执行的换算与审计脚本

下面给出一个自洽的 Python 实现,输入为通道配置表与原始抽样值,输出换算结果与审计表。所有系数、取反标志、校验阈值都在本例中定义,可直接运行。

import csv

# 单位换算到 kN 的系数
UNIT_TO_KN = {
    "kN": 1.0,
    "N": 0.001,
    "kgf": 9.80665e-3,
}

# 通道配置:通道名, 物理量, 原始单位, 是否取反, 原始抽样值
channels = [
    ("TC01", "车钩牵引力", "kN",  False,  42.500),
    ("TC02", "轮周牵引力", "N",   False,  38600.0),
    ("TC03", "电制动力",   "kgf", True,   2150.0),
    ("TC04", "电制动力",   "N",   False, -19800.0),
    ("TC05", "辅助制动力", "kgf", False, -320.0),
]

# 参考通道(车钩牵引力)用于量级校验
ref_value = None
rows = []

for name, qty, unit, invert, raw in channels:
    k = UNIT_TO_KN[unit]
    val = raw * k
    if invert:
        val = -val
    val = round(val, 3)
    rows.append([name, qty, unit, raw, k, "是" if invert else "否", val])
    if name == "TC01":
        ref_value = abs(val)

# 量级校验:同物理量参考比值 0.5~2.0
for r in rows:
    ratio = abs(r[6]) / ref_value if ref_value else 0
    r.append("通过" if 0.5 <= ratio <= 2.0 else "待复核")

# 输出审计表
header = ["通道", "物理量", "原始单位", "原始值", "系数", "取反", "换算后(kN)", "量级校验"]
with open("unit_audit.csv", "w", newline="", encoding="utf-8-sig") as f:
    w = csv.writer(f)
    w.writerow(header)
    w.writerows(rows)

for r in rows:
    print(r)

运行后控制台会逐行打印审计记录,同时生成 unit_audit.csv。预期输出中 TC03 为 −21.084、TC04 为 −19.800、TC05 为 −3.138,全部"通过";若把 TC03 的系数误写成 0.001,其换算值为 −2.15,比值约 0.11,校验列变为"待复核",脚本即可自动暴露错误。

换算前后的一致性检查要点

混合单位通道 → 标准单位(kN) → 审计校验 原始通道(混合单位) TC01 车钩力 42.5 kN TC02 轮周力 38600 N TC03 电制动 2150 kgf TC04 电制动 −19800 N TC05 辅助制动 −320 kgf 换算规则 kN × 1 N × 0.001 kgf × 0.00980665 符号约定:牵引为正 电制动为负 取反标志单独记录 避免重复取反 保留 3 位小数 审计表与校验 TC01 → 42.500 kN 通过 TC02 → 38.600 kN 通过 TC03 → −21.084 kN 通过 TC04 → −19.800 kN 通过 TC05 → −3.138 kN 通过 比值 0.5~2.0 否则待复核

图中把"原始通道—换算规则—审计校验"三段并列呈现,重点在于:换算规则区把系数与符号约定分开标注,审计区把每个通道的换算结果与量级校验结论一一对应。实际执行时,除脚本自动校验外,还应人工抽查两点:一是同一物理量不同单位通道换算后是否落在同一量级(如 TC03 与 TC04 应接近);二是电制动通道换算后符号是否全部为负,若出现正值需回查取反标志。

审计表建议随数据集一同归档,字段至少保留"原始单位、系数、取反标志"三项。后续若更换试验大纲的标准单位(例如改为 N),只需改系数列并重跑脚本,审计链完整可追溯,不必重新猜测每个通道当初是怎么处理的。