[导读] 在知乎上看到一个网友的问题:为什么自己设计的嵌入式系统稳定性远不如工业级产品?我觉得这是一个非常好的问题,尤其国内很多中小企业可能关注点更多在于产品的功能,而不在性能,产品功能很炫可是稳定性往往差强人意。所以就产品稳定性,来聊聊我的一些认知和体会。
什么是稳定性?
稳定性,英文中用(可靠性)Reliability engineering来研究,可靠性工程是系统工程的一个子学科,它主要研究设备无故障运行的能力。可靠性描述了系统或组件在指定条件下持续指定时间段内运行的能力。
一个产品一般从设计的角度基本包含哪些主要的设计呢?常见的嵌入式系统,可能包含机械设计、硬件设计、软件设计,那么从设计来谈一个产品的可靠性,就必然要从这几个主要的方面下功夫。另外工业级产品为什么表现的更加可靠呢?
为了要相对深入的谈这个问题,来看看这个相关的一些术语指标是怎么描述一个系统或者零件的可靠性的。
啥是可靠性概率?
可靠性定义为设备在规定条件下在指定时间段内将执行其预期功能的概率。从数学上讲,这可以表示为系统的可靠性是指在时间t内没有发生某F类故障的概率。
作何理解呢?系统开始工作的时间,是发生类故障的时刻。也即表征系统由于某类故障而失效的概率
啥是失效概率
有可靠性概率,自然就有失效概率,失效概率刚好与可靠性概率是互补,满足下面关系:
上面的概念是针对某类故障的统计规律,那么推广开来,从系统而言去掉下标F,也满足上述关系。一个系统由不同的组件组成。
系统失效率
当系统的寿命呈指数分布时,系统的可靠性为:,其中就是失效率(failure rate)的概念
这个曲线相信很多人应该见过,这就是产品的澡盆曲线,在产品前期老化阶段比较容易暴露故障,失效率比较高。不要问我为什么,这是无数先辈们统计所得的统计规律,对于工程应用相信即可(当然如果是做理论研究的则另当别论)。这个规律也解释了为何有的厂家出厂的产品需要做老化试验的原因,因为做老化试验可以将故障充分暴露出来,如此筛选出来的产品在客户端将很少会出故障。
为啥费这么多话来讨论这个失效率呢,来看看这个例表:
汽车嵌入式系统组件 | 失效率 |
---|---|
军工级微处理器 | 0.022 |
车规级微处理器 | 0.12 |
电动马达 | 16.9 |
不同的组件的失效率是不一样的,那么在设计之初在成本允许的情况下,就需要尽量选取失效率低的组件。
失效模式
不同的组件的失效模式是不一样的,啥概念呢?也就是组件产生故障的原因各异,比如电路板上的电阻其失效模式就有可能是短路失效,断路失效、参数漂移失效,对于软件而言其失效模式就有可能有很多,比如栈溢出、RAM数据错误、芯片总线错误等等。每种失效模式,其失效率也是不一样的。如要深入其了解这些指标的含义可以参考IEC61508或者其他等同的标准。
如何提高产品的可靠性呢?
如果产品老是出问题,不光攻城狮恼火,甚至会决定一个公司的前途命运,所以如何提升产品的可靠性,绝对是一个需要花大力气去研究的课题,也是每个从业人员需要在灵魂深处深深刻下烙印。做产品不是儿戏,产品不稳定,不仅仅会影响升职加薪,可能一个公司就会因此歇菜。
那么究竟如何能提高产品的可靠性呢?我想大体上可以从这几个方面着手:
-
成功的开发流程
-
成功的项目管理
-
严格的质量控制
开发流程
这是IEC61508界定软件、硬件都须采用如下的V&V开发模型(注明IEC61508标准里图不太一样),简单介绍一下这个模型:
现在流行很多的开发流程,比如敏捷开发模型就比较受追捧,个人并不反对敏捷开发模型,但是从产品开发的可靠性角度更推崇这种双V模型,其实很多跑敏捷的项目在每一个迭代中其实可以融入这种双V模型。这个模型从设计的需求>架构>详细子模块设计每向下走一步,都需要verfication 测试检验前级,同时还最终输出validation确认设计。
在IEC 61508(功能安全等级标准)等标准中都有体现这一套路,简略看看相关标准:
IEC 61508是适用于各种行业的基本功能安全标准。它将功能安全定义为:“与EUC(受控设备)和EUC控制系统相关的整体安全的一部分,它依赖于E/E/PE安全相关系统、其他技术安全相关系统和外部风险降低设施的正确运行。”“基本的概念是:任何安全相关的系统都必须正确工作或以可预测的(安全的)方式失效。”
个人对于V&V模型理解的几个要点:
-
要可执行的流程,不要形式化套路!
-
标准规定的科学严谨套路,遵循从需求到设计的双向可追溯,从设计到测试的双向可追溯。
-
可靠性从一开始转化市场需求时就需引入,中小型企业更多聚焦于功能实现,而忽略了性能、可靠性需求。注意这些可靠性需求都是设计目标,没有目标如何能从体系上产出一个优良的产品呢?如不遵循严格的体系流程,或许一个公司偶然能出一个高质量产品,但个人认为一定很难保证出来的产品的整体质量
-
需求环节:可靠性是需要提需求的,举些栗子:
-
环境需求,比如温度、湿度、振动等,这些在需求阶段就应界定相关的测试等级,其实即便公司的产品不需要去做相关强制认证,但是从可靠性角度,提出这样的需求,势必需要相应的设计以及测试去保证。那么定然从这些维度会提升产品的可靠性。
-
EMC需求:比如常规的抗扰度测试要求,都需要需求阶段明确提出。
-
.....
-
-
设计环节,可靠性需要提出需求,更需要设计去实现。对于每项可靠性需求,事实上都可以尽量转化成设计的检查项去追溯。比如硬件中的器件失效模型及影响分析FMEA(Failure mode and effects analysis),软件中同样也有对应的失效模型可做分析以及影响分析,通过失效模型分析,可参考标准中的推荐做法去从设计的角度采取对策。
-
测试环节:测试包含验证(verification)和确认(validation) ,V&V模型每向下一步,都应向上一步去verification,每一个设计输出,其实都应有对应的验证去保障,最终的产品级还需要确认环节。另一个重要的要点就是工业级产品开发,往往在需求阶段,设计就已然介入。
开发流程每个公司都各有不同,但是从产品生命周期以及产品可靠性自身规律角度,个人觉得还是应该考虑这些要点。关于开发流程以及功能安全标准内容很多,这里泛泛总结这些个人体会。
成功的项目管理
项目管理是在特定的时间内领导团队实现目标和达到成功标准的过程。项目管理的主要挑战是在给定的约束条件下实现所有的项目目标。这些信息通常在项目文档中描述,在开发过程的开始创建。主要的限制是范围、时间、质量和预算。其次的挑战是优化必要投入的分配,并应用它们来满足预先确定的目标。
一个可靠性很高的的产品开发,与一个完善的项目管理是密不可分的。项目管理在项目的执行过程中作用是非常重要的,从启动、计划、执行、监管、收尾中对项目进行管理。
项目管理在这些过程中,所需的知识以及在每个阶段需从事的活动可参考下图(来源:PMBOK 第6版):
严格的质量控制
好的设计发布,如没有严格的生产质量控制,所出售的产品质量也定然没有保障。对于这一点不怎么了解,就不做过多的描述了。
总结一下
回到问题本身,如想得到一个可靠的产品,个人认为从产品设计流程、项目管理、以及生产质控方面都应有完善的要求且须很好的落实,工业级产品砸钱做那么多的认证,不是没有缘由的。这些认证里有很多就是可靠性的具体考核。