DAT 是 IRIS / Chronicles 内部使用的 Contract 中 Item 数据识别号。
如果你看到这里对 Contract 不太熟悉的话,那么请看下 IRIS 基础概念中有关类似我们举的文件的例子,这个 Contract 就是对应我们文件夹中一张一张的纸,在纸上面我们有存有数据。这里的 Contract 不是合同的意思。
因为 Contract 上的数据需要唯一的内部识别号,所以 EPIC 就给这些纸张上的数据编号了,但为了方便 EPIC 用了时间戳,但 EPIC 又对时间戳以天为单位进行计算,然后把时间戳打在编号上了。
为什么是 DAT
EPIC 喜欢用 3 个字母来缩写,这个 DAT 本来我猜意思就是时间戳的意思,但是他们又不想用 DATE,那么就干脆用了一个 DAT 来替代。
这个 DAT 有时候会有歧义的,因为 DATA 中的简写也可以用 DAT,所以我第一次看到这个一直以为是 DATA 的意思,时间上这个就可以简单理解为 Date 时间戳。
DTE 是什么
DTE 是表示当时的天的数字,这个数字是从 12/14/1899 或者 DTE=21532 往上加的。
99999
这里有 5 个 9。
可能当你看到这里的时候是一脸懵的,为什么要有 5 个 9。
EPIC 希望对不需要修改的数据设置为最大的值,在 EPIC 系统中,你甚至可以认为 99999 就是系统中的无穷大。
如果你的 Item 中的数据是不随时间变化的,换句话就是数据是 No-Add 的熟悉的话,DAT 值就是 9999。
121531
这个值为 DAT 在 EPIC 系统中可以使用的最大值。
不知道谁选的日子 EPIC 设置 12/14/1899 或者 DTE=21532 作为系统开始的时间。EPIC 认为系统在 12/14/1899 之前是不会有任何数据的,在这个值 21532 的基础上再加上 99999 就等于 121531。
我们要知道 EPIC 是按照天来存储数据的,所以当系统运行到 121531 这天的时候,EPIC 就崩溃了,实际上这天是 9/27/2173,还在 1000 多年以后,估计我们有生之年是遇不到了。
DAT 和 DTE
这 2 个值之间是可以互相计算的,计算方法是:DAT= 121531 - DTE。
等于在 EPIC 系统中,他们把时间拆分为按照天的计算方式,一个值是从下往上来记录事件发生的具体时间,为了标识数据,他们又用了一个最大的值来减去系统的当前时间来 DTE 来获得唯一标识。
总感觉有点神经病的意思,所以你如果有机会看过 EPIC 系统的话,你就知道他们大量的数据都是 5**** 开头的。
$$zDAT2DTE(DAT)
转换函数,EPCI 不让程序员通过上面的计算方法来计算,他们自己写了一个 $$zDAT2DTE(DAT) 函数,在任何涉及到 DAT 到 DTE 的转换,EPIC 都要求使用上面的函数转换,因为 EPIC 说如果程序员自己弄的话,可能有意想不到的错误。
他们是多么不信任程序员呀。