news 2026/10/14 3:18:05

双质量二自由度悬架Simulink仿真建模与时域频域分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双质量二自由度悬架Simulink仿真建模与时域频域分析

简介:车辆悬架系统直接影响乘坐舒适性和操纵稳定性,工程上常采用四分之一车模型进行动态特性分析。将车身与车轮简化为双质量二自由度系统,通过牛顿第二定律建立垂向运动微分方程,可清晰展现悬架刚度、阻尼与共振频率之间的耦合关系。借助Simulink搭建仿真模型,能够在同一框架内完成时域冲击响应和频域幅频特性求解,定量评估车身加速度、悬架动行程与轮胎动载荷等核心指标。这种方法不仅适用于课程设计与毕业设计,也为悬架参数匹配、阻尼调校和半主动悬架控制开发提供了可扩展的实验平台。通过扫频法识别共振峰,结合随机路面激励统计RMS值,可以深入理解悬架调校中舒适性与操稳性的权衡规律。双质量二自由度悬架Simulink仿真正是连接理论公式与工程验证的有效桥梁。

1. 双质量二自由度悬架Simulink仿真模型:时域与频域分析解决什么问题

双质量二自由度悬架Simulink仿真模型,拆开看就是两个质量块、两条积分链、一组路面输入,外加时域分析和频域分析两套后处理。很多初学者把时间都花在Simulink连线本身,结果时域曲线跑通了,一问“为什么有两个共振峰”,却说不出所以然。实际上这个模型的价值不在图,而在它能把悬架参数和振动特性之间的关系定量地暴露出来。

时域分析面向具体工况,比如过减速带、跑C级路面,回答“车身加速度峰值多少、悬架动行程有没有顶到限位”;频域分析面向系统本质,回答“这套悬架在哪个频率附近会被放大、阻尼调大以后峰值怎么变化”。适合三类人:正在做车辆振动课程设计或毕业设计的学生,做悬架匹配的工程师,以及打算把被动悬架扩展成半主动、主动悬架的控制开发者。

2. 双质量二自由度悬架模型的理论基础:方程、参数与适用边界

2.1 为什么是“双质量二自由度”:模型假设与适用边界

四分之一车模型把整车悬架简化成两个质量块:簧载质量ms代表车身分配到单轮上的那部分,非簧载质量mu代表车轮、轮毂、制动钳和悬架下摆臂等簧下部分。两个自由度分别是车身的垂向位移zs和车轮的垂向位移zu,路面输入zr作为系统外部的位移激励。加上悬架弹簧刚度ks、减振器阻尼cs和轮胎等效刚度kt,就凑齐了整个模型的全部要素。

建模时有几条约定俗成的假设,建议先用默认假设跑通,再逐条放开:第一,悬架简化为线性弹簧和线性阻尼,暂不考虑减振器开阀特性和橡胶衬套非线性;第二,轮胎简化为无阻尼弹簧,忽略轮胎阻尼对垂向振动的贡献;第三,只保留垂向位移自由度,忽略车身俯仰和侧倾;第四,假定轮胎始终与路面接触,不出现跳动离地。这些假设决定了模型适合分析垂向振动与悬架参数选型,不适合分析大侧倾、轮胎离地、减振器非线性等场景。

模型里还有一个容易被忽略的约定:以静平衡位置为位移零点,方程中不出现重力项。因为静态时弹簧力和重力已经平衡,动态方程在平衡点附近展开后重力被消掉,所有位移输出都是相对于静平衡位置的增量。这样处理的好处是初始条件全部设0即可,时域曲线不会混入“静态压缩量”这个常数。

2.2 运动微分方程与状态空间表达:搭模型前自己推一遍

两个质量块的牛顿方程写出来就是:

ms·zs'' = -ks·(zs - zu) - cs·(zs' - zu')

mu·zu'' = ks·(zs - zu) + cs·(zs' - zu') - kt·(zu - zr)

第一个方程描述车身受力:悬架弹簧力和阻尼力合起来抵抗车身运动。第二个方程描述车轮受力:上方悬架传来的力向下压,下方轮胎变形产生的恢复力向上顶。两个方程靠“悬架位移差(zs-zu)”和“悬架速度差(zs'-zu')”耦合在一起,这正好对应Simulink里需要交叉反馈的两个积分回路。

