功能安全
引言
功能安全(Functional Safety)关心的不是「系统正常时是否安全」,而是「系统出故障时是否仍然安全」。一个急停按钮在正常情况下当然能停机;功能安全要回答的是:如果它的触点粘连了、线缆被压断了、控制器的这一位翻转了,机器人还会不会停下来。这套方法论用量化的方式回答这个问题,并给出可验证的设计流程。标准清单 已经列出了相关标准是什么,本页面讨论的是怎么用它们——如何确定所需的性能等级、如何设计能达到该等级的回路、以及如何验证。
基本概念
安全功能(Safety Function)是为降低某个具体风险而设计的功能,必须逐条定义清楚。「机器人是安全的」不是一个安全功能;「打开安全门后,机械臂在 0.5 秒内停止并断开动力,达到 PLd」才是。
一个完整的安全功能定义包含:触发条件、响应动作、响应时间、以及所需的性能等级。
性能等级(Performance Level,PL)与安全完整性等级(Safety Integrity Level,SIL)是两套并行的量化体系:
| 体系 | 标准 | 等级 | 衡量对象 |
|---|---|---|---|
| PL | ISO 13849-1 | a(最低)到 e(最高) | 每小时危险失效概率 PFH |
| SIL | IEC 62061 / IEC 61508 | 1 到 3(工业机械) | 同上 |
两者可以近似对应:PLc ≈ SIL 1,PLd ≈ SIL 2,PLe ≈ SIL 3。机械行业通常用 PL,过程工业与复杂电子系统用 SIL。工业机器人的安全停止功能通常要求 PLd 或 PLe。
两者的实质都是同一个量——PFH(Probability of dangerous Failure per Hour,每小时危险失效概率):
| PL | PFH 区间(1/h) | 大致含义 |
|---|---|---|
| a | 10⁻⁵ ~ 10⁻⁴ | 约每 1–10 年一次危险失效 |
| b | 3×10⁻⁶ ~ 10⁻⁵ | |
| c | 10⁻⁶ ~ 3×10⁻⁶ | |
| d | 10⁻⁷ ~ 10⁻⁶ | 约每 100–1000 年一次 |
| e | 10⁻⁸ ~ 10⁻⁷ | 约每 1000–10000 年一次 |
风险评估与 PLr 确定
设计的起点不是选器件,而是确定每个安全功能需要达到什么等级(所需性能等级,PLr)。ISO 13849-1 给出一个基于三个参数的风险图:
- S(Severity,伤害严重度):S1 = 轻伤(可恢复);S2 = 重伤或死亡(不可恢复)
- F(Frequency,暴露频率与时长):F1 = 少见或短暂;F2 = 频繁或持续
- P(Possibility,避免伤害的可能性):P1 = 在特定条件下可能避免;P2 = 几乎不可能避免
以一台协作机械臂为例:末端夹持金属工件、速度 1 m/s、操作员需频繁进入工作区上下料。
- S:可能造成重伤 → S2
- F:频繁进入 → F2
- P:机械臂运动速度快,人来不及躲避 → P2
由风险图得 PLr = e。这是最高等级,意味着安全回路必须是双通道带交叉监控的架构(类别 4),且元件质量要求很高。
如果通过降低速度使操作员有机会躲避(P1),要求可降到 PLd——这说明风险评估不仅是评估,也是设计手段:改变机器的行为可以直接降低对安全回路的要求,往往比堆冗余硬件更经济。
评估必须逐个危险源、逐个工作模式进行。同一台机器在自动运行、示教、维护三种模式下的风险完全不同,示教模式下人在工作区内,通常是风险最高的场景。
安全回路架构
达到某个 PL 需要三个要素共同满足:结构类别(Category)、MTTFd(平均危险失效前时间)、DC(诊断覆盖率)。三者缺一不可——用最好的元件搭一个单通道回路,仍然达不到 PLe。
五种结构类别
| 类别 | 结构 | 单点故障后 | 典型 PL 上限 |
|---|---|---|---|
| B | 单通道,基本安全原则 | 丧失安全功能 | b |
| 1 | 单通道,经充分验证的元件 | 丧失安全功能 | c |
| 2 | 单通道 + 周期性测试 | 测试间隔内可能丧失 | d |
| 3 | 双通道 | 单点故障不丧失,但可能累积 | e |
| 4 | 双通道 + 高诊断覆盖 | 单点故障不丧失,故障可被及时发现 | e |
类别 3 与类别 4 的差别在于故障累积。类别 3 中,第一个通道失效后系统仍能工作,但这个故障未必被检出;等到第二个通道也失效,安全功能才彻底丧失,而此时没人知道。类别 4 要求诊断覆盖率达到「高」(DC ≥ 99%),使第一个故障在下次动作前就被发现并报警。
这对设计的实际含义是:类别 4 必须做交叉监控——两个通道互相检查对方的状态,不一致就报故障。这也是为什么安全继电器和安全 PLC 都是双通道输入、且要求两路信号在规定时间窗内同时变化。
PL 的计算
给定结构类别,PL 由 MTTFd 与 DC 共同确定。计算流程:
第一步:算每个通道的 MTTFd。 通道由多个元件串联,危险失效率相加:
对机电元件,MTTFd 通常由 B10d(10% 样本发生危险失效时的动作次数)换算:
其中 是每年的动作次数。这一步最容易被低估:一个 B10d = 2×10⁶ 次的接触器,若每分钟动作一次(每年约 50 万次),MTTFd 只有 40 年;若每小时动作一次,则是 2400 年。同一个元件在不同使用频率下的安全贡献相差两个数量级。
第二步:算平均诊断覆盖率。
DC 分四档:无(< 60%)、低(60–90%)、中(90–99%)、高(≥ 99%)。
第三步:校核共因失效(CCF)。 双通道架构的前提是两个通道独立失效。若两个通道用同一颗芯片供电、走同一根线缆、装在同一个受同样振动影响的位置,一个原因就能同时打掉两路。ISO 13849-1 用一张打分表评估 CCF,要求得分 ≥ 65 分才认可双通道的效果。
第四步:查表得 PL。 由类别、MTTFd 档位(低/中/高)与 DC 档位查标准中的图表。
def mttfd_from_b10d(b10d, ops_per_year):
"""由 B10d 与年动作次数换算 MTTFd(年)"""
return b10d / (0.1 * ops_per_year)
def channel_mttfd(components):
"""通道内元件串联:危险失效率相加"""
return 1.0 / sum(1.0 / m for m in components)
def dc_avg(components_mttfd, components_dc):
"""平均诊断覆盖率,按 1/MTTFd 加权"""
num = sum(dc / m for m, dc in zip(components_mttfd, components_dc))
den = sum(1.0 / m for m in components_mttfd)
return num / den
def mttfd_band(years):
"""ISO 13849-1 的 MTTFd 档位;单通道上限为 100 年"""
y = min(years, 100.0) # 标准规定单通道计入上限
if y < 3: return '不可接受'
if y < 10: return '低'
if y < 30: return '中'
return '高'
def dc_band(dc):
if dc < 0.60: return '无'
if dc < 0.90: return '低'
if dc < 0.99: return '中'
return '高'
if __name__ == '__main__':
# 例:安全门开关 + 安全继电器 + 接触器,每小时开门 2 次
ops = 2 * 8 * 250 # 每年约 4000 次
parts = [
('安全门开关', mttfd_from_b10d(2e6, ops), 0.99),
('安全继电器', 300.0, 0.99), # 厂商直接给 MTTFd
('接触器', mttfd_from_b10d(1.3e6, ops), 0.99),
]
ms = [p[1] for p in parts]
dcs = [p[2] for p in parts]
for name, m, dc in parts:
print(f'{name:<12} MTTFd = {m:8.0f} 年 DC = {dc:.0%}')
ch = channel_mttfd(ms)
d = dc_avg(ms, dcs)
print(f'\n通道 MTTFd = {ch:.0f} 年 -> 档位「{mttfd_band(ch)}」')
print(f'平均 DC = {d:.1%} -> 档位「{dc_band(d)}」')
print(f'配合类别 3 或 4 的双通道结构,可达到 PLe')
# 敏感度:把开门频率从每小时 2 次提高到每分钟 1 次
ops_hi = 60 * 8 * 250
ms_hi = [mttfd_from_b10d(2e6, ops_hi), 300.0, mttfd_from_b10d(1.3e6, ops_hi)]
ch_hi = channel_mttfd(ms_hi)
print(f'\n若开门频率提高到每分钟 1 次({ops_hi} 次/年):')
print(f' 门开关 MTTFd {ms[0]:.0f} -> {ms_hi[0]:.0f} 年,'
f'接触器 {ms[2]:.0f} -> {ms_hi[2]:.0f} 年')
print(f' 通道 MTTFd {ch:.0f} -> {ch_hi:.0f} 年,'
f'档位「{mttfd_band(ch)}」-> 「{mttfd_band(ch_hi)}」')
print(f' 本例中档位尚未跌落(单通道计入上限为 100 年),'
f'但裕量已大幅缩水;频率再高一档就会掉到「中」')
安全功能
驱动器层面的标准安全功能由 IEC 61800-5-2 定义,现代伺服驱动器普遍内置,无需外部接触器即可实现:
| 缩写 | 全称 | 行为 | 典型用途 |
|---|---|---|---|
| STO | Safe Torque Off | 立即切断力矩,电机自由停车 | 急停、防意外启动 |
| SS1 | Safe Stop 1 | 先受控减速,停稳后触发 STO | 高速旋转设备的急停 |
| SS2 | Safe Stop 2 | 受控减速至零,保持位置且不断力矩 | 需要保持位置的场合 |
| SOS | Safe Operating Stop | 停止后监控位置不被推动 | 安全门打开但需保持姿态 |
| SLS | Safely Limited Speed | 监控速度不超过限值 | 示教模式、协作模式 |
| SLP | Safely Limited Position | 监控位置不越界 | 安全工作空间限制 |
| SDI | Safe Direction | 监控只能朝一个方向运动 | 单向送料 |
STO 与 SS1 的选择容易出错。STO 立即断力矩,电机靠惯性自由滑行——对垂直轴的机械臂意味着直接坠落。有重力负载的轴必须先用 SS1 受控减速,或配置断电自动抱闸的制动器,并把制动器本身也纳入安全回路。
SLS 是协作机器人的关键功能:它使机器人在人靠近时自动降速到安全限值,从而把风险等级从 P2 降到 P1。它的实现要求速度检测本身也达到相应的 PL——通常需要双编码器交叉比对,单个编码器的故障不能导致超速不被发现。
器件与实现
| 器件 | 作用 | 选型要点 |
|---|---|---|
| 急停按钮 | 手动触发安全停止 | 必须是自锁式、直接断开(正动作)触点 |
| 安全继电器 | 双通道逻辑与自检 | 简单场景够用,逻辑固定 |
| 安全 PLC | 可编程安全逻辑 | 复杂逻辑、多安全功能时使用,需认证的开发流程 |
| 安全编码器 | 提供可信的位置速度 | 支持 SLS/SLP 的前提 |
| 安全激光扫描仪 | 区域防护与速度监控 | 移动机器人与 SSM 模式的核心传感器 |
| 安全门开关 | 检测防护门状态 | 需带电磁锁时选带锁型 |
| 光幕 / 安全地毯 | 进入检测 | 注意最小安全距离计算 |
急停不等于安全停止。 急停(Emergency Stop)是给人用的最后手段,属于补充保护措施,不能作为主要的风险降低手段——不能因为装了急停按钮就认为风险已经受控。真正的风险降低应来自本质安全设计(降速、限力)与防护装置(围栏、光幕、区域扫描)。
急停的停止类别(IEC 60204-1)也常被混淆,注意与前面的 ISO 13849 结构类别不是一回事:
- 停止类别 0:立即切断动力,对应 STO
- 停止类别 1:受控减速后切断动力,对应 SS1
- 停止类别 2:受控停止但保持动力,不能用作急停
与非安全系统的边界
一个反复出现的设计错误是让非安全系统参与安全功能。上位机的 ROS 节点、以太网通信、通用 PLC 都不是安全器件——它们的失效率没有经过认证,不能计入 PL 计算。
正确的架构是把安全逻辑放在独立的安全回路中,非安全系统只能请求而不能否决:
安全回路(安全继电器 / 安全 PLC)
├── 急停按钮、安全门、安全扫描仪 -> 直接接入
├── 驱动器 STO / SLS 输入 -> 直接控制
└── 状态输出 -> 上位机(只读,用于显示与日志)
上位机 / ROS(非安全)
└── 可以请求停止(写入安全回路的软停止输入)
但不能阻止安全回路触发停止
用软件看门狗、心跳包实现的「安全」在正式评估中不予认可。它们有工程价值(能捕捉多数软件故障),但不能替代安全回路。
验证与文档
功能安全的合规性由文档与测试共同证明,两者缺一不可:
- 风险评估报告:逐个危险源列出 S/F/P 与得到的 PLr
- 安全功能规格:每个安全功能的触发条件、响应、响应时间、PLr
- PL 计算书:结构类别、各元件的 MTTFd 与 DC 来源、CCF 打分、最终 PL
- 验证测试记录:逐个故障注入并记录系统响应
- 验证(Validation)报告:确认所有安全功能达到设计要求
故障注入测试是最容易被省略也最有价值的一步。逐条断开安全回路中的每一根线、短接每一对触点,确认系统进入安全状态并给出正确的故障码。实际做这一步时经常会发现:某根线断开后系统毫无反应——那条通道从一开始就没接对,而在正常测试中永远发现不了。
响应时间必须实测。 从触发到机器人实际停止的总时间包含:传感器检测延迟、安全回路逻辑延迟、驱动器响应延迟、机械制动时间。设计计算给出的是估计值,实际值必须用示波器或专用测量设备验证,因为它直接决定了 安全距离 的计算。
常见问题
- 把急停当作主要防护手段:急停是补充措施。风险降低应优先来自本质安全设计与防护装置。
- 用通用 PLC 或工控机实现安全逻辑:未经认证的器件不能计入 PL 计算,无论软件写得多小心。
- 忽略元件的动作频率:B10d 换算出的 MTTFd 与使用频率强相关,高频动作的元件寿命远低于铭牌印象。
- 双通道共用电源或线缆:CCF 得分不足,双通道退化为单通道的实际效果。
- 垂直轴用 STO:切断力矩后手臂坠落。必须用 SS1 或配安全制动器。
- 只在设计时算 PL,不做故障注入:接线错误、参数配置错误只有实测才能发现。
- 改造后不重新评估:换了夹爪、提高了速度、改变了工艺流程,风险评估都需要重做。
参考资料
- ISO 13849-1:2023. Safety of Machinery — Safety-Related Parts of Control Systems — Part 1: General Principles for Design.
- ISO 13849-2:2012. Part 2: Validation. — 验证方法与故障清单。
- IEC 61508(全部部分). Functional Safety of Electrical/Electronic/Programmable Electronic Safety-Related Systems.
- IEC 62061:2021. Safety of Machinery — Functional Safety of Safety-Related Control Systems.
- IEC 61800-5-2:2016. Adjustable Speed Electrical Power Drive Systems — Part 5-2: Safety Requirements — Functional. — STO/SS1/SLS 等安全功能的定义。
- IEC 60204-1:2016. Safety of Machinery — Electrical Equipment of Machines — Part 1: General Requirements. — 停止类别 0/1/2。
- ISO 12100:2010. Safety of Machinery — General Principles for Design — Risk Assessment and Risk Reduction. — 风险评估的总纲。
- IFA SISTEMA — 德国 IFA 提供的免费 PL 计算工具,附带主流厂商的元件库。