为了能给家人多一份安全保障,我个人比较喜欢沃尔沃汽车,尤其是它的安全辅助系统。谈起汽车安全,很多人第一时间会想起各种汽车铠甲系统、安全气囊等,但在我眼中,这些仅仅是被动安全系统,我更喜欢主动安全系统,如各类主动刹车、异常识别等系统。这些主动系统联合工作,相当于在你开车时,旁边还有一个人帮你看着路。相比于其他车型仅仅作为可选配件,沃尔沃几乎全系标配主被动安全系统,我猜测应该源于其背后关于行车安全的底层逻辑吧。

工业产品类同于行车安全,很多工业产品的安全运行都关系到国计民生,如本书提及的电力继保设备。因此,我们在设计工业产品时,如果真将安全运行放在心上,就不能仅仅是被动等待异常后及时处理,更要主动防御,防患于未然。

上一节介绍的堆栈策略就是一个很好的化被动为主动的策略。最初,为了防止堆栈溢出造成的程序异常,我们习惯于将堆栈置于SRAM底端(堆栈指针向下递减),这样一旦发生堆栈越界,就会触发内存访问异常中断,可及时进行处理。有时为了提高灵活度,也采用过MPU存储保护单元等策略。
这是一种被动的策略。现在,我们习惯于在集成测试过程中测试堆栈的真实使用情况,然后依据产品和CPU的特性做1.5~2倍的预留。这就是一种典型的主动策略,基本上将堆栈溢出这个问题消灭掉了。当然,作为兜底机制,被动策略还需要,主被动策略是需要互相配合的。

为了让产品质量能更上一层楼,我们需要更多的主动策略。

◇◇◇

产品集成测试时,我们最基本的要求是要做到百分之百的的代码覆盖测试,如一个工业产品中的所有代码都测试到,应该可以保证一个产品的基本质量。然而,说起来容易做起来难,尤其是一些特殊模块,如定值运行缓冲区检测模块。微机保护的正确运行严重依赖于运行定值缓冲区,我们因此习惯增加一个异常检测模块,在因干扰等各种原因导致数据被破坏时异常报警。但实验室环境下,很难发生这类异常,也导致定值运行缓冲区检测模块很难被测试到。

如果能在产品架构设计时,增加一些检测辅助模块,且可以通过维护软件或脚本命令临时修改定值运行缓冲区,就可以很容易的完成这一项测试。

围绕测试,我们构建了一整套主动检测手段,如查看各元件的中间运行状态、捕获消息流、通讯帧异常汇总分析等,相当于在产品架构设计阶段,就已经充分考虑了产品测试的需求。

这些主动检测手段一旦被构建后,大家立马会赋予它们新的使命,尤其在工程服务现场。工程现场一般是各厂家设备的集成场地,因此出现问题后很难定位。如微机保护设备可能安装在10kV成套高低压柜中,现场用户验收时,加电气量后断路器不动作,就有可能是断路器、机柜、电缆、保护设备、参数设定等多方面的原因。不同厂家的工程人员互相推诿扯皮,经常将现场搞的一团糟。

有了各种主动监测手段后,碰到上述问题,我们可以顺着流程去观察全路径,如下图示意,立即可以定位到故障原因。

工程现场和各种主动检测模块互相迭代促进,最终,绝大部分现场问题都可以构建出完整的分析路径,有经验的工程人员甚至知道哪些问题发生概率大,可先行分析检测。

借助这些策略,我们构建了系统的工程人员培训计划,可以在家里进行各种现场事故模拟,大幅度提升了现场服务速度和水平。工作多年,我最怕那种傻傻的仅知道试来试去的工程人员了,能对现场问题快速分解定位,是一个工程服务人员必备的基本素养。

这些策略不仅对工程人员有帮助,也对研发人员有很大帮助。在我们的产品中,有一个消息动态捕捉机制,可以记录下某事件发生时前后一段时间的消息流,相当于用一个透视眼去观察设备的运行状态。通过这样的机制,我们解决了很多棘手的程序异常。

