网络化联合仿真的时间同步
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.2 时间表示方法

1.时间表示的需求

为了支持基于离散事件模式运行的虚拟仿真系统,时间还需要能够描述同时(Simultaneity)发生的事件。如果所有观察者看见两个事件发生在同一时刻,时间模型就要避免造成一个或部分观察者观察到两个事件不是同时发生的情况。

时间涉及三个域:物理域、数学域(建模对象的状态模型)、计算域(实现仿真模型)。NCS中的主要问题之一就是不同仿真节点的不同域对应的时间模型之间存在差异,首先要解决的就是时间表示问题。

在虚拟空间中,很多仿真资源没有考虑时间这一因素,而在物理空间中,时间是核心要素。为了实现可预测、可控制的NCS联合仿真,我们需要给出时间的明确语义和表述形式,支持各类异构资源之间的协同交互。

2.存在的问题

使用实数表示时间是比较常见的方法,因为这种方法能够均匀演进时间。在软件实现中,表示时间的实数用一个浮点数近似表示。对于NCS联合仿真而言,用实数表示的时间并不完全适用。最明显的原因就是计算机处理的不是实数。计算机程序通常使用浮点数近似实数,这会带来问题。因为实数是具有无限精度的,然而,浮点数的精度是有限的,这就会造成量化误差,而且量化误差可能会积累。实数可以判断是否相等,以此来确定同时发生的事件,但是浮点数通常不支持这种判断。事实上,许多软件编译工具还把浮点数的相等判断作为潜在的错误给出提示。

3.时间表示的规则

时间分辨率(Time Resolution)是指两个时间戳之间取值的最小差别,如时间分辨率是1ms,则时间的取值可以是0.001s、0.002s、0.003s,但是这些时间值之间的值是无法表示的。

NCS中的时间表示应该满足以下三点需求。

(1)时间分辨率是有限的且对所有观察者都是一致的。无限精度(如实数表示的时间)在计算机上是不适用的,且如果不同观察者之间的时间精度不同,那么将难以对同时发生的事件有一致的理解。

(2)时间分辨率应该与时间的绝对值无关,也就是说,时间起点(零时刻)的选择不影响时间的精度。

(3)时间是可组合的,即对于任意三个时间区间t1t2t3,有

由于舍入误差的存在,所以使用浮点数描述的时间无法满足需求(2)和(3)。如图1-5所示,其中的C语言代码描述了双精度浮点数的加法。

图1-5 时间表示方法举例

输出的结果是0.800000,0.800000,0。rk的取值都为0.800000,但是由于舍入误差的存在,所以r==k的取值为false。综上,浮点数不能用来表示仿真中的时间,因为它无法处理和识别同时发生的事件。

在NCS中,通常使用整数型来表示仿真时间。整数通常在计算机中用固定数量的比特位来表示。整数可以相加且不存在舍入误差,可以准确描述同时发生的事件。例如,NTP协议中将时间用两个32位整数表示,一个表示秒数,另一个表示1s的分数(单位是2-32s)。