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