◇◇◇

在诸多主动策略中,有一个策略对我们影响很大,甚至在一定程度上重构了我们团队的工作模式,这就是虚拟设备开发环境。

虚拟设备开发环境是为了解决嵌入式设备开发过程中软硬件研发不同步而构建的,用于在硬件还不具备的情况下提前进行软件开发。很快,我们就赋予了它新的价值。

微机保护产品比较特殊,现场出现一些特殊的故障后,都需要厂家协助进行故障分析。一些简单的故障可以通过事件报告等信息快速分析,但复杂的故障必须通过对故障时刻的采样数据进行分析,才能定位故障原因。

常规的扰动数据分析策略是借助专用的软件,以图形的方式去研究。

但有了虚拟设备开发环境后,就可以将上述采样数据进行回放,这样可以更加直观细致的分析继保动作过程。而且,借助于这种策略,我们可以持续迭代提升保护算法。

◇◇◇

本章伊始,我描述了一个颇为狼狈的现场事件。最终,我们发现该现场问题源于某块程序模块执行进入了一个中间状态后退不出去,而导致了设备异常。

工控产品中很多软件模块都有复杂的状态流,传统编程策略经常使用一堆标志位,不仅容易出现疏漏,代码可读性差,也不容易审核。如何从源头上主动杜绝这类问题呢,我们引入了一个很有效的策略:状态机。

下图是一个很典型的通讯状态机,设备上电后默认为初态,完成各种软硬件初始化后进入常规状态,如果有数据需要发送,首先发送数据,然后进入发送状态,等待接受返回信息后返回常规状态。为了程序结构清晰安全,我们约定仅在常规状态允许发送数据。

然而通讯是不可靠的,有些信息发送出去后可能丢失,或者对端异常不处理,此时就不会接受到接受事件了,也就没法返回常规状态了。因此,我们必须增加一条状态路径:超时事件,可强行退出当前异常状态。

因为示例原因,这个状态机比较简单。正常产品中状态机都比较复杂,此时通过对状态机进行审核,就可以提前发现这类问题并进行预防。

现在,状态机已经成为我们产品中最常使用的技巧之一了,借助状态机图可以很简单的映射为代码,不仅便于代码审核,而且便于大家坐在一起讨论分析,甚至借助状态机图也容易构建基于分支覆盖的测试用例。一个简简单单的主动策略,不知将多少异常消弭于无形。

◇◇◇

产品不行服务补,这是很多公司或产品的状态,因为产品质量不过硬,为了维护用户,被迫维持一个较大的服务团队积极响应用户诉求。

从被动策略到主动策略,看似仅仅前进了一小步,但可以让我们在产品质量提升之路上前进一大步。从此,我们不在是被动的灭火队员,产品质量问题可以被关进笼子里了。

——————————————

返回目录

我是小马儿,一个渴望良知与灵魂的嵌入式软件工程师,欢迎您的陪伴与同行,如需最新版PDF电子书,或期望深入交流,可加我个人微信nzn_xiaomaer,需备注“异维”二字。

