246h
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 12 個(gè)
工控威望: 155 點(diǎn)
下載積分: 540 分
在線時(shí)間: 160(小時(shí))
注冊時(shí)間: 2009-08-06
最后登錄: 2024-08-20
查看246h的 主題 / 回貼
樓主  發(fā)表于: 2013-10-03 22:08
     為了節(jié)省存儲(chǔ)數(shù)據(jù)所占用的空間,可對數(shù)據(jù)編碼長度進(jìn)行壓縮,數(shù)據(jù)經(jīng)過壓縮后再進(jìn)行存儲(chǔ),即壓縮存儲(chǔ)。壓縮存儲(chǔ)不但節(jié)省了存儲(chǔ)空間,另一方面也節(jié)省了數(shù)據(jù)傳輸?shù)拈_銷。一般來說,只要清楚數(shù)據(jù)的壓縮方式,上位計(jì)算機(jī)就能夠方便地進(jìn)行解壓縮。
對于PLC而言,最基本的數(shù)據(jù)壓縮技術(shù)有以下三類。
(1)用十六進(jìn)制碼代替BCD碼:BCD碼是采用4位二進(jìn)制數(shù)來表示一位十進(jìn)制數(shù)0-9的編碼方式,而實(shí)際上4位二進(jìn)制數(shù)可以表示16個(gè)不同數(shù)碼,所以采用BCD碼存取數(shù)存在資源浪費(fèi)。如16位二進(jìn)制數(shù)(一個(gè)字),用以表示BCD碼數(shù),最大只能到9999;而表示普通二進(jìn)制數(shù),轉(zhuǎn)為十進(jìn)制數(shù)最大可達(dá)65535。
(2)合并數(shù)據(jù)代替單獨(dú)數(shù)據(jù):存儲(chǔ)普通日期數(shù)據(jù),一般需要4個(gè)字節(jié),如2009年10月1日,則2009需要2個(gè)字節(jié),10需要1個(gè)字節(jié),1需要1個(gè)字節(jié),如不考慮千年,需用3個(gè)字節(jié)存儲(chǔ),如果把這些數(shù)據(jù)合并后再進(jìn)行存儲(chǔ),就無需3個(gè)或4個(gè)字節(jié)了。
數(shù)據(jù)合并時(shí),可將各合并數(shù)先加權(quán)再相加,如年可乘400(為計(jì)算方便,一年最多366天),月可乘40(一個(gè)月最多31天),2009、10、l合并可得9×400+10×40+1=4001,2個(gè)字節(jié)就足夠存儲(chǔ)了。數(shù)據(jù)還原時(shí),可用合并數(shù)分別被400整除得年份,被40整除得月份(不夠需借位),余數(shù)為日期。

問題是:4001被400整除應(yīng)該是10啊,怎么還原到9?同樣月份怎么還原到10?
         請高手幫忙。謝謝
[ 此帖被246h在2013-10-05 13:53重新編輯 ]