当前位置:首页 > 工业控制 > 工业控制
[导读]在轨道交通、工业过程控制等SIL(安全完整性等级)要求的系统中,IEC 61508标准是软件设计的红线。仅仅“跑得快”是不够的,必须保证单点故障不导致系统失效。本文将探讨在该标准下,如何通过软件冗余与看门狗逻辑,构建符合SIL2/SIL3等级的嵌入式安全架构。



在轨道交通、工业过程控制等SIL(安全完整性等级)要求的系统中,IEC 61508标准是软件设计的红线。仅仅“跑得快”是不够的,必须保证单点故障不导致系统失效。本文将探讨在该标准下,如何通过软件冗余与看门狗逻辑,构建符合SIL2/SIL3等级的嵌入式安全架构。


一、IEC 61508对软件架构的要求


IEC 61508将安全等级分为SIL1至SIL4。对于SIL2及以上等级,标准强制要求容错(Fault Tolerance)。这意味着系统必须具备在出现一个确定故障(Safe Failure)时,仍能维持安全状态的能力。


核心策略:

1.  多样性(Diversity):避免共因失效(Common Cause Failure)。

2.  独立性(Independence):安全相关功能与非安全功能隔离。

3.  自检(Self-Test):周期性检查硬件和软件完整性。


二、软件冗余设计:1oo2D架构


在MCU资源有限的情况下,实现高可靠性通常采用1oo2D(1 out of 2 Diverse)架构。即:两个独立的软件通道并行运行,结果比对一致才输出。


2.1 双通道任务调度


// 安全相关任务状态机

typedef enum {

   SAFE_STATE_INIT,

   SAFE_STATE_RUNNING,

   SAFE_STATE_FAULT,

   SAFE_STATE_SHUTDOWN

} SafeState_t;


// 双通道控制块

typedef struct {

   SafeState_t state;

   uint32_t heartbeat;      // 心跳计数器

   uint32_t crc;            // 程序流CRC

   uint32_t last_output;    // 上一次输出

} SafetyChannel_t;


// 通道A(主逻辑)

SafetyChannel_t channel_A;

// 通道B(监控/冗余逻辑,使用不同的算法实现)

SafetyChannel_t channel_B;


// 独立看门狗定时器(硬件)

#define WDG_TIMEOUT_MS 100



2.2 表决逻辑(Voting Logic)


表决逻辑必须独立于主循环,通常由高优先级中断或独立的监控核执行。

// 表决函数(必须在安全时间内执行)

bool safety_vote(SafetyChannel_t* chA, SafetyChannel_t* chB) {

   // 1. 心跳检查(程序跑飞检测)

   if ((chA->heartbeat - chB->heartbeat) > 2) {

       return false; // 心跳失步

   }

   

   // 2. 输出一致性检查

   if (chA->last_output != chB->last_output) {

       return false; // 输出分歧

   }

   

   // 3. CRC一致性检查(防止程序存储器篡改)

   if (chA->crc != calculate_runtime_crc(chA)) {

       return false;

   }

   

   return true; // 表决通过

}



三、看门狗(Watchdog)的高级实现


简单的喂狗(Kick)是不够的。IEC 61508要求看门狗必须能检测出程序流错误(Program Flow Error)。


3.1 时间窗看门狗(Window Watchdog)


防止程序执行过快或过慢。

// 窗口看门狗配置

typedef struct {

   uint32_t min_interval_ticks; // 最小喂狗间隔

   uint32_t max_interval_ticks; // 最大喂狗间隔

   uint32_t last_kick_tick;

} WindowWdg_t;


// 喂狗函数(必须在规定的时间窗内调用)

bool window_watchdog_kick(WindowWdg_t* wdg) {

   uint32_t current_tick = HAL_GetTick();

   uint32_t delta = current_tick - wdg->last_kick_tick;

   

   // 过早喂狗(程序跑飞或死循环)

   if (delta < wdg->min_interval_ticks) {

       safety_enter_fault_state(); // 进入安全状态

       return false;

   }

   

   // 过晚喂狗(程序阻塞)

   if (delta > wdg->max_interval_ticks) {

       // 硬件看门狗会自动复位MCU

       // 此处仅作记录

       safety_log_error("WDG Timeout");

   }

   

   wdg->last_kick_tick = current_tick;

   HAL_IWDG_Refresh(&hiwdg); // 硬件喂狗

   return true;

}



3.2 逻辑看门狗(Logic Watchdog)


不仅看时间,还要看程序执行路径。

// 程序流监控点

typedef enum {

   FLOW_START = 0x12345678,

   FLOW_MIDDLE = 0x55AA55AA,

   FLOW_END = 0xA5A5A5A5

} ProgramFlow_t;


volatile uint32_t expected_flow = FLOW_START;


// 在每个关键函数入口调用