悬架系统的两个特征频率值得先算出来,后面频域分析要靠它们做参照。车身固有频率近似为 f1 ≈ (1/2π)·√(ks/ms),乘用车通常在1~2Hz,这是人体对垂向振动最敏感的频率范围,悬架设计的首要目标就是让这个共振峰不要太高。车轮固有频率近似为 f2 ≈ (1/2π)·√(kt/mu),通常在10~15Hz,对应车轮跳动模态。把基准参数代入:f1≈1.33Hz,f2≈10.35Hz,后面扫频结果会在这两个频率附近看到两个明显的峰。

如果不想用积分器搭图,也可以直接把模型写成状态空间形式,用Simulink里的State-Space模块一步搭完。状态向量取 x=[zs, zu, zs', zu'],输入u=zr,代入上面的方程得到:

% 状态空间矩阵,参数引用初始化脚本里的变量 A = [0 0 1 0; 0 0 0 1; -ks/ms ks/ms -cs/ms cs/ms; ks/mu -(ks+kt)/mu cs/mu -cs/mu]; B = [0; 0; 0; kt/mu]; C = [-ks/ms ks/ms -cs/ms cs/ms]; % 取车身加速度作为输出 D = 0;

这里的C矩阵取的是车身加速度zs''对应的那行系数,如果把C换成其他组合,可以得到悬架动行程、轮胎动载荷等不同输出。这个矩阵形式还可以用来做线性系统分析,比如直接用MATLAB的eig函数算特征值,检验自己搭的积分器模型有没有接错——特征值虚部对应的频率应该和上面算的f1、f2吻合。

2.3 参数取值:从整车参数到四分之一模型的换算

参数是时域频域分析结果的根基,宁可花十分钟把参数理清楚,也不要随便抓一组数跑完再怀疑人生。表里是一组常用的乘用车四分之一模型基准参数:

符号含义单位基准值
ms簧载质量(单轮)kg317
mu非簧载质量(单轮)kg45.4
ks悬架弹簧刚度N/m22000
cs减振器阻尼系数N·s/m1000
kt轮胎等效刚度N/m192000

从整车参数往下拆的常见做法是:整备质量按轴荷分配后除以单轮数量得到ms;非簧载质量按轮边部件实测或估算;悬架刚度按单轮簧上质量与目标偏频反算;轮胎刚度参考同规格轮胎的垂向刚度测试值。比如整车整备质量约1.3吨,前轴承担约六成,再除以两个前轮,就得到300kg量级的ms;想要车身偏频1.3Hz左右,ks就取ms·(2πf1)²,代入317和1.33得到约22000N/m。

阻尼系数的合理性可以用阻尼比来检查:ξ = cs / (2√(ms·ks)),代入基准参数得到ξ≈0.19,落在乘用车被动悬架常用的0.15~0.3区间内。如果算出来ξ小于0.05或者大于0.5,基本可以判断参数组合脱离了工程实际,后面共振峰的高度也会离谱。

3. 用Simulink搭建双质量二自由度悬架模型:模块化步骤与求解器设置

3.1 从方程到模块:积分器、增益与加法器的接线逻辑

搭模型的顺序和推导顺序完全一致:先搭车轮,再接车身,最后把两条积分链相互耦合。每个质量块的加速度方程都可以写成“加速度=(合力)/质量”,所以对ms和mu分别做一次“力→加速度→速度→位移”的积分链。用到的模块很少,常见做法是四个积分器、五六个增益、三四个加法器再加一个输出端口组。

模块清单如下,搭建时按行取用:

模块数量作用
Integrator4两组级联积分,分别生成速度与位移
Gain5实现 1/ms、1/mu、ks、cs、kt 等系数
Sum4组合弹簧力、阻尼力与路面输入
Sine Wave1正弦路面激励(可替换为Step)
To Workspace5导出zr、zs、zu、zdot_s、acc

具体的信号流是:zs''和zu''各自经过两次积分得到速度和位移;由(zs-zu)和(zs'-zu')两个差值分别经过增益ks和cs,合成悬架传递给车身的力;把这两个力取反加到车身加速度方程,同时以正号叠加到车轮加速度方程;轮胎力由(zu-zr)经增益kt得到,只作用于车轮。所有信号用默认的蓝色连线连接,不需要额外的单位换算模块。

