汽车功能安全标准于2011年作为ISO标准正式颁布,此后,汽车业界开始采纳应用该标准。
虽然标准的采纳是自愿的,但在这样的背景和趋势之下,无论是汽车厂商还是零部件供应商,为了满足ISO 26262的要求,要尽快调整体制,完善规章制度,构筑基于规格的生产流程,并由负责ISO 26262认证的第三方机构进行认证。
接下来,让我们一起来看看ISO 26262到底是什么!
什么是功能安全?所谓的“功能安全”,就是通过安全功能和安全措施来避免不可容许的功能风险的技术总称。功能安全(Function Safety)的“功能”指的是监控受控对象和控制器的安全装置起的作用。通常我们将计算机作为安全装置,如果控制器发生故障,则该计算机将会关闭受控对象,并向用户发出危险警告。安全装置所实现的这种安全性作用,被称为“功能安全”。功能安全可以说是通过使用计算机等的安全装置所设计出的安全措施。
但是,在这里不得不提醒大家,安全本身并不是通过增加某种电子安全设备来保证的,而是通过“去除”导致危险发生的设计或机械故障的安全机制来保证。这种安全机制被称为“本质安全”。
举个栗子,这是一个非常经典的例子:
比如在铁路道口,我们常常有这样的危险顾虑,就是有人或者车辆进入到了铁道入口,和火车相撞,导致死亡。“本质安全”就是从根本上避免危险的措施,把危险源直接“除掉”,方法是可以把这个铁道道口改为立交桥。但是在某些情况或某些制约下,不能把铁道道口“除掉”,自然就会想到附加一个安全设施,这就是功能安全。因为某些制约,不得不设置铁路道口,但大家还要想避免这样的交通事故,那怎么办呢?这是功能安全。
欧美已经颁布了成套的功能安全相关产品指令和设计标准,并深入到各个领域,在核电行业、石油、化工、电厂等过程工业,工业机器、电梯扶梯、智能电网、家电软件评估、汽车行业、医疗软件评估领域广泛应用。
这里,我们只谈汽车功能安全。
功能安全标准化的运动起源于20世纪90年代。
上世纪70年代开始,随着各种现代化及其的使用,以及工业生产过程的自动化程度越来越高,以电气、电子、可编程电子产品的大量应用为标志的现代化控制系统越来越多的渗透到各个领域,参与着各种控制过程。
但是,工业文明在给人类带来利益的同时,也带来了灾难。由于系统设计不合理、设备元器件故障或失效、软件系统的故障导致的事故、人身伤害、环境污染,越来越频繁的危及着我们的生命安全和赖以生存的环境。
人们开始认识到,必须采取措施,用标准和法规来规范领域内安全相关系统的使用,使技术在安全的框架内发展,使人类既能尽可能享受新技术带来的安全和舒适,同时又能掌控危险。功能安全标准研究从此展开。
然而,安全控制系统或设备执行安全功能时的可靠性问题,限制了用户使用新技术的积极性。由于没有公认的评价体系,制造商很难说服用户使用新技术,尤其在关系人身财产安全的重要领域使用新技术。另外,不同行业对安全要求的不同,也限制了安全设备的产业化生产规模。制造商迫切需要一个公认的标准来建立一个与用户对接的公共平台。
于是,2000年5月,国际电工委员会正式发布了IEC61508标准,名为《电气/电子/可编程电子安全相关系统的功能安全》。
IEC61508中,系统中的安全设备(减少风险的手段)由中继控制器或PLC(Programmable logic控制器)等设备构成,我们把安全设备将实现其安全功能的可靠性的概率称为安全完整性水平,即SIL(Safety Integrity Level)。换句话说,基于这个等级标准,即,如果与构成安全系统的部件的故障率低,则由此构成的整个安全系统的故障率也是低的。
但是,有一种观点认为,在SIL定义中加入概率因素并不合适的。为什么不合适呢?那是因为功能安全标准不仅涉及了硬件部分,还涉及了软件部分。仅论硬件故障发生的概率,除了初始故障和损耗故障以外,偶发故障基本是随机发生的,如果把设计错误分开,那么加入概率因素是非常合适的。与此相对的软件故障可不是随机的了,所以软件故障(bug)是很难去计算其发生的概率的。例如,如果软件的设计中混入了bug,只要其发生路径和条件具备,那么故障的发生概率就是百分百!
针对这个问题,对IEC 61508重新修订制定了ISO 26262标准。2011年11月,ISO 26262正式颁布。
ISO 26262 不同于 IEC 61508,它“不是一个可靠性标准”,它并没有为可接受失效概率设定准确的数字。ISO 26262基于概率论的定量危害分析仅限适用于硬件,其次,基于目标产品的使用条件和使用方法,针对整个系统进行危害分析和风险评估,识别出系统危害并对危害的风险等级——ASIL等级(Automotive Safety Integration Level,汽车安全完整性等级)进行评估。IEC 61508定义了安全完整性等级 (SIL),而 ISO 26262 则定义了汽车安全完整性等级 (ASIL)。
ASIL有四个等级,分别为A,B,C,D,其中A是最低的等级,D是最高的等级。然后,针对每种危害确定至少一个安全目标,安全目标是系统的最高级别的安全需求,由安全目标导出系统级别的安全需求,再将安全需求分配到硬件和软件。ASIL等级决定了对系统安全性的要求,ASIL等级越高,对系统的安全性要求越高,为实现安全付出的代价越高,意味着硬件的诊断覆盖率越高,开发流程越严格,相应的开发成本增加、开发周期延长,技术要求严格。
ISO 26262是针对汽车电子的功能安全标准。
车载电子系统,即车辆所搭载的电子设备和计算机(包括软件),是ISO 26262的直接认证目标对象。在颁布的第二版ISO 26262中,车辆对象范围还扩大到了到巴士、卡车、两轮车辆。
ISO 26262的目的是确保“安全”,为了实现这个目的,不仅要考虑ISO26262直接针对的电子系统,还要考虑构成电子系统的其他元件是否安全。此外,还必须明确ISO 26262的应用场景,从整体上确保车载电子系统的安全性。

