ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

IEC 61508-1功能安全入门:安全生命周期、SIL选型与文档追溯落地指南

IEC 61508-1功能安全入门:安全生命周期、SIL选型与文档追溯落地指南

简介:IEC 61508-1:2010 是功能安全领域的基础性国际标准,面向从事电气/电子/可编程电子(E/E/PE)安全相关系统设计、开发与认证的工程师、功能安全评估人员及汽车电子从业者。该标准作为基本安全出版物,系统规定了风险评估、安全生命周期管理、系统架构、可靠性分析、软件开发、验证与确认、变更管理、人员资质及文档记录等通用要求,并促进各产品与应用部门标准的制定。资源为高清可复制版 PDF,非扫描件,共 1 个文件,压缩包约 2.11MB,便于检索、引用与二次整理。目前已有 615 人学习下载,适合需要深入理解功能安全框架、开展合规性评估或准备认证的技术人员参考,可帮助读者快速掌握标准核心条款与实施要点。

1. 功能安全入门:IEC 61508-1 到底在管什么

很多做嵌入式或者工业控制的工程师第一次翻 IEC 61508-1:2010 这份 Part 1 通用要求时,都会有种“这文档怎么全是流程和术语”的错觉。它不像 Part 2、Part 3 那样直接给你硬件失效率公式或者软件测试方法,而是把整个功能安全生命周期(Functional Safety Lifecycle)的骨架先立起来——从概念、范围定义、危害与风险分析,到安全需求分配、设计、实现、验证、确认、运行维护,再到变更管理和退役。换句话说,Part 1 是整套 61508 的“宪法”,后面几个 Part 都是它的实施细则。

这份文档真正解决的是:当你做一个安全相关系统(比如急停回路、燃烧器管理、列车门控),怎么证明“我做的这套东西在出故障时还能把风险压到可接受范围”。它适合系统架构师、功能安全经理、认证对接人,以及被拉来做 SIL 评估却不知道从哪下手的嵌入式工程师。如果你只关心某个 MCU 的失效模式,Part 1 不会直接给你答案,但它会告诉你这个 MCU 该在哪个阶段被评估、由谁签字、留什么证据。

2. 安全生命周期与 SIL:从概念到验证的完整链路

2.1 为什么 Part 1 把生命周期拆成 16 个阶段

IEC 61508-1 的核心图就是那张安全生命周期框图,它把项目从“概念”到“退役”切成 16 个阶段。很多团队翻车不是因为技术不行,而是跳过了概念阶段的“整体范围定义”,直接冲进设计,结果到验证阶段发现安全需求根本没分配下去。Part 1 强制要求每个阶段有明确的输入、输出、验证活动和责任人,本质上是把“安全”从一句口号变成可追溯的工程活动。

我一般会把 16 个阶段归成四段:概念与范围(1-5)、设计与实现(6-10)、验证与确认(11-13)、运行与变更(14-16)。其中第 5 阶段“危害与风险分析”和第 7 阶段“安全需求分配”是后面所有工作的锚点。如果这两个阶段输出的是模糊描述,比如“系统应足够安全”,那后面 SIL 等级根本没法选,验证也无从下手。

2.2 SIL 等级怎么选:不是拍脑袋,是风险图加 ALARP

SIL(Safety Integrity Level)分 1 到 4,数字越大要求越严。Part 1 给出的选型逻辑是:先做危害与风险分析,用风险图(Risk Graph)或者 LOPA(Layer of Protection Analysis)确定所需的风险降低量,再映射到 SIL。风险图一般看四个参数:后果严重度(C)、暴露频率(F)、避免可能性(P)、发生概率(W)。这四个参数组合后查表得到 SIL 目标。

常见做法是先用风险图做初步筛选,再用 LOPA 做定量校核。我见过不少项目直接拿“行业惯例”定 SIL 2,结果要么过度设计成本爆炸,要么该做 SIL 3 的地方只做了 SIL 2,认证时被开不符合项。Part 1 明确要求 SIL 选择必须可追溯,也就是说你得留下风险分析的输入、假设、参数来源和结论记录。

2.3 安全需求怎么写才不会被审核打回

安全需求分两类:安全功能需求(SFR)和安全完整性需求(SIR)。SFR 描述“系统该做什么来降风险”,比如“当温度超过 150℃ 时,10 秒内切断加热电源”。SIR 描述“做这件事的可靠程度”,比如“该功能需达到 SIL 2,每小时危险失效概率在 10^-7 到 10^-6 之间”。

写需求时最容易踩的坑是把 SFR 和 SIR 混在一起,或者写成“系统应安全运行”这种无法验证的句子。Part 1 要求每条安全需求必须可验证、可追溯、无歧义。我一般会用一个需求模板:功能描述 + 触发条件 + 响应时间 + 安全状态 + SIL 等级 + 验证方法。这样写出来的需求,后面做验证测试时可以直接一条条对应。

2.4 用表格把安全需求分配到子系统

安全需求分配是 Part 1 里最容易被低估的环节。系统级需求要拆到子系统、模块甚至具体通道,每个分配都要有依据。下面这张表是我在某次模拟项目里用过的分配模板,把系统级 SFR 拆到三个子系统:

系统级需求编号需求描述分配子系统子系统需求编号SIL 等级验证方法
SFR-001超温时 10s 内切断加热传感子系统SFR-001-SSIL 2故障注入测试
SFR-001超温时 10s 内切断加热逻辑子系统SFR-001-LSIL 2硬件在环测试
SFR-001超温时 10s 内切断加热执行子系统SFR-001-ASIL 2断电响应测试
SFR-002传感器断线时进入安全状态传感子系统SFR-002-SSIL 2断线模拟测试
SFR-002传感器断线时进入安全状态逻辑子系统SFR-002-LSIL 2诊断覆盖率分析

这张表的关键是“分配依据”列虽然没写出来,但实际项目里必须有一份分配说明,解释为什么这个需求分给这个子系统、SIL 等级是否降级、降级理由是什么。Part 1 允许在分配过程中做 SIL 降级,但必须有充分理由并记录。

2.5 验证与确认的区别:别等认证前才搞混

验证(Verification)是检查“你做的东西符合需求”,确认(Validation)是检查“你做的东西在真实场景下确实能降风险”。Part 1 把这两个活动分得很清楚:验证贯穿每个阶段,确认主要在系统集成后做。很多团队把验证报告和确认报告写成同一份,审核时被要求拆分重做。

我一般会在项目计划里就把验证活动和确认活动分开列:验证看需求追溯矩阵、测试用例、评审记录;确认看现场试运行、故障场景模拟、操作员访谈。确认阶段必须用真实或高保真环境,不能用纯仿真代替,除非你能证明仿真覆盖了所有关键工况。

3. 文档与证据链:Part 1 要求你留什么、怎么留

3.1 安全计划不是形式主义,是项目地图

Part 1 第 6 章明确要求编制安全计划(Safety Plan),内容至少包括:安全生命周期各阶段的活动、责任人、时间节点、验证方式、变更控制流程。很多团队把安全计划写成一份十页的 Word 文档然后锁进抽屉,等到认证时发现实际执行和计划完全对不上。

我的做法是把安全计划做成活页:每个阶段一张表,列出输入文档、输出文档、责任人、完成状态、验证记录链接。这样每周项目例会可以直接过一遍,哪个阶段卡住一目了然。安全计划不是给审核员看的,是给项目组自己用的。

3.2 文档追溯矩阵怎么建才不崩

追溯矩阵是 Part 1 证据链的核心。它要能把危害 → 安全需求 → 设计 → 实现 → 测试 → 验证报告串起来。常见做法是用 Excel 或者需求管理工具建三张表:危害-需求表、需求-设计表、设计-测试表。每张表都有唯一编号,跨表引用。

我踩过的坑是编号规则中途变更,导致前期文档和后期文档对不上。后来固定了一套编号:HZ-XXX 表示危害,SFR-XXX 表示安全功能需求,SIR-XXX 表示安全完整性需求,DES-XXX 表示设计项,TST-XXX 表示测试用例。编号一旦分配就不再复用,废弃的编号标记为“已作废”但保留记录。

3.3 功能安全评估与审核:什么时候请外部,什么时候自己做

Part 1 允许功能安全评估(Functional Safety Assessment)由独立组织做,也可以内部做,但内部做必须保证评估人员的独立性——不能是设计者自己评估自己。我一般建议:SIL 1 项目可以内部评估加外部审核,SIL 2 以上至少做一次外部评估,SIL 3 以上必须全程有独立评估员参与。

评估的时机也很关键。Part 1 建议在安全生命周期几个关键节点做评估:概念阶段结束、安全需求分配完成、设计完成、验证完成、确认完成。很多团队只在最后做一次评估,结果发现前期概念阶段的假设就有问题,返工成本极高。

3.4 用检查表把 Part 1 要求逐条落地

下面这张检查表是我从 Part 1 条款里拆出来的,用于项目自查。它不是标准原文,是我自己整理的落地清单:

检查项对应 Part 1 条款输出证据常见缺失
整体范围定义7.2范围定义文档未定义边界和接口
危害与风险分析7.4风险分析报告未考虑共因失效
安全需求规格7.5安全需求文档需求不可验证
安全需求分配7.6分配矩阵分配依据缺失
安全计划6.2安全计划文档未随项目更新
验证计划7.9验证计划验证方法不明确
确认计划7.10确认计划未覆盖真实工况
功能安全评估8评估报告评估员独立性不足
变更管理7.16变更记录变更未重新评估
文档追溯7.17追溯矩阵编号不一致

这张表建议在项目启动会上过一遍,每个检查项指定责任人,后期每周更新状态。

4. 避坑与排查:Part 1 落地时最容易翻车的五件事

4.1 现象:风险分析做完了,但 SIL 选不出来

原因:风险图参数定义模糊,比如“暴露频率”到底按小时还是按天算,团队里没人说得清。解决:在风险分析开始前,先开一次参数定义会,把 C、F、P、W 四个参数的取值标准和数据来源写进分析计划。如果实在定不下来,先用 LOPA 做半定量分析,倒推参数范围。

