国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種高效的工業(yè)控制系統(tǒng)時(shí)間戳壓縮算法

2022-07-02 14:48:31孫景樂許元元
電腦知識(shí)與技術(shù) 2022年15期

孫景樂 許元元

摘要:該文針對(duì)工業(yè)控制系統(tǒng)的數(shù)據(jù)特點(diǎn),提出一種時(shí)間戳壓縮算法,僅使用參考時(shí)間和數(shù)據(jù)時(shí)間戳的秒和毫秒數(shù)值即可記錄完整的時(shí)間戳信息。該算法可以使工業(yè)控制系統(tǒng)中的時(shí)間戳數(shù)據(jù)壓縮為原來(lái)的四分之一。該時(shí)間戳壓縮算法有效減少網(wǎng)絡(luò)數(shù)據(jù)傳輸量,提升了工業(yè)控制系統(tǒng)的系統(tǒng)效率和容量。

關(guān)鍵詞:時(shí)間戳;壓縮;工業(yè)控制系統(tǒng)

中圖分類號(hào):TP311? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1009-3044(2022)15-0063-00

1前言

在工業(yè)控制系統(tǒng)中,數(shù)據(jù)一般包含三個(gè)基本要素:數(shù)值、時(shí)間戳和質(zhì)量碼。數(shù)據(jù)指?jìng)鞲衅鞑杉膶?shí)際數(shù)值,例如溫度為300攝氏度,壓力為1.5兆帕;時(shí)間戳用來(lái)記錄采集數(shù)據(jù)的時(shí)刻,精度一般毫秒即可;質(zhì)量碼用來(lái)表征數(shù)據(jù)的可信度。關(guān)于工業(yè)控制系統(tǒng)的數(shù)據(jù)壓縮的算法[1-2]比較多,但基本都是基于數(shù)值的。時(shí)間戳在數(shù)據(jù)的三要素中占用很大比例,如何在不丟失時(shí)間信息的前提下,減少時(shí)間戳的數(shù)據(jù)量是工業(yè)控制系統(tǒng)需要解決問(wèn)題。

工業(yè)控制系統(tǒng)中數(shù)據(jù)采集都是周期性的,采集周期一般在秒或毫秒級(jí)別。采集頻率較高時(shí),為了提高網(wǎng)絡(luò)數(shù)據(jù)傳輸效率,一般將多個(gè)采集周期的數(shù)據(jù)打包后傳輸?shù)缴蠈討?yīng)用,傳輸周期一般在500毫秒以上。在一個(gè)傳輸周期內(nèi),數(shù)據(jù)包會(huì)包含多個(gè)采集周期的數(shù)據(jù),但同一個(gè)數(shù)據(jù)包內(nèi)的數(shù)據(jù)的時(shí)間戳差別僅體現(xiàn)在秒或毫秒級(jí)別上,其中“年月日時(shí)分”的數(shù)值都是相同的。如果有1萬(wàn)個(gè)監(jiān)測(cè)點(diǎn),那么就有1萬(wàn)次重復(fù)的“年月日時(shí)分”,這樣造成傳輸數(shù)據(jù)量增加,網(wǎng)絡(luò)負(fù)荷增加。本文提出一種簡(jiǎn)化時(shí)間戳壓縮算法,可以極大減少時(shí)間戳的數(shù)據(jù)量,有效降低網(wǎng)絡(luò)通信的數(shù)據(jù)量,提高系統(tǒng)效率。

2時(shí)間戳壓縮算法

2.1簡(jiǎn)化時(shí)間戳的定義

無(wú)論是Windows系統(tǒng)使用的FILETIME①結(jié)構(gòu),還是Linux平臺(tái)使用struct timeval②結(jié)構(gòu),都至少需要8個(gè)字節(jié)才能表示一個(gè)完整的時(shí)間戳[3-5]。對(duì)于重復(fù)的“年月日時(shí)分”部分,可以只保留一份,秒的最大數(shù)值為59,占用1個(gè)字節(jié),毫秒的最大數(shù)值為999,需要2個(gè)字節(jié),所以保留秒和毫秒信息仍然需要3個(gè)字節(jié)。本文提出的簡(jiǎn)化時(shí)間戳僅需要2個(gè)字節(jié)即可表示一個(gè)數(shù)據(jù)時(shí)間戳的秒和毫秒的信息,且時(shí)間信息不丟失,可還原完整時(shí)間戳。使用簡(jiǎn)化時(shí)間戳記錄數(shù)據(jù)時(shí)的基本步驟如下。

