碰到程序bug的时候,一般不会怀疑成功的商业软件,但也因此让我白忙乎了2周时间。
我采用makRTI3进行分布式仿真。HLA协议规定,联邦成员从 t0 时刻申请推进到 t1 时刻的期间(从提出申请到获得许可前),HLA会把时戳在[t0, t1]范围内的所有TSO消息发送给提出申请的联邦成员,并且不可能收到 < t0 的TSO消息。然而在我的程序中,却发生了收到过时的TSO消息!
我使用了两个联邦成员,它们都既是“时间受控成员”又是“时间控制成员”。HLA协议规定,“时间受控联邦成员”的LBTS只能由其他能发送TSO消息到该成员的“时间控制成员”的当前时间和lookAhead决定。然而我所采用的这两个联邦成员,他们的LBTS只是他们自己的逻辑时间+“时间前瞻量”。
排除了其他可能的错误。 实在是没有办法,只好将makRTI换成pRTI。问题得到了解决。
结论: 有时候要怀疑一下商业软件。