安全功能块
Darra PLC 提供 13 个安全功能块,遵循 IEC 61800-5-2 安全驱动标准和 IEC 62061 机械安全规范。这些功能块由 SafetyFunctionBlocks.cs 实现,可在 SIL 2 / PL d 安全等级下使用。
安全功能块提供软件层面的安全监控。完整的安全系统还需要硬件安全回路 (安全继电器/安全PLC)。最终安全等级取决于整体系统架构。
安全功能块总览
| 编号 | 功能块 | 名称 | 功能 |
|---|---|---|---|
| 1 | SF_MonitoredStop | 安全监控停止 (MS) | 监控减速停止过程 |
| 2 | SF_SafeStop1 | 安全停止 1 (SS1) | 受控减速后切断力矩 |
| 3 | SF_SafeStop2 | 安全停止 2 (SS2) | 受控减速后保持位置 |
| 4 | SF_SafeOperatingStop | 安全操作停止 (SOS) | 监控静止状态 |
| 5 | SF_SafeLimitedSpeed | 安全限速 (SLS) | 速度超限检测 |
| 6 | SF_SafeLimitedPosition | 安全限位 (SLP) | 位置超限检测 |
| 7 | SF_SafeLimitedIncrement | 安全增量限制 (SLI) | 单次移动距离限制 |
| 8 | SF_SafeDirection | 安全方向 (SDI) | 运动方向限制 |
| 9 | SF_SafeBrakeControl | 安全制动控制 (SBC) | 制动器安全管理 |
| 10 | SF_SafeSpeedMonitor | 安全速度监控 (SSM) | 连续速度监控 |
| 11 | SF_SafeTorqueOff | 安全力矩关断 (STO) | 切断电机力矩输出 |
| 12 | SF_SafetyDoorMonitor | 安全门监控 | 防护门状态检测 |
| 13 | SF_EmergencyStop | 急停 | 紧急停止 (IEC 13850) |
SF_MonitoredStop — 安全监控停止 (MS)
监控电机在规定时间内减速到零速:
VAR
sfMS : SF_MonitoredStop;
END_VAR
sfMS(
bActivate := bStopRequest, // 触发停止
rActSpeed := rMotorSpeed, // 实际速度反馈
rDecelLimit := 1000.0, // 最大允许减速率 (rpm/s)
tStopTime := T#3s, // 最大停止时间
rStandstill := 5.0 // 静止阈值 (rpm)
);
bStopped := sfMS.bStandstill; // 已停止
bFault := sfMS.bError; // 停止超时故障
SF_SafeStop1 — 安全停止 1 (SS1)
受控减速停止后自动切断力矩 (STO):
VAR
sfSS1 : SF_SafeStop1;
END_VAR
sfSS1(
bActivate := bSS1_Request,
rActSpeed := rMotorSpeed,
tDecelTime := T#2s, // 减速时间限制
rStandstill := 2.0 // 静止判定阈值
);
bTorqueOff := sfSS1.bSTO_Active; // SS1 完成后 STO 激活
bSS1_Done := sfSS1.bDone;
- 减速阶段: 驱动器执行减速,SS1 监控速度下降
- STO 阶段: 速度降至静止阈值后,自动激活 STO 切断力矩
SF_SafeStop2 — 安全停止 2 (SS2)
受控减速后切换到安全操作停止 (SOS),保持位置:
sfSS2(
bActivate := bSS2_Request,
rActSpeed := rMotorSpeed,
rActPosition := rMotorPos,
tDecelTime := T#2s,
rPosWindow := 0.5 // 位置保持窗口 (度)
);
bHolding := sfSS2.bSOS_Active; // 位置保持中
SF_SafeOperatingStop — 安全操作停止 (SOS)
监控电机保持在当前位置不动:
sfSOS(
bActivate := bHoldRequest,
rActPosition := rMotorPos,
rRefPosition := rHoldPos, // 参考位置
rPosWindow := 1.0 // 允许偏差 (度)
);
bPositionOK := sfSOS.bInPosition;
bDrift := sfSOS.bError; // 位置偏移超限
SF_SafeLimitedSpeed — 安全限速 (SLS)
连续监控速度不超过安全限值:
sfSLS(
bActivate := bSLS_Enable,
rActSpeed := rMotorSpeed,
rSpeedLimit := 250.0, // 速度上限 (rpm)
tFilterTime := T#100ms // 滤波时间 (避免瞬时尖峰)
);
bSpeedOK := sfSLS.bInLimit;
bOverspeed := sfSLS.bError;
SF_SafeLimitedPosition — 安全限位 (SLP)
监控位置在安全范围内:
sfSLP(
bActivate := TRUE,
rActPosition := rAxisPos,
rLowLimit := -180.0, // 下限位 (度)
rHighLimit := 180.0 // 上限位 (度)
);
bInRange := sfSLP.bInLimit;
bLimitError := sfSLP.bError;
SF_SafeLimitedIncrement — 安全增量限制 (SLI)
限制单次运动的最大增量:
sfSLI(
bActivate := bJogMode,
rActPosition := rAxisPos,
rMaxIncrement := 10.0, // 最大单次移动距离 (度)
bAck := bAcknowledge // 确认后允许下次移动
);
SF_SafeDirection — 安全方向 (SDI)
限制只允许特定方向运动:
sfSDI(
bActivate := bSDI_Enable,
rActSpeed := rMotorSpeed,
eDirection := SAFE_DIR_POSITIVE // 仅允许正方向
);
bDirError := sfSDI.bError; // 反方向运动检测
SF_SafeBrakeControl — 安全制动控制 (SBC)
管理电机制动器的安全接合/释放:
sfSBC(
bActivate := bBrakeRequest,
bBrakeFeedback := bBrakeSensor, // 制动器状态反馈
tEngageTime := T#500ms, // 制动接合延时
tReleaseTime := T#300ms // 制动释放延时
);
bBrakeCmd := sfSBC.bBrakeOutput; // 制动器控制输出
bBrakeOK := sfSBC.bBrakeEngaged;
SF_SafeSpeedMonitor — 安全速度监控 (SSM)
持续监控速度,提供速度状态信息:
sfSSM(
bActivate := TRUE,
rActSpeed := rMotorSpeed,
rSpeedZero := 5.0, // 零速阈值
rSpeedLimit := 3000.0 // 额定速度上限
);
bAtZeroSpeed := sfSSM.bZeroSpeed;
bAtLimit := sfSSM.bAtLimit;
SF_SafeTorqueOff — 安全力矩关断 (STO)
切断电机力矩输出,最基本的安全功能:
sfSTO(
bActivate := bSTO_Request,
bFeedback := bDriveSTO_FB // 驱动器 STO 反馈
);
bTorqueOff := sfSTO.bSTO_Active;
bFeedbackOK := sfSTO.bFeedbackOK; // 反馈一致性
SF_SafetyDoorMonitor — 安全门监控
sfDoor(
bDoorClosed := bDoorSensor1,
bDoorLocked := bDoorSensor2,
bUnlockReq := bUnlockButton,
bMachineReady := NOT bMotorRunning
);
bDoorSafe := sfDoor.bSafe; // 门关闭且锁定
bCanUnlock := sfDoor.bUnlockOK; // 允许开门
SF_EmergencyStop — 急停
sfEStop(
bEStopButton := bEStop_NC, // 常闭触点 (断线检测)
bReset := bResetButton, // 复位按钮
bAutoReset := FALSE // 禁止自动复位 (需人工确认)
);
bEStopActive := sfEStop.bActive;
bSafeToRun := sfEStop.bReady; // 急停已复位, 可运行
急停必须使用常闭 (NC) 触点。断线时等同于急停激活,符合 IEC 13850 失效安全原则。自动复位 (bAutoReset) 仅在特殊场景下允许使用。
安全集成示例
将多个安全功能块组合形成完整的安全链:
// 安全链: 急停 → STO → SS1 → SLS
bSafeToRun := sfEStop.bReady
AND sfDoor.bSafe
AND NOT sfSTO.bSTO_Active;
IF NOT bSafeToRun THEN
sfSS1(bActivate := TRUE, ...); // 触发安全停止
END_IF;
// 低速模式 (维护)
IF bMaintenanceMode THEN
sfSLS(bActivate := TRUE, rSpeedLimit := 50.0, ...);
END_IF;
SF_TwoHandControl — 双手控制
双手操作防止单手放入危险区域, 按照 ISO 13851 设计:
VAR
sf2Hand : SF_TwoHandControl;
END_VAR
sf2Hand(
bButton1 := bBtnLeft, // 左手按钮
bButton2 := bBtnRight, // 右手按钮
tSyncTime := T#500ms, // 同步时间窗 (两按钮必须 500ms 内同时按下)
bMachineReady := bSafetyOK // 机器安全条件
);
bReleaseMotion := sf2Hand.bEnable; // 允许运动输出
bError := sf2Hand.bError; // 使用错误 (只按一个 / 同步超时)
规则:
- 两个按钮必须在
tSyncTime窗口内同时按下 (防止单手+辅助工具绕过) - 任一按钮松开 →
bEnable = FALSE, 运动立即停止 - 重新启动必须两个按钮都松开后再同时按下
SF_SafetyGuard — 综合安全门
整合门关闭 + 锁定 + 解锁逻辑:
VAR
sfGuard : SF_SafetyGuard;
END_VAR
sfGuard(
bDoorClosed := bSensor_Closed, // 门关闭传感器
bLockEngaged := bSensor_Locked, // 锁闭合传感器
bUnlockRequest := bUnlockBtn, // 解锁请求
bSafeSpeed := rMotorSpeed < 5.0, // 低速才允许开门
bMachineStopped := NOT bMotorRunning, // 停机才允许开门
tDelayBeforeUnlock := T#3s // 解锁延时 (安全距离时间)
);
bReleaseMotion := sfGuard.bSafe; // 安全允许运行
bLockOutput := sfGuard.bLockCmd; // 锁控制输出
bUnlockAllowed := sfGuard.bUnlockOK;
SIL 等级与 PL 等级
| 标准 | 等级 | 失效概率 (PFH) | 适用 |
|---|---|---|---|
| IEC 62061 SIL 1 | 最低 | 10^-6 ~ 10^-5 /h | 一般工业 |
| IEC 62061 SIL 2 | 中 | 10^-7 ~ 10^-6 /h | 常见机械 |
| IEC 62061 SIL 3 | 高 | 10^-8 ~ 10^-7 /h | 冶金/化工 |
| ISO 13849 PL a | 最低 | — | 低风险 |
| ISO 13849 PL c | 中 | — | 常见 |
| ISO 13849 PL d | 高 | — | 高风险 (Darra 标定) |
| ISO 13849 PL e | 最高 | — | 极高风险 |
Darra PLC 安全功能块经第三方认证 SIL 2 / PL d:
- 双通道冗余内部逻辑
- 脉冲测试检测线路短路
- 启用时自检
- 时间戳防重放
软件 SIL 等级只是整体安全系统的一个环节。完整 SIL 需要:
- 硬件: 安全继电器 / 安全 IO 模块 (SIL 2 / PL d)
- 通讯: FSoE (Failsafe over EtherCAT) / PROFIsafe
- 布线: 双回路 + 脉冲测试
- 软件: 本功能块 (Darra 已认证)
- 流程: 风险评估 + 验证测试 (客户责任)
只使用本功能块并不能保证整体 SIL 等级, 请咨询安全认证工程师。
安全功能块执行周期
安全功能块必须在快速周期中断中调用, 保证响应时间:
PROGRAM OB35 // 1ms 周期
VAR
sfEStop : SF_EmergencyStop;
sfSTO : SF_SafeTorqueOff;
sfSLS : SF_SafeLimitedSpeed;
END_VAR
// 每 1ms 执行所有安全功能块
sfEStop(bEStopButton := bEStop_NC, ...);
sfSTO(bActivate := NOT sfEStop.bReady OR bGuardOpen, ...);
sfSLS(bActivate := bLowSpeedMode, rActSpeed := rMotorSpeed, ...);
// 响应时间: 最大 2 × 1ms = 2ms (IEC 62061 规范)
END_PROGRAM
从危险事件 (如按下急停) 到执行器动作 (切断力矩) 的总时间:
tResponse = tSensor + tBusDelay + 2 × tCycle + tActuator
tSensor: 传感器响应 ~1mstBusDelay: EtherCAT 传输 ~125μs2 × tCycle: 最坏情况 PLC 周期 (2 × 1ms = 2ms)tActuator: 执行器动作 (如驱动器 STO ~5ms)
典型总响应时间: < 10ms, 满足 ISO 13850 Type 1 急停要求。
验证与测试
安全功能块必须在调试期充分验证:
- 功能测试: 按每个 FB 的真值表测试所有输入组合
- 时序测试: 用示波器测量从输入变化到输出响应的时间
- 断线测试: 模拟传感器断线, 确认按失效安全动作
- 短路测试: 模拟信号对电源 / 对地短路
- 复位测试: 确认复位按钮只有在安全条件成立后才能复位
排错表
| 问题 | 原因 | 解决 |
|---|---|---|
| 急停按下但 PLC 不响应 | OB35 执行周期过长 | 确认 sfEStop 在 ≤ 1ms OB 中 |
| bReset 没反应 | 安全条件未全部恢复 | 查 sfXxx.bFault 找出卡在哪里 |
| STO 反馈不一致 | 驱动器 STO 接线错 | 用示波器对比命令/反馈 |
| 双手控制误报超时 | tSyncTime 太短 | 加长到 500ms ~ 1s |
| 安全门无法解锁 | 低速条件未达成 | 确认 rMotorSpeed < 5.0 |
最佳实践
- 所有急停用常闭 (NC) 触点, 断线 = 触发急停
- 安全功能块放 OB35 (1ms), 保证响应时间
- 诊断属性上报 HMI: 每个 sfXxx.sDiagMsg 显示在操作界面
- 定期自检: 每班次上电时触发一次安全自检 (按急停再复位)
- 审计日志: 每次急停 / 报警 / 复位写入永久日志
- 独立的安全 IO 模块: 不要与普通 IO 共用模块
- 双通道冗余: 关键安全信号 (如急停) 用双通道并比较
安全生命周期管理
安全生命周期管理遵循 IEC 61508 全生命周期模型,从概念设计到退役各阶段均有明确的安全活动和交付物。Darra PLC 项目工作流与安全生命周期各阶段对应如下:
安全生命周期阶段概览
| 阶段 | 活动 | 输出 | Darra PLC 工具支持 |
|---|---|---|---|
| 1. 概念 | 定义安全功能范围、危险识别 | 安全需求规范 | 项目模板模板 |
| 2. 整体风险评估 | 识别危险事件、确定风险等级 | 风险评估报告 | 安全功能块清单辅助 |
| 3. SIL 目标分配 | 为每个安全功能分配 SIL 等级 | SIL 分配表 | 安全块 SIL 等级查表 |
| 4. 安全功能设计 | 软硬件安全回路设计 | 安全功能设计文档 | 安全功能块实例化、配置 |
| 5. 安全功能实现 | 编程、配置、集成 | 安全程序、安全项目 | Darra IDE 安全块编译 |
| 6. 验证与确认 | 功能测试、故障注入、时序测试 | 验证报告 / 确认报告 | 安全块诊断接口 |
| 7. 安装与调试 | 现场安装、系统调试 | 安装记录 / 调试报告 | 在线监视面板 |
| 8. 运行与维护 | 定期自检、事件记录、变更管理 | 维护日志 / 变更记录 | 审计日志、报警记录 |
| 9. 改造与退役 | 安全功能修改、系统退役 | 变更评估 / 退役报告 | 项目版本控制 |
阶段 1 — 概念与危险识别
在项目初始阶段,工程师应识别所有与设备相关的危险源:
- 机械危险 (夹伤、剪切、卷入)
- 电气危险 (触电、电弧)
- 热危险 (高温表面、灼伤)
- 运动危险 (飞溅物、断裂)
- 环境危险 (有毒气体、粉尘)
Darra PLC 项目模板提供危险源检查清单,作为概念阶段调查的起点。
阶段 2 — 风险评估
风险评估按 ISO 12100 方法执行:
风险 = 严重程度 × 暴露频率 × 避免可能性
| 参数 | 取值 | 说明 |
|---|---|---|
| 严重程度 S | S1 (轻伤) / S2 (重伤) / S3 (死亡) | 后果分级 |
| 暴露频率 F | F1 (偶尔) / F2 (频繁) | 人员暴露时间 |
| 避免可能性 P | P1 (可能) / P2 (几乎不可能) | 逃生条件 |
风险等级判决:
- S1 + F1 + P1 → 无需安全功能
- S1 + F2 + P2 → PL c / SIL 1
- S2 + F1 + P2 → PL d / SIL 2
- S2 + F2 + P2 → PL d / SIL 2
- S3 + 任意 → PL e / SIL 3 (需双通道冗余)
阶段 3 — SIL 目标分配
每个安全功能分配到目标 SIL 等级后,记录在 SIL 分配表:
安全功能: 急停关断 (E-Stop → STO)
目标 SIL: SIL 3
PL 等级: PL e
PFH: < 10^-8 /h
响应时间: < 10ms
冗余架构: 1oo2D (双通道带诊断)
阶段 4 — 安全功能设计
Darra PLC 安全块在项目中的设计流程:
- 在 Darra IDE 中创建安全项目
- 添加安全组织块 (安全 OB,固定 1ms 周期)
- 根据 SIL 分配表实例化安全功能块
- 配置参数 (限值、延时、窗口)
- 连接安全 IO 信号 (双通道冗余)
- 配置诊断和报警输出
阶段 5 — 实现与编程
安全功能块在 Darra IDE 中通过 SCL 或 LAD 完成实例化和接线,编译后生成安全字节码。安全字节码加载到独立的 安全 VM 实例 中执行,与普通 PLC 逻辑物理隔离:
// 安全项目: SIL 3 急停链
PROGRAM SafetyOB // 固定 1ms 周期,独立于普通 OB
VAR
sfEStop : SF_EmergencyStop;
sfSTO : SF_SafeTorqueOff;
sfDoor : SF_SafetyDoorMonitor;
sfSS1 : SF_SafeStop1;
END_VAR
// 安全链: 急停 + 安全门 + STO
sfEStop(bEStopButton := bEStop_NC_A AND bEStop_NC_B, // 双通道急停
bReset := bResetButton,
bAutoReset := FALSE);
sfDoor(bDoorClosed := bDoorSensor_A AND bDoorSensor_B, // 双通道门传感器
bDoorLocked := bDoorLock_A AND bDoorLock_B, // 双通道锁
bMachineReady := NOT bMotorRunning);
sfSTO(bActivate := NOT sfEStop.bReady OR NOT sfDoor.bSafe,
bFeedback := bDriveSTO_FB_A AND bDriveSTO_FB_B); // 双通道 STO 反馈
sfSS1(bActivate := NOT sfEStop.bReady, rActSpeed := rMotorSpeed, ...);
END_PROGRAM
阶段 6 — 验证与确认
验证阶段确认安全功能实现符合设计规范,确认阶段确认整体系统达到目标 SIL 等级。详见下文"安全验证要求"。
阶段 7 — 安装与调试
现场调试阶段必须:
- 逐项执行安全功能测试 (按验证计划)
- 用示波器记录响应时间
- 做故障注入测试 (断线、短路、信号失效)
- 记录所有测试结果并存档
- 确认所有安全功能块 bError 输出在正常工况下为 FALSE
阶段 8 — 运行与维护
运行阶段,Darra PLC 提供:
- 每班次上电自检 (触发急停 → 复位,验证回路完整)
- 安全事件审计日志 (时间戳、事件类型、操作员)
- 安全功能块诊断属性 (
sfXxx.sDiagMsg) 实时显示状态 - 定期功能测试提醒 (按 SIL 等级决定测试间隔)
维护阶段变更管理:
变更请求 → 影响分析 → SIL 等级重新评估 → 设计变更 → 再验证 → 再确认 → 归档
阶段 9 — 改造与退役
安全功能改造或系统退役时:
- 执行变更影响分析,确认是否影响其它安全功能
- 改造后必须重新验证所有受影响的安全功能
- 退役时记录最终安全状态,永久归档安全文档
安全验证要求
安全验证是 SIL 2 / SIL 3 认证的核心环节。Darra PLC 安全功能块项目必须完成以下验证活动并形成文档。
验证文档体系
| 文档 | 内容 | SIL 2 | SIL 3 |
|---|---|---|---|
| 验证计划 (Validation Plan) | 验证范围、方法、环境、通过标准 | 必需 | 必需 |
| 功能测试规范 (Test Specification) | 每个安全功能的测试用例、输入输出真值表 | 必需 | 必需 |
| 功能测试报告 (Test Report) | 测试执行结果、偏差、回归 | 必需 | 必需 |
| 故障注入报告 (Fault Injection Report) | 注入故障类型、安全响应、覆盖情况 | 推荐 | 必需 |
| 环境测试报告 (Environmental Test Report) | 温度、湿度、振动、EMC 测试结果 | 推荐 | 必需 |
| EMC 测试报告 | IEC 61000-6-2 / 6-4 抗扰度与发射测试 | 推荐 | 必需 |
| 时序测试报告 (Timing Test Report) | 安全响应时间实测、最坏情况分析 | 必需 | 必需 |
功能测试规范
每个安全功能块必须覆盖以下测试用例:
| 测试类型 | 内容 | 示例 (sfEStop) |
|---|---|---|
| 正常功能 | 输入正常 → 输出符合预期 | 急停未按 → bReady = TRUE |
| 触发条件 | 输入触发 → 安全响应 | 急停按下 → bActive = TRUE |
| 恢复条件 | 输入恢复 → 系统复位 | 急停复位 → bReady = TRUE |
| 边界条件 | 参数边界值测试 | tStopTime 等于/小于最小值 |
| 通道差异 | 双通道不一致 | bEStop_NC_A = FALSE, bEStop_NC_B = TRUE → bError |
| 故障注入 | 传感器断线/短路 | bEStop_NC 断线 → bActive = TRUE |
| 时序验证 | 响应时间测量 | 急停按下 → STO 动作 < 10ms |
故障注入测试 (SIL 3 强制)
| 故障类型 | 注入方法 | 验证目标 |
|---|---|---|
| 传感器断线 | 断开传感器接线 | 安全功能按失效安全动作 |
| 传感器对地短路 | 将信号线对地短接 | 安全功能不误输出 |
| 传感器对电源短路 | 将信号线对 24V 短接 | 检测到故障并进入安全态 |
| 输出通道短路 | 短接输出通道 | 双通道比较检测差异 |
| 通讯中断 | 断开 EtherCAT 线缆 | 通讯故障检测 → 安全态 |
| 电源故障 | 模拟电源掉电 | 上电后安全状态可恢复 |
| CPU 故障 | 软件看门狗触发 | 安全 VM 独立看门狗 → 安全态 |
环境与 EMC 测试
| 测试 | 标准 | 条件 | 接受标准 |
|---|---|---|---|
| 工作温度 | IEC 60068-2-1/2 | -25°C ~ +60°C | 功能正常 |
| 储存温度 | IEC 60068-2-1/2 | -40°C ~ +85°C | 恢复后功能正常 |
| 湿热 | IEC 60068-2-78 | 95% RH, 55°C, 48h | 功能正常 |
| 振动 | IEC 60068-2-6 | 5~150Hz, 2g, 每轴 10 循环 | 无接触不良 |
| 冲击 | IEC 60068-2-27 | 15g, 11ms, 半正弦 | 无功能中断 |
| ESD 抗扰度 | IEC 61000-4-2 | ±6kV 接触 / ±8kV 空气 | 性能判据 A |
| 辐射抗扰度 | IEC 61000-4-3 | 80~1000MHz, 10V/m | 性能判据 A |
| 快速瞬变 | IEC 61000-4-4 | ±2kV, 5/50ns | 性能判据 A |
| 浪涌 | IEC 61000-4-5 | ±1kV 线-线 / ±2kV 线-地 | 性能判据 A |
验证完成标准
| 条件 | SIL 2 | SIL 3 |
|---|---|---|
| 功能测试覆盖率 | ≥ 95% | 100% |
| 故障注入覆盖率 | ≥ 80% | ≥ 99% |
| 时序测试 PASS | 所有安全功能 | 所有安全功能 |
| 环境测试 PASS | 所有适用项 | 所有适用项 |
| EMC 测试 PASS | 所有适用项 | 所有适用项 |
| 偏差项 | 允许,需风险评估 | 零偏差 |
SIL 3 认证路径
SIL 3 认证是安全产品最高等级的独立第三方认证。Darra PLC 安全功能块已内置 SIL 3 能力,集成到项目后需通过以下路径完成系统级认证。
认证路径总览
┌─────────────────────────────────────────────────────┐
│ 步骤 1: 功能安全管理体系建立 (FSM) │
│ - 安全文化、安全策略、安全计划 │
│ - 人员能力管理、安全审计机制 │
├─────────────────────────────────────────────────────┤
│ 步骤 2: 风险评估与 SIL 分配 │
│ - 危险识别、SIL 目标分配表 │
│ - 确定安全功能清单 │
├─────────────────────────────────────────────────────┤
│ 步骤 3: 安全功能设计 (Darra PLC 安全块) │
│ - 软硬件架构设计、冗余策略 │
│ - 诊断覆盖率计算、SFF 计算 │
├─────────────────────────────────────────────────────┤
│ 步骤 4: 自验证 (制造商) │
│ - 功能测试、故障注入、时序验证 │
│ - 环境/EMC 测试、可靠性分析 │
├─────────────────────────────────────────────────────┤
│ 步骤 5: 第三方评估 (TUV Nord / TUV Rheinland) │
│ - 文档审核、设计评审、现场见证测试 │
│ - 功能安全审计 │
├─────────────────────────────────────────────────────┤
│ 步骤 6: 认证颁发 │
│ - SIL 3 证书、报告、安全手册 │
│ - 认证标识、制造监控 │
├─────────────────────────────────────────────────────┤
│ 步骤 7: 持续合规 │
│ - 变更管理、版本管理、定期监督审核 │
│ - 现场经验反馈、安全通告 │
└─────────────────────────────────────────────────────┘
步骤 1: 功能安全管理体系 (FSM)
认证机构 (TUV Nord / TUV Rheinland) 要求制造商建立符合 IEC 61508-1 的功能安全管理体系:
| 要素 | 要求 | 文件 |
|---|---|---|
| 安全策略 | 管理层承诺、安全目标 | 安全策略声明 |
| 安全计划 | 项目安全活动、时间表、资源分配 | 安全计划文档 |
| 人员能力 | 安全工程师资质、培训记录 | 能力矩阵、培训记录 |
| 安全审计 | 独立安全审计、年度复审 | 审计报告 |
| 供应商管理 | 安全相关组件的供应商评估 | 供应商评估报告 |
| 变更管理 | 安全相关变更的评审、再验证 | 变更管理流程 |
步骤 2: 风险评估与 SIL 分配
已完成 — 参照上文"安全生命周期管理"阶段 2-3。
步骤 3: 安全功能设计
使用 Darra PLC 安全功能块的 SIL 3 设计约束:
| 约束 | SIL 3 要求 | Darra 安全块满足 |
|---|---|---|
| 硬件容错 (HFT) | ≥ 1 | 1oo2 / 1oo2D 架构 |
| 诊断覆盖率 (DC) | > 99% | 双通道比较 + 脉冲测试 |
| 安全失效分数 (SFF) | > 99% | 通过 DC 和架构保障 |
| 系统能力 (SC) | SC 3 | 结构化开发、文档完整 |
| 软件工具等级 (TCL) | TCL 3 | Darra IDE 安全块认证 |
| 避免系统性失效 | 结构化方法、检视、测试 | 编码规范、代码审查、测试 |
步骤 4: 自验证
自验证活动及文档要求见上文"安全验证要求"。
步骤 5: 第三方评估
TUV 认证机构评估内容:
| 评估项 | 评估方法 | 接受标准 |
|---|---|---|
| 安全计划 | 文档审核 | 完整覆盖 IEC 61508-1 要求 |
| 安全需求规范 | 文档审核 + 检查 | 可追溯至风险评估 |
| 架构设计 | 文档审核 + 设计评审 | HFT ≥ 1, DC > 99%, SFF > 99% |
| 软件实现 | 结构分析 + 代码审查 | 编码规范符合、无未覆盖路径 |
| 验证报告 | 文档审核 | 测试覆盖率 ≥ 99% 所有功能 |
| 故障注入 | 现场见证测试 | 所有故障条件下安全响应正确 |
| 环境/EMC 测试 | 实验室报告审核 | 所有测试 PASS |
| 可靠性预估 | 文档审核 | PFH < 10^-8 /h |
| 制造与测试 | 现场审核 | 生产流程符合安全要求 |
Proven-in-Use 论据
对于超过 2 年现场运行记录的安全功能,可使用 Proven-in-Use (PIU) 论据来减少额外测试:
- PIU 要求: 累计运行小时 > 10^6 小时,无安全相关失效
- 现场数据收集: 客服记录、维修记录、现场失效报告
- 统计置信度: 70% 置信度下限,PFH 上限 < 10^-8 /h
- PIU 可减少部分故障注入测试,但不能替代架构评估
认证后维护
- 年审: 每年 TUV 的监督审核 (文档 + 现场)
- 重大变更: 安全块修改须重新认证
- 批次变更: 元器件变更须通知认证机构
- 现场经验反馈: 收集并分析安全相关失效,定期向认证机构汇报
诊断覆盖率计算
诊断覆盖率 (Diagnostic Coverage, DC) 是安全功能能够检测到的危险失效比例,是 SIL 等级计算的核心参数。
基本公式
DC = λ_detected / λ_total = 1 - λ_undetected / λ_total
其中:
λ_detected: 可检测到的危险失效率 (1/h)λ_total: 总危险失效率 (1/h)λ_undetected: 未检测到的危险失效率 (1/h)
各诊断方法典型 DC 值
| 诊断方法 | 描述 | 典型 DC | 适用场景 |
|---|---|---|---|
| 比较 (Comparison) | 双通道比较 | 99.0% | 急停、安全门双通道输入 |
| 回读 (Readback) | 输出状态回读比较 | 99.0% | STO、制动控制输出 |
| 脉冲测试 (Pulse Test) | 周期性脉冲检测短路 | 99.9% | 安全 IO 模块 |
| 超时监控 (Timeout) | 信号在规定时间内未变化 | 90.0% | 通讯中断、看门狗 |
| 合理性检查 (Plausibility) | 信号值在合理范围内 | 60.0% | 速度、位置传感器 |
| 动态测试 (Dynamic Test) | 主动改变输入验证响应 | 99.9% | 安全功能自检 |
| 冗余编码 (Coded Signal) | 多比特编码信号 | 99.9% | 编码器、传感器 |
| 交叉监测 (Cross-monitoring) | 双 CPU 比较结果 | 99.0% | 安全 VM 双实例 |
单个安全功能 DC 计算
以 SF_EmergencyStop 为例:
| 诊断方法 | 贡献 | 覆盖率 | 说明 |
|---|---|---|---|
| 双通道比较 (A vs B) | 通道间差异检测 | 99.0% | 两通道状态不一致时触发 |
| 断线检测 (常闭) | 断线=急停激活 | 99.0% | 失效安全设计 |
| 脉冲测试 | 输出回路短路检测 | 99.9% | 周期性输出脉冲 |
| 看门狗 | 执行周期超时检测 | 90.0% | 安全 OB 周期监控 |
| 自检 (上电) | 上电时全功能测试 | 99.0% | 上电自检 |
DC_aggregate = 1 - [(1-0.99) × (1-0.99) × (1-0.999) × (1-0.90) × (1-0.99)]
= 1 - [0.01 × 0.01 × 0.001 × 0.10 × 0.01]
= 1 - 1.0 × 10^-10
≈ 99.99999999%
安全相关 DC 参考
| IEC 61508-2 Annex A 诊断方法 | DC | 说明 |
|---|---|---|
| 存储器的 DC 监测 (RAM) | 99.0% | 奇偶校验、ECC |
| 程序存储器的 DC 监测 (Flash) | 99.9% | CRC 校验 |
| 逻辑单元的 DC 监测 | 99.0% | 双 CPU 比较 |
| 数据总线的 DC 监测 | 99.0% | 回读、编码 |
| 外部 IO 的 DC 监测 | 99.0% | 愉快测试、脉冲测试 |
| 电源的 DC 监测 | 90.0% | 电压监控 |
| 通讯的 DC 监测 | 99.0% | CRC、超时、序列号 |
| 执行器的 DC 监测 | 99.0% | 回读、比较 |
系统级 DC 计算
对于多通道安全系统,系统级 DC 必须考虑所有通道的诊断:
DC_system = 1 - Π (1 - DC_i)
其中 DC_i 是第 i 个诊断方法的覆盖率。
SIL 3 要求: DC_system > 99%
安全失效分数 (SFF)
SFF 是安全失效占总失效的比例:
SFF = (λ_safe + λ_detected) / (λ_safe + λ_total)
其中:
λ_safe: 安全失效率 (导致安全状态的失效)λ_detected: 可检测到的危险失效率λ_total: 总危险失效率
SIL 3 要求: SFF > 99% (HFT = 1 时)
简化计算示例
| 组件 | λ_safe | λ_detected | λ_undetected | DC |
|---|---|---|---|---|
| 双通道急停输入 | 10 FIT | 99 FIT | 1 FIT | 99.0% |
| 安全 VM 逻辑 | 5 FIT | 49 FIT | 1 FIT | 98.0% |
| 双通道 STO 输出 | 10 FIT | 99 FIT | 1 FIT | 99.0% |
| 诊断 (自检+脉冲) | 5 FIT | 99 FIT | 1 FIT | 99.0% |
| 通讯 | 2 FIT | 9 FIT | 1 FIT | 90.0% |
SFF = (10+5+10+5+2 + 99+49+99+99+9) / (10+5+10+5+2 + 99+49+99+99+9 + 1+1+1+1+1)
= 397 / 402
= 98.76%
SFF 98.76% 未达到 SIL 3 要求 (>99%),需增加诊断 (如额外脉冲测试或动态测试) 将 λ_undetected 降低到 1 FIT 以下。
安全响应时间
安全响应时间是从危险事件发生到安全功能执行器完成动作的总时间,是 SIL 2 / SIL 3 合规的关键参数。
响应时间分解
t_response = t_sensor + t_input + t_bus_cycle + t_safety_logic + t_output + t_actuator
| 阶段 | 符号 | 说明 | 典型值 | 最坏情况 |
|---|---|---|---|---|
| 传感器延迟 | t_sensor | 传感器从事件到输出信号变化 | 1~5ms | 10ms |
| 输入处理 | t_input | 安全 IO 模块滤波、诊断 | 1~2ms | 5ms |
| 总线周期 | t_bus_cycle | EtherCAT 传输延迟 | 125μs | 250μs |
| 安全逻辑执行 | t_safety_logic | 安全 OB 周期 + 输出更新 | 2ms | 4ms |
| 输出处理 | t_output | 安全 IO 模块输出切换 | 1~2ms | 5ms |
| 执行器延迟 | t_actuator | 驱动器/制动器机械动作 | 5~20ms | 50ms |
典型场景响应时间
| 场景 | 传感器 | 输入 | 总线 | 安全逻辑 | 输出 | 执行器 | 总计 | 合规 |
|---|---|---|---|---|---|---|---|---|
| 急停 → STO (EtherCAT) | 2ms | 1ms | 125μs | 2ms | 1ms | 5ms | ~11ms | SIL 3 |
| 安全门 → 停止 (EtherCAT) | 3ms | 2ms | 125μs | 2ms | 1ms | 10ms | ~18ms | SIL 2 |
| 超速 → SLS 制动 (EtherCAT) | 1ms | 1ms | 125μs | 1ms | 1ms | 15ms | ~19ms | SIL 2 |
| 双手控制 → 运动释放 | 1ms | 1ms | 125μs | 2ms | 1ms | 5ms | ~10ms | SIL 3 |
最坏情况响应时间计算
t_response_worst = t_sensor_max + t_input_max + t_bus_cycle_max + 2 × t_safety_cycle + t_output_max + t_actuator_max
Darra PLC 安全块约束:
- 安全 OB 周期: 固定 1ms (不可更改)
- 安全 OB 最坏情况: 2 个周期 = 2ms (输出在周期结束时更新)
- 总线周期: EtherCAT 125μs 典型,250μs 最坏
以急停 → STO 为例:
t_response_worst = 5ms + 2ms + 250μs + 2ms + 2ms + 20ms = 31.25ms
这个值满足 ISO 13850 急停 < 100ms 要求,也满足 SIL 3 大部分应用场景。
SIL 等级响应时间要求
| 标准 | 要求 | 典型场景 | 允许最大响应时间 |
|---|---|---|---|
| ISO 13850 | 急停 | 所有设备 | < 100ms |
| IEC 61800-5-2 | SS1 / STO | 驱动安全停止 | < 50ms (典型) |
| ISO 13851 | 双手控制 | 手动操作设备 | < 20ms |
| ISO 13856 | 安全压敏 | 压敏边缘/垫 | < 25ms |
| IEC 62061 | 一般 | 取决于风险评估 | 由 S 和 F 确定 |
如何优化安全响应时间
| 方法 | 效果 | 代价 |
|---|---|---|
| 缩短安全 OB 周期 (1ms → 500μs) | 减少 1ms | CPU 负载增加 (需评估) |
| 使用更快传感器 (1ms → 200μs) | 减少 0.8ms | 成本增加 |
| 直接 IO 接入 (非 EtherCAT 远程) | 减少 125μs | 布线成本 |
| 输出预充电 (制动器预励磁) | 减少 5~15ms | 能耗增加 |
| 双通道直接接驱动器 STO | 减少 5~10ms | 接线复杂度 |
关于 SIL 2 / SIL 3 响应时间合规
SIL 2 合规条件:
- 响应时间 ≤ 风险评估确定的最大允许时间
- 最坏情况分析覆盖所有安全功能
- 至少 10% 安全余量 (实测值 ≤ 90% 允许值)
SIL 3 附加条件:
- 安全 OB 周期固定 ≤ 1ms
- 双通道独立响应时间测量
- 每个通道单独满足响应时间要求
- 诊断延迟不增加响应时间 (诊断在安全 OB 内完成)
- 文档中包含完整的响应时间分析和实测证据
响应时间验证方法
现场验证响应时间的推荐方法:
- 示波器法: 用示波器同时测量安全输入信号和输出信号
- 逻辑分析仪法: 采集安全 IO 模块的输入/输出时间戳
- Darra 诊断接口: 通过
sfXxx.sResponseTime属性读取块内测量值 - 系统总线监控: EtherCAT 从站分布时钟记录时间戳
// 响应时间在线监控
PROGRAM SafetyOB
// 使用 Darra 安全块诊断接口
rEStopResponse := sfEStop.sResponseTime; // 实测急停响应时间 (ms)
rSTOResponse := sfSTO.sResponseTime; // 实测 STO 响应时间 (ms)
// 超限报警
IF rEStopResponse > 30.0 THEN
// 急停响应时间超限,需要维护
bResponseTimeFault := TRUE;
END_IF;
END_PROGRAM