name: reliability-analysis description: 组件和系统可靠性预测与分析技能,包含MTBF/MTTF计算、失效率数据库、FMEA/FMECA支持、故障树分析和加速寿命测试数据分析。 allowed-tools: Read, Grep, Write, Bash, Edit, Glob category: 测试与验证 backlog-id: SK-020 metadata: author: babysitter-sdk version: “1.0.0”
可靠性分析技能
电子硬件的组件和系统可靠性预测与分析。
目的
本技能提供全面的能力,用于预测和分析电子组件及系统的可靠性。它支持行业标准的可靠性方法、失效率计算和寿命测试数据分析。
能力
MTBF/MTTF计算
- 可修复系统的平均故障间隔时间(MTBF)
- 不可修复组件的平均失效前时间(MTTF)
- 串联和并联系统可靠性建模
- 冗余计算(主动、备用、k-out-of-n)
- 任务可靠性与运行可用性
失效率数据库
- MIL-HDBK-217F失效率预测
- Telcordia SR-332方法
- FIDES可靠性方法
- IEC 62380电子组件可靠性
- 自定义组件数据库管理
降额分析
- 组件应力比计算
- 温度降额曲线
- 电压和功率降额
- 降额指南合规性(NAVSEA、JPL、ESA)
- 应力分析文档
FMEA/FMECA支持
- 失效模式与影响分析辅助
- 关键性分析(CA)计算
- 风险优先数(RPN)计算
- 严重度、发生度、探测度评级
- FMEA工作表生成
- 行动跟踪与验证
可靠性框图分析
- RBD构建与可视化
- 串联、并联和复杂配置
- 主动和备用冗余建模
- 共因失效分析
- 系统可靠性计算
故障树分析(FTA)
- 故障树构建(AND、OR、k-of-n门)
- 最小割集识别
- 顶事件概率计算
- 重要性度量(Birnbaum、Fussell-Vesely)
- 共因失效建模
加速寿命测试数据分析
- 温度加速的阿伦尼乌斯模型
- 多应力加速的艾林模型
- 电压/机械应力的逆幂律
- 加速因子计算
- 使用条件下的寿命预测
威布尔分布拟合
- 两参数和三参数威布尔分布
- 最大似然估计(MLE)
- 概率图绘制
- 拟合优度检验
- 置信区间估计
- B寿命计算(B1、B10、B50)
热降额曲线
- 结温估计
- 热阻建模
- 安全工作区验证
- 热失控分析
- 散热器选择指导
先决条件
安装
pip install numpy scipy pandas matplotlib reliability weibull
可选依赖
# 用于高级可靠性建模
pip install surpyval lifelines
# 用于报告生成
pip install jinja2 openpyxl
使用模式
使用MIL-HDBK-217进行MTBF计算
import numpy as np
class MIL217Calculator:
"""MIL-HDBK-217F失效率计算器"""
# 基础失效率(每10^6小时)- 简化示例
BASE_RATES = {
'resistor_film': 0.0037,
'capacitor_ceramic': 0.012,
'capacitor_electrolytic': 0.12,
'diode_general': 0.024,
'transistor_bipolar': 0.074,
'ic_digital': 0.16,
'ic_linear': 0.21,
'inductor': 0.0017,
'connector_pin': 0.00066,
'pcb_layer': 0.00042,
}
# 温度因子(简化)
@staticmethod
def temp_factor(temp_c: float, component_type: str) -> float:
if 'capacitor_electrolytic' in component_type:
return np.exp((temp_c - 25) / 15)
return np.exp((temp_c - 25) / 20)
# 环境因子
ENV_FACTORS = {
'ground_benign': 1.0,
'ground_fixed': 2.0,
'ground_mobile': 5.0,
'airborne_inhabited': 4.0,
'airborne_uninhabited': 8.0,
'space_flight': 0.5,
}
def calculate_component_fr(self, component_type: str, temp_c: float,
environment: str, quantity: int = 1) -> float:
"""计算组件类型的失效率"""
base_rate = self.BASE_RATES.get(component_type, 0.1)
temp_factor = self.temp_factor(temp_c, component_type)
env_factor = self.ENV_FACTORS.get(environment, 2.0)
return base_rate * temp_factor * env_factor * quantity
def calculate_system_mtbf(self, components: list) -> dict:
"""根据组件列表计算系统MTBF"""
total_fr = sum(c['failure_rate'] for c in components)
mtbf = 1e6 / total_fr # 小时
return {
'total_failure_rate': total_fr,
'mtbf_hours': mtbf,
'mtbf_years': mtbf / 8760,
'components': components
}
# 示例用法
calc = MIL217Calculator()
components = [
{'type': 'resistor_film', 'qty': 100, 'temp': 55},
{'type': 'capacitor_ceramic', 'qty': 50, 'temp': 55},
{'type': 'ic_digital', 'qty': 10, 'temp': 65},
]
for comp in components:
comp['failure_rate'] = calc.calculate_component_fr(
comp['type'], comp['temp'], 'ground_fixed', comp['qty']
)
result = calc.calculate_system_mtbf(components)
print(f"系统MTBF: {result['mtbf_hours']:.0f} 小时 ({result['mtbf_years']:.1f} 年)")
威布尔分析
from reliability.Fitters import Fit_Weibull_2P
from reliability.Probability_plotting import Weibull_probability_plot
import matplotlib.pyplot as plt
# 寿命测试数据(失效时间,小时)
failures = [1200, 1500, 1800, 2100, 2400, 2800, 3200, 3800, 4500, 5500]
censored = [6000, 6000, 6000] # 测试结束时仍在运行的单元
# 拟合威布尔分布
fit = Fit_Weibull_2P(
failures=failures,
right_censored=censored,
show_probability_plot=False
)
print(f"Beta (形状参数): {fit.beta:.3f}")
print(f"Eta (尺度参数): {fit.eta:.1f} 小时")
print(f"B10寿命: {fit.distribution.quantile(0.1):.1f} 小时")
print(f"B50寿命: {fit.distribution.quantile(0.5):.1f} 小时")
print(f"平均寿命: {fit.distribution.mean:.1f} 小时")
# 特定时间的可靠性
time = 2000 # 小时
R_2000 = fit.distribution.SF(time)
print(f"{time}小时的可靠性: {R_2000:.4f} ({R_2000*100:.2f}%)")
故障树分析
from typing import List, Dict
class FaultTreeNode:
def __init__(self, name: str, gate_type: str = None, probability: float = None):
self.name = name
self.gate_type = gate_type # 'AND', 'OR', 'VOTE'
self.probability = probability # 对于基本事件
self.children: List['FaultTreeNode'] = []
self.k = None # 对于k-out-of-n表决门
def add_child(self, child: 'FaultTreeNode'):
self.children.append(child)
def calculate_probability(self) -> float:
if self.probability is not None:
return self.probability
child_probs = [c.calculate_probability() for c in self.children]
if self.gate_type == 'AND':
result = 1.0
for p in child_probs:
result *= p
return result
elif self.gate_type == 'OR':
result = 1.0
for p in child_probs:
result *= (1 - p)
return 1 - result
elif self.gate_type == 'VOTE':
# k-out-of-n门
from itertools import combinations
from functools import reduce
import operator
n = len(child_probs)
k = self.k
prob = 0
for i in range(k, n + 1):
for combo in combinations(range(n), i):
term = 1.0
for j in range(n):
if j in combo:
term *= child_probs[j]
else:
term *= (1 - child_probs[j])
prob += term
return prob
# 示例:电源故障故障树
top = FaultTreeNode("电源故障", "OR")
primary_fails = FaultTreeNode("主电源故障", "AND")
primary_fails.add_child(FaultTreeNode("交流电源中断", probability=0.01))
primary_fails.add_child(FaultTreeNode("UPS故障", probability=0.001))
backup_fails = FaultTreeNode("备用电源故障", probability=0.005)
top.add_child(primary_fails)
top.add_child(backup_fails)
system_probability = top.calculate_probability()
print(f"顶事件概率: {system_probability:.6f}")
加速寿命测试分析
import numpy as np
from scipy.optimize import curve_fit
class ArrheniusModel:
"""温度应力的阿伦尼乌斯加速模型"""
def __init__(self):
self.activation_energy = None # eV
self.k_boltzmann = 8.617e-5 # eV/K
def acceleration_factor(self, temp_test: float, temp_use: float,
activation_energy: float) -> float:
"""计算测试条件与使用条件之间的加速因子"""
temp_test_k = temp_test + 273.15
temp_use_k = temp_use + 273.15
af = np.exp((activation_energy / self.k_boltzmann) *
(1/temp_use_k - 1/temp_test_k))
return af
def estimate_activation_energy(self, temps: List[float],
failure_rates: List[float]) -> float:
"""根据多温度测试数据估算活化能"""
temps_k = [t + 273.15 for t in temps]
inv_temps = [1/t for t in temps_k]
ln_rates = [np.log(r) for r in failure_rates]
# 线性回归: ln(rate) = A + Ea/(k*T)
slope, intercept = np.polyfit(inv_temps, ln_rates, 1)
self.activation_energy = slope * self.k_boltzmann
return self.activation_energy
# 示例用法
model = ArrheniusModel()
# 多温度测试结果
test_temps = [85, 105, 125] # 摄氏度
failure_rates = [0.001, 0.005, 0.02] # 每1000小时失效数
ea = model.estimate_activation_energy(test_temps, failure_rates)
print(f"估算的活化能: {ea:.2f} eV")
# 预测到使用条件
af = model.acceleration_factor(125, 55, ea)
use_life = 2000 * af # 如果在125°C下2000小时
print(f"加速因子: {af:.1f}倍")
print(f"在55°C下的预测寿命: {use_life:.0f} 小时")
使用指南
何时使用此技能
- 新产品可靠性预测
- 可靠性设计(DfR)活动
- 保修成本预测
- FMEA和FMECA开发
- 寿命测试计划与分析
- 现场失效分析支持
最佳实践
- 使用适当的失效率模型 用于应用环境
- 考虑所有组件的温度降额
- 记录可靠性预测中的所有假设
- 根据实际数据验证预测(当可用时)
- 根据实际性能更新失效率
- 在早期寿命可靠性模型中包含制造缺陷
流程集成
- ee-environmental-testing(寿命测试分析)
- ee-hardware-validation(可靠性验证)
- ee-dfm-review(可靠性设计评审)
依赖项
- reliability: Python可靠性工程库
- scipy: 统计分析
- numpy: 数值计算
参考文献
- MIL-HDBK-217F可靠性预测
- FIDES可靠性方法指南
- IEEE 1413可靠性预测方法
- SAE JA1000可靠性程序标准