连线完毕先用一个脚本把参数灌进工作区,Simulink模型里的Gain参数全部填对应变量名。这样后面做参数敏感性分析时只改脚本,不用在模型界面里逐个改数字。

% 悬架模型参数初始化:Simulink中的Gain/初值全部引用这些变量 ms = 317; % 簧载质量,kg mu = 45.4; % 非簧载质量,kg ks = 22000; % 悬架弹簧刚度,N/m cs = 1000; % 减振器阻尼系数,N*s/m kt = 192000; % 轮胎等效刚度,N/m % 路面激励相关参数 Ain = 0.01; % 正弦激励幅值,m freq = 1.0; % 正弦激励频率,Hz(后面扫频会覆盖这个值) v = 20; % 车速,m/s,随机路面用

脚本本身没有语法门槛,重点是变量名必须和模型里的Gain参数名完全一致。比如车身加速度通道的Gain就填1/ms,Simulink会在仿真开始前自动从工作区取数值。改参数时只动脚本最上面几行,模型结构零改动,这是后面做参数敏感性分析的基础。

3.2 路面激励输入:阶跃、正弦扫频与随机路面信号怎么接

三种激励对应三种分析目的,接法各不相同。阶跃激励用Step模块,Step time设0.5s,Final value设0.02m,约2cm,模拟一个路缘或减速带,它用于时域瞬态响应测试,看悬架在冲击输入下的超调和恢复时间。

正弦激励用Sine Wave模块,幅值接Ain,频率填2π·freq。需要说明的是,Simulink里Sine Wave的Frequency参数以rad/s为单位,不是Hz,这是新手最容易填错的地方。频域扫频时我会在脚本里循环调用set_param改这个频率参数,让模型自动跑完每一个频点。

随机路面激励稍微复杂一点,不能直接把白噪声当路面位移接进去。路面不平度在空间域近似为幂律谱,折算到时间域后,位移功率谱密度随频率按约-2次方衰减,所以要给白噪声串一个一阶低通整形滤波。常见做法是Band-Limited White Noise加Transfer Fcn:白噪声采样时间取1e-3s,功率取1;整形滤波器的传递函数为 G(s) = 2π·n0·√(Gq(n0)·v) / (s + 2π·n0·v),其中n0取0.1 cycle/m,Gq(n0)按路面等级取,普通城市道路用C级,即256×10⁻⁶ m³/cycle。把v=20m/s代入,滤波器截止频率约2Hz,高频成分按一阶衰减。

3.3 求解器与仿真参数:为什么这个模型要用刚性求解器

悬架系统有一个容易被忽视的数值特征:轮胎刚度kt比悬架刚度ks高一个量级,系统的特征频率从1.3Hz到10Hz以上,特征值在复平面上拉开得比较远,本质上是刚性系统。用默认的ode45跑,仿真步长会被高频模态拖得非常小,体现在结果上就是加速度曲线高频毛刺多、仿真速度慢,甚至出现数值振荡。

我一般把求解器设为VariableStep,算法选ode23t,这是刚性系统里综合表现比较稳的选项;相对容差设1e-4,最大步长限到0.01s。如果为了FFT需要等间隔数据,可以退而求其次选FixedStep,步长1e-3s,这样导出数据天然就是均匀采样序列,省去后处理重采样。仿真时长方面,时域随机路面分析跑10~20s足够统计RMS;频域扫频每个频点跑20s,其中前10s是瞬态段,后10s取稳态幅值。

To Workspace模块的配置也值得多说一句:采样时间填-1表示继承求解器步长;固定步长模式下数据等间隔,时域和频域后处理都方便。导出变量名建议用yout,格式选TimeSeries,这样在MATLAB里可以直接用yout.Time和yout.Data取值。

4. 时域分析与频域分析:激励设置、测点选择与结果判读

4.1 时域分析:车身加速度、悬架动行程与轮胎动载荷怎么读

