历史上的重大软件BUG启示录 第1篇---"瞳"的陨落

版权声明:本文为博主原创文章,未经博主允许不得转载。联系邮箱:[email protected] https://blog.csdn.net/zhzht19861011/article/details/52417332


图片来源于网络

      2016年2月17日,日本成功发射了一颗卫星,他们给这颗卫星起了个好听的名字:“瞳”。“瞳”卫星的造价为2.86亿美元,约合人民币18.6亿元。卫星上携带的X射线检测仪器,有望揭开黑洞等宇宙的未解之谜,被寄予厚望,代表了“新一代X射线天文学”的未来。

      然而时隔一个多月后,“瞳”却因自旋而解体。它的设计寿命为10年,却没能正式工作10天。

      将它彻底推向不归路的,是一个底层软件错误。

      让我们从头说起。

      “瞳”的悲剧始于“星体定位跟踪器”,这是用来测量星体坐标的装置,用于感知卫星姿态。卫星在经过“南大西洋地磁异常区”的南非东海岸上空时,会暴露在相对更高的辐射环境中,这会导致“星体定位跟踪器”故障。卫星的电子设备当然都是经过防辐射处理的,但或许是工程师过于乐观,或许是“瞳”运气太差,今年的地球磁场变化不太合理,数据变化太大,超出了卫星设计上限。

      3月26日北京时间凌晨02:01分,“瞳”卫星根据预设指令开始执行转向,其指向从对准金牛座蟹状星云转向马卡良205星系。就在这一过程中间的某个时刻,“星体定位跟踪器”失效。这自然不会成为大问题,因为这是卫星,总会有几个备份措施。因此替代方案陀螺仪登场,接替故障的“星体定位跟踪器”向卫星提供姿态信息。令人瞠目结舌的是,陀螺仪软件也出错了。它错误地向卫星计算机发送报告,认为本来停止运转的星体正以大约每小时20度的速度发生旋转。于是星载计算机对此自动做出反应,微型“反力轮”开始运转,产生反作用力去抵消“不存在的旋转”。至此,卫星真的开始旋转了。抽风的陀螺仪报告计算机检测到了更高的旋转速度,“反力轮”就更卖力的旋转,形成了恶性循环。“反力轮”越转越快,卫星的旋转速度也越来越快。

      “反力轮”达到一个临界速度值后,保护装置再次出动,卫星内置的一个磁力扭矩棒开始通电用于提供反向扭矩。但磁力扭矩棒只能在特定的方位才能发挥作用,再次让人惊讶的是,设计者只是进行了正常情况下的测试。在这种异常情况下,磁力扭矩棒的位置已经歪斜,因此提供的扭矩并不能与“反向轮”产生的扭矩相抵消。

      随后控制系统检测到异常,星载计算机在连续控制中估计已经知道数字仪器出现故障了,于是进入安全模式。

      此时还有第三重防护:反推发动机。

      北京时间凌晨03:10,卫星控制系统开启反推发动机。反推发动机产生的扭矩足以让卫星停止旋转,但这一行动彻底葬送了”瞳”,因为底层软件犯了一个大错:控制反推发动机喷射的方向反了!卫星加速旋转,最终解体!

      调查结果显示,在数周之前才上传到卫星的错误程序,并没有经过严格流程测试! 

      《日本经济新闻》4月29日报道称,(这次“瞳”卫星事故)可能导致各国对日本宇宙开发的信任度下降。“如果你不彻底测试自己的代码,恐怕你开发的就不只是代码,可能还会声名狼藉。“

猜你喜欢

转载自blog.csdn.net/zhzht19861011/article/details/52417332