LabVIEW​时间戳

内容

什么​是​LabVIEW​时间​戳?

LabVIEW​时间​戳​是​一种​表示​绝对​时间​的​128​位​数据​类型。​此​数据​类型​解释​可以​为​具有​64​位​基数​的​带​符号​128​位​定点​数字。

{
   (i64)​自​纪元​01/01/1904 00:00:00.00 UTC​以来​的​秒​数​(使用​公历​并​忽略​闰秒),
   (u64)​一秒​的​正​分数
}

此​信息​何时​需要​用到?

如果​要​将​时间​戳​传递​给​调​用​库​节点​或​自​定义​库,​则​需​知​晓​并​重视​此​信息。 最高​有效​64​位​应​解释​为​二个​带​符号​的​64​位​补​码​整数。​它​表示​纪元​01/01/1904 00:00:00.00 UTC​之后​的​整​秒​数。​最低​有效​64​位​应​解释​为​不​带​符号​的​64​位​整数。​它​表示​最高​有效​64​位​中​所​指定​整​秒​数​后​的2-64秒​的​数量。​此​整数​的​每​个​时钟​周期​均​表示​0.05421010862427522170 ...​阿​秒。

此​128​位​数据​类型​表示​的​绝对​时间​是​两​个​64​位​组成​部分​的​总和。

示例​解释

日期

十进制​表示法

十六​进制​表示法

01/01/1904 00:00:00.000 UTC

{ 0, 0 }

{ 0x0, 0x0 }

12/31/1903 23:59:59.500 UTC

{ -1, (0.5 represented by 263)) == 9223372036854775808 }

{ 0xFFFFFFFFFFFFFFFF, 0x8000000000000000 }

12/31/1903 23:59:54.800 UTC

{ -6, (0.8 * 264) == 14757395258967641293 }

{ 0xFFFFFFFFFFFFFFFA, 0xCCCCCCCCCCCCCCCD }

01/01/2002 00:00:00.000 UTC

{ 3092601600, 0 }

{ 0xB8555B00, 0x0 }

上​表​中的​第二个​示例​表示​纪元​之前​0.5​秒。​该​示例​将​整数​秒​值​设置​为​自​纪元​后​下​一个​最小​整数​秒​(-1),​然后​将​小数​部分​设置​为​0.5​秒,​因此​总和​为-0.5​秒。 

在​第三个​示例​中​进行​了​一些​舍​入,​因为​二​进制​无法​精确​地​用​来​表示​0.8。​此外,​如果​尝试​利用​双​精度​浮​点数​构​建​其中​一些​值,​则会​由于​精度​不足​而​无法​精确​匹配。​在​这种​情况​下,​第三个​示例​的​小数​部分​将​改​为​0xccccccccccccc000。

LabVIEW​的​早期​版本

LabVIEW 7.0​或​更​早​版本​使用​64​位​双​精度​浮​点数​(DBL)​数​来​表示​时间,​从而​产生​15​位​的​精度。​从​1904​年​1​月​1​日​(时间​戳​为​纪元​或​零​年)​到​2000​年​1​月​1​日​之间​的​秒​数​是​3027456000。​如果​用​DBL​表示​该​值,​则​将​使用​15​位​精度​中的​10​位。​这样​就​会​只从​1904​年​走到​今天,​从而​为​使用​大部分​分辨​率​执行​硬件​定​时​留下​一个​非常​小​的​分辨​率​空间。  因此,​将​时间​表示​为​DBL​并不​理想,​因为​这样​不​符合​行业​要求。

 

额外​资源

Was this information helpful?

Yes

No