依据iso 26262标准进行功能安全设计时,首先识别系统的功能,并分析其所有可能的功能故障(malfunction),可采用的分析方法有hazop,fmea、头脑风暴等。如果在系统开发的各个阶段发现在本阶段没有识别出来的故障,都要回到这个阶段,进行更新。功能故障在特定的驾驶场景下,才会造成伤亡事件,比如近光灯系统,其中一个功能故障就是灯非预期熄灭,如果在漆黑的夜晚行驶在山路上,驾驶员看不清道路状况,可能会掉入悬崖,造成车毁人亡;如果此功能故障发生在白天就不会产生任何的影响。所以进行功能故障分析后,要进行情景分析,识别与此故障相关的驾驶情景,比如:高速公路超车、车库停车等。分析驾驶情景建议从公路类型:比如国道、城市道路、乡村道路等;路面情况:比如湿滑路面、冰雪路面、干燥路面;车辆状态:比如转向、 超车、制动、加速等;环境条件:比如:风雪交加、夜晚、隧道灯;交通状况:拥堵、顺畅、红绿灯等;人员情况:不如乘客、路人等几个方面去考虑。功能故障和驾驶场景的组合叫做危害事件(hazard event), 危害事件确定后,根据三个因子——严重度(severity)、暴露率(exposure)和可控性(controllability)评估危害事件的风险级别——asil等级。其中严重度是指对驾驶员、乘员、或者行人等涉险人员的伤害程度;暴露率是指人员暴露在系统的失效能够造成危害的场景中的概率;可控性是指驾驶员或其他涉险人员能够避免事故或伤害的可能性。这三个因子的分类在表1中给出。
表1 严重度、暴露率、可控性分类
asil等级的确定基于这三个影响因子,表2中给出了asil的确定方法,其中d代表高等级, a代表低等级,qm表示质量管理(quality management),表示按照质量管理体系开发系统或功能就足够了,不用考虑任何安全相关的设计。确定了危害的asil等级后,为每个危害确定至少一个安全目标,作为功能和技术安全需求的基础。
表2 asil等级确定
epb较传统的驻车制动器,除了驻车功能,还有动态起步辅助功能、紧急制动功能以及自动驻车功能等。这里我们以驻车功能为例,当驻车时,驾驶员通过按钮或其它方式发出制动请求,epb系统在汽车的后轮上施加制动力,以防止车非预期滑行。该系统的危害有:非预期制动失效、非预期制动启动。相同的危害在不同的场景下的风险是不一样的,所以我们要对不同的驾驶场景进行分析。为了简化问题,这里我们仅对”非预期制动失效”这种功能故障进行风险评估。表3给出了epb风险评估表,在该表中我们考虑的驾驶场景是车停在斜坡上,驾驶员不在车上。如果驾驶员在车上的话,驾驶员可通过踩刹车控制汽车滑行,可控性增加,那么所评估的asil等级会比表中的asil d低,但是对于同一个安全目标,如果评估的asil等级不同的话,要选择asil等级高的那个。
表3 epb风险评估
但是asil 分解的一个重要要求就是独立性,如果不能满足独立性要求的话,冗余单元要按照原来的asil等级开发。所谓的独立性就冗余单元之间不应发生从属失效(dependent failure),从属失效分为共因失效(common cause failure)和级联失效(cascading failure) 两种。共因失效是指两个单元因为共同的原因失效,比如软件复制冗余,冗余单元会因为同一个软件bug导致两者都失效,为了避免该共因失效,我们采用多种软件设计方法。级联失效是指一个单元失效导致另一个单元的失效,比如一个软件组件的功能出现故障,写入另一个软件组件ram中,导致另一个软件组件的功能失效,为了控制该级联失效,我们采用内存管理单元,可以探测到非法写入ram的情况。
图1 asil分解原理图
假设功能f,其输入信号为s1,s2,s3,这三个信号分别测量不同的物理量,是相互独立的,经过ecu内部的逻辑运算后,发送触发信息给执行器actuator,功能f的架构示意图如图2所示。假设经过危害分析和风险评估后,功能f的asil等级为asil d,安全目标为避免非预期触发执行器。那么功能f的各个部分继承asil等级,即传感器、ecu、执行器都需要按照asil d 等级开发,如图3所示。
图2 功能f架构示意图
图3 asil等级在功能f架构上的分配图
经过进一步的分析发现,当速度v>阈值时,非预期触发执行器,才能造成危险。那么我们在功能f的架构中,加入一个安全机制,安全机制的功能是当检测到速度v大于阈值时,不允许触发执行器。那么功能f的架构变为如图4所示。
图4 加入安全机制后的架构
功能f和安全机制是冗余安全需求,同时来满足安全目标,因此可以将功能f原来的asil等级在这两个需求上进行分解,分解为asil d(d)和qm(d),分解后的asil等级如图5所示。
图5 asil分解后架构示意图
原来的传感器s1、s2、s3按照qm开发,速度传感器按照asil d开发,ecu里面的软件,原来的逻辑按qm开发,安全机制的逻辑按照asil d开发,不同asil等级的软件存在于一个ecu内,为了保证软件之间的独立性,保证两者之间不相互影响,需要考虑内存保护机制,合适的调度属性来保证存储空间和cpu时间的独立性,这样会增加软件开发的很多成本。那么我们进一步采取硬件上的分离来保证独立性,我们选择一个成本很低的简单的芯片(比如pga, programmable gate array)来运行安全机制中的软件(如图6所示)。需要注意的是pga要使用独立的电源和时钟。
图6 改进的asil分解后架构示意图