第二章 故障模型与分类:传感器、执行器、系统组件的数学建模

各位好,我是老张。今天咱们聊聊故障建模这件事。

说实话,我刚入行那会儿,觉得故障诊断就是等出问题了再修。后来被现实狠狠教育了一回——某次现场测试,传感器读数飘了半小时我才发现,差点酿成大祸。从那以后我明白一个道理:没有好的故障模型,容错控制就是空中楼阁

这一章,咱们就把三类核心故障的数学模型掰开揉碎讲清楚。

2.1 传感器故障模型

传感器是控制系统的眼睛。眼睛出了问题,你想想看,再好的算法也白搭。

常见的传感器故障有四种:

  • 偏差故障:读数始终偏离真实值一个固定量
  • 漂移故障:读数随时间缓慢偏离
  • 精度下降:噪声方差变大
  • 完全失效:输出卡死或为零

数学上,我习惯用一个统一模型来描述:

y_s(t) = y_true(t) + f_s(t) + v(t)

其中 y_s 是传感器输出,y_true 是真实值,f_s(t) 是故障项,v(t) 是噪声。

具体到每种故障:

故障类型数学模型典型参数
偏差f_s(t) = b (常数)b = 0.5V
漂移f_s(t) = α·tα = 0.01V/s
精度下降v(t) ~ N(0, σ²), σ增大σ从0.1变为0.5
卡死y_s(t) = c (常数)c = 3.2V

避坑指南:我曾经在电机转速传感器上遇到过漂移故障,一开始以为是正常温漂,结果漂了2%还没报警。后来我加了个一阶差分检测,专门抓这种慢变故障。

2.2 执行器故障模型

执行器是控制系统的手脚。手脚不灵便,系统就失控了。

执行器故障主要有:

  • 增益变化:输出与输入的比例关系改变
  • 死区/饱和:小信号无响应,或输出卡在极限
  • 卡死:输出固定在某个位置不动
  • 完全失效:输出为零或失控

我常用的执行器故障模型长这样:

u_act(t) = ρ(t) · u_cmd(t) + u_bias(t)

ρ(t) 是增益因子,正常时为1。u_bias(t) 是偏置项。

举个例子,阀门卡死在50%开度:

u_act(t) = 0.5   (常数,与u_cmd无关)

说白了,这就是ρ=0,u_bias=0.5的情况。

注意:执行器故障往往比传感器故障更危险。传感器坏了你还能看到错误数据,执行器坏了系统可能直接失控。我建议在建模时,优先考虑执行器故障的检测隔离。

2.3 系统组件故障模型

组件故障是最麻烦的。它直接影响系统的动态特性。

比如:

  • 电阻/电容参数漂移:时间常数变化
  • 结构损伤:刚度、阻尼系数改变
  • 泄漏/堵塞:流体系统的流量系数变化

对于线性系统,我习惯用参数摄动模型:

ẋ(t) = (A + ΔA)x(t) + (B + ΔB)u(t)
y(t) = (C + ΔC)x(t)

ΔA、ΔB、ΔC 就是故障引起的参数变化量。

举个例子,一个RC低通滤波器的电阻从10kΩ漂到12kΩ:

正常:τ = RC = 10k × 1μF = 0.01s
故障:τ' = 12k × 1μF = 0.012s
ΔA = -1/τ' + 1/τ ≈ -16.7

核心要点:组件故障建模的关键是找到哪些参数会变化,以及变化范围有多大。我一般会先做灵敏度分析,找出对系统性能影响最大的参数。

2.4 三类故障的统一框架

实际系统中,三类故障往往同时存在。我画了张图帮大家理解它们的关系:

故障模型分类与关系 控制器 执行器 被控对象 传感器 u_cmd u_act y_true y_s 执行器故障:增益/卡死/饱和 组件故障:参数摄动 传感器故障:偏差/漂移/卡死

从这张图能看出来:

  • 传感器故障影响反馈信号质量
  • 执行器故障影响控制输入
  • 组件故障改变系统本身特性

三者相互影响,但建模思路是统一的——找到故障对系统数学描述的影响方式

2.5 故障注入的工程实现

光有模型不够,还得能注入到系统中测试。我常用的方法:

// 传感器故障注入示例(C语言风格)
float sensor_fault_inject(float true_value, int fault_type, float t) {
    float bias = 0.5;      // 偏差量
    float drift_rate = 0.01; // 漂移速率
    float stuck_value = 3.2; // 卡死值
    
    switch(fault_type) {
        case 0: return true_value;                    // 无故障
        case 1: return true_value + bias;             // 偏差
        case 2: return true_value + drift_rate * t;   // 漂移
        case 3: return stuck_value;                   // 卡死
        default: return true_value;
    }
}

我的经验:故障注入测试时,一定要先跑一遍无故障的基线数据。不然你都不知道系统正常时是什么表现。我曾经跳过这步,结果把正常波动当成了故障,折腾了两天。

2.6 小结

这一章咱们把三类故障的数学模型讲清楚了:

  • 传感器故障:偏差、漂移、精度下降、卡死
  • 执行器故障:增益变化、死区、卡死、失效
  • 组件故障:参数摄动、结构变化

记住一个原则:模型越精确,诊断越容易。但也不要过度建模,够用就好。

嗯,今天就到这里。这些模型在后续章节会反复用到,建议大家动手写写代码,把每种故障都注入到仿真系统里看看效果。


专注资料整理