專利名稱:廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層軟件接口方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電力系統(tǒng)通信領(lǐng)域,更具體地涉及一種在電力通信系統(tǒng)中的主站與主站、主站與子站的通信中異步串行通信協(xié)議數(shù)據(jù)鏈路層的通信方法。
在串行通信中,數(shù)據(jù)鏈路層采用的方式通常只有如下幾種(1)異步方式;(2)面向字節(jié)同步方式,如IBM的雙字節(jié)同步方式(Bisync);(3)面向位同步方式,如高級數(shù)據(jù)鏈路控制(HDLC)或同步數(shù)據(jù)鏈路控制(SDLC)。如
圖1、圖2就表示出了一種特殊的數(shù)據(jù)鏈路格式。
但是在實(shí)際應(yīng)用中卻存在與上述三種方式不同的數(shù)據(jù)鏈路層方式,如圖1、圖2就表示出了一種特殊的數(shù)據(jù)鏈路格式。例如在廣義異步串行通信的報(bào)文封裝格式和廣義異步串行通信的通用報(bào)文封裝格式都有一種特殊的數(shù)據(jù)鏈路格式。每幀報(bào)文頭、尾的條件信號和標(biāo)志信號是用來開關(guān)調(diào)制解調(diào)器音頻的控制信號。每幀報(bào)文以信息塊為單位進(jìn)行組織,可以含有1個(gè)或多個(gè)信息塊。第1個(gè)信息塊是主站問詢或子站應(yīng)答的報(bào)文頭,由4位同步碼、4位站地址、8位功能碼、8位命令/狀態(tài)字、8位長度、8位循環(huán)冗余碼構(gòu)成,之后的信息塊是數(shù)據(jù)塊,由功能碼、數(shù)據(jù)和循環(huán)冗余碼組成。需要特別注意的是在每個(gè)信息塊的頭、尾各有一個(gè)起始位和停止位,這些位的寬度與信息塊內(nèi)部一個(gè)數(shù)據(jù)位的脈沖寬度相同,而每個(gè)信息塊的內(nèi)部各字節(jié)之間則是連續(xù)的、無間隙的,沒有任何起始位和停止位。顯然,這種特殊數(shù)據(jù)鏈路方式介于面向字節(jié)同步方式和異步方式之間,本發(fā)明人根據(jù)每個(gè)信息塊頭、尾各有一個(gè)起始位和停止位這一特點(diǎn)將其稱為廣義異步串行通信協(xié)議,廣義異步串行通信協(xié)議的數(shù)據(jù)鏈路格式比較特殊,半導(dǎo)體廠商生產(chǎn)的多種串行通信控制器SCC芯片,盡管功能越來越強(qiáng),可由用戶編程控制的功能也越來越多,但沒有一種SCC芯片能直接支持廣義異步串行通信協(xié)議的數(shù)據(jù)鏈路格式。
現(xiàn)有的廣義異步串行通信協(xié)議的現(xiàn)有實(shí)現(xiàn)方法如圖3所示,是通用串行通信控制器加上可編程邏輯器件共同構(gòu)成的,也就是在通用串行通信控制器所支持的普通數(shù)據(jù)鏈路格式上,利用可編程邏輯器件再作特殊的處理,最后形成了廣義異步串行通信協(xié)議的特殊鏈路格式。
串行通信控制器發(fā)送的標(biāo)準(zhǔn)數(shù)據(jù)格式在可編程邏輯器件中經(jīng)過變換處理,使其成為廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層的特殊格式,再發(fā)給信道。接收過程與發(fā)送相反,從信道來的數(shù)據(jù)先進(jìn)入可編程邏輯器件,經(jīng)過變換處理成為普通格式后送往串行通信控制器做普通的接收處理。
從上述分析可以看出,現(xiàn)有的實(shí)現(xiàn)方式使用了串行通信控制器加可編程邏輯器件的兩層硬件的處理方法,本發(fā)明人將這種方法稱為廣義異步串行通信協(xié)議的硬件實(shí)現(xiàn)方法。
本發(fā)明的目的是提出一種廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層的軟件接口方法,使現(xiàn)有通信設(shè)備不作任何硬件改動,依靠該軟件方法就能實(shí)現(xiàn)廣義異步串行通信協(xié)議特殊的數(shù)據(jù)鏈路格式。
本發(fā)明的方法是通過如下的技術(shù)方案實(shí)現(xiàn)的,該方法包括步驟串行通信控制器支持同、異步通信方式,串行通信控制器工作在同步方式下,將一幀報(bào)文全部收進(jìn)來;由于報(bào)文中各信息塊的頭、尾插入了起始位和停止位,在同步方式下,串行通信控制器以8位長度為單位進(jìn)行比特流的串并轉(zhuǎn)換;CPU從串行通信控制器中讀取各個(gè)字節(jié),產(chǎn)生錯(cuò)幀現(xiàn)象的數(shù)據(jù)流;將錯(cuò)幀現(xiàn)象的數(shù)據(jù)流送入軟件解碼模塊執(zhí)行解碼流程,將信息塊頭尾的起始位和停止位去掉,將字節(jié)中的錯(cuò)幀情況糾正過來,產(chǎn)生CPU可識別的數(shù)據(jù);當(dāng)CPU要發(fā)送一幀數(shù)據(jù)時(shí),先將要發(fā)送的正常格式的報(bào)文數(shù)據(jù)送入軟件編碼模塊,執(zhí)行編碼流程,在軟件編碼模塊中,依據(jù)信息塊頭、尾的起始位和停止位插入的規(guī)律,對一幀數(shù)據(jù)中的每個(gè)字節(jié)數(shù)據(jù)逐位進(jìn)行處理,產(chǎn)生在格式上已經(jīng)符合廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層的特殊要求的數(shù)據(jù);CPU將處理過的數(shù)據(jù)逐字節(jié)得寫入串行通信控制器,串行通信控制器以同步方式將數(shù)據(jù)發(fā)送出去。
本發(fā)明的方法是不用對現(xiàn)有通信設(shè)備硬件作任何改動,通過軟件方法就能實(shí)現(xiàn)廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層的接口,利用軟件方法實(shí)現(xiàn)要比現(xiàn)有的硬件方法簡單、方便、靈活。
下面結(jié)合附圖進(jìn)一步描述本發(fā)明的方法。
圖1是廣義異步串行通信的報(bào)文封裝格式示意圖;圖2是廣義異步串行通信的通用報(bào)文格式示意圖;圖3是廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層的硬件實(shí)現(xiàn)方式示意圖;圖4是本發(fā)明的方法中錯(cuò)幀現(xiàn)象的示意圖5是本發(fā)明的方法的軟件解碼模塊工作流程示意圖;圖6是本發(fā)明的方法的軟件編碼模塊工作流程示意圖。
正如在本發(fā)明的現(xiàn)有技術(shù)所描述的那樣,圖1、2和3都是說明本發(fā)明現(xiàn)有技術(shù)的圖。
發(fā)明人擺脫了串行通信中每一幀報(bào)文的每一個(gè)物理字節(jié)必須有明確邏輯含義這一傳統(tǒng)觀念的束縛,暫時(shí)放棄邏輯含義,從物理層數(shù)據(jù)的脈沖序列特點(diǎn)入手解決問題。串行通信控制器對外發(fā)送一幀報(bào)文,從高層協(xié)議邏輯上講,可以認(rèn)為它是某種性質(zhì)的報(bào)文,每個(gè)字節(jié)有某種特殊含義,但從物理層觀察,這幀報(bào)文其實(shí)就是一個(gè)脈沖序列,串行通信控制器對外發(fā)送報(bào)文其實(shí)就是發(fā)送一系列合乎一定要求的脈沖序列?;谶@種觀點(diǎn),發(fā)明人提出了如下軟件實(shí)現(xiàn)方法,本發(fā)明的方法是通過如下的技術(shù)方案實(shí)現(xiàn)的。
圖4是本發(fā)明的方法中錯(cuò)幀現(xiàn)象的示意圖。接收數(shù)據(jù)由串行通信控制器來完成。串行通信控制器支持同、異步通信方式,在本方案中串行通信控制器工作在同步方式下,將一幀報(bào)文全部收進(jìn)來。由于報(bào)文中各信息塊的頭、尾插入了起始位和停止位,在同步方式下串行通信控制器是以8位長度為單位進(jìn)行比特流的串并轉(zhuǎn)換,所以CPU從串行通信控制器中讀到的數(shù)據(jù)各個(gè)字節(jié)都出現(xiàn)了錯(cuò)幀現(xiàn)象(本屬于前一個(gè)字節(jié)的位,被串行通信控制器判斷為后一個(gè)字節(jié)的位),如圖4所示。顯然,這種方法只是保證將廣義異步串行通信的一幀數(shù)據(jù)全部接收進(jìn)來,由于錯(cuò)幀現(xiàn)象,這樣的數(shù)據(jù)仍無法被CPU使用。為此,發(fā)明人根據(jù)信息塊頭、尾起始位和停止位插入的規(guī)律,設(shè)計(jì)了軟件解碼模塊,CPU執(zhí)行軟件解碼模塊對串行通信控制器所收到的一幀數(shù)據(jù)中的每一個(gè)字節(jié)逐位處理,將信息塊頭尾的起始位和停止位去掉,將字節(jié)中的錯(cuò)幀情況糾正過來。經(jīng)過軟件解碼處理過的數(shù)據(jù)就變成了CPU可識別的正常數(shù)據(jù)了。
與接收過程類似,發(fā)明人設(shè)計(jì)了軟件編碼模塊。當(dāng)CPU要發(fā)送一幀數(shù)據(jù)時(shí),先將要發(fā)送的正常格式的報(bào)文數(shù)據(jù)送入軟件編碼模塊進(jìn)行處理。在軟件編碼模塊中,依據(jù)信息塊頭、尾的起始位和停止位插入的規(guī)律,對一幀數(shù)據(jù)中的每個(gè)字節(jié)數(shù)據(jù)逐位進(jìn)行處理,經(jīng)過軟件編碼處理之后的數(shù)據(jù)在格式上已經(jīng)符合廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層的特殊要求了,然后CPU將處理過的數(shù)據(jù)逐字節(jié)得寫入串行通信控制器,串行通信控制器以同步方式將數(shù)據(jù)發(fā)送出去。
軟件編碼過程在技術(shù)上有一個(gè)難點(diǎn),那就是CPU對串行通信控制器以總線方式寫入待發(fā)數(shù)據(jù)都是以字節(jié)為單位的,也就是說一定是8*N位(N為字節(jié)數(shù)),由于在軟件編碼時(shí)插入了起始位和停止位,總位數(shù)就不一定是8的整數(shù)倍。例如,只插入了一對起始位和停止位時(shí),總位數(shù)為8*N+2位。在這種情況下,對于最后2位數(shù)據(jù),CPU無法通過總線寫入串行通信控制器。仔細(xì)分析廣義異步串行通信協(xié)議的幀結(jié)構(gòu),發(fā)現(xiàn)在每幀數(shù)據(jù)之后是標(biāo)志信號,因此可為最后2位數(shù)據(jù)補(bǔ)上6個(gè)比特的“1”,使之與標(biāo)志信號一致,組成一個(gè)完整的字節(jié),CPU將這個(gè)字節(jié)寫入串行通信控制器,串行通信控制器將其發(fā)送出去,人為補(bǔ)的6個(gè)“1”將被接收方認(rèn)為是標(biāo)志信號而不會產(chǎn)生任何誤解。
圖5是本發(fā)明的方法的軟件解碼模塊工作流程示意圖。該流程從步驟S501開始,然后進(jìn)入步驟S502計(jì)算解碼后的報(bào)文長度。然后,進(jìn)入步驟S503計(jì)算解碼后的報(bào)文塊數(shù)目。然后,進(jìn)入步驟S504清字節(jié)計(jì)數(shù)器。然后,進(jìn)入步驟S505,通過比較字節(jié)計(jì)數(shù)器與報(bào)文長度判斷解碼過程是否完成,若完成,則進(jìn)入步驟S512,整個(gè)流程結(jié)束;若未完成,則進(jìn)入步驟S506,判斷被處理的數(shù)據(jù)是否為報(bào)文塊的首字節(jié),若是,則進(jìn)入步驟S507去掉首字節(jié)的起始位“0”;否則,進(jìn)入步驟S508。在步驟S508中,判斷被處理的數(shù)據(jù)是否為報(bào)文塊的結(jié)束字節(jié),若是,進(jìn)入步驟S509去掉結(jié)束字節(jié)的停止位“1”;否則,進(jìn)入步驟S510,從被解碼數(shù)據(jù)流中取出8位數(shù)據(jù),進(jìn)行逐位處理,組成解碼后的一個(gè)字節(jié)。然后進(jìn)入步驟S511,將字節(jié)記數(shù)器加1。進(jìn)入步驟S505,如此循環(huán),直至整個(gè)流程結(jié)束。
圖6是本發(fā)明的方法的軟件編碼模塊工作流程示意圖。該流程從步驟S601開始,進(jìn)入步驟S602計(jì)算報(bào)文長度、報(bào)文塊數(shù)目和總位數(shù)然后進(jìn)入步驟S603。在步驟S603中,清位下標(biāo)和字節(jié)記數(shù)器,然后進(jìn)入步驟S604。在步驟S604中,為編碼后的第一個(gè)報(bào)文塊加上起始位“0”,然后進(jìn)入步驟S605。在步驟S605中,通過比較字節(jié)計(jì)數(shù)器與報(bào)文長度判斷編碼過程是否完成,若完成,則進(jìn)入步驟S612,在S612中將編碼后數(shù)據(jù)的最后一個(gè)字節(jié)的剩余位全部置為停止位“1”,然后進(jìn)入步驟S613,整個(gè)編碼過程結(jié)束;若未完成,則進(jìn)入步驟S606,從被編碼數(shù)據(jù)中取數(shù)據(jù),逐位進(jìn)行處理,形成編碼后的一個(gè)字節(jié)。然后進(jìn)入步驟S607,判斷是否為報(bào)文塊的起始字節(jié),若是,則進(jìn)入步驟S608,在編碼數(shù)據(jù)中增加一個(gè)起始位“0”;否則,進(jìn)入步驟S609,判斷是否為報(bào)文塊的結(jié)束字節(jié),若是,則進(jìn)入步驟S610,在編碼數(shù)據(jù)中增加一個(gè)停止位“1”,否則進(jìn)入步驟S611字節(jié)記數(shù)器加1,然后進(jìn)入步驟S605,如此循環(huán)直至整個(gè)流程結(jié)束。
根據(jù)本發(fā)明的方法已經(jīng)成功地實(shí)現(xiàn)了CSC2000變電站自動化系統(tǒng)采用8890通信協(xié)議與美國西門子SCADA/EMS系統(tǒng)接口的通信。
權(quán)利要求
1.一種廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層軟件接口方法,其特征在于所述方法包括如下步驟串行通信控制器支持同、異步通信方式,串行通信控制器工作在同步方式下,將一幀報(bào)文全部收進(jìn)來;由于報(bào)文中各信息塊的頭、尾插入了起始位和停止位,在同步方式下,串行通信控制器以8位長度為單位進(jìn)行比特流的串并轉(zhuǎn)換;CPU從串行通信控制器中讀取各個(gè)字節(jié),產(chǎn)生錯(cuò)幀現(xiàn)象的數(shù)據(jù)流;將錯(cuò)幀現(xiàn)象的數(shù)據(jù)流送入軟件解碼模塊執(zhí)行解碼流程,將信息塊頭尾的起始位和停止位去掉,將字節(jié)中的錯(cuò)幀情況糾正過來,產(chǎn)生CPU可識別的數(shù)據(jù);當(dāng)CPU要發(fā)送一幀數(shù)據(jù)時(shí),先將要發(fā)送的正常格式的報(bào)文數(shù)據(jù)送入軟件編碼模塊,軟件編碼模塊執(zhí)行編碼流程,在軟件編碼模塊中,依據(jù)信息塊頭、尾的起始位和停止位插入的規(guī)律,對一幀數(shù)據(jù)中的每個(gè)字節(jié)數(shù)據(jù)逐位進(jìn)行處理,產(chǎn)生在格式上已經(jīng)符合廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層的特殊要求的數(shù)據(jù);CPU將處理過的數(shù)據(jù)逐字節(jié)得寫入串行通信控制器,串行通信控制器以同步方式將數(shù)據(jù)發(fā)送出去。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于所述的軟件解碼模塊執(zhí)行解碼流程包括計(jì)算解碼后的報(bào)文長度、計(jì)算解碼后的報(bào)文塊數(shù)、清字節(jié)計(jì)數(shù)器、比較字節(jié)計(jì)數(shù)器與報(bào)文長度、判斷被處理的數(shù)據(jù)是否為報(bào)文塊的首字節(jié)、判斷被處理的數(shù)據(jù)是否為報(bào)文塊的結(jié)束字節(jié)、從被解碼數(shù)據(jù)流中取出8位數(shù)據(jù),進(jìn)行逐位處理,組成解碼后的一個(gè)字節(jié)的步驟。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于所述的軟件編碼模塊執(zhí)行編碼流程包括計(jì)算報(bào)文長度、報(bào)文塊數(shù)目和總位數(shù)、清位下標(biāo)和字節(jié)記數(shù)器、為編碼后的第一個(gè)報(bào)文塊加上起始位“0”、通過比較字節(jié)計(jì)數(shù)器與報(bào)文長度判斷編碼過程是否完成、將編碼后數(shù)據(jù)的最后一個(gè)字節(jié)的剩余位全部置為停止位“1”、從被編碼數(shù)據(jù)中取數(shù)據(jù),逐位進(jìn)行處理,形成編碼后的一個(gè)字節(jié)、判斷是否為報(bào)文塊的起始字節(jié)、,在編碼數(shù)據(jù)中增加一個(gè)起始位“0”、,判斷是否為報(bào)文塊的結(jié)束字節(jié)、在編碼數(shù)據(jù)中增加一個(gè)停止位“1”、字節(jié)記數(shù)器加1的步驟。
全文摘要
本發(fā)明公開了一種廣義異步串行通信協(xié)議數(shù)據(jù)鏈路層軟件接口方法,所述方法包括如下步驟串行通信控制器工作在同步方式下,將一幀報(bào)文全部收進(jìn)來,串行通信控制器以8位長度為單位進(jìn)行比特流的串并轉(zhuǎn)換;CPU從串行通信控制器中讀取各個(gè)字節(jié),將產(chǎn)生的錯(cuò)幀現(xiàn)象的數(shù)據(jù)流送入軟件解碼模塊執(zhí)行解碼流程,產(chǎn)生CPU可識別的數(shù)據(jù);在軟件編碼模塊中,產(chǎn)生在格式上特殊要求的數(shù)據(jù);該方法與現(xiàn)有的硬件實(shí)現(xiàn)方法相比,該方法更加簡單、靈活、方便。
文檔編號G06F13/00GK1316698SQ0111855
公開日2001年10月10日 申請日期2001年6月1日 優(yōu)先權(quán)日2001年6月1日
發(fā)明者任雁銘, 秦立軍, 楊奇遜 申請人:北京四方同創(chuàng)保護(hù)與控制設(shè)備有限公司