图1为ISO 26262的体系结构
ISO 26262的内容包括:
Part 1:定义术语
Part 2:功能安全管理
Part 3:概念阶段
Part 4:产品开发:系统层面
Part 5:产品开发:硬件层面
Part 6:产品开发:软件层面
Part 7:生产、运行、服务和报废
Part 8:支持过程
Part 9:基于ASIL和安全的分析
Part 10:ISO 26262导则
Part 11:半导体应用指南
Part 1是定义标准中使用的术语的词汇表。
Part 2中的功能安全管理定义了涉及安全相关系统开发的组织和人员应满足的要求。
在Part 3概念阶段,ISO 26262给出去了灾害分析和风险评估的要求。主要做三件事:项目定义、安全生命周期初始化、灾害分析和风险评估。
在Part 3中获得的安全需求,将在技术安全中详细说明,并分解在Part 4系统层面的安全设计中。然后,根据硬件和软件层面的开发安全要求(Part 5和6)进行系统集成,最后对系统级功能安全进行测试验证。
在开发阶段,完成系统级产品设计后,将技术安全需求规范分解到相应的软硬件技术安全需求规范里,进而开展软硬件级产品设计,而在硬件层面(Part 5),必要的活动和产品开发过程包括技术安全概念的硬件实现、潜在的硬件故障及影响分析、与软件开发的协调。
在Part6的软件层面开发中,通过V字模型流程,遵循技术安全概念,实施软件安全要求的导出、软件架构设计、软件单体设计和细化。并在此基础上实施编码,完成编码后,进行软件单元测试,软件集成(模块组合)和集成测试,以及软件安全要求的验证。
Part 7规定了直到废弃前的批量生产、服务、市场监管的安全要求。
Part 8规定了对供应商的开发委托要求,所要支持的系统过程(安全要求的管理、配置管理、变更管理、验证、书面化),以及软件工具认证、软件组件认证、硬件组件规定与认证有关的要求,对多个过程进行横向参与。
Part 9提供了关于ASIL认定和技术分析方法的指导,并且与第8部分一样,涉及多个流程。
Part 10是作为Part1~9的补充,对特定项目的解说及事例的指南。
尽管对于 Part 5对于硬件层面已经有相关说明,但是关于半导体层面的要求还是有限的。因此,Part 11针对半导体技术应用,提供了相应的指导。
在ISO 26262中,ASIL是危害的风险等级的指标。
依据ISO 26262标准进行功能安全设计时,首先对系统的功能进行逐个分析,识别系统所有的危害,然后依据三个因子(S\E\C)来评估危害的风险级别。
严重度是指一旦风险成为现实,对驾驶员、乘员、或者行人等涉险人员的伤害程度。比如电子锁故障就比刹车故障的严重程度低。
严重性用SX表示,X取值可以是0/1/2/3,级别从低到高,级别越高,伤害越严重。S0无伤害;S1轻微或有限伤害;S2严重或危及生命的伤害(可生还);S3危及生命的伤害(有死亡可能)或致命伤害;

