一种高效的工业控制系统时间戳压缩算法

2022-07-02 14:48孙景乐许元元
电脑知识与技术 2022年15期

孙景乐 许元元

摘要:该文针对工业控制系统的数据特点,提出一种时间戳压缩算法,仅使用参考时间和数据时间戳的秒和毫秒数值即可记录完整的时间戳信息。该算法可以使工业控制系统中的时间戳数据压缩为原来的四分之一。该时间戳压缩算法有效减少网络数据传输量,提升了工业控制系统的系统效率和容量。

关键词:时间戳;压缩;工业控制系统

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2022)15-0063-00

1前言

在工业控制系统中,数据一般包含三个基本要素:数值、时间戳和质量码。数据指传感器采集的实际数值,例如温度为300摄氏度,压力为1.5兆帕;时间戳用来记录采集数据的时刻,精度一般毫秒即可;质量码用来表征数据的可信度。关于工业控制系统的数据压缩的算法[1-2]比较多,但基本都是基于数值的。时间戳在数据的三要素中占用很大比例,如何在不丢失时间信息的前提下,减少时间戳的数据量是工业控制系统需要解决问题。

工业控制系统中数据采集都是周期性的,采集周期一般在秒或毫秒级别。采集频率较高时,为了提高网络数据传输效率,一般将多个采集周期的数据打包后传输到上层应用,传输周期一般在500毫秒以上。在一个传输周期内,数据包会包含多个采集周期的数据,但同一个数据包内的数据的时间戳差别仅体现在秒或毫秒级别上,其中“年月日时分”的数值都是相同的。如果有1万个监测点,那么就有1万次重复的“年月日时分”,这样造成传输数据量增加,网络负荷增加。本文提出一种简化时间戳压缩算法,可以极大减少时间戳的数据量,有效降低网络通信的数据量,提高系统效率。

2时间戳压缩算法

2.1简化时间戳的定义

无论是Windows系统使用的FILETIME①结构,还是Linux平台使用struct timeval②结构,都至少需要8个字节才能表示一个完整的时间戳[3-5]。对于重复的“年月日时分”部分,可以只保留一份,秒的最大数值为59,占用1个字节,毫秒的最大数值为999,需要2个字节,所以保留秒和毫秒信息仍然需要3个字节。本文提出的简化时间戳仅需要2个字节即可表示一个数据时间戳的秒和毫秒的信息,且时间信息不丢失,可还原完整时间戳。使用简化时间戳记录数据时的基本步骤如下。

1)数据采集时只记录采集时刻的秒和毫秒数值。

2)用总毫秒数表示秒和毫秒的数值,即总毫秒数=秒数值×1000+毫秒数值。

1分钟有60秒,所以该数值最大值不超过6000,一个无符号16位整数的表示范围为0~65535,所以使用无符号16位整数即可记录该时间戳数值。无符号16位数仅占用2个字节(1字节包含8个比特位)。

3)数据包中包含一个完整的时间戳作为参考时间,一般采用数据打包的时刻。该时间戳作为参考时间,用于应用层面还原数据的完整时间戳。

下面给出使用简化时间戳记录数据时间戳的示例:

示例1:

假如数据1采集时刻为“2022-1-9 13:21:15.368”(数值和质量码不在本文的讨论范围,仅考虑时间戳),数据1的采集时刻可以记為:15368毫秒(15秒×1000+368),占用2个字节。

数据2采集时刻为“2022-1-9 13:20:56.039”,则其简化时间戳为56039秒。后续数据3、数据4都按照此方法记录。

在“2022-1-9 13:21:16.368”时刻数据打包并通过网络发送。那么打包时刻 “2022-1-9 13:21:16.368” 即可作为的参考时间(占8个字节)。

2.2 数据量降低效果分析

按照常规时间戳定义数据格式如表1所示。而采用简化时间戳后的数据格式定义如表2所示。对比两个表中的灰度背景的行可知,每个数据减少2个字节,但多出一个8字节(表1中斜体部分)。

常规时间戳表示方法需要8个字节,采用简化时间戳仅需要2个字节,是常规时间戳的四分之一。一个采集数据点可节约6个字节。

在进行数据采集时,根据点的类型不同,数据采集周期也不同,开关量一般在50毫秒到500毫秒之间,模拟量一般在200毫秒到1秒之间。数据采集后并不是立刻发送,而是需要累积一段时间再发送到二层,这个周期称为发送周期,发送周期一般为500毫秒到2秒。对于同一个采集点,一个发送周期的数据包中包含了多次的采集数据。对于大型工业控制系统,数据采集点可达10万个,那么一个数据包可包含大约40万个采集数据。1万点则可节省6万个字节,对于整个数据包可节约240万字节,约2.3M数据量,压缩效果非常可观。参考时间虽然需要占用8个字节,但是整个数据包中仅需要一个参考时间,可忽略不计。所以简化时间戳对于降低时间戳数据量效果非常明显。

2.3设计约束