void check_program_flow(ProgramFlow_t current_step) {

   if (current_step != expected_flow) {

       // 程序执行顺序错误

       safety_enter_fault_state();

   }

   

   // 更新下一步期望值

   switch(current_step) {

       case FLOW_START:

           expected_flow = FLOW_MIDDLE;

           break;

       case FLOW_MIDDLE:

           expected_flow = FLOW_END;

           break;

       case FLOW_END:

           expected_flow = FLOW_START;

           break;

   }

}



四、安全状态机(Safety State Machine)


当看门狗或冗余表决失败时,系统必须进入定义好的安全状态。

// 安全状态处理

void safety_enter_fault_state(void) {

   // 1. 立即停止危险输出

   HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_RESET);

   

   // 2. 记录故障码到非易失存储

   EEPROM_Write(FAULT_CODE_ADDR, FAULT_WDG_TRIGGERED);

   

   // 3. 禁用所有中断,防止进一步干扰

   __disable_irq();

   

   // 4. 进入死循环,等待硬件看门狗复位

   // 或者进入低功耗关机模式

   while(1) {

       HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

   }

}



五、结语


在IEC 61508框架下开发软件,冗余与看门狗不再是“锦上添花”,而是合规的刚需。通过1oo2D软件架构实现故障容忍,结合时间窗+逻辑流的双重看门狗机制,可以有效抵御内存翻转、程序跑飞和共因失效,确保系统在单点故障下依然安全。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在工业控制现场,电磁干扰、电源波动和机械振动如同"隐形杀手",随时可能让精密的控制系统陷入瘫痪。某钢铁厂的高炉控制系统曾因雷击导致PLC误动作,造成直接经济损失超百万元——这揭示了抗干扰设计在工业控制中的关键地位。本文将...

关键字: 工业控制 抗干扰设计 看门狗

在工业控制、汽车电子等高可靠性领域,系统死锁或任务卡死是致命的故障模式。某智能电表项目曾遭遇这样的困境:硬件看门狗(WDT)单独工作时,因任务调度异常导致关键任务被长期挂起,而硬件WDT因未检测到全局时钟信号无法触发复位...

关键字: FreeRTOS 看门狗

在工业物联网(IIoT)场景中,边缘节点常部署于高温、强电磁干扰或机械振动的恶劣环境,软件崩溃、硬件锁死等故障频发。通过硬件看门狗与软件错误恢复机制的协同设计,可构建高可靠性的自愈系统,将平均无故障时间(MTBF)提升至...

关键字: 工业物联网 边缘计算 看门狗

在嵌入式系统的世界里,稳定性是衡量产品可靠性的核心指标。然而,电磁干扰、电源波动、软件漏洞等不可预见的因素,随时可能让系统陷入死机或程序跑飞的困境。此时,看门狗定时器(Watchdog Timer,WDT)就像一位沉默的...

关键字: 嵌入式 看门狗

在嵌入式系统可靠性设计中,看门狗(Watchdog Timer,WDT)作为防止程序跑飞的核心机制,其初始化时机的选择直接影响系统抗干扰能力。本文从单片机启动过程、硬件资源分配、软件架构三个维度,系统分析看门狗初始化的最...

关键字: 单片机 看门狗 入式系统

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是保障系统可靠性的核心组件,其初始化时机的选择直接影响系统抗干扰能力和稳定性。本文从硬件架构、软件流程、安全规范三个维度,系统分析看门狗初始化的最佳实践...

关键字: 单片机 看门狗 嵌入式系统

当前实时核市场主要由国外厂商主导,且多采用闭源指令集架构,这为基于开源RISC-V的国产实时核提供了重要机遇。RISC-V的开放性不仅降低了开发门槛,还为本土企业打破技术壁垒、实现自主创新提供了可能性。

关键字: 弈斯伟 ESWIN RISC-V 实时核 车规级 功能安全

随着医疗机器人技术向高精度、高自动化方向发展,手术机器人的功能安全已成为医疗器械质量管理体系(ISO 13485)的核心要求。本文基于ISO 13485标准,结合失效物理模型与安全完整性等级(SIL)评估方法,提出一种手...

关键字: 功能安全 手术机器人

看门狗是实现嵌入式计算机系统运行状态监控的一种措施 , 能够有效提高系统运行可靠性 。针对HKSP6102处理器在嵌入式计算机中的应用 ,分析了通用看门狗的设计方法及其特点;最后介绍了数据处理模块的看门狗设计方法 ,基于...

关键字: 看门狗 嵌入式计算机 监控

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是一种重要的故障检测和恢复机制。当系统因软件错误、硬件故障或外部干扰而陷入异常状态时,看门狗能够自动触发复位操作,使系统恢复到正常运行状态。本文将深入探...

关键字: 嵌入式系统 看门狗
关闭