夏 偉 蔣建金 傅林泰 張 磊
(卡斯柯信號有限公司,200071,上海//第一作者,工程師)
列車自動控制(ATC)系統(tǒng)是由列車自動保護(ATP)系統(tǒng)、列車自動監(jiān)控(ATS)系統(tǒng)、列車自動運行(ATO)系統(tǒng)和計算機聯(lián)鎖系統(tǒng)組成[1],對列車運行速度、運行間隔和運行方向等進行控制,保證列車安全、高效運行。這些系統(tǒng)大多在設計時需要采用安全冗余編碼技術來提高系統(tǒng)的安全性,使系統(tǒng)達到SIL4安全完整性等級。
循環(huán)冗余校驗(CRC)是通信領域常用的一種校驗碼,用于檢測數(shù)據(jù)在傳輸過程中是否發(fā)生了被篡改的錯誤。一般的方法是通信雙方定義好計算多項式和CRC的計算方法(包括寬度、起始值、結(jié)果異或值、輸入輸出數(shù)據(jù)反轉(zhuǎn)等),發(fā)送方在對數(shù)據(jù)計算后將得出的CRC值附在消息幀后面一起發(fā)送;接收方收到后對數(shù)據(jù)進行同樣的計算,并將結(jié)果與原始的CRC進行比較,來校驗數(shù)據(jù)的正確性與完整性。
當冗余編碼的列車自動控制系統(tǒng)與其它類型冗余編碼或非冗余編碼系統(tǒng)通信時,需要采用CRC來保證傳輸數(shù)據(jù)的完整性,且只需傳輸高位數(shù)據(jù),低位冗余碼不參與傳輸。當列車自動控制系統(tǒng)無故障時計算出的冗余碼CRC與標準CRC結(jié)果完全一致,外界系統(tǒng)可校驗通過;當列車自動控制系統(tǒng)存在故障時,計算出的冗余碼CRC需要包含故障信息且該故障能被外界檢測出而拒絕接收。現(xiàn)有的技術在發(fā)送消息時,僅對高位數(shù)據(jù)進行CRC計算,那么會導致外界系統(tǒng)無法檢測到低位數(shù)據(jù)中可能存在的隨機性失效或故障;收到外界消息時,如果只是根據(jù)高位數(shù)據(jù)直接計算出低位冗余碼,那么當CRC校驗過程失效時,故障信息將不體現(xiàn)在低位冗余碼中而無法被當前系統(tǒng)檢測。為此,提出了一種安全性高、錯誤可檢測率高、基于冗余編碼的CRC校驗方法。
冗余編碼技術雖然種類多樣,但是編碼形式、安全原理大致相同。每個變量都是由高位與低位組成,高位為數(shù)據(jù)的信息位,低位為數(shù)據(jù)的校驗位,其中低位是由高位、簽名、時間戳等信息通過預定義的公式計算得出,因此每個變量的高低位之間存在確定的對應關系。系統(tǒng)在運行的每個周期都會對關鍵變量的高位、低位正確性進行校驗,用于判斷是否存在內(nèi)存錯誤、隨機性失效等故障。本文采用AN碼、分離碼相結(jié)合的編碼方式[2-3]。對于簡單變量x,設計其編碼后的形式為:
X=Ax+Bx+DT
式中:
A——編碼時選擇的大素數(shù);
Bx——編碼時為變量x分配的大素數(shù);
DT——時間戳。
在實際編碼中,將長度為k個字節(jié)(k=1,2,3,4)的變量分成了高k位和低k位,高k位為數(shù)值域,存放數(shù)據(jù)的原始值,低k位為校驗域。
按照這種編碼方法,對每個操作數(shù)分配一個固定的簽名,可以檢測操作數(shù)尋址簽名錯誤和操作符錯誤;時間戳可以檢測循環(huán)變量值沒有被更新的錯誤,或者循環(huán)變量值失效使用上周期變量值的錯誤。
CRC校驗技術是一種十分有效的錯誤檢測技術,能檢驗一位錯、雙位錯、所有的奇數(shù)錯、所有長度小于或等于所用的生成多項式長度的錯誤。如采用16位生成多項式的CRC校驗,對17位以上的檢錯率高達99.997%[4],32位生成多項式的出錯概率比16位低10-5倍[5],因此CRC 32更適用于重要數(shù)據(jù)的傳輸,在軌道交通列車自動控制系統(tǒng)中得到廣泛應用。文獻[6-8]中對查表法CRC校驗的原理做了詳細闡述。
針對現(xiàn)有技術無法實現(xiàn)對列車信號控制系統(tǒng)中冗余碼進行CRC校驗以及無法利用CRC校驗碼與外界冗余/非冗余編碼系統(tǒng)進行通信的問題,提出一種基于冗余編碼系統(tǒng)的CRC校驗方法:
1)對發(fā)送消息進行編碼。通過將冗余碼校驗信息融合到CRC校驗計算過程中,在無故障的情況下得出的CRC校驗碼與標準CRC完全一致,保證了正常的通信功能;在列車信號控制系統(tǒng)發(fā)生故障的情況下能夠?qū)㈠e誤信息反饋到編碼CRC校驗碼中,外界冗余/非冗余系統(tǒng)可校驗出故障信息。
2)收到外界消息,根據(jù)消息中的CRC校驗碼和高位數(shù)據(jù)對該消息進行解碼校驗,校驗結(jié)果加入最終生成的低位冗余碼,保證了傳輸過程中任何故障可以被編碼系統(tǒng)及時檢測出。
該方法實現(xiàn)步驟包括離線數(shù)據(jù)準備模塊、編碼模塊和解碼模塊三個部分。
離線配置工具輸入的文件有msgType.xml(定義所有消息的格式,每條消息中包含的具體變量,每個變量的長度)和signature.txt(包含所有變量的簽名)。
離線配置工具需要根據(jù)輸入文件計算每條消息中每個變量簽名數(shù)據(jù)的補償值。由于在計算CRC時需要同時進行低位冗余碼的計算,因此需要根據(jù)具體CRC的多項式和計算方法,計算每個變量的簽名補償值表,用于在CRC計算時抵消低位冗余碼信息。簽名補償值的計算公式如下:
Smod=(S∧M)×Pk-1
式中:
S——原始簽名;
Smod——簽名補償值;
M——CRC 32多項式對應的掩碼;
P——多項式轉(zhuǎn)換成的32位矩陣;
k——變量長度,支持1-4 B。
簽名計算完成需要進行校驗,校驗的方法是進行反向計算,逆推原簽名。如果校驗失敗,則終止輸出;校驗成功后輸出的bin文件中應包含:每條消息的格式,每條消息中每個變量對應的簽名補償值,臨時接收簽名TempSig_rcv(跟Sig_nature保持常量差Constant_1)。離線配置工具處理如圖1所示。