4.2 现象:安全需求写了几十页,验证时发现没法测

原因:需求写成了“系统应可靠运行”这种不可验证的句子。解决:每条需求必须包含可测量的判据,比如响应时间、失效概率、诊断覆盖率。写完需求后让测试工程师先看一遍,测试工程师说“这条我没法测”的需求,全部打回重写。

4.3 现象:验证报告和确认报告内容几乎一样

原因:团队把验证和确认当成同一件事,或者确认阶段只是把验证测试重跑一遍。解决:验证看需求符合性,确认看实际风险降低效果。确认阶段必须引入真实工况或高保真模拟,并且要有操作员、维护人员参与。确认报告里要有“风险降低量是否达到目标”的明确结论。

4.4 现象:变更管理失控,改了一个电阻没重新评估

原因:变更流程没有和功能安全评估挂钩,硬件工程师觉得“只改了一个电阻”不需要走流程。解决:在变更控制程序里明确:任何涉及安全相关硬件的变更,无论大小,都必须触发影响分析,判断是否影响安全需求、SIL 等级、验证结果。影响分析结论要记录,必要时重新做验证。

4.5 现象:文档追溯矩阵对不上,审核员开了不符合项

原因:编号规则中途变更,或者不同工程师用不同模板。解决:项目启动时固定编号规则和文档模板,所有文档由配置管理员统一编号。追溯矩阵每周更新一次,发现断链立即补。审核前做一次全链路追溯演练,从任意一条危害出发,看能不能走到对应的验证报告。

5. 从 Part 1 到落地:一个可复用的功能安全启动清单

5.1 项目启动前必须确认的六个输入

在正式启动功能安全活动之前,我一般会确认六件事:系统边界和接口定义、初步危害清单、目标 SIL 等级范围、适用法规和标准清单、项目组角色和职责、配置管理工具。这六项缺任何一项,后面都会返工。特别是系统边界,很多项目做到一半发现某个子系统到底算不算在安全范围内,团队内部吵翻天。

5.2 用 Python 脚本自动检查追溯矩阵断链

追溯矩阵手工维护容易出错,我写过一个简单的 Python 脚本做断链检查。它读取 Excel 里的三张表,检查每个危害是否有对应需求、每个需求是否有对应设计和测试、每个测试是否有验证记录。

import pandas as pd # 读取追溯矩阵的三个工作表 hazards = pd.read_excel("trace_matrix.xlsx", sheet_name="危害-需求") designs = pd.read_excel("trace_matrix.xlsx", sheet_name="需求-设计") tests = pd.read_excel("trace_matrix.xlsx", sheet_name="设计-测试") # 检查每个危害是否至少有一条需求 missing_req = hazards[hazards["需求编号"].isna()] if not missing_req.empty: print("以下危害缺少对应需求:") print(missing_req[["危害编号", "危害描述"]]) # 检查每个需求是否至少有一条设计 req_ids = hazards["需求编号"].dropna().unique() design_req_ids = designs["需求编号"].dropna().unique() missing_design = set(req_ids) - set(design_req_ids) if missing_design: print("以下需求缺少对应设计:", missing_design) # 检查每个设计是否至少有一条测试 design_ids = designs["设计编号"].dropna().unique() test_design_ids = tests["设计编号"].dropna().unique() missing_test = set(design_ids) - set(test_design_ids) if missing_test: print("以下设计缺少对应测试:", missing_test) # 检查测试是否有验证记录 missing_verification = tests[tests["验证记录"].isna()] if not missing_verification.empty: print("以下测试缺少验证记录:") print(missing_verification[["测试编号", "测试描述"]])

这个脚本的逻辑很直接:用集合差集找出断链。参数说明:Excel 文件路径按实际项目改,列名要和表头一致。我一般把它挂在 CI 里,每次追溯矩阵更新后自动跑一遍,断链会直接报出来。注意这个脚本只检查“有没有”,不检查“对不对”,内容正确性还是得靠人工评审。

5.3 功能安全评估前自查的四个动作

评估前一周,我会做四件事:第一,把追溯矩阵从头到尾走一遍,确保每条危害都能走到验证报告;第二,把安全计划的实际执行记录和计划对照,偏差项准备好解释;第三,把变更记录过一遍,确认每次变更都有影响分析;第四,把验证和确认报告分开归档,确保没有混在一起。这四个动作做完,评估时被开严重不符合项的概率会低很多。

5.4 一个习惯:每阶段结束留一页“安全状态快照”

我自己的习惯是每个安全生命周期阶段结束时,写一页“安全状态快照”,内容包括:当前阶段完成了什么、遗留了哪些开口项、下阶段输入是否齐备、风险是否有变化。这一页不交给审核员,是给项目组自己看的。很多项目做着做着就忘了当初的假设,这一页快照能在后期追溯时省下大量翻邮件的时间。

功能安全这件事,Part 1 给的是框架,真正落地靠的是每个阶段不偷懒、每份记录不糊弄。我见过太多项目在最后认证阶段疯狂补文档,补出来的东西自己都不信。与其那样,不如从第一天就把该留的证据留好。希望帮到你。

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进