时域分析的输出测点一共三个,对应悬架性能的三个维度,每次仿真结束都应该同时检查而不是只看加速度。车身加速度是舒适性的核心指标,工程上常用RMS值评价,乘用车在C级路面、20m/s车速下,车身加速度RMS低于0.5m/s²算比较舒服,超过1m/s²就明显颠了,这个数值不是硬性指标,只是判断数量级是否合理的参考。悬架动行程(zs-zu)看的是限位余量,峰值如果接近减振器行程极限,说明悬架有“打底”或“拉满”的风险。轮胎动载荷kt·(zu-zr)看抓地一致性,动载荷RMS相对静载的比值越大,轮胎附着变化越剧烈,极端情况下动载荷出现负值就代表轮胎离地。

随机路面仿真跑完后,直接在MATLAB里做后处理,脚本如下:

% 时域指标统计:使用随机路面激励的仿真结果 y = yout.Data; t = yout.Time; zr = y(:,1); zs = y(:,2); zu = y(:,3); acc = y(:,4); dt = zs - zu; % 悬架动行程,m Ft = kt * (zu - zr); % 轮胎动载荷,N rms_acc = rms(acc); % 车身加速度RMS,m/s^2 peak_dt = max(abs(dt)); % 动行程峰值,m rms_ft = rms(Ft); % 轮胎动载荷RMS,N % 画车身加速度时域曲线,检查是否有明显瞬态和毛刺 plot(t, acc); xlabel('t / s'); ylabel('acc / (m/s^2)');

脚本里acc直接取模型输出的车身加速度通道,不建议用位移差分或者速度差分去近似加速度,数值微分会把离散误差放大,曲线毛刺分不清是物理现象还是算法噪声。rms函数按时间序列的平方均值开方,对应振动评价里最常用的有效值定义。动行程和动载荷同样建议计算RMS并同时输出最大值,峰值负责判断极限工况,RMS负责描述总体水平。

跑完随机路面再做一次阶跃仿真,对比两种激励下的结果:阶跃响应看超调量和调节时间,一般要求车身加速度峰值小、振荡次数少;随机路面看RMS水平。两个视角得出的参数调整方向经常一致,但也会有矛盾——比如阻尼调大后阶跃超调小了,随机路面下的加速度RMS却可能因为高频传递增加而变差,这就是悬架调校典型的“舒适和操稳互相牵制”。

4.2 频域分析:扫频法求幅频特性,两个共振峰怎么判读

频域分析的目标是画出一张悬架系统对路面位移的传递率曲线,横轴频率0.5~20Hz,纵轴车身位移幅值除以路面位移幅值。最可靠、最好解释的方法不是对随机信号做FFT,而是扫频法:逐频点输入正弦路面激励,等系统进入稳态后量取输出幅值,算幅值比。这个方法避开了FFT的窗函数和泄漏问题,低频段也足够精确,是教学和工程验证都常用的做法。

扫频脚本如下,模型文件建议命名sus_model.slx,并保证模型里的Sine Wave模块名就叫Sine Wave:

% 频域扫频:逐频点正弦激励,稳态段量取幅值比 f_list = 0.4:0.2:20; % 扫频范围与步长,Hz Ain = 0.01; % 路面位移幅值,m Tend = 20; Tskip = 10; % 总时长与跳过瞬态的时长,s for k = 1:length(f_list) f = f_list(k); set_param('sus_model/Sine Wave', 'Frequency', num2str(2*pi*f)); sim('sus_model', Tend); y = yout.Data; t = yout.Time; seg = t > Tskip; % 只取稳态段 zs = y(seg, 2); % 车身位移通道 TFR_zs(k) = (max(zs)-min(zs))/2 / Ain; % 峰值法算幅值比 end plot(f_list, TFR_zs); grid on; xlabel('Frequency / Hz'); ylabel('|zs/zr|');

扫频范围从0.4Hz起步,是因为车身共振峰在1.3Hz附近,低于0.4Hz的频点系统响应趋近于1,不值得多花仿真时间;20Hz上限覆盖了车轮共振峰之后的高频衰减段。步长0.2Hz在共振峰附近可能略粗,如果峰值位置看不准,可以把0.8~1.6Hz和9~13Hz两段加密到0.05Hz再补扫一轮。每个频点跑20s,低频0.4Hz一个周期2.5s,稳态段10s里约有4个完整周期,峰值法取(max-min)/2足够可靠;高频频点周期更短,稳态段包含的周期数更多,精度只会更好。