1)數(shù)據(jù)采集時(shí)只記錄采集時(shí)刻的秒和毫秒數(shù)值。

2)用總毫秒數(shù)表示秒和毫秒的數(shù)值,即總毫秒數(shù)=秒數(shù)值×1000+毫秒數(shù)值。

1分鐘有60秒,所以該數(shù)值最大值不超過(guò)6000,一個(gè)無(wú)符號(hào)16位整數(shù)的表示范圍為0~65535,所以使用無(wú)符號(hào)16位整數(shù)即可記錄該時(shí)間戳數(shù)值。無(wú)符號(hào)16位數(shù)僅占用2個(gè)字節(jié)(1字節(jié)包含8個(gè)比特位)。

3)數(shù)據(jù)包中包含一個(gè)完整的時(shí)間戳作為參考時(shí)間,一般采用數(shù)據(jù)打包的時(shí)刻。該時(shí)間戳作為參考時(shí)間,用于應(yīng)用層面還原數(shù)據(jù)的完整時(shí)間戳。

下面給出使用簡(jiǎn)化時(shí)間戳記錄數(shù)據(jù)時(shí)間戳的示例:

示例1:

假如數(shù)據(jù)1采集時(shí)刻為“2022-1-9 13:21:15.368”(數(shù)值和質(zhì)量碼不在本文的討論范圍,僅考慮時(shí)間戳),數(shù)據(jù)1的采集時(shí)刻可以記為:15368毫秒(15秒×1000+368),占用2個(gè)字節(jié)。

數(shù)據(jù)2采集時(shí)刻為“2022-1-9 13:20:56.039”,則其簡(jiǎn)化時(shí)間戳為56039秒。后續(xù)數(shù)據(jù)3、數(shù)據(jù)4都按照此方法記錄。

在“2022-1-9 13:21:16.368”時(shí)刻數(shù)據(jù)打包并通過(guò)網(wǎng)絡(luò)發(fā)送。那么打包時(shí)刻 “2022-1-9 13:21:16.368” 即可作為的參考時(shí)間(占8個(gè)字節(jié))。

2.2 數(shù)據(jù)量降低效果分析

按照常規(guī)時(shí)間戳定義數(shù)據(jù)格式如表1所示。而采用簡(jiǎn)化時(shí)間戳后的數(shù)據(jù)格式定義如表2所示。對(duì)比兩個(gè)表中的灰度背景的行可知,每個(gè)數(shù)據(jù)減少2個(gè)字節(jié),但多出一個(gè)8字節(jié)(表1中斜體部分)。

常規(guī)時(shí)間戳表示方法需要8個(gè)字節(jié),采用簡(jiǎn)化時(shí)間戳僅需要2個(gè)字節(jié),是常規(guī)時(shí)間戳的四分之一。一個(gè)采集數(shù)據(jù)點(diǎn)可節(jié)約6個(gè)字節(jié)。

在進(jìn)行數(shù)據(jù)采集時(shí),根據(jù)點(diǎn)的類型不同,數(shù)據(jù)采集周期也不同,開關(guān)量一般在50毫秒到500毫秒之間,模擬量一般在200毫秒到1秒之間。數(shù)據(jù)采集后并不是立刻發(fā)送,而是需要累積一段時(shí)間再發(fā)送到二層,這個(gè)周期稱為發(fā)送周期,發(fā)送周期一般為500毫秒到2秒。對(duì)于同一個(gè)采集點(diǎn),一個(gè)發(fā)送周期的數(shù)據(jù)包中包含了多次的采集數(shù)據(jù)。對(duì)于大型工業(yè)控制系統(tǒng),數(shù)據(jù)采集點(diǎn)可達(dá)10萬(wàn)個(gè),那么一個(gè)數(shù)據(jù)包可包含大約40萬(wàn)個(gè)采集數(shù)據(jù)。1萬(wàn)點(diǎn)則可節(jié)省6萬(wàn)個(gè)字節(jié),對(duì)于整個(gè)數(shù)據(jù)包可節(jié)約240萬(wàn)字節(jié),約2.3M數(shù)據(jù)量,壓縮效果非??捎^。參考時(shí)間雖然需要占用8個(gè)字節(jié),但是整個(gè)數(shù)據(jù)包中僅需要一個(gè)參考時(shí)間,可忽略不計(jì)。所以簡(jiǎn)化時(shí)間戳對(duì)于降低時(shí)間戳數(shù)據(jù)量效果非常明顯。