7.3 从被动到主动相关推荐

  1. 在工作中有被动转主动的体会_积极主动应对眼前的一切,就是对自己最好的犒赏...

    同样是面对阅读.运动.工作或是其他有益的事务(事物),主动与被动的心态所感受到的力量必然会存在差异. 被动的人做事只是为了交差而已,给谁交差,就需要相应的人对他们的行为做出对应的反馈才行,这就是他们一 ...

  2. 网络管理不简单 需化被动为主动

    网络系统管理的应用需求,随着网络环境的复杂和业务系统的应用而不断凸显,成为信息技术部门不可或缺的管理工具,而SNMP这种简单的管理方式正在开始逐步退出网络管理的舞台. 众所周知,传统的网络管理依靠SN ...

  3. 从被动到主动,换个角度看 DB

    作者 | 韩锋 我曾长期从事ERP.电子政务类软件的开发工作,作为数据库的深度使用者,接触到大量数据库,如FoxPro.SQLServer.Oracle.Informix--在实践过程中,对这一领域也 ...

  4. 主动变被动9个例句_小管理,大智慧——激发团队变被动为主动的奥秘

    首先建立个管理框架吧. 1.文化建设为先导:一方水土养育一方人,虽然世界上没有两个同样性格.特点的人,但仍然可以看出各省.各区域的人,都会多少带些地方特色文化和个性.伟大的公司,都有着特征明显的文化. ...

  5. 需求分析挑战之旅(疯狂的订餐系统)(7)——变被动为主动

    摘要: 说教性质的需求分析理论,各位看了也白看,所以咱们就来一个真实个案--"订餐系统"体验一下."订餐系统"貌似简单,但陷阱重重,各种需求分析的经典场景将会一 ...

  6. locate用主动还是被动_主动形式表被动意义

    主动形式表被动意义 英语中有些结构形式上是主动的,而表达的意义却是被动的. A.某些不及物动词的被动意义 英语中一般只有及物动词才用于被动语态,不及物动词不用于这种结构.但有些时候,某些不及物动词,其 ...

  7. 真北鸡精:如何化被动为主动?

    如何化被动为主动?如何从不知道今天干了些啥.这不是我,到这就是我? 分类整理是起点. 我们的人生目的.意义分为两类:资源类.体验类. 第一类是关于物质文明. 如身体.金钱.是缺了才能感觉到重要的东西. ...

  8. 【​观察】激活“文化基因”,中兴化被动为主动

    申耀的科技观察 读懂科技,赢取未来! 平静多日的中兴事件又有了最新进展.7月2日,美国商务部发布公告称,暂时.部分解除对中兴通讯公司的出口禁售令.中兴通讯于今日(7月6日)发布公告称,确认获得美商务部 ...

  9. 网络安全,如何化被动为主动?

    根据Gartner近年的调查,有97%的入侵行为发生在已经部署适当网络安全防护系统的公司,99%的攻击行为是使用已知并存在多年的攻击方式或者漏洞,95%穿透防火墙的入侵行为是因为误配置造成. 尽管投入 ...

最新文章

  1. 7-5 求前N天 (30 分)
  2. spring 获取url参数
  3. 使用HISTCONTROL强制history忽略某条特定命令
  4. python中反射(__import__和getattr使用)
  5. 前端处理方式:特殊格式时间转换(2020-11-27T02:58:41.000000Z)
  6. ans函数python_#12 Python函数
  7. 用户输出表单处理php
  8. 有限元分析试题:ANSYS有限元分析中级培训考题及其答案解析(填空+选择+判断+解答)
  9. 华硕笔记本BIOS详细设置
  10. 戴尔便携式计算机 故障,老DELL笔记本电脑常见故障“通病”问题
  11. 【数据挖掘】K-Means 一维数据聚类分析示例
  12. 机器学习实战(4)——训练模型
  13. 史上最详细sql注入wp
  14. 计算机u盘设备无法启动不了,系统提示“该设备无法启动(代码:10)”,USB设备不能开始工作怎么办?...
  15. chromel浏览器老是提示adobe flash player已过期
  16. Zoomit默认快捷键
  17. Python 古诗写入、复制
  18. 金蝶cloud 常用数据库表
  19. 小程序自定义导航栏 navigationStyle
  20. 数据库链接失败问题,终于找到解决方案!

热门文章

  1. Gradle史上最详细解析
  2. 维克房地产中介管理系统 v2.5 企业版 是什么
  3. Latex公式换行、对齐
  4. 五、Git 与 SVN 区别
  5. QCC304x系列开发教程(基础篇)之2.4-QCC3040之如何修改MDE的主题
  6. [忘记高数]Hesse矩阵
  7. python 时间戳转iso 8601_ISO8601时间字符串到时间戳处理
  8. Kubernetes家族容器小管家Pod在线答疑?
  9. 天猫宣布400家数码家电“春节不打烊” 京东笑而不语低调“炫富”
  10. 正好杠杆炒股大盘缩量开门红后