用基准参数跑完,曲线会出现两个峰:第一个在1.33Hz附近,对应车身共振,幅值比约2~3,峰高由cs决定,阻尼比越大峰越低;第二个在10~12Hz附近,对应车轮共振,这里悬架几乎不起隔振作用,能量主要经由轮胎直接传递到车身。两个峰之间的谷和第二个峰之后的衰减斜率,决定了常用频段1~10Hz内的隔振质量。如果曲线形状和上述描述对不上,先回第5章排查,别急着调参数。

5. 避坑与排查:时域频域仿真结果不对时先查这几处

5.1 现象:加速度曲线布满高频毛刺,数值抖动明显

现象:车身加速度曲线叠了一层看不清的锯齿,随着仿真推进毛刺越来越大,峰谷位置出现非物理的尖刺。原因:绝大多数情况是用ode45跑刚性系统,步长被高频模态逼到极小,误差在积分过程中被反复放大。解决:把求解器换成ode23t,相对容差设1e-4,最大步长限制在0.01s以内;如果仍然毛刺,改用FixedStep固定步长1e-3s重跑一遍,曲线立刻平滑。这条经验几乎能解决八成“结果看起来不像真的”的报错。

5.2 现象:车身位移长时间漂移,不回平衡位置

现象:路面输入为零时车身位移不保持在0,而是缓慢线性增加或衰减,时域曲线明显跑偏。原因:模型里如果加了重力项但没有正确处理静平衡,或者积分器初值没有设到平衡态,仿真出来的位移其实是“静态压缩+动态响应”的叠加。解决:统一采用以静平衡位置为原点的增量模型,方程里不加重力,四个积分器初值全部设0;做一个零输入测试,路面输入恒为0时所有输出恒为0,这个测试通过后再接激励。这是我最常让同事先做的一步。

5.3 现象:FFT峰值位置和理论固有频率对不上

现象:对随机路面时域数据做FFT,峰值出现在2.2Hz或者7.5Hz,而不是理论计算的1.33Hz和10.35Hz。原因:记录步长不固定导致频率轴换算错、仿真时长太短导致频率分辨率不足、没加窗导致频谱泄漏把峰值拉偏。解决:仿真时用固定步长1e-3s保证均匀采样;数据长度不少于20s,对应的频率分辨率做到0.05Hz级别;做FFT前加hanning窗。代码模式固定下来:

fs = 1000; N = length(zs); f_ax = (0:N-1) * fs / N; win = hanning(N); Z = fft(zs .* win); Z = Z(1:floor(N/2)+1); plot(f_ax(1:length(Z)), abs(Z));

fs必须和仿真记录的采样步长严格对应,步长1e-3s就是fs=1000Hz。频率分辨率等于1/T,T是总时长,20s数据对应0.05Hz,足够分辨1.33Hz和10.35Hz两个峰。如果用了变步长仿真,To Workspace输出的时间间隔是不均匀的,直接做FFT等于把频率轴算错了。

5.4 现象:共振峰高到离谱,像是不稳定发散

现象:频域曲线在车身共振频率处幅值比达到10以上,甚至接近20,看起来系统要发散。原因:阻尼系数cs没有真正作用到模型里。常见接线错误是把cs增益接到了位移差上,或者Sum模块的正负号弄反,让阻尼力变成了助力。解决:把cs那一路的输入从(zs'-zu')改成(zs'-zu')重新检查一遍,确认增益产出与弹簧力反向;把cs临时设成0跑一次频域,理论上共振峰高度趋近于系统阻尼最小时的极值,再用半功率带宽法估算阻尼比,和理论ξ≈0.19对比。如果估算值差一个量级,基本就是符号接反了。

5.5 现象:随机路面激励下响应“太干净”或者“太乱”

现象:随机路面仿真的加速度RMS明显偏小,曲线平得像正弦;或者高频抖动剧烈,频谱形状不对。原因:前者是直接把白噪声当路面位移接了,缺少路面谱整形;后者是白噪声采样时间与求解器步长不匹配,激励本身带了过量的高频能量。解决:按3.2节的一阶整形滤波器接法,把白噪声采样时间固定为1e-3s,整形滤波器的截止频率按n0·v计算;换路面等级只改Gq(n0)一个数,不要动滤波器结构。随机路面的激励频谱不对,后面所有统计指标都没有意义,这是做随机输入分析前必须先自查的一环。

