劉建軍
中海油服物探事業(yè)部 天津 300452
SEAL 408XL 地震數(shù)據(jù)采集系統(tǒng)借鑒陸地408UL采集系統(tǒng)的各種優(yōu)越性,集最新的電子計(jì)算機(jī)技術(shù)與網(wǎng)絡(luò)技術(shù)于一體,很好地解決了數(shù)據(jù)采集傳輸?shù)膶?shí)時(shí)同步特性和及時(shí)的數(shù)據(jù)傳輸誤碼控制[1-2]。以下重點(diǎn)介紹CRC差錯(cuò)控制原理和Seal 數(shù)據(jù)采集傳輸原理,然后對(duì)一些常見(jiàn)的故障進(jìn)行簡(jiǎn)單分析。
Seal 系統(tǒng)通過(guò)高頻時(shí)鐘脈沖和不同的數(shù)據(jù)幀(Frame)傳輸協(xié)議來(lái)實(shí)現(xiàn)采集系統(tǒng)的實(shí)時(shí)同步性,即通過(guò)兩種不同的頻率來(lái)實(shí)現(xiàn)數(shù)據(jù)的同步傳輸:在電纜上(line)使用8.192 MHz 頻率傳輸數(shù)據(jù);在CM408XL 系統(tǒng)內(nèi)部(Transmission)同步傳輸頻率為16.384MHz。在傳輸過(guò)程中,SEAL 系統(tǒng)中央單元在其Left Transverse 和Right Transverse 中以1ms 每次的速度產(chǎn)生數(shù)據(jù)幀;數(shù)據(jù)幀在DCXU 中分別通過(guò)電纜的高端(High line)和低端(Low line)填充到每個(gè)FDU 中,所有的數(shù)據(jù)以數(shù)據(jù)幀的形式在FDU/ LAUM 和LAUM/ LAUM 之間進(jìn)行傳輸。每個(gè)數(shù)據(jù)幀由64 個(gè)單元(Cell)組成:第一個(gè)單元為幀頭段(Frame Header),后面的63 個(gè)單元被分配給LAUM/ LAUM 或LAUM/ FDU 之間通訊使用。在FDU中每個(gè)單元分配16 個(gè)字節(jié)(Bytes)的長(zhǎng)度,在中央控制箱體CM408XL 中每個(gè)單元分配32 個(gè)字節(jié)的長(zhǎng)度[3]。圖1 為數(shù)據(jù)幀的結(jié)構(gòu)示意圖。
圖1 數(shù)據(jù)幀結(jié)構(gòu)示意圖
在FDU 中每個(gè)數(shù)據(jù)幀占1M 的容量,在Transverse中每個(gè)數(shù)據(jù)幀占2M 的容量。數(shù)據(jù)幀單元由單元頭段(Cell Header)、單元數(shù)據(jù)(Cell data)和循環(huán)冗余校驗(yàn)碼(Cell CRC)三部分組成:?jiǎn)卧^段占1 個(gè)字節(jié)長(zhǎng)度;單元數(shù)據(jù)段在FDU 中占14 個(gè)字節(jié)長(zhǎng)度,在Transverse 中占30 個(gè)字節(jié)長(zhǎng)度;單元循環(huán)冗余校驗(yàn)碼占1 個(gè)字節(jié)長(zhǎng)度。
FDU/ LAUM 之間通過(guò)低層傳輸協(xié)議通訊。FDU 采用尋址方式標(biāo)記的方法將它的數(shù)據(jù)寫(xiě)入數(shù)據(jù)幀頭段后面的單元數(shù)據(jù)段,并在單元頭段中將對(duì)應(yīng)的數(shù)據(jù)位設(shè)置為“忙”(Busy)來(lái)表示對(duì)應(yīng)的數(shù)據(jù)單元已被占用。在采集期間,F(xiàn)DU 每1ms 向數(shù)據(jù)幀的每個(gè)單元數(shù)據(jù)段中寫(xiě)入4 個(gè)采樣點(diǎn),尋址方式是連續(xù)的第N 個(gè)FDU 會(huì)將數(shù)據(jù)寫(xiě)入第N 個(gè)單元數(shù)據(jù)段。LAUM/ LAUM 之間通過(guò)高層傳輸協(xié)議進(jìn)行通訊。LAUM 接到FDU 的采集數(shù)據(jù)后,進(jìn)行簡(jiǎn)單的處理并壓縮成數(shù)據(jù)包,以數(shù)據(jù)包的形式發(fā)送給中央控制單元[4]。
數(shù)據(jù)的傳輸和FDU 的采集是同步的,在傳輸過(guò)程中采用了循環(huán)冗余校驗(yàn)CRC 的錯(cuò)誤檢測(cè)機(jī)制。LAUM 向中央記錄單元傳輸數(shù)據(jù)的過(guò)程與FDU 采集沒(méi)有時(shí)間上的關(guān)聯(lián)性,在此過(guò)程中應(yīng)用高層協(xié)議傳輸來(lái)實(shí)現(xiàn)傳輸錯(cuò)誤檢測(cè)和錯(cuò)誤恢復(fù)。
循環(huán)冗余碼(Cyclical Redundancy Check,CRC)是數(shù)據(jù)通信中應(yīng)用最廣的一種檢驗(yàn)差錯(cuò)方法。其由兩部分組成:前部分是信息碼,就是需要校驗(yàn)的信息;后部分是校驗(yàn)碼。在實(shí)際應(yīng)用中,在發(fā)送端用數(shù)學(xué)方法產(chǎn)生一個(gè)循環(huán)碼,叫做循環(huán)冗余檢驗(yàn)碼,在信息碼位之后隨信息一起發(fā)出;在接收端也用同樣方法產(chǎn)生一個(gè)循環(huán)冗余校驗(yàn)碼。將這兩個(gè)校驗(yàn)碼進(jìn)行比較,如果一致就證明所傳信息無(wú)誤;如果不一致就表明傳輸中有差錯(cuò),并要求發(fā)送端再傳輸。CRC校驗(yàn)具有實(shí)現(xiàn)簡(jiǎn)單、檢錯(cuò)能力強(qiáng)、占用系統(tǒng)資源少、軟硬件均能實(shí)現(xiàn)等優(yōu)點(diǎn),被廣泛使用在各種數(shù)據(jù)校驗(yàn)中[5]。
CRC 利用除法及余數(shù)的原理實(shí)現(xiàn)錯(cuò)誤偵測(cè)(Error Detecting)。如果CRC 碼共長(zhǎng)n 個(gè)bit,信息碼長(zhǎng)k 個(gè)bit,就稱(chēng)為(n,k)碼。它的編碼規(guī)則是:首先將原信息碼(kbit)左移r 位(k+r=n);其次運(yùn)用一個(gè)生成多項(xiàng)式g(x)(也可看成二進(jìn)制數(shù))用模2 除上面的式子,得到的余數(shù)就是校驗(yàn)碼。
需要說(shuō)明的是,模2 除就是在除的過(guò)程中用模2 加,模2 加實(shí)際上就是我們熟悉的異或運(yùn)算,即加法不考慮進(jìn)位,公式可以表達(dá)為0+0=1+1=0,1+0=0+1=1,即‘異’則真,‘非異’則假,也就是‘模2 減’和‘模2 加’直值表完全相同。有了加減法就可以用來(lái)定義模2 除法,于是可以用生成多項(xiàng)式g(x),進(jìn)而生成CRC 校驗(yàn)碼。
例如,對(duì)于g(x)=x4+x3+x2+1 的解釋?zhuān)海ǘ际菑挠彝髷?shù))x4 就是第五位是1,因?yàn)闆](méi)有x1 所以第2 位就是0。11101|110,0000(設(shè)a=11101,b=1100000),取b 的前5位11000 跟a 異或得到101,101 加上b 沒(méi)有取到的00 得到10100,然后跟a 異或得到01001,也就是余數(shù)1001,所以CRC 碼是110,1001。
根據(jù)應(yīng)用環(huán)境與習(xí)慣的不同,CRC 又可分為以下幾種 標(biāo) 準(zhǔn):CRC- 12 碼;CRC- 16 碼;CRC- CCITT 碼;CRC- 32 碼。其中CRC- 12 碼通常用來(lái)傳送6- bit 字符串。CRC- 16 及CRC- CCITT 碼則用是來(lái)傳送8- bit 字符。CRC- 16 為美國(guó)采用,而CRC- CCITT 為歐洲國(guó)家所采用。 CRC- 32 碼大都被采用在一種稱(chēng)為Point- to- Point 的同步傳輸中。
2.2.1 軟件實(shí)現(xiàn)方法
以最常用的CRC- 16 為例來(lái)說(shuō)明其生成過(guò)程。CRC- 16 碼由兩個(gè)字節(jié)構(gòu)成,在開(kāi)始時(shí)CRC 寄存器的每一位都預(yù)置為1,然后把CRC 寄存器與8- bit 的數(shù)據(jù)進(jìn)行異或;之后對(duì)CRC 寄存器從高到低進(jìn)行移位,在最高位(MSB)的位置補(bǔ)零,而最低位(LSB,移位后已經(jīng)被移出CRC 寄存器)如果為1,則把寄存器與預(yù)定義的多項(xiàng)式碼進(jìn)行異或,如果LSB 為零,則無(wú)需進(jìn)行異或。重復(fù)上述由高至低的移位8 次,第一個(gè)8- bit 數(shù)據(jù)處理完畢,用此時(shí)CRC 寄存器的值與下一個(gè)8- bit 數(shù)據(jù)異或并進(jìn)行如前一個(gè)數(shù)據(jù)似的8 次移位。所有的字符處理完成后,CRC 寄存器內(nèi)的值即為最終的CRC 值。
CRC 的計(jì)算過(guò)程:
(1)設(shè)置CRC 寄存器,并給其賦值FFFF(hex);
(2)將數(shù)據(jù)的第一個(gè)8- bit 字符與16 位CRC 寄存器的低8 位進(jìn)行異或,并把結(jié)果存入CRC 寄存器;
(3)CRC 寄存器向右移一位,MSB 補(bǔ)零,移出并檢查L(zhǎng)SB;
(4)如果LSB 為0,重復(fù)第三步;若LSB 為1,CRC寄存器與多項(xiàng)式碼相異或;
(5)重復(fù)第3 與第4 步直到8 次移位全部完成,此時(shí)一個(gè)8- bit 數(shù)據(jù)處理完畢;
(6) 重復(fù)第2 至第5 步直到所有數(shù)據(jù)全部處理完成;
(7) 最終CRC 寄存器的內(nèi)容即為CRC 值。
常用的CRC 循環(huán)冗余校驗(yàn)標(biāo)準(zhǔn)多項(xiàng)式見(jiàn)式(1)—式(3)。
以CRC(16 位)多項(xiàng)式為例,其對(duì)應(yīng)校驗(yàn)二進(jìn)制位為1 1000 0000 0000 0101。其中上述列出的標(biāo)準(zhǔn)校驗(yàn)多項(xiàng)式都含有(X+1)的多項(xiàng)式因子;各多項(xiàng)式的系數(shù)均為二進(jìn)制數(shù),所涉及的四則運(yùn)算仍遵循對(duì)二取模的運(yùn)算規(guī)則。
2.2.2 硬件實(shí)現(xiàn)
最普通的CRC 硬件實(shí)現(xiàn)方法是串行計(jì)算方法,即使用一位數(shù)據(jù)輸入,n 位長(zhǎng)度的原始數(shù)據(jù)連續(xù)計(jì)算n 次后得出校驗(yàn)碼。串行計(jì)算的電路結(jié)構(gòu)簡(jiǎn)單,容易實(shí)現(xiàn),可以工作在較高的時(shí)鐘頻率下。隨著通信速度的不斷提高,高的數(shù)據(jù)傳輸帶寬要求CRC 的計(jì)算速度越來(lái)越快,串行計(jì)算的方法已經(jīng)不適應(yīng)要求,并行計(jì)算方法越來(lái)越受到人們的重視。
(1)串行實(shí)現(xiàn)。每次輸入一位數(shù)據(jù),輸入數(shù)據(jù)和上一次異或運(yùn)算的結(jié)果組成新數(shù)據(jù),循環(huán)進(jìn)行異或運(yùn)算,直到所有數(shù)據(jù)都已經(jīng)輸入,整個(gè)電路可以用移位寄存器加異或門(mén)實(shí)現(xiàn)。CRC 串行實(shí)現(xiàn)的電路結(jié)構(gòu)如圖2 所示。
圖2 串行實(shí)現(xiàn)電路結(jié)構(gòu)圖
gi 的取值范圍是0 或1。取0 時(shí),表示斷路,不需要異或運(yùn)算;取1 時(shí),表示通路,需要異或運(yùn)算,其中g(shù)0和gk都為1。對(duì)于k 位的CRC 校驗(yàn),需要k 個(gè)寄存器。當(dāng)有新的數(shù)據(jù)輸入后,異或運(yùn)算立刻得出新的CRC,寄存器在時(shí)鐘沿移位,等待新的輸入數(shù)據(jù),反復(fù)循環(huán),就可以計(jì)算出CRC 的值。串行的方法雖然可以計(jì)算各種CRC,但是一個(gè)時(shí)鐘周期只能計(jì)算一位數(shù)據(jù),效率比較低,只適用于低速的串行輸入輸出系統(tǒng)。而當(dāng)數(shù)據(jù)傳輸?shù)乃俣群芨撸蛘呤嵌辔粩?shù)據(jù)并行傳輸時(shí),需要引入并行計(jì)算的實(shí)現(xiàn)方法。并行的實(shí)現(xiàn)方法可以在一個(gè)時(shí)鐘內(nèi)對(duì)多位數(shù)據(jù)進(jìn)行編碼,從而提高了CRC 的計(jì)算速度。
(2)并行實(shí)現(xiàn)。并行CRC 計(jì)算可以在串行計(jì)算的基礎(chǔ)上改進(jìn)電路結(jié)構(gòu)來(lái)實(shí)現(xiàn)。在串行實(shí)現(xiàn)中,一個(gè)時(shí)鐘周期處理一位數(shù)據(jù)。而并行實(shí)現(xiàn)是把串行實(shí)現(xiàn)中多個(gè)時(shí)鐘周期處理的數(shù)據(jù)集中到一個(gè)時(shí)鐘周期內(nèi)處理,即使用多級(jí)組合邏輯電路來(lái)實(shí)現(xiàn),如圖3 所示。
圖3 優(yōu)化前的組合反饋電路結(jié)構(gòu)
并行計(jì)算的缺點(diǎn)是使用了多級(jí)組合邏輯的反饋,將產(chǎn)生較大的門(mén)延遲,特別是在計(jì)算時(shí)鐘的頻率很高時(shí),時(shí)鐘周期非常小,對(duì)時(shí)延的要求比較高。比如實(shí)現(xiàn)32 位并行輸入的CRC- 32,會(huì)產(chǎn)生31 次異或操作,電路的門(mén)延時(shí)可能會(huì)很大,而超出系統(tǒng)的時(shí)延限度,這取決于組合電路的具體結(jié)構(gòu)。
圖3 所示的組合邏輯的延時(shí)是各個(gè)異或門(mén)的累加,異或次數(shù)多了以后,延時(shí)很大,所以可以對(duì)上面的組合邏輯結(jié)果Z=A^B^C^D(zhuǎn)^E^F 進(jìn)行優(yōu)化。將邏輯組合改成Z=(A^B)^(C^D(zhuǎn))^(E^F),電路的功能不變,綜合出的電路結(jié)構(gòu)如圖4 所示。優(yōu)化后的結(jié)構(gòu)利用了電路的并行性,將在串行電路中累加的延時(shí)分散到多個(gè)并行的分支上,將門(mén)延時(shí)從5 級(jí)降低到3 級(jí),優(yōu)化后的結(jié)構(gòu)延時(shí)以指數(shù)級(jí)減少。
圖4 優(yōu)化后的組合反饋電路結(jié)構(gòu)
CRC 的硬件實(shí)現(xiàn)可以有串行、并行兩種方式。其中并行實(shí)現(xiàn)方式適用于各種數(shù)據(jù)寬度CRC 校驗(yàn),并行輸入的數(shù)據(jù)寬度越寬,速度越快。由于并行計(jì)算是通過(guò)多級(jí)反饋來(lái)實(shí)現(xiàn)的,所以復(fù)雜的反饋組合電路會(huì)帶來(lái)較大的門(mén)延遲。通過(guò)優(yōu)化組合電路的結(jié)構(gòu),可以很大程度上降低延遲,使電路適用于比較高的時(shí)鐘頻率。
循環(huán)冗余校驗(yàn)碼CRC 算法可以用軟件實(shí)現(xiàn),也可以用硬件實(shí)現(xiàn)。但軟件計(jì)算的速度受限于系統(tǒng)CPU 的速度,而使用硬件方式來(lái)實(shí)現(xiàn)可以提高計(jì)算速度,從而提升系統(tǒng)的通信效率。
差錯(cuò)控制最常用的方法是自動(dòng)請(qǐng)求重發(fā)方式(ARQ)、向前糾錯(cuò)方式(FEC)和混合糾錯(cuò)(HEC)。在傳輸過(guò)程誤碼率比較低時(shí),用FEC 方式比較理想。在傳輸過(guò)程誤碼率較高時(shí),采用FEC 容易出現(xiàn)“亂糾”現(xiàn)象。HEC方式則是ARQ 和FEC 的結(jié)合。在許多數(shù)字通信中,廣泛采用ARQ 方式,此時(shí)的差錯(cuò)控制只需要檢錯(cuò)功能。實(shí)現(xiàn)檢錯(cuò)功能的差錯(cuò)控制方法很多,傳統(tǒng)的有奇偶校驗(yàn)、校驗(yàn)和檢測(cè)、重復(fù)碼校驗(yàn)、恒比碼校驗(yàn)和行列冗余碼校驗(yàn)等。這些方法都是增加數(shù)據(jù)的冗余量,將校驗(yàn)碼和數(shù)據(jù)一起發(fā)送到接受端。接受端對(duì)接受到的數(shù)據(jù)進(jìn)行相同校驗(yàn),再將得到的校驗(yàn)碼和接受到的校驗(yàn)碼比較,如果二者一致則認(rèn)為傳輸正確。但這些方法都有各自的缺點(diǎn),誤判的概率比較高。CRC 是由分組線性碼的分支而來(lái),其主要應(yīng)用是二元碼組,編碼簡(jiǎn)單且誤判概率很低,在通信系統(tǒng)中得到了廣泛的應(yīng)用。
Seal 系統(tǒng)中常見(jiàn)的CRC 錯(cuò)誤主要有兩種,即數(shù)字包LAUM CRC 錯(cuò)誤和中央控制箱體CM408XL CRC 錯(cuò)誤。
如:Warning! CRC on LAUM # 2486。在報(bào)錯(cuò)不多的情況下,電纜可以正常的采集作業(yè),但是對(duì)數(shù)據(jù)的采集質(zhì)量可能會(huì)有影響。因?yàn)長(zhǎng)AUM CRC 報(bào)錯(cuò)的情況下,在Seal 系統(tǒng)中是采用的向前糾錯(cuò)方式,所以這樣一來(lái)該包的數(shù)據(jù)可能就由一個(gè)近視值來(lái)替代。出現(xiàn)這種情況時(shí),可以在Streamer 窗口下右鍵單擊后在彈出的對(duì)話(huà)框中將報(bào)錯(cuò)次數(shù)清零。
如果報(bào)錯(cuò)的次數(shù)過(guò)多,可能會(huì)導(dǎo)致電纜的掉電。這時(shí)如果在測(cè)線上,可以重新加電來(lái)試,如果能加過(guò)去可以提高作業(yè)效率。如果加不過(guò)去,或者是掉電頻繁發(fā)生,可以試著更換報(bào)錯(cuò)的數(shù)字包的前一個(gè)或者后一個(gè)數(shù)字包來(lái)解決問(wèn)題。
例如:Waring! CRC on LCI # 3。這種情況可能是LCI 板接觸不良,首先可以通過(guò)對(duì)換DCXU 和LCI 板的連接線來(lái)檢查是否為408XL 箱體以外部分的問(wèn)題。如果408XL 箱體接口以外部分沒(méi)有問(wèn)題,可以通過(guò)對(duì)調(diào)兩塊LCI 板來(lái)檢查報(bào)錯(cuò)的LCI 板是否真的有問(wèn)題,若有問(wèn)題換掉LCI 板即可。
對(duì)Seal 系統(tǒng)數(shù)據(jù)傳輸原理的深入分析,有助于更好地理解網(wǎng)絡(luò)化數(shù)據(jù)傳輸對(duì)地震采集系統(tǒng)的影響,對(duì)故障的排除,以及地震儀器的開(kāi)發(fā)和應(yīng)用有很大的現(xiàn)實(shí)意義。