2.3設(shè)計(jì)約束

簡(jiǎn)化時(shí)間戳僅適用于數(shù)據(jù)的時(shí)間戳變化范圍在1分鐘之內(nèi)的應(yīng)用場(chǎng)景,如圖 1所示,L表示基準(zhǔn)時(shí)間左邊的調(diào)節(jié)范圍,R表示基準(zhǔn)時(shí)間右邊的調(diào)節(jié)范圍,且L+R=60秒。工業(yè)控制系統(tǒng)的數(shù)據(jù)采集周期一般都在500毫秒到5秒范圍內(nèi),所以一次數(shù)據(jù)傳輸中,所有數(shù)據(jù)的變化范圍一定在60秒以內(nèi),是可以使用簡(jiǎn)化時(shí)間戳表示。如果變化范圍超過(guò)1分鐘,則無(wú)法正確還原原始時(shí)間戳。原因就是每分鐘都會(huì)有某個(gè)時(shí)刻的秒和毫秒時(shí)間,如果不限定一分鐘內(nèi),則無(wú)法確定是哪個(gè)分鐘的秒和毫秒。時(shí)間戳還原方法在后續(xù)章節(jié)詳細(xì)介紹。

3時(shí)間戳還原算法

3.1簡(jiǎn)化時(shí)間戳還原算法

還原算法的基本思路是,根據(jù)實(shí)際應(yīng)用場(chǎng)景,確定L的值,根據(jù)約束等式L+R = 60,如圖 1所示,R即可確定。假設(shè)Tb為基準(zhǔn)參考時(shí)間,Tb1為基準(zhǔn)時(shí)間的“年月日時(shí)分“部分的數(shù)值③,Tb2表示為基準(zhǔn)時(shí)間的”秒毫秒“部分的數(shù)值,Ts表示簡(jiǎn)化時(shí)間戳的總毫秒數(shù)值,用Tr表示還原后的完整時(shí)間戳。詳細(xì)步驟如下:0903A774-C8CA-488F-964C-45596FCBF1E3

1)計(jì)算分離Ts中的秒Ts_s和毫秒數(shù)值Ts_ms;

Ts_s =? Ts÷1000 ?,此處為向下取整運(yùn)算。

Ts_ms = Ts mod 1000 ,此處為取模運(yùn)算

2)取出基準(zhǔn)時(shí)間中的“年月日時(shí)分“部分的數(shù)值Tb1;

3)用Tb1、Ts_s和Ts_ms組合成一個(gè)新的臨時(shí)完整時(shí)間戳Tt,并讓Tr=Tt;

4)取出基準(zhǔn)時(shí)間Tb中的秒和毫秒的數(shù)值,并轉(zhuǎn)化為毫秒數(shù)Tb2;

Tb2 = 秒×1000+毫秒

5)修正Tr的結(jié)果

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

Tr=Tt – 60秒

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

Tr=Tt+60秒

6)輸出Tr為最終還原的完整時(shí)間戳

下面通過(guò)示例講述簡(jiǎn)化時(shí)間戳的還原過(guò)程。

示例3:

本示例以示例1中的數(shù)據(jù)為輸入,即Ts為15368毫秒,Tb為“2022-1-9 13:21:16.368”。此時(shí),Tb1為2022-1-9 13:21,Tb2為16368毫秒。假定L=50秒,那么R=10秒。那么還原過(guò)程為:

根據(jù)步驟1)可得到,Ts_s=? 15368÷1000 ? =15秒,Ts_ms=15368 mod 1000=368毫秒;

根據(jù)步驟2)可得Tb1=“2022-1-9 13:21”;

根據(jù)步驟3),將Tb1與Ts_s、Ts_ms合并為一個(gè)新的完整時(shí)間Tr=Tt=“2022-1-9 13:21:15.368”;

按照步驟4)可計(jì)算得到Tb2=16×1000+368=16368毫秒;

步驟5)中,由于兩個(gè)條件都不滿足,不需要修正。最終還原的完整時(shí)間戳為“2022-1-9 13:21:15.368”。

