
第一次在Simpack里把车轮改成“不圆”的时候我其实挺懵的。车轮不圆那不是出厂制造误差超差了吗后来真正接触轮轨动力学才发现“不圆”压根不是偶发故障而是车轮服役过程中的常态——多边形磨耗、扁疤、踏面剥离、偏心磨耗每种都会让轮轨力出现周期性冲击直接影响车辆振动、噪声和轨道损伤。而Simpack作为铁路车辆动力学仿真最常用的工具之一恰恰是研究这类问题的好平台。这篇学习记录就是我自己折腾出来的几种“生成车轮不圆”的思路和操作包括最直观的改踏面廓形、做多边形化的滚动半径谐波叠加以及偷懒用的周期激励和实测数据文件驱动。适合正在用Simpack做轮轨动力学、车辆疲劳或者噪声预测的朋友看尤其是那种“知道要加水不圆但不知道从哪个入口下手”的初学者。1. 先说清楚Simpack里“车轮不圆”到底改的是什么东西1.1 车轮不圆在工程上指的是哪几类缺陷车辆系统里说的“车轮不圆”是个统称不是单指哪一件事。我最初踩的坑就是以为加一个正弦激励就是车轮不圆结果做完报告被问了一句“你这个是多边形还是扁疤”当时就愣住了。后来我才系统地把工程上常见的车轮不圆缺陷分成了几类缺陷类型主要成因典型特征对车辆系统的影响多边形化踏面硬质点、轮轨模态耦合、制动热损伤累积车轮周向出现周期性波磨常集中在17~20阶轮轨法向力高频波动产生啸叫和轨道损伤扁疤制动抱死滑行、踏面擦伤踏面局部出现一段平面以约1倍车轮周长周期冲击强大的瞬态冲击力轴箱加速度峰值飙升踏面剥离/凹坑滚动接触疲劳、材料缺陷踏面出现片状剥落坑中高频振动伴随内侧冲击偏心镟修偏心、轮毂孔偏差一阶不圆即滚动半径随转角呈正弦变化激发低频周期性振动悬挂系统敏感波浪形磨耗轮轨接触不均匀、钢轨波磨耦合小波长周期性磨耗阶次和车速强相关轮轨力波动频散噪声明显理解这些分类很重要因为在Simpack里不同类型的“不圆”建模入口和做法完全不同。扁疤本质上是局部几何突变而多边形化则是全周向的谐波形态如果都用同一个激励函数去代替结果会很粗糙。1.2 Simpack里可供“注入不圆”的入口大致有三个层面几何层直接改踏面廓形文件或者修改车轮滚动半径随转动角的变化。这是最接近物理本质的做法适合扁疤、剥离、多边形这种真实几何缺陷。运动学层给轮对Marker加位移、旋转量或者用激励函数直接给轮对垂向/横向位移。这种方法没有真正改变接触几何但能模拟不圆引起的轮轨相对运动工程上非常实用。力层直接在轮轨法向力、垂向力元上叠加周期力。这种方式最省事一般用于系统级振动研究不太适合研究轮轨接触机理。我个人的体会是Simpack本身不是一个做磨损演化的软件它的强项是“给定一个已存在的缺陷形态后评估车辆动力学响应”。所以我们的核心任务不是让Simpack自己长出缺陷而是把缺陷翻译成Simpack能理解的语言。理解了这一点后面的操作就顺了。2. 最直观的一招改踏面廓形造出扁疤和凹坑2.1 踏面廓形文件的底层结构Simpack里的轮轨接触靠的是踏面廓形和钢轨廓形的匹配插值。车轮踏面廓形文件本质上是很多个数据点横坐标是踏面横向位置纵坐标是垂直方向的高度。Simpack在每一步仿真里插值找到接触点然后根据Hertz接触理论计算法向力和切向蠕滑力。所以如果我们希望模型里有一个真实的扁疤最直接的方法就是对这个廓形文件“动刀子”——在滚动圆附近把踏面局部压缩下去形成一个平面或凹坑。这里要提醒一句踏面廓形文件里的数据密度和局部曲率很重要。如果修改后的凹陷边缘太陡接触点搜索会来回跳产生严重的数值振荡。仿真结果就可能出现一种“假冲击”而不是真实的轮轨冲击。2.2 实操用Python生成带扁疤的踏面廓形我自己习惯先从Simpack导出名义踏面廓形然后用Python做局部修正再导回去。下面是一个很简单的示例代码演示生成一个带扁疤的廓形文件import numpy as np # 读取Simpack导出的名义踏面廓形文件 # 假设两列横向坐标 s(m)垂向坐标 z(m) profile np.loadtxt(wheel_profile_nominal.txt) s profile[:, 0] z0 profile[:, 1] # 扁疤参数中心位置取滚动圆附近宽度和深度按实际磨耗设定 flat_center 0.0 flat_width 0.02 # 扁疤沿踏面横向宽度 flat_depth 0.005 # 最大下陷深度 # 用余弦过渡函数生成光滑凹陷避免硬边界 z_mod z0.copy() mask np.abs(s - flat_center) flat_width / 2 xi (s[mask] - flat_center) / (flat_width / 2) z_mod[mask] z0[mask] - flat_depth * (1 - np.cos(np.pi * xi)) / 2 # 导出修改后的廓形 np.savetxt(wheel_profile_flat.txt, np.column_stack([s, z_mod]))注意我用的过渡函数是余弦过渡原因是让凹陷边缘一阶导数连续减少对接触点搜索算法的刺激。如果直接画一个矩形凹槽Simpack很可能在接触求解时出现接触点来回跳的情况。导入Simpack后把轮对的踏面廓形文件替换成这个新文件其他设置先不动跑一个直线工况或者曲线工况重点看轮轨法向力的时间历程。2.3 怎么确认这个扁疤真的起作用了我常用的验证方法有三个看法向力时域图扁疤通过轮轨接触区时法向力会出现一个明显的脉冲下降再恢复的尖峰。如果是光滑正弦波那多半说明凹陷太浅或者没落在接触带上。看接触点位置变化正常情况下接触点位置在滚动圆附近低速漂移。如果凹陷明显接触点会在缺陷区边缘发生跳变。Simpack的后处理里可以直接调出接触点坐标这个量非常直观。看轴箱垂向加速度扁疤导致的冲击频率大约是车轮每转一圈一次从轴箱垂向加速度PSD谱上能看到明显的低阶谐峰。但我也要坦白说如果只是想粗略研究系统响应改踏面廓形真的有点重而且有可能引入数值问题。所以后来我学到更常用的建模方式是下一节说的滚动半径谐波叠加。3. 车轮多边形化的标准做法滚动半径谐波叠加3.1 把多边形化理解成“周向谐波叠加”车轮多边形化的几何本质是车轮滚动半径随旋转角变化可以写成r(φ) r0 Σ A_n · sin(n·φ φ_n)其中r0是名义滚动圆半径n是谐波阶次A_n是n阶不圆的幅值φ_n是初始相位。n1就是偏心n18~20就是工程上特别常见的车轮多边形。为什么要用阶次去描述因为转速固定的情况下阶次和激励频率直接挂钩车轮每转一圈n阶多边形就会激励n次。频域分析的时候特别方便。3.2 在Simpack里用等效垂向激励实现如果要在Simpack里直接给车轮几何加一个半径变化其实操作路径相对绕。轮轨接触会对滚动半径变化很敏感但默认的轮轨接触关系里不会自动计算这种“车轮不圆度”的几何激励。我常用的做法是把多边形化等效为一个轮对垂向位移激励。这个等效的理论依据是从轮轨法向接触来看车轮半径在那个角度变小等价于轮心往下沉了一个量半径变大等价于轮心往上抬了一个量。所以在轮对或轴箱位置定义一个垂向位移z(t) A_n · sin(n·(v / r0)·t φ_0)其中v是车辆运行速度r0是车轮半径。比如车速80km/hr00.46m20阶多边形那么角频率就是20 * (22.22/0.46) ≈ 966 rad/s对应频率约154Hz。在Simpack里实现方法很简单给轮对的Z方向位移加一个Expression或者用Function类型的激励。也可以加到一系悬挂的“弹簧上端点”这样激励效果会略有不同需要按你的研究目的选择。3.3 频率换算与仿真步长三个数定住积分步长做这个的时候最容易忽略的是仿真步长。因为车体低频模态只有1~2Hz很多人习惯用5e-4s甚至1e-3s的步长但遇到高频不圆激励时就全乱了。频率公式是f_n n · v / (2π · r0)我给一个常见算例车轮半径0.46m不同速度和阶次下的激励频率车速(km/h)10阶(Hz)20阶(Hz)30阶(Hz)4038.577.0115.58077.0154.0231.0120115.5231.0346.5160154.0308.0462.0从表格能看到车速120km/h、30阶不圆时频率已经超过346Hz。如果步长取1e-3s采样率只有1000Hz理论上勉强能看但实际上积分精度已经不够了。我自己的经验是至少要保证采样频率达到目标频率的20倍以上也就是步长小于1/(20·f_max)。比如最高关心300Hz那么步长不要超过1/(20*300)1.67e-4s。Simpack里设置固定步长或者最大步长时记得按这个逻辑来。4. 更省事的变体周期激励与实测数据文件驱动4.1 用周期激励直接怼到轮对说实话很多时候研究目标并不是轮轨接触机理本身而是整车的振动响应。这时候我倾向于用Simpack的周期激励Periodic Excitation功能直接在轮对垂向加一个正弦激励。这个方案和上一节的等效位移激励本质上差不多但Simpack自带的周期激励模块用起来更方便直接在激励面板里填幅值、频率、相位不用写表达式。缺点也很明显它只生成纯正弦信号没法同时模拟多个阶次的叠加。如果你需要研究“18阶20阶混合”的情况要么用公式激励要么用文件驱动。4.2 把实测径跳数据转换成时间序列文件真实车轮的不圆不会是理想正弦总是带有一堆随机成分和多个阶次的混合。要还原这种混合效果我用的是“文件驱动”的思路从实测报告拿到车轮径向跳动随转动角度的数据通常是一圈360°的径跳值。把角度坐标换算成时间坐标t φ / ω其中ω v / r0。把数据整理成两列时间、径向跳动量生成文本文件。在Simpack里用文件型激励加载把它当作轮对垂向位移激励。注意实测径跳值是“半径方向”的跳动直接当成垂向位移激励有时候偏保守因为轮轨接触的非线性会被忽略。但对工程初步评估完全够用而且比纯正弦信号真实得多。有个细节要小心实测数据文件里的时间序列长度必须覆盖仿真时长否则Simpack会报数据越界。建议做周期性延拓或者在激励面板设置“Loop”循环读取。另外文件第一行通常是注释要确认Simpack的读取格式是否默认第一行有效数据这个因版本而异。4.3 偏心一阶不圆是最好处理的如果你只是要加一个“车轮偏心”那是最简单的。本质上就是n1的多边形给一个幅值为e的垂向位移激励z(t) e · sin(ω·t φ_0)其中ω v / r0。这里e就是偏心量工程里常见的范围从几十微米到一两毫米。但我踩过一个大坑偏心量是有方向的不同车轮的偏心相位不一定相同。如果四个轮子的偏心相位全设成0那叫做“同相偏心”车辆会像船一样整体上下荡如果左轮和右轮相位相差180°车辆会产生明显的侧滚振动。这两种结果差异非常大设置前一定要想清楚你的研究对象是谁。5. 学习过程中踩过的坑与自查清单5.1 单位换算绝对是重灾区Simpack的默认单位是国际单位制长度是米。但做轮轨的时候大家习惯说“幅值0.05mm”容易直接填0.05。0.05mm5e-5m如果你填了0.05m那个激励幅度相当于把车轮抬高了5厘米轮轨力直接归零甚至脱离接触。我的自查习惯是在激励面板里填完数值后心里先默算一下物理量如果幅值对应的轮轨法向力变化超过静轮载的50%那么这个幅值大概率是填错了。对粗糙度激励来说幅值通常在0.001mm~0.1mm量级。5.2 相位、方向和左右轮匹配是结果好坏的命门这一条我想多说几句。同样的20阶多边形下面几种设置结果完全不一样四个轮同相位车辆垂向跳动为主一系簧上振动明显。左右轮反相位轮对产生侧滚转向架侧滚角被周期性激发。前后轴反相位转向架产生点头振动甚至会和车体点头模态耦合。在做对比研究的初期我建议先跑四个轮同相位的算例把基准结果摸清楚再逐步改相位。否则乱改相位会得到一个看起来“很丰富”的结果但说不清原因后期写报告很难受。5.3 确认激励到底有没有按预期作用有时候仿真跑完了看到轴箱垂向加速度有波动但不清楚是不是不圆激励引起的。我排查的思路是先看轮对垂向位移的FFT检查激励频率处有没有峰值再看轮轨法向力的时间历程看波动频率是否等于nf/2π每转一圈次数乘以转速频率如果法向力没有明显波动先检查轮轨是否一直处于接触状态看最小法向力是否接近0。这些小手段配合使用基本能确认模型是否真的“不圆”了。5.4 初始瞬态和求解器稳定性Simpack在仿真刚开始的0.1s左右会有一段初始瞬态这个阶段车轮和轨道还没达到稳定接触状态。如果一开始就把不圆激励加载上去瞬态和激励会叠加得出的峰值常常偏大。我的做法是先让车辆用名义圆圆度完好跑0.5s或者一段距离等模型稳定后再激活不圆激励。Simpack里可以通过“激活时间”来控制激励的启动时刻或者在定义轮轨接触前加一段预滚距离这样得到的稳态响应才可信。求解器方面如果出现法向力振荡发散除了调步长外还要注意接触算法的刚度系数。刚性太大容易数值发散太小又不真实。这个参数需要结合你的轮重和接触刚度去反复试没有一刀切的值。5.5 不同Simpack版本的差异我用过的Simpack版本有几个界面差异挺大尤其是2021x之后菜单改了很多。但底层的建模逻辑是一致的要么改廓形文件要么加激励。建议学习时不要死记菜单名抓住“几何层-运动学层-力层”这个脉络到新版本里找对应功能就行。另外提醒一下车轮不圆建模往往需要Simpack的铁路模块授权。如果你是新装的Simpack跑轮轨接触时发现没有Rail模块那就得先确认授权是否完整。最后再分享一点我个人的选择习惯如果你问我实际项目里用哪种方式我的答案是看研究目标。研究轮轨冲击载荷和接触疲劳优先改踏面廓形真实感最强研究悬挂系统振动、车体平稳性、噪声预测用等效位移激励或者周期激励效率最高调试也容易。实测数据驱动适合做复核验证尤其是拿到了现场车轮镟修前的测试数据时直接把数据喂进去是最有说服力的做法。多练几次之后你会发现Simpack里做车轮不圆其实没那么玄乎它就是一个“把不圆度翻译成几何或激励语言”的过程。希望这篇学习记录对你有用。