简介:IEC 61508-1:2010《电气/电子/可编程电子安全相关系统的功能安全 第1部分:一般要求》是功能安全领域的基石性国际标准,面向汽车电子、工业控制、轨道交通等行业的系统工程师、安全评估人员及认证从业者。该标准为E/E/PE安全相关系统的设计、开发、验证与维护提供通用框架,涵盖风险评估、安全生命周期管理、系统架构、可靠性分析、软件开发、验证确认、变更管理、人员资质、文档记录及合规性评估等核心要求,并作为基本安全出版物指导各产品与应用领域标准的制定。资源为高清可复制PDF,非扫描版,共1个文件,压缩包约2.11MB,便于检索引用与二次编辑。目前已有616人学习下载,适合需要深入理解功能安全通用要求、开展安全完整性等级评估或准备认证审核的读者参考使用。
1. 一份被低估的“母标准”:IEC 61508-1 到底管什么
如果你做汽车电子、工业控制或者医疗器械的嵌入式开发,大概率在某个评审会上听过一句话:“这个安全功能得按 61508 来。”但真正翻开 IEC 61508-1 的人不多,因为它是整套标准里最“虚”的一本——没有具体公式,没有 SIL 等级的计算表格,全是流程、职责、生命周期阶段的要求。很多人第一次读会觉得像在读项目管理手册,翻两页就放下了。
这份 2010 年第二版的一般要求,实际上是整个 IEC 61508 系列的“宪法”。它定义了功能安全的总体框架、安全生命周期的各个阶段、文档要求、管理职责、功能安全评估的规则。后面 Part 2 讲硬件、Part 3 讲软件、Part 4 讲术语、Part 5 讲 SIL 确定方法、Part 6 讲 Part 2 和 Part 3 的应用指南、Part 7 讲技术措施概览——它们都得服从 Part 1 定下的框架。换句话说,Part 1 不教你算 PFD,但它决定了你算 PFD 之前该做什么、谁来做、做完怎么记录、谁来审。
这份资源是高清可复制版本,不是扫描件,意味着你可以直接搜索关键词、复制条款编号、做批注。对于需要写安全手册、做合规映射、准备功能安全评估材料的工程师来说,可复制这一点比什么都重要。适合谁看:正在搭建功能安全流程的团队负责人、需要写安全计划的系统工程师、准备功能安全评估的审核对接人,以及想搞清楚“为什么 Part 2 和 Part 3 要那样要求”的硬件和软件开发者。
2. 安全生命周期不是流程图:拆开 Part 1 第 7 章的 16 个阶段
2.1 为什么 Part 1 把生命周期拆得这么细
IEC 61508-1 第 7 章是整份文件的核心,它把整体安全生命周期从概念阶段一直拉到退役处置,一共列了 16 个阶段。很多人第一次看 Figure 2 会觉得这就是个瀑布模型,没什么特别。但真正做项目的时候你会发现,这份生命周期图的价值不在于“顺序”,而在于每个阶段都绑定了明确的目标(Objective)和需求(Requirements),而且每个阶段都有对应的验证活动。
我一般会把第 7 章理解成三层结构:第一层是“前端的风险与分配”,包括概念、整体范围定义、危害与风险分析、整体安全要求、安全要求分配;第二层是“实现与验证”,包括 E/E/PE 系统安全要求规范、实现、安装调试、整体安全验证;第三层是“运行与退役”,包括运行维护修理、修改与改造、退役处置。每一层之间不是简单的前后关系,而是有反馈回路的——比如整体安全验证发现不满足要求,得回到安全要求分配阶段重新评估。
这里有个容易被忽略的点:Part 1 明确要求“整体安全要求分配”阶段必须把安全功能分配给 E/E/PE 系统、其他技术(比如机械、液压)和外部风险降低措施。很多团队做安全概念的时候直接默认所有安全功能都由电控实现,结果在评估时被质疑“为什么不用机械限位”。Part 1 的逻辑是:先看风险,再看用什么技术降低风险最合理,最后才决定哪些交给 E/E/PE。
2.2 用一张表把 16 个阶段的输入输出对齐
与其硬背条款,不如把每个阶段的关键输入和输出整理成一张对照表。下面这张表是我自己在做安全计划时常用的简化版,条款号对应 Part 1 第 7 章的小节编号。
| 阶段 | 条款 | 关键输入 | 关键输出 |
|---|---|---|---|
| 概念 | 7.2 | 用户需求、初步风险信息 | 整体安全概念描述 |
| 整体范围定义 | 7.3 | 安全概念、边界条件 | 系统边界、环境描述 |
| 危害与风险分析 | 7.4 | 范围定义、历史数据 | 危害清单、风险等级 |
| 整体安全要求 | 7.5 | 风险分析结果 | 整体安全要求规范 |
| 安全要求分配 | 7.6 | 整体安全要求 | 分配方案、SIL 目标 |
| 运行维护计划 | 7.7 | 分配方案 | 运维计划 |
| 安全验证计划 | 7.8 | 整体安全要求 | 验证计划 |
| 安装调试计划 | 7.9 | 分配方案 | 安装调试计划 |
| E/E/PE 安全要求规范 | 7.10 | 分配方案 | 系统安全要求规范 |
| E/E/PE 实现 | 7.11 | 安全要求规范 | 硬件/软件实现 |
| 其他风险降低措施 | 7.12 | 分配方案 | 非电控措施实现 |
| 安装调试 | 7.13 | 安装调试计划 | 调试记录 |
| 整体安全验证 | 7.14 | 验证计划 | 验证报告 |
| 运行维护修理 | 7.15 | 运维计划 | 运维记录 |
| 修改与改造 | 7.16 | 变更请求 | 变更影响分析 |
| 退役处置 | 7.17 | 退役计划 | 退役记录 |
这张表的作用不是替代标准原文,而是让你在写安全计划的时候能快速定位:我现在这个阶段该产出什么文件,这些文件又该喂给哪个下游阶段。Part 1 第 5 章专门讲了文档要求,核心思想是“每个阶段的活动都要有可追溯的记录”,所以这张表里的输出列,实际上就是你的文档清单。
2.3 一个可操作的合规检查脚本
如果你手头有一堆项目文档,想快速检查是否覆盖了 Part 1 要求的阶段输出,可以用下面这个 Python 脚本做一轮粗筛。它不判断内容质量,只检查文件名和目录结构里有没有对应的关键词。
import os import re # Part 1 第 7 章要求的阶段输出关键词映射 phase_keywords = { "7.2 概念": ["concept", "概念", "safety_concept"], "7.3 范围定义": ["scope", "范围", "boundary"], "7.4 危害风险": ["hazard", "risk", "危害", "风险"], "7.5 整体安全要求": ["overall_safety_req", "整体安全要求", "safety_requirement"], "7.6 安全要求分配": ["allocation", "分配", "sil_assignment"], "7.7 运维计划": ["om_plan", "运维计划", "operation_maintenance"], "7.8 验证计划": ["validation_plan", "验证计划"], "7.9 安装调试计划": ["commissioning", "安装调试"], "7.10 系统安全要求": ["system_safety_req", "系统安全要求", "epe_spec"], "7.11 实现": ["realisation", "实现", "implementation"], "7.12 其他措施": ["other_risk", "其他风险降低"], "7.13 安装调试": ["commissioning_record", "调试记录"], "7.14 整体验证": ["overall_validation", "整体验证"], "7.15 运行维护": ["om_record", "运维记录"], "7.16 修改改造": ["modification", "变更", "retrofit"], "7.17 退役": ["decommission", "退役", "disposal"], } def scan_docs(root_dir): found = {phase: [] for phase in phase_keywords} for dirpath, _, filenames in os.walk(root_dir): for fname in filenames: fname_lower = fname.lower() for phase, keywords in phase_keywords.items(): for kw in keywords: if kw.lower() in fname_lower: found[phase].append(os.path.join(dirpath, fname)) break return found if __name__ == "__main__": result = scan_docs("./project_docs") for phase, files in result.items(): status = "OK" if files else "MISSING" print(f"[{status}] {phase}: {len(files)} 个文件") for f in files: print(f" - {f}")这段脚本的逻辑很直接:遍历项目文档目录,用阶段关键词去匹配文件名。phase_keywords字典里的关键词是我根据 Part 1 第 7 章的英文标题和常见中文译法整理的,你可以根据自己的命名习惯增删。scan_docs函数返回每个阶段匹配到的文件列表,最后打印时用OK和MISSING标记覆盖情况。
参数方面,root_dir换成你的文档根目录就行。注意这个脚本只做文件名匹配,不读文件内容,所以如果你们的文档命名很随意,可能需要先统一命名规范。我一般会把这个脚本放在 CI 里跑,每次提交文档后自动检查有没有阶段遗漏,比人工翻目录靠谱得多。
3. 从条款到安全计划:把 Part 1 第 6 章的管理要求落成可执行模板
3.1 功能安全管理到底要管什么
Part 1 第 6 章讲的是功能安全管理,条款不多,但每一条都直击项目管理的痛点。它要求组织必须指定一个“功能安全负责人”,这个人要有足够的权限和资源来推动安全活动;要求所有参与安全生命周期的人员必须具备相应的资质和能力;要求建立一套机制来确保安全要求在整个生命周期中被正确执行。
很多团队在第一次做功能安全项目时,最容易翻车的地方就在这里。大家把精力都花在技术实现上,结果评估的时候被问“谁负责批准安全计划”“变更谁审批”“冲突怎么仲裁”,答不上来。Part 1 的逻辑是:技术问题可以慢慢解决,但管理架构必须先立住,否则后面所有活动都没有责任人。
我一般会把第 6 章的要求拆成三个可落地的动作:第一,出一份《功能安全计划》,明确安全活动的范围、职责矩阵、里程碑和交付物;第二,出一份《能力矩阵》,列出每个角色需要的技能和当前人员的差距;第三,建立变更控制流程,任何影响安全功能的变更都必须走影响分析。这三份文件不需要写得多漂亮,但必须存在,而且必须被实际使用。
3.2 职责矩阵模板与填写说明
下面这个职责矩阵是我在多个项目中反复用过的简化版,列对应 Part 1 第 7 章的主要阶段,行对应典型角色。你可以直接复制到 Excel 里用。
| 阶段 | 功能安全负责人 | 系统工程师 | 硬件工程师 | 软件工程师 | 验证工程师 | 评估师 |
|---|---|---|---|---|---|---|
| 概念 | A | R | C | C | I | I |
| 危害风险分析 | A | R | C | C | C | I |
| 整体安全要求 | A | R | C | C | C | I |
| 安全要求分配 | A | R | C | C | C | I |
| 系统安全要求规范 | A | R | C | C | C | I |
| 硬件实现 | I | A | R | C | C | I |
| 软件实现 | I | A | C | R | C | I |
| 整体验证 | A | C | C | C | R | I |
| 功能安全评估 | A | C | C | C | C | R |
图例:R=负责执行,A=批准,C=被咨询,I=被通知。这个矩阵的关键在于“A”不能太多,否则决策链会堵死。我一般建议功能安全负责人对安全计划和安全要求分配有批准权,系统工程师对技术实现方案有批准权,评估师只对评估结论负责,不参与设计决策。
填写的时候有个坑:很多团队把“被咨询”和“被通知”混为一谈,结果所有文档都抄送给所有人,评审会开成茶话会。Part 1 第 6 章强调“有效沟通”,但有效沟通的前提是知道谁需要什么信息。我的做法是:C 列的人必须在评审前给出书面意见,I 列的人只在里程碑节点收到摘要。
3.3 用脚本生成安全计划骨架
如果你不想从零开始写安全计划,可以用下面这个 Python 脚本生成一个 Markdown 骨架,然后往里填内容。脚本会按照 Part 1 第 7 章的阶段顺序,自动生成章节标题和占位说明。
# generate_safety_plan.py # 根据 IEC 61508-1 第 7 章阶段生成安全计划骨架 phases = [ ("1. 概念", "描述整体安全概念,包括系统用途、边界、初步风险认知"), ("2. 整体范围定义", "定义系统边界、运行环境、生命周期范围"), ("3. 危害与风险分析", "列出危害清单、风险等级、分析方法"), ("4. 整体安全要求", "定义整体安全要求规范,包括安全功能和安全完整性要求"), ("5. 安全要求分配", "将安全要求分配给 E/E/PE、其他技术、外部措施"), ("6. 运行维护计划", "定义运行维护阶段的策略、周期、记录要求"), ("7. 安全验证计划", "定义验证活动、方法、时机、通过准则"), ("8. 安装调试计划", "定义安装调试步骤、检查点、验收准则"), ("9. E/E/PE 安全要求规范", "定义系统级安全要求,包括硬件和软件接口"), ("10. E/E/PE 实现", "描述硬件和软件的实现活动、工具链、编码规范"), ("11. 其他风险降低措施", "描述非电控措施的实现和验证"), ("12. 安装调试", "记录安装调试结果,包括偏差处理"), ("13. 整体安全验证", "记录验证活动结果,包括测试报告和审查记录"), ("14. 运行维护修理", "记录运行维护活动,包括故障处理和预防性维护"), ("15. 修改与改造", "描述变更管理流程,包括影响分析和回归验证"), ("16. 退役处置", "描述退役条件和处置流程"), ] template = "# 功能安全计划\n\n" template += "> 依据 IEC 61508-1:2010 第 7 章编制\n\n" for title, desc in phases: template += f"## {title}\n\n" template += f"**活动描述**:{desc}\n\n" template += "**输入**:\n\n**输出**:\n\n**责任人**:\n\n**验证方式**:\n\n" with open("safety_plan_skeleton.md", "w", encoding="utf-8") as f: f.write(template) print("安全计划骨架已生成:safety_plan_skeleton.md")脚本里的phases列表是我根据 Part 1 第 7 章的小节标题和实际项目经验整理的,每个阶段配了一句活动描述。生成出来的 Markdown 文件里,每个阶段都有“输入”“输出”“责任人”“验证方式”四个空位,你只需要往里填内容就行。
参数说明:phases列表可以按需增删,如果你的项目不涉及某个阶段(比如纯软件项目可能没有“安装调试”),直接注释掉对应行即可。输出文件名safety_plan_skeleton.md可以改成你项目约定的命名。这个脚本的好处是保证你不会漏掉 Part 1 要求的任何一个阶段,而且生成的骨架可以直接放进版本控制,每次评审都在上面改。
4. 避坑与排查:读 Part 1 时最容易翻车的五个地方
4.1 把 Part 1 当技术手册读
现象:翻了几页发现全是流程和职责描述,没有公式也没有电路图,觉得“这标准没什么用”,然后扔到一边。
原因:Part 1 的定位是框架标准,它的价值在于定义“做什么”和“谁来做”,而不是“怎么做”。具体的技术实现要求分散在 Part 2 和 Part 3 里。
解决:读 Part 1 的时候带着两个问题:第一,这个阶段要求我产出什么文档?第二,这个阶段的输出要喂给谁?把这两个问题答清楚,Part 1 的作用就体现出来了。我一般会建议团队先读 Part 1 的第 7 章和第 8 章,再回头读第 5 章和第 6 章,这样更容易理解文档和管理要求的来龙去脉。
4.2 忽略“其他风险降低措施”的分配
现象:做安全要求分配的时候,把所有安全功能都分给了 E/E/PE 系统,评估时被质疑“为什么不用机械限位或泄压阀”。
原因:Part 1 第 7.6 条明确要求考虑“其他技术”和“外部风险降低措施”,但很多团队默认电控是唯一手段。
解决:在危害与风险分析阶段就列出所有可能的降低措施,包括机械、液压、气动、行政控制等。然后在分配阶段用一张表明确:哪些风险由 E/E/PE 承担,哪些由其他措施承担,哪些由外部措施承担。这张表要作为安全要求分配的输出文档保留。
4.3 文档追溯链断裂
现象:评估时被要求提供“从危害到安全要求再到测试用例”的追溯关系,结果发现文档之间没有交叉引用,只能靠记忆解释。
原因:Part 1 第 5 章要求文档必须可追溯,但很多团队在写文档时各写各的,没有建立统一的标识体系。
解决:给每个危害、每条安全要求、每个测试用例分配唯一 ID,并在文档中互相引用。比如危害 H-001 对应安全要求 SR-001,SR-001 对应测试用例 TC-001。这个 ID 体系不需要多复杂,但必须贯穿整个生命周期。我一般会在安全计划里专门开一节讲标识规则。
4.4 功能安全评估介入太晚
现象:项目快结束了才请评估师进来,结果发现前期文档缺失、流程不合规,整改成本极高。
原因:Part 1 第 8 章要求功能安全评估必须在安全生命周期中定期进行,但很多团队把评估当成“最终验收”。
解决:在安全计划里明确评估节点,一般建议在概念阶段结束后、安全要求分配完成后、整体验证完成后各做一次评估。评估师不需要全程参与,但关键节点的输出必须经过评估确认。这样即使发现问题,整改成本也可控。
4.5 变更管理走形式
现象:项目中期改了一个传感器型号,觉得“影响不大”就没走变更流程,结果评估时被查出追溯链断裂。
原因:Part 1 第 7.16 条要求任何修改都必须经过影响分析,但实际执行时容易被“赶进度”的心态绕过。
解决:建立轻量级的变更影响分析模板,任何变更都必须填写“是否影响安全功能”“是否影响 SIL 等级”“是否需要回归验证”三个问题。如果答案都是“否”,可以走简化流程;如果有任何一个“是”,必须走完整变更流程。这个模板不需要多复杂,但必须强制使用。
5. 进阶用法:用 Part 1 的框架反向检查你的安全案例
5.1 安全案例的“完整性自检清单”
安全案例是功能安全项目的最终交付物,它要论证系统在所有运行模式下都满足安全要求。Part 1 虽然没有直接叫“安全案例”,但第 7 章和第 8 章的要求合在一起,实际上就是安全案例的骨架。我一般会用下面这个清单做反向检查:
| 检查项 | 对应 Part 1 条款 | 常见缺失 |
|---|---|---|
| 危害与风险分析是否覆盖所有运行模式 | 7.4 | 只分析正常模式,忽略维护和故障模式 |
| 安全要求是否可追溯至危害 | 7.5 | 安全要求没有 ID,无法追溯 |
| 安全要求分配是否考虑了非电控措施 | 7.6 | 全部推给 E/E/PE |
| 验证计划是否覆盖所有安全要求 | 7.8 | 只验证功能,不验证完整性 |
| 变更记录是否完整 | 7.16 | 只有变更请求,没有影响分析 |
| 评估报告是否覆盖所有阶段 | 8.2 | 只评估最终产品,不评估过程 |
这个清单的好处是,你不需要从头读一遍 Part 1,只需要拿着安全案例逐项对照,缺什么补什么。我一般会在项目收尾阶段跑一遍这个清单,通常能发现三到五个遗漏点。
5.2 用 Part 1 的文档要求做一次“文档考古”
Part 1 第 5 章对文档的要求是“每个阶段的活动都要有可追溯的记录”。这句话反过来用就是:如果你在某个阶段找不到对应的记录,那这个阶段的活动很可能没有真正执行。我有个习惯,项目结束后会做一次“文档考古”——按照第 7 章的阶段顺序,逐个检查每个阶段的输出文档是否存在、是否完整、是否被下游引用。
具体操作:打开安全计划,从概念阶段开始,逐个阶段问三个问题:这个阶段的输出文档在哪?文档里的内容是否被下一个阶段引用?引用的地方有没有记录?如果三个问题都能答上来,说明追溯链是完整的;如果某个阶段答不上来,那这个阶段就是薄弱环节,下次项目要重点盯。
这个习惯帮我省了很多后悔药。有一次在一个模拟项目里,我发现“安装调试计划”的文档存在,但“安装调试记录”是空的,追问下去才知道调试活动做了但没记录。后来补记录花了整整一周,如果当时没查,评估时肯定翻车。
5.3 把 Part 1 的框架映射到部门标准
如果你所在的产品领域有专门的部门标准(比如汽车电子的 ISO 26262、工业控制的 IEC 61511、医疗器械的 IEC 62304),Part 1 的框架可以作为“上位法”来用。具体做法是:先列出部门标准的安全生命周期阶段,然后逐条映射到 Part 1 的第 7 章阶段,看看哪些阶段是部门标准没有覆盖的,哪些阶段是部门标准有额外要求的。
我一般会做一张映射表,左边是 Part 1 的阶段,右边是部门标准的对应条款,中间标注“一致”“补充”“替代”。这张表的价值在于:当评估师问“你们为什么没做某个活动”时,你可以指着映射表说“这个活动在部门标准里被合并到另一个阶段了,我们按部门标准执行”。这样既满足了 Part 1 的框架要求,又不会和部门标准冲突。
从那以后我每次拿到一份新的功能安全标准,都会先做一次这样的映射,确认它和 Part 1 的关系,再决定怎么落地。希望帮到你。
本文还有配套的精品资源,点击获取