對(duì)于數(shù)據(jù)2的時(shí)間戳,Ts=56039毫秒,在還原的時(shí)候,步驟1)到步驟4)的計(jì)算過(guò)程都一樣,步驟4)執(zhí)行完成后,Tr=Tt=“2022-1-9 13:21:56.039”,實(shí)際原始時(shí)間戳為“2022-1-9 13:20:56.039”,分鐘數(shù)值多了一分鐘,與實(shí)際不符合。該錯(cuò)誤可在步驟5)中得到糾正。前面的步驟可計(jì)算Tb2=16368毫秒,滿足Tb2

3.2 L和R取值討論

前面討論過(guò),該簡(jiǎn)化方法使用于數(shù)據(jù)波動(dòng)時(shí)間范圍小于1分鐘,L與R的取值需要視具體的使用場(chǎng)景進(jìn)行調(diào)整。示例2中設(shè)置L=50秒,是考慮到數(shù)據(jù)都是在打包時(shí)刻之前進(jìn)行采集的,所以L值可設(shè)定偏大一些。如果數(shù)據(jù)是在設(shè)置好參考時(shí)間后進(jìn)行采集,那么數(shù)據(jù)的時(shí)間戳偏差都在參考時(shí)間右邊,此種場(chǎng)景則可設(shè)置L=10秒,那么R=50秒。所以L和R的值不是固定不變的,需要根據(jù)實(shí)際情況靈活調(diào)整。

4結(jié)論

本文根據(jù)工業(yè)控制系統(tǒng)數(shù)據(jù)采集的特點(diǎn),提出簡(jiǎn)化時(shí)間戳方法,并給出時(shí)間戳還原的詳細(xì)步驟。使用簡(jiǎn)化時(shí)間戳,可以使時(shí)間戳數(shù)據(jù)變?yōu)樵瓉?lái)的四分之一,大大減少了網(wǎng)絡(luò)數(shù)據(jù)傳輸量,提高了工業(yè)控制系統(tǒng)的系統(tǒng)效率。

注釋:

① Windows平臺(tái)的時(shí)間格式中的一種,使用一個(gè)64位整數(shù)(分為低32位和高32位)記錄距離1601年1月1日零時(shí)零分零秒時(shí)刻的100納秒數(shù).

② Linux平臺(tái)使用的時(shí)間格式,分為兩部分,其中tv_sec是有符號(hào)32位整數(shù),記錄距離1970年1月1日的秒數(shù),tv_usec是有符號(hào)32位整數(shù),記錄相對(duì)于tv_sec下的微秒數(shù).

③ 此處為了敘述方便,使用更直觀的“年月日時(shí)分”敘述,實(shí)際編程實(shí)現(xiàn)時(shí)使用的是對(duì)應(yīng)平臺(tái)的時(shí)間格式(FILETIME或struct timeval).

參考文獻(xiàn):

[1] 李煥,劉海濤.DCS模擬量數(shù)據(jù)的分部壓縮方法[J].電子測(cè)試,2013(12):52-53.

[2] 龍海軍,姚光霖.核電站DCS系統(tǒng)歷史數(shù)據(jù)壓縮算法的研究[J].科技資訊,2013,11(8):29-30.

[3] 巧用Unix的時(shí)間戳[J].計(jì)算機(jī)與網(wǎng)絡(luò),2012(11):32.

[4] 陳開渠.十進(jìn)制時(shí)間戳協(xié)議[J].中國(guó)科學(xué)院研究生院學(xué)報(bào),2001,18(2):144-148.

[5] 張科偉,唐曉波.時(shí)間戳協(xié)議研究[J].計(jì)算機(jī)應(yīng)用研究,2004,21(10):100-103.

【通聯(lián)編輯:聞翔軍】0903A774-C8CA-488F-964C-45596FCBF1E3

新龙县| 邢台市| 潞西市| 和林格尔县| 鞍山市| 三都| 邛崃市| 巴彦县| 阳谷县| 秦安县| 广丰县| 盐津县| 迁安市| 偏关县| 沈丘县| 登封市| 阳信县| 海口市| 丹凤县| 大荔县| 志丹县| 四会市| 汝城县| 醴陵市| 蚌埠市| 平山县| 龙州县| 阜城县| 文山县| 抚远县| 东兴市| 和平区| 巴东县| 西乡县| 东辽县| 巴南区| 柞水县| 娱乐| 邯郸市| 清徐县| 西和县|