圖1 離線配置工具處理流程圖
冗余編碼系統(tǒng)中所有待發(fā)送消息的變量均采用編碼技術,包含高位和低位數(shù)據(jù)。由于冗余碼無法直接轉(zhuǎn)換為CRC,在編碼時(即計算CRC的過程),會同時對每個變量的高位、低位進行校驗,如果發(fā)現(xiàn)冗余碼故障或在編碼過程中發(fā)生隨機性失效,那么該錯誤信息將會被融合于CRC計算過程,得到錯誤的CRC校驗碼,外部系統(tǒng)可以檢測出該故障信息。處理流程如圖2所示。

圖2 發(fā)送消息編碼處理流程圖
具體步驟為:
1) 從配置bin文件中獲取當前變量的長度。
2) 查表法依次計算當前變量的每個字節(jié)的CRC值。
3) 查找簽名補償值表,計算當前變量當前字節(jié)簽名對應的補償值。
4) 根據(jù)當前變量的長度判斷當前變量CRC計算是否結(jié)束,如未結(jié)束則執(zhí)行步驟2),如結(jié)束則根據(jù)當前變量的整體簽名補償值、高位數(shù)據(jù)、低位冗余碼、時間戳(TimeStamp)進行校驗。當數(shù)據(jù)正確時校驗結(jié)果應為0;如果校驗結(jié)果非0,則表示存在故障。將每個變量的校驗結(jié)果信息異或到編碼CRC值。
5) 判斷當前消息所有變量是否都已計算結(jié)束,如未結(jié)束執(zhí)行步驟1),如已結(jié)束則返回編碼CRC值作為最終結(jié)果。
其中步驟3)中一個變量的某個字節(jié)CRC補償值的計算公式為:
Scmp[x]=(T[xk]-1×2k1×8)MOD(A)
式中:
xk——該字節(jié)的數(shù)值,范圍為[0, 255];
T——查表法CRC32計算表;
k1——變量的第幾個字節(jié),范圍為[0, 3]。
由于接收到的消息只有高位數(shù)據(jù)和CRC,需要根據(jù)高位數(shù)據(jù)和CRC生成有效的冗余碼。如果數(shù)據(jù)在傳輸過程被篡改或解碼過程發(fā)生隨機性失效,將導致校驗結(jié)果異常,生成的冗余碼包含錯誤信息,該錯誤會被系統(tǒng)檢出。在解碼時,先對消息進行臨時編碼,將臨時編碼 CRC與接收CRC進行比較,并將校驗結(jié)果融合到最終冗余碼的計算過程。具體為:
1) 根據(jù)配置信息中的TempSig_rcv和收到消息中的高位數(shù)據(jù)計算出每個變量的臨時冗余碼Temp_Redcode,且不包含TimeStamp信息。
2) 根據(jù)Temp_Redcode對收到的消息進行臨時編碼, 得到臨時編碼CRC。
3) 將步驟2)中的臨時編碼CRC與接收CRC進行校驗比較,并去除步驟1)中常量差Constant_1。如果兩者相等,則校驗通過,校驗結(jié)果為0;如果兩者不等,則校驗不通過,校驗結(jié)果非0。
4) 如果步驟3)校驗通過,修改步驟1)中每個變量的Temp_Redcode,異或3.2中步驟3)校驗結(jié)果,并加上TimeStamp,作為最終冗余碼結(jié)果輸出。
5) 如果步驟3)校驗不通過,返回錯誤,不輸出冗余碼;如果發(fā)生隨機性失效,進入步驟4),輸出的冗余碼會攜帶步驟3)中的錯誤校驗結(jié)果,當前系統(tǒng)會檢測出該故障,處理流程如圖3所示。

圖3 接收消息解碼處理流程圖
采用基于冗余編碼系統(tǒng)的CRC校驗方法,可實現(xiàn)冗余編碼系統(tǒng)與非冗余編碼系統(tǒng)的正常通信,提高系統(tǒng)的通信兼容性,并且有效保證了對傳輸過程中的錯誤信息和系統(tǒng)的隨機性失效的檢出率。目前該方法已成功應用于ATP、ATS等多個安全產(chǎn)品中。