暴露率,描述风险出现时,人员暴露在系统的失效能够造成危害的场景中的概率。基于目标危险事件的情景,根据道路环境、天气、车辆周六的情况、失去等等来判断该指标。比如底盘出现异响比乘员座椅故障暴露率低。
暴露率,用EX表示, X取值从0至4,共5个等级。E0是几乎不肯能暴露于危险中,E4是可能性极高。

可控性,描述风险出现时,驾驶员或其他涉险人员能够避免事故或伤害的可能性。比如,轮胎缓慢漏气比刹车失灵可控性高。
可控性,用CX表示,最低C0可控,最高C3几乎不可控,共4个级别。

ASIL等级的确定基于S、E、C这三个影响因子,下表中给出了ASIL的确定方法,其中D代表最高等级,A代表最低等级,QM表示质量管理(Quality Management),表示按照质量管理体系开发系统或功能就足够了,不用考虑任何安全相关的设计。确定了危害的ASIL等级后,为每个危害确定至少一个安全目标,作为功能和技术安全需求的基础。

— END —
下一篇,将介绍ISO 26262功能安全标准体系解读(下),请各位持续关注~
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
我想使用spawn(针对多个并发子进程)在Ruby中执行一个外部进程,并将标准输出或标准错误收集到一个字符串中,其方式类似于使用Python的子进程Popen.communicate()可以完成的操作。我尝试将:out/:err重定向到一个新的StringIO对象,但这会生成一个ArgumentError,并且临时重新定义$stdxxx会混淆子进程的输出。 最佳答案 如果你不喜欢popen,这是我的方法:r,w=IO.pipepid=Process.spawn(command,:out=>w,:err=>[:child,:out])
我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:classProductsControllerTest我的问题是:方法调用products()在哪里/如何定义?products(:one)到底是什么意思?看代码,大概意思是“创建一个产品”,但是它是如何工作的呢?注意我是Ruby/Rails的新手,如果这些是微不足道的问题,我深表歉意。 最佳答案 如果您查看test/fixtures文件夹,您会看到一个products.yml文件。这是在您创建
我经常迷上ruby的一件事是递归模式。例如,假设我有一个数组,它可能包含无限深度的数组作为元素。所以,例如:my_array=[1,[2,3,[4,5,[6,7]]]]我想创建一个方法,可以将数组展平为[1,2,3,4,5,6,7]。我知道.flatten可以完成这项工作,但这个问题是作为我经常遇到的递归问题的一个例子-因此我试图找到一个更可重用的解决方案。简而言之-我猜这种事情有一个标准模式,但我想不出任何特别优雅的东西。任何想法表示赞赏 最佳答案 递归是一种方法,它不依赖于语言。您在编写算法时要考虑两种情况:再次调用函数的情