郭 翀,于 東,岳東峰,陳 龍
(1.中國科學(xué)院研究生院,北京 100039;2.中國科學(xué)院沈陽計(jì)算技術(shù)研究所高檔數(shù)控國家工程研究中心,沈陽 110171;3.中國科學(xué)技術(shù)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,合肥 230027)
在工業(yè)控制領(lǐng)域中,總線作為承載數(shù)據(jù)的媒介、傳輸命令的通道和連接各接口的紐帶,對(duì)控制系統(tǒng)高速、精確、安全運(yùn)行起著至關(guān)重要的作用。目前,有關(guān)總線安全的研究仍在不斷升溫,并已得到IEC和相關(guān)國際組織的重視。本文提出了一種用于數(shù)控總線數(shù)據(jù)傳輸?shù)陌踩ㄐ欧椒ǎ趹?yīng)用層上通過使用數(shù)據(jù)關(guān)聯(lián)的動(dòng)態(tài)校驗(yàn),為使用者提供一種安全強(qiáng)度可變的動(dòng)態(tài)CRC校驗(yàn)方法,用以提高數(shù)據(jù)傳輸?shù)陌踩院蛻?yīng)用的靈活性。
本文提出的動(dòng)態(tài)CRC校驗(yàn)方法同傳統(tǒng)校驗(yàn)方法相比具有以下優(yōu)點(diǎn):①能夠產(chǎn)生連續(xù)的、不重復(fù)的校驗(yàn)值,降低了剩余錯(cuò)誤率;②能夠?yàn)橛脩籼峁┮环N安全強(qiáng)度可變的安全機(jī)制,增強(qiáng)了安全性能的可控性。
圖1為本文所提出的報(bào)文結(jié)構(gòu)。
報(bào)文由安全數(shù)據(jù)位、狀態(tài)位、序列號(hào)、偏移數(shù)、安全比特?cái)?shù)以及CRC校驗(yàn)值組成。其中,有效數(shù)據(jù)位存放從站執(zhí)行操作的命令;狀態(tài)位用于識(shí)別通信狀態(tài);序列號(hào)用于識(shí)別安全數(shù)據(jù)報(bào)文順序;偏移數(shù)用于生成選取關(guān)聯(lián)數(shù)據(jù)的起始位;安全比特?cái)?shù)用于標(biāo)識(shí)關(guān)聯(lián)數(shù)據(jù)選取的位數(shù);CRC校驗(yàn)值用于進(jìn)行CRC校驗(yàn)。
圖1 動(dòng)態(tài)CRC校驗(yàn)方法報(bào)文結(jié)構(gòu)圖
本校驗(yàn)方法分為初始化連接過程和數(shù)據(jù)傳輸過程,其中,Original為初始值,用于主站和從站建立連接過程;Swift()為偏移函數(shù),用以按偏移數(shù)表選擇偏移數(shù);Swifti為偏移函數(shù)Swift()選擇的偏移數(shù);SBN為安全比特?cái)?shù),由用戶/控制系統(tǒng)根據(jù)命令類型和要求選擇;Datai為所需傳輸?shù)陌踩珨?shù)據(jù);ACKi為從站所發(fā)送的應(yīng)答數(shù)據(jù);SwiftCali為計(jì)算所得的冗余數(shù)據(jù),可與安全數(shù)據(jù)報(bào)文共同計(jì)算產(chǎn)生CRC校驗(yàn)值;CRCi為安全數(shù)據(jù)報(bào)文傳輸中的CRC校驗(yàn)值。
圖2為動(dòng)態(tài)CRC校驗(yàn)方法初始化連接結(jié)構(gòu)圖,過程如下。
圖2 動(dòng)態(tài)CRC校驗(yàn)方法初始化連接結(jié)構(gòu)圖
(1)主站和從站啟動(dòng),同時(shí)讀取Original值。主站初始化 Swift()函數(shù),并由此函數(shù)生成偏移數(shù)Swift0。
(2)主站取SBN=0,創(chuàng)建連接數(shù)據(jù)報(bào)文,并將O-riginal和Swift0封裝在數(shù)據(jù)報(bào)文內(nèi),進(jìn)行CRC計(jì)算,發(fā)送至從站。同時(shí),由 Swift()函數(shù)生成偏移數(shù)Swift1。
(3)從站接收數(shù)據(jù)報(bào)文,通過SBN=0判斷連接過程,若在待機(jī)狀態(tài)下接收的第一個(gè)數(shù)據(jù)報(bào)文中SBN≠0,則執(zhí)行步驟5。若 SBN=0,讀取 Swift0至Swift()函數(shù)。
(4)從站讀取本地Original值,同時(shí)讀取報(bào)文中的Swift0,進(jìn)行CRC校驗(yàn)。若正確,取SBN=0,生成偏移數(shù)Swift1,同時(shí)封裝Original值,進(jìn)行連接確認(rèn),連接成功,進(jìn)入數(shù)據(jù)傳輸狀態(tài)。若不正確,執(zhí)行步驟5。
(5)從站終止Swift()函數(shù),并將原數(shù)據(jù)報(bào)文返回。
(6)主站接收數(shù)據(jù)報(bào)文確認(rèn)信息,根據(jù)SBN是否為0判斷連接狀態(tài),方法同從站。
(7)主站讀取本地 Swift1,Original值,進(jìn)行 CRC校驗(yàn)。若正確,連接成功,進(jìn)入數(shù)據(jù)傳輸過程。至此,連接成功。若錯(cuò)誤,執(zhí)行步驟2。
圖3為動(dòng)態(tài)CRC校驗(yàn)方法數(shù)據(jù)傳輸過程結(jié)構(gòu)圖,過程如下。
(1)當(dāng)主站有數(shù)據(jù)需要發(fā)送時(shí),數(shù)據(jù)片段稱為Datai。主站由Swift()函數(shù)生成偏移數(shù) Swifti,并將Swifti、ACKi-1、Datai作為輸入進(jìn)行偏移計(jì)算,得出SwiftCali作為此次傳輸?shù)奶砑有r?yàn)值。最后將Swift-Cali和Datai一起進(jìn)行CRC計(jì)算,得到CRCi,然后封裝,發(fā)送至從站。在第一個(gè)傳輸周期內(nèi),ACKi-1的值為初始值Original,通過此值完成第一個(gè)數(shù)據(jù)Data1的傳輸。
(2)從站接收數(shù)據(jù)報(bào)文,由Swift()函數(shù)生成偏移量Swifti,并與數(shù)據(jù)報(bào)文中的Swifti'進(jìn)行比較,若相同,執(zhí)行步驟3。若不同,執(zhí)行步驟5。
(3)從站讀取Original值,同數(shù)據(jù)報(bào)文中的Datai'一起進(jìn)行偏移計(jì)算,得出SwiftCali'。然后使用Swift-Cali'同Datai'進(jìn)行CRC計(jì)算,用來和數(shù)據(jù)報(bào)文中的CRCi'進(jìn)行校驗(yàn)。若正確,則數(shù)據(jù)報(bào)文有效,執(zhí)行步驟4。若錯(cuò)誤,執(zhí)行步驟5。
(4)從站生成偏移值 Swifti+1,讀取確認(rèn)數(shù)據(jù)ACKi和 Datai',作為輸入生成 SwiftCali+1。再由SwiftCali+1與ACKi生成CRCi+1,封裝數(shù)據(jù),發(fā)送回主站。
(5)從站將原數(shù)據(jù)包返回主站,要求重傳,并保留本次Swift()函數(shù)所生成的偏移值,以供下個(gè)數(shù)據(jù)報(bào)文校驗(yàn)使用。
(6)主站接收到確認(rèn)數(shù)據(jù),生成Swifti+1,并和數(shù)據(jù)報(bào)文中的Swifti+1'進(jìn)行比較。若相同,執(zhí)行步驟7。若不同,執(zhí)行步驟1。
(7)主站讀取數(shù)據(jù)Datai和報(bào)文中的ACKi'共同生成 SwiftCali+1'。再由 SwiftCali+1'和 ACKi'進(jìn)行CRC計(jì)算,用來和CRCi+1'進(jìn)行校驗(yàn)。若正確,執(zhí)行步驟1。若錯(cuò)誤,保留本次生成的Swifti+1,并將數(shù)據(jù)報(bào)文返回從站,要求重傳。
圖3 動(dòng)態(tài)CRC校驗(yàn)方法數(shù)據(jù)傳輸結(jié)構(gòu)圖
在算法性能分析中,針對(duì)傳統(tǒng)CRC校驗(yàn)方法,剩余錯(cuò)誤的產(chǎn)生主要有以下兩個(gè)方面:
(1)數(shù)據(jù)段中多處同時(shí)出錯(cuò),導(dǎo)致CRC校驗(yàn)依舊正確。
(2)段中和CRC校驗(yàn)碼中,同時(shí)出現(xiàn)錯(cuò)誤,導(dǎo)致CRC校驗(yàn)依舊正確。
在本算法中,由于數(shù)據(jù)SwiftCali獨(dú)立的在主站和從站產(chǎn)生,不進(jìn)行傳輸,該部分?jǐn)?shù)據(jù)錯(cuò)誤只存在于軟件和硬件錯(cuò)誤的范圍內(nèi)。因此針對(duì)上述兩種情況,有:
(1)在傳統(tǒng)CRC校驗(yàn)方法中,設(shè)數(shù)據(jù)值為D、除式為P(x)、商為Q(x)、余式為R(x),則有:
而在本算法中,由于SwiftCali在數(shù)據(jù)之后,所以數(shù)據(jù)值 D 相應(yīng)的增大。設(shè) SBN=SkSk-1Sk-2…S2S1,若繼續(xù)滿足CRC余式相同,則只能使:
由上述兩式計(jì)算得:
由此得出若要使等式成立,則上式除P(x)的商是唯一的。只要CRC計(jì)算中的P(x)足夠大,可以大幅減小錯(cuò)誤的發(fā)生。在整數(shù)范圍內(nèi),選擇到該數(shù)的概率是P(x)-1。設(shè)傳統(tǒng)CRC中,發(fā)生這種錯(cuò)誤的概率為p,則在使用本算法的最壞情況下,此種錯(cuò)誤概率為 P(x)-1p。
(2)數(shù)據(jù)段中和CRC校驗(yàn)碼中,同時(shí)出現(xiàn)錯(cuò)誤,導(dǎo)致CRC校驗(yàn)依舊正確。傳統(tǒng)CRC方法中,數(shù)據(jù)段和CRC校驗(yàn)碼同時(shí)出錯(cuò),設(shè)出錯(cuò)數(shù)據(jù)為D'、出錯(cuò)余式為R'(x)則有:
由情況(1)計(jì)算得:
由上式可以看出,若取P(x)足夠大,仍舊可以減少錯(cuò)誤的發(fā)生。而在P(x)不足夠大的情況下,由于若要使等式成立,則上式除P(x)的商是唯一的,概率等同于情況(1)。既在采用本算法的最壞情況下,出現(xiàn)錯(cuò)誤的概率為P(x)-1p。
3.2.1 實(shí)時(shí)性
本方法中所涉及的主要時(shí)間消耗處為Swift計(jì)算和CRC計(jì)算之前的移位存儲(chǔ)步驟,兩個(gè)步驟的時(shí)間復(fù)雜度分別為O(n2)和O(n),在對(duì)結(jié)構(gòu)進(jìn)行排序和優(yōu)化后,前者可降至O(nlogn)。實(shí)時(shí)性的性能采用的是校驗(yàn)方法計(jì)算時(shí)間占傳輸總延遲的百分比來衡量的。其結(jié)構(gòu)圖如圖4所示。
圖4 延時(shí)組成示意圖
總時(shí)延T為各部分時(shí)延之和,則有:
本方法所產(chǎn)生的延時(shí)為Ts,下表給出了Ts占總延時(shí)T的百分比:
表1 延時(shí)比例表
由表1可知,隨著SBN的增大,Ts所占比重也在不斷增大,SBN與計(jì)算時(shí)間開銷成正比,因此需要根據(jù)需求設(shè)置不同的SBN值,例如:非緊急命令SBN可取值為3,緊急命令SBN可取值為1,定期狀態(tài)報(bào)告SBN可取值為5等。另外,當(dāng)SBN大于13時(shí),算法消耗時(shí)間所占比重超過了總延時(shí)的10%,可能會(huì)對(duì)系統(tǒng)帶來較大負(fù)擔(dān)。因此,根據(jù)實(shí)際情況合理選擇SBN的大小十分重要。
3.2.2 剩余錯(cuò)誤率
在有關(guān)剩余錯(cuò)誤率的測(cè)試中,采用了統(tǒng)計(jì)的方式,對(duì)大量數(shù)據(jù)按照一定概率隨機(jī)產(chǎn)生錯(cuò)誤,并統(tǒng)計(jì)剩余錯(cuò)誤率。設(shè)采用本方法所產(chǎn)生的剩余錯(cuò)誤率為Rd、采用傳統(tǒng)CRC校驗(yàn)方法所產(chǎn)生的剩余錯(cuò)誤率為Rs、平均出錯(cuò)概率為P,則下表給出了不同SBN值對(duì)剩余錯(cuò)誤率的影響。由表2可知,剩余錯(cuò)誤率Rd隨著SBN的增大而減小,其原因?yàn)橄嚓P(guān)校驗(yàn)位SwiftCali的增大,使在進(jìn)行CRC計(jì)算時(shí),原數(shù)據(jù)與冗余數(shù)據(jù)的關(guān)聯(lián)性更強(qiáng),降低了CRC校驗(yàn)值無法檢測(cè)出錯(cuò)誤和校驗(yàn)值重復(fù)的概率。傳統(tǒng)CRC校驗(yàn)方法剩余錯(cuò)誤率Rs在10-6至10-10區(qū)間,而由本方法所產(chǎn)生的剩余錯(cuò)誤率Rd在10-7至10-17區(qū)間,雖然波動(dòng)較大,但是當(dāng)固定SBN值后,可以發(fā)現(xiàn)相對(duì)傳統(tǒng)CRC校驗(yàn)方法,剩余錯(cuò)誤率有大幅下降。
表2 剩余錯(cuò)誤率比較表
針對(duì)數(shù)控總線在通信過程中出現(xiàn)的傳輸錯(cuò)誤,本文在應(yīng)用層之上提出了一種動(dòng)態(tài)CRC校驗(yàn)方法,該方法采用冗余數(shù)據(jù)和偏移機(jī)制,能夠根據(jù)用戶層的需求對(duì)安全強(qiáng)度進(jìn)行調(diào)整。實(shí)驗(yàn)證明,本文提出的動(dòng)態(tài)CRC校驗(yàn)方法在滿足通信實(shí)時(shí)性要求的同時(shí),大幅降低了總線通信過程中的剩余錯(cuò)誤率,具有很好的應(yīng)用前景。
[1]胡毅,于東,岳東峰,等.數(shù)控總線的消息安全通信方法[J].機(jī)械工程學(xué)報(bào),2011,47(5):134.
[2]Alireza Namazi,Seyed Ghassem Miremadi,Alireza Ejlali.A High Speed and Low Cost Error Correction Technique for the Carry Select Adder[C].International Conference on Availability and Security,2009.
[3]楊景藍(lán),寧濱,李開成.基于過程現(xiàn)場(chǎng)總線的安全通信的研究與實(shí)現(xiàn)[J].鐵路計(jì)算機(jī)應(yīng)用,2007(7):4.
[4]Yanbin Zhang,Qi Yuan.A Multiple Bits Error Correction Method Based on Cyclic Redundancy Check Codes[C].ICSP Proceedings,2008.
[5]Huseyin Balli,Xijin Yan,Zhen Zhang.Error Correction Capability of Random Network Error Correction Codes[C].ISIT,2007.
[6]包偉華,張浩.The Research of Functional Safety Standards and Technologies[C].第八屆工業(yè)儀表與自動(dòng)化學(xué)術(shù)會(huì)議,2007.
[7]Zhen Zhang.Linear Network Error Correction Codes in Packet Networks[J].IEEE Transactions on Information theory,2008,54(1).