简化时间戳仅适用于数据的时间戳变化范围在1分钟之内的应用场景,如图 1所示,L表示基准时间左边的调节范围,R表示基准时间右边的调节范围,且L+R=60秒。工业控制系统的数据采集周期一般都在500毫秒到5秒范围内,所以一次数据传输中,所有数据的变化范围一定在60秒以内,是可以使用简化时间戳表示。如果变化范围超过1分钟,则无法正确还原原始时间戳。原因就是每分钟都会有某个时刻的秒和毫秒时间,如果不限定一分钟内,则无法确定是哪个分钟的秒和毫秒。时间戳还原方法在后续章节详细介绍。

3时间戳还原算法

3.1简化时间戳还原算法

还原算法的基本思路是,根据实际应用场景,确定L的值,根据约束等式L+R = 60,如图 1所示,R即可确定。假设Tb为基准参考时间,Tb1为基准时间的“年月日时分“部分的数值③,Tb2表示为基准时间的”秒毫秒“部分的数值,Ts表示简化时间戳的总毫秒数值,用Tr表示还原后的完整时间戳。详细步骤如下:0903A774-C8CA-488F-964C-45596FCBF1E3

1)计算分离Ts中的秒Ts_s和毫秒数值Ts_ms;

Ts_s =? Ts÷1000 ?,此处为向下取整运算。

Ts_ms = Ts mod 1000 ,此处为取模运算

2)取出基准时间中的“年月日时分“部分的数值Tb1;

3)用Tb1、Ts_s和Ts_ms组合成一个新的临时完整时间戳Tt,并让Tr=Tt;

4)取出基准时间Tb中的秒和毫秒的数值,并转化为毫秒数Tb2;

Tb2 = 秒×1000+毫秒

5)修正Tr的结果

如果Tb2 < Ts,且 (Ts – Tb2) ≥ R×1000,则

Tr=Tt – 60秒

如果Tb2 > Ts,且 (Tb2 - Ts) > L×1000,则

Tr=Tt+60秒

6)输出Tr为最终还原的完整时间戳

下面通过示例讲述简化时间戳的还原过程。

示例3:

本示例以示例1中的数据为输入,即Ts为15368毫秒,Tb为“2022-1-9 13:21:16.368”。此时,Tb1为2022-1-9 13:21,Tb2为16368毫秒。假定L=50秒,那么R=10秒。那么还原过程为:

根据步骤1)可得到,Ts_s=? 15368÷1000 ? =15秒,Ts_ms=15368 mod 1000=368毫秒;

根据步骤2)可得Tb1=“2022-1-9 13:21”;

根据步骤3),将Tb1与Ts_s、Ts_ms合并为一个新的完整时间Tr=Tt=“2022-1-9 13:21:15.368”;

按照步骤4)可计算得到Tb2=16×1000+368=16368毫秒;

步驟5)中,由于两个条件都不满足,不需要修正。最终还原的完整时间戳为“2022-1-9 13:21:15.368”。

对于数据2的时间戳,Ts=56039毫秒,在还原的时候,步骤1)到步骤4)的计算过程都一样,步骤4)执行完成后,Tr=Tt=“2022-1-9 13:21:56.039”,实际原始时间戳为“2022-1-9 13:20:56.039”,分钟数值多了一分钟,与实际不符合。该错误可在步骤5)中得到纠正。前面的步骤可计算Tb2=16368毫秒,满足Tb2

3.2 L和R取值讨论

前面讨论过,该简化方法使用于数据波动时间范围小于1分钟,L与R的取值需要视具体的使用场景进行调整。示例2中设置L=50秒,是考虑到数据都是在打包时刻之前进行采集的,所以L值可设定偏大一些。如果数据是在设置好参考时间后进行采集,那么数据的时间戳偏差都在参考时间右边,此种场景则可设置L=10秒,那么R=50秒。所以L和R的值不是固定不变的,需要根据实际情况灵活调整。

4结论

本文根据工业控制系统数据采集的特点,提出简化时间戳方法,并给出时间戳还原的详细步骤。使用简化时间戳,可以使时间戳数据变为原来的四分之一,大大减少了网络数据传输量,提高了工业控制系统的系统效率。

注释:

① Windows平台的时间格式中的一种,使用一个64位整数(分为低32位和高32位)记录距离1601年1月1日零时零分零秒时刻的100纳秒数.

② Linux平台使用的时间格式,分为两部分,其中tv_sec是有符号32位整数,记录距离1970年1月1日的秒数,tv_usec是有符号32位整数,记录相对于tv_sec下的微秒数.

③ 此处为了叙述方便,使用更直观的“年月日时分”叙述,实际编程实现时使用的是对应平台的时间格式(FILETIME或struct timeval).

参考文献:

[1] 李焕,刘海涛.DCS模拟量数据的分部压缩方法[J].电子测试,2013(12):52-53.

[2] 龙海军,姚光霖.核电站DCS系统历史数据压缩算法的研究[J].科技资讯,2013,11(8):29-30.

[3] 巧用Unix的时间戳[J].计算机与网络,2012(11):32.

[4] 陈开渠.十进制时间戳协议[J].中国科学院研究生院学报,2001,18(2):144-148.

[5] 张科伟,唐晓波.时间戳协议研究[J].计算机应用研究,2004,21(10):100-103.

【通联编辑:闻翔军】0903A774-C8CA-488F-964C-45596FCBF1E3