6. 进阶:把仿真模型用起来——参数敏感性分析与半主动悬架扩展

模型搭好、时域频域都跑通之后,这个仿真才开始产生真正的价值。我最常用的进阶动作是参数敏感性分析:把cs从500按步长100扫到2000,每个阻尼值跑一遍频域扫频,把幅频曲线叠在一张图上。会看到两个峰往相反方向变化——阻尼增大,车身共振峰明显压低,但车轮共振峰附近的高频段传递反而略有抬升;悬架动行程的RMS随阻尼增大而减小,轮胎动载荷的RMS却可能在某个阻尼值之后恶化。这就是悬架调校里经典的“舒适、动行程、抓地”三方权衡。拉一张阻尼、车身加速度RMS、动行程峰值、动载荷RMS四列数据的表格,比任何口头描述都有说服力。

再进一步,可以把被动阻尼cs改成可控阻尼,模拟半主动悬架。最简单的控制律是“天棚阻尼”思想的离散化:c_sky = c0·(1 - α·sign(zs'·(zs'-zu')))。α从0变到1,0就是被动悬架,1是接近完全天棚阻尼。在Simulink里用Fcn模块实现这个表达式,把输出接到原本cs所在增益的前端,其余结构不动。对比被动与半主动的频域曲线,能看到车身共振峰被进一步压低,这就是很多底盘预研项目里被控对象模型的雏形。

我自己的一个收尾习惯是:任何一次参数修改后,先不着急看时域指标,而是快速跑一遍扫频,检查曲线包络是否光滑、两个峰的位置是否在理论值附近。如果曲线出现异常尖刺或峰位漂移,说明模型结构或者参数传递出了问题,此时时域统计再好看也不能信。这套“先频域验证、再时域统计”的顺序帮我挡掉了无数次返工,希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 3:18:05

STM32+ESP8266+DS1302桌面时钟天气屏:从跑通到长期稳定的避坑指南

简介:这是一套面向嵌入式初学者与电子爱好者的STM32综合实践项目源码,围绕实时时间与天气信息的串口屏显示展开,并附带桌面屏幕与倒计时报警功能。项目以STM32微控制器为核心,配合DS1302实时时钟芯片获取准确时间,再通…

作者头像 李华
网站建设 2026/10/14 3:17:48

工地视频智能检测落地指南:从算法选型到踩坑实操

工地上的安全员每天要看几十路监控画面,说实话,这不是人干的事儿。我自己做过这类项目,盯着屏幕超过二十分钟,注意力就开始滑坡,更别提那些分布在塔吊、基坑、出入口的上百路摄像头了。视频智能检测这门技术&#xff0…

作者头像 李华
网站建设 2026/10/14 3:17:19

K8s高可用集群搭建实战:HAProxy+Keepalived完美融合

k8s高可用集群 集群环境初始化 实验环境 主机名 IP 角色 reg.westos.org 192.168.36.151 harbor私有镜像仓库 k8s-master01 192.168.36.155 control-plane,haproxy,keepalived k8s-master02 192.168.36.156 control-plane,haproxy…

作者头像 李华
网站建设 2026/10/14 3:17:17

第6章: 同步与 Fence 机制

前几章介绍了 context、resource 与 capset 三个静态抽象。GPU 的执行是异步的:命令提交后不会立即完成,Guest 与 Host、CPU 与 GPU 之间需要一套同步原语来协调先后顺序。本章说明 virglrenderer 的 fence 体系:两代 fence 模型、时间线与 ring_idx、VMM 获知完成的两种途径…

作者头像 李华
网站建设 2026/10/14 3:16:27

PDF轻编辑实战:精准擦除水印与添加文字图片

1. 轻编辑需求为什么越来越常见先聊一个很多人都会遇到的场景。某份合同扫描件里有一行备注写错了,需要清掉重新批注;某本电子书上有水印和阅读器自带的页码,想擦掉再打印;某份课件截图上有多余的公式或标注,想删干净后…

作者头像 李华