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

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

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

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

让我们从头说起。

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

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

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

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

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

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

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

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

相关阅读

RS-485接口电路指南(TI:SLLA036D)
FreeRTOS历史版本更新记录

作者:朱工
首发博客:https://freertos.blog.csdn.net/article/details/52417332
关注FreeRTOS从基础到高级专栏,即时收取FreeRTOS系列文章。

发表评论

邮箱地址不会被公开。 必填项已用*标注