|
本帖最后由 skypup 于 2014-3-23 00:54 编辑
举个例子。
设飞行器模式为油动直升机,当触发了“遥控器失控+电台无应答”事件,目前代码有一段逻辑是:
螺距设为悬停时数值,保持 0.5m/s 下降率,直至螺距减小至最小值时,熄火。
如果遇到这样的情况:
发动机着车半小时(为了使人员撤离到几十KM外),这时遥控器已经处于失控保护状态;当电台发出自主起飞指令后,发动机油门开始缓缓加大。
若在数秒后,在发动机还未定速时,由于电台通讯不稳定,触发了“遥控器失控+电台无应答”事件。
这时,软件开始执行失控返航逻辑。
由于并没有判断是从什么状态进入到失控返航逻辑。代码直接把油门与螺距加到悬停时数值,并开始缓缓减小。
后果,因为还未达到定速就给出一个很大的螺距,可能造成飞机摇晃甚至大桨触地(曾因为小车大螺距直接造成2架油直炸机,间接造成至少1次炸机)。
目前的解决方法是,在失控返航的逻辑中,加入判断,避免在还未定速前发生小车大螺距的情况。
如果对于每种特殊情况,都增加一小段代码。一段时间后代码会变得非常臃肿,排错变得越来越困难。
于是,尝试用有限状态自动机模型避免在代码中可能存在的潜在风险。
|
|