可靠性分析Skill reliability-analysis

可靠性分析技能是用于电子硬件组件和系统可靠性预测与分析的专用工具。它提供MTBF/MTTF计算、失效率数据库查询、FMEA/FMECA支持、故障树分析、加速寿命测试数据分析等核心功能。该技能支持MIL-HDBK-217F、Telcordia SR-332、FIDES等多种行业标准方法,能够进行威布尔分布拟合、热降额分析、可靠性框图建模等专业分析。适用于新产品可靠性预测、设计验证、寿命测试分析、保修成本估算等场景。关键词:可靠性分析,MTBF计算,FMEA,故障树分析,加速寿命测试,威布尔分布,电子硬件可靠性,失效率预测,可靠性工程,寿命预测。

质量管理 0 次安装 2 次浏览 更新于 2/25/2026

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开发
  • 寿命测试计划与分析
  • 现场失效分析支持

最佳实践

  1. 使用适当的失效率模型 用于应用环境
  2. 考虑所有组件的温度降额
  3. 记录可靠性预测中的所有假设
  4. 根据实际数据验证预测(当可用时)
  5. 根据实际性能更新失效率
  6. 在早期寿命可靠性模型中包含制造缺陷

流程集成

  • ee-environmental-testing(寿命测试分析)
  • ee-hardware-validation(可靠性验证)
  • ee-dfm-review(可靠性设计评审)

依赖项

  • reliability: Python可靠性工程库
  • scipy: 统计分析
  • numpy: 数值计算

参考文献

  • MIL-HDBK-217F可靠性预测
  • FIDES可靠性方法指南
  • IEEE 1413可靠性预测方法
  • SAE JA1000可靠性程序标准