專利名稱:故障錄波系統(tǒng)中基于dsp的以太網(wǎng)通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,屬于電氣及通信技 術(shù)領(lǐng)域。
背景技術(shù):
故障錄波系統(tǒng)中,由于數(shù)據(jù)量大,通過傳統(tǒng)的網(wǎng)絡(luò)進行數(shù)據(jù)傳輸,網(wǎng)絡(luò)擴展速度 低,實時性差,不支持TCP/IP協(xié)議。 TCP/IP以太網(wǎng)通信現(xiàn)在正成為最主要的通信手段,而DSP嵌入式設(shè)計也已滲透到 工業(yè)控制多個領(lǐng)域,把二者結(jié)合起來利用現(xiàn)有網(wǎng)絡(luò)資源實現(xiàn)高速DSP以太網(wǎng)通信,就要解 決以下幾個問題 l)DSP要擴展高速以太網(wǎng)必須要選好以太網(wǎng)控制器;
2)要編寫或移植TCP/IP協(xié)議棧;
3)要編寫網(wǎng)絡(luò)驅(qū)動程序。 由于DSP無操作系統(tǒng),沒有現(xiàn)成的網(wǎng)絡(luò)驅(qū)動程序、TCP/IP協(xié)議棧,所以必須自己編 寫網(wǎng)絡(luò)驅(qū)動程序,移植TCP/IP協(xié)議棧。另外,由于嵌入式工業(yè)控制實時性強、數(shù)據(jù)量大,所 以必須高速實時。
如果能夠?qū)崿F(xiàn)將兩者結(jié)合實現(xiàn)高速以太網(wǎng)通信,其優(yōu)點是顯而易見的
1)由于沒有操作系統(tǒng),所以沒有病毒干擾。 2)由于DSP是實時系統(tǒng),所以通信實時性強,特別適用高速、實時、大容量數(shù)據(jù)傳 輸領(lǐng)域。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種故障錄波系統(tǒng)中可以實現(xiàn)高速數(shù)據(jù)傳輸
的以太網(wǎng)通信方法。 為解決上述技術(shù)問題,本發(fā)明提供一種故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通 信方法,將網(wǎng)絡(luò)控制器與以太網(wǎng)連接,DSP與網(wǎng)絡(luò)控制器相通信,將采樣數(shù)據(jù)存儲于2片 FLASH(HY27UF082G2A),其特征在于所述網(wǎng)絡(luò)控制器為AX88796,所述DSP上設(shè)置有TCP/IP 協(xié)議棧,用于實現(xiàn)DSP系統(tǒng)與網(wǎng)絡(luò)上主機的通信,所述TCP/IP協(xié)議棧包括lwIP,通信過程包 括以下步驟 1)在接收報文中斷服務(wù)程序后,以太網(wǎng)驅(qū)動程序?qū)⒔邮請笪拇鎯υ赑bufs鏈緩沖
中,同時存儲報文的各個鏈緩沖指針被依次存入一自定義的接收報文循環(huán)隊列,而不直接
傳入?yún)f(xié)議棧,當(dāng)報文收取完畢,中斷服務(wù)程序即退出; 2)將循環(huán)隊列中的報文送入lwIP協(xié)議棧進行分用; 3)應(yīng)用層數(shù)據(jù)的輸入將經(jīng)過協(xié)議棧分用的報文傳送到上層由規(guī)約處理的模塊 并接收; 4)應(yīng)用層數(shù)據(jù)的輸出將用戶報文寫入?yún)f(xié)議棧傳輸層的緩沖區(qū);
5)將寫入?yún)f(xié)議棧傳輸層的緩沖區(qū)的報文封裝成網(wǎng)絡(luò)報文; 6)將網(wǎng)絡(luò)報文寫入以太網(wǎng)控制器,再由以太網(wǎng)控制器將數(shù)據(jù)幀轉(zhuǎn)換成差分信號送 入網(wǎng)絡(luò)。 在所述步驟l)中,所述以太網(wǎng)控制器的中斷服務(wù)程序由DSPTMS 320VC5509A在控 制器中斷使能的條件下執(zhí)行,實現(xiàn)讀取控制器接收到的報文數(shù)據(jù)、處理接收緩沖區(qū)溢出及 處理接收數(shù)據(jù)包錯誤。 在所述步驟2)中,在報文分用的過程中,協(xié)議棧立即發(fā)送一個回應(yīng)報文,為了避 免此時被以太網(wǎng)控制器中斷打斷發(fā)送流程,暫時禁用控制器中斷。 在所述步驟3)和4)中,協(xié)議棧的應(yīng)用層軟件接口為raw API,主控系統(tǒng)使用TCP 進行數(shù)據(jù)通信,應(yīng)用層數(shù)據(jù)輸入和輸出過程包括應(yīng)用層的初始化,應(yīng)用層的初始化包括以 下步驟, d)設(shè)置主控系統(tǒng)為TCP服務(wù)器; e)設(shè)置網(wǎng)絡(luò)通信回調(diào)函數(shù),即調(diào)用lwIP的tcp—acc印t配置函數(shù); f)在3個TCP端口上進行監(jiān)聽,等待后臺處理機的TCP連接請求,所述3個監(jiān)聽端
口分別為實時數(shù)據(jù)通道、錄波文件通道和配置通道。 上述過程中,所述連接請求回調(diào)函數(shù)包括如下內(nèi)容 (1)初始化與該TCP通道對應(yīng)的PORTINFO端口信息結(jié)構(gòu)體中各成員變量值;
(2)設(shè)置該TCP連接的多個回調(diào)函數(shù),包括收到新的用戶數(shù)據(jù),數(shù)據(jù)被接收端收 到,連接發(fā)生異常。 在所述步驟4)中,應(yīng)用層數(shù)據(jù)的輸出包括以下步驟 a)數(shù)據(jù)被寫入lwIP的TCP發(fā)送緩沖區(qū),封裝進多個TCP報文段; b) lwIP發(fā)送TCP緩沖區(qū)中的報文段到網(wǎng)絡(luò)中。 將用戶數(shù)據(jù)寫入發(fā)送緩沖區(qū)是通過調(diào)用lwIP的tCp_Write()函數(shù)實現(xiàn),將數(shù)據(jù)封 裝進多個TCP報文段中,等待后續(xù)的發(fā)送。 最終的數(shù)據(jù)輸出是通過調(diào)用tcp_0Utput ()函數(shù)實現(xiàn)。 網(wǎng)絡(luò)控制芯片選用ASIX公司的AX88796(簡稱88796),它是適用于嵌入式系統(tǒng)的 10/lOOMbps自適應(yīng)以太網(wǎng)控制器。它內(nèi)部集成有物理層收發(fā)器和8KX 16bit的SRAM,同時 支持多種8位禾口 16位本地CPU總線接口 ,包括MCS-51系列、80186系列以及MC68K系歹lj, 內(nèi)部MAC寄存器與NE2000兼容,支持全雙工和半雙工通信模式。綜合88796在網(wǎng)絡(luò)通信速 度、內(nèi)部緩沖區(qū)容量、本地接口類型和寄存器操作等方面的配置,這款以太網(wǎng)控制器比之市 面流行的RTL8019AS或CS8900A等更有優(yōu)勢,尤其是它的百兆網(wǎng)絡(luò)數(shù)據(jù)速率能夠滿足DSP 系統(tǒng)傳輸數(shù)據(jù)的速度需求。 TCP/IP協(xié)議是實現(xiàn)以太網(wǎng)通信的基礎(chǔ),只有符合該協(xié)議的報文(Packet)數(shù)據(jù)才 能被網(wǎng)絡(luò)上的主機正確接收到。TCP/IP協(xié)議棧即是實現(xiàn)該協(xié)議的軟件模塊,它可以運行在 多種類型的CPU上,包括5509A DSP系統(tǒng)。移植工作就是針對DSP的特點,對TCP/IP協(xié)議棧 進行必要的設(shè)置和改造,使得它能運行在DSP上,實現(xiàn)DSP系統(tǒng)與網(wǎng)絡(luò)上主機通信的功能。
lwIP實現(xiàn)了絕大多數(shù)協(xié)議功能,是一套適用于嵌入式系統(tǒng)的免費開源的TCP/IP 協(xié)議棧。它采用模塊化的設(shè)計理念,對應(yīng)于TCP/IP協(xié)議的每一層分別實現(xiàn)了 ARP、IP、ICMP、 UDP和TCP等協(xié)議,具有很好的擴展性。同時,它還具有如下特性
1)支持多網(wǎng)絡(luò)接口下的IP轉(zhuǎn)發(fā)。 2)支持多個TCP連接和參數(shù)化的TCP最大報文段長度(MSS)。 3)支持TCP的流量控制,RTT往返時間估算,滑動窗口 ,超時重發(fā),快速恢復(fù)和快速
重發(fā)機制。 4)提供基于事件驅(qū)動的API函數(shù),用于提高應(yīng)用程序性能。
5)靈活的配置選項使得其對存儲器容量要求仍然很小。 lwIP的協(xié)議實現(xiàn)規(guī)范完整,具有不俗的網(wǎng)絡(luò)性能。LwIP是瑞士計算機科學(xué)院 (Swedish Institute of Computer Science)的Adam D皿kels等開發(fā)的一套用于嵌入式系 統(tǒng)的開放源代碼TCP/IP協(xié)議棧。LwIP的含義是Light Weight (輕型)IP協(xié)議。LwIP可以 移植到操作系統(tǒng)上,也可以在無操作系統(tǒng)的情況下獨立運行丄wIP TCP/IP實現(xiàn)的重點是在 保持TCP協(xié)議主要功能的基礎(chǔ)上減少對RAM的占用, 一般它只需要幾十K的RAM和40K左 右的ROM就可以運行,這使LwIP協(xié)議棧適合在低端嵌入式系統(tǒng)中使用。
本發(fā)明所達(dá)到的有益效果 本發(fā)明的故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,網(wǎng)絡(luò)控制器選用AX88796, 并對DSP上設(shè)置的TCP/IP協(xié)議棧進行設(shè)置和改造,從而實現(xiàn)故障錄波系統(tǒng)的數(shù)據(jù)信息傳送 至以太網(wǎng),同時以太網(wǎng)上的數(shù)據(jù)信息傳送至用戶端,從而實現(xiàn)故障錄波系統(tǒng)的數(shù)據(jù)信息通 過以太網(wǎng)進行高速通信。
圖1為本發(fā)明中DSP系統(tǒng)中的網(wǎng)絡(luò)數(shù)據(jù)輸入流程圖; 圖2為本發(fā)明中網(wǎng)絡(luò)數(shù)據(jù)的輸出過程示意圖; 圖3為本發(fā)明中以太網(wǎng)控制器的底層數(shù)據(jù)輸入流程圖; 圖4為本發(fā)明中網(wǎng)絡(luò)數(shù)據(jù)輸出的流程圖; 圖5為本發(fā)明中中斷服務(wù)程序的流程圖; 圖6為本發(fā)明中應(yīng)用層的TCP初始化流程圖; 圖7為本發(fā)明中應(yīng)用層數(shù)據(jù)輸入的處理流程圖; 圖8為本發(fā)明中應(yīng)用層數(shù)據(jù)輸出流程圖。
具體實施例方式
下面結(jié)合附圖對本發(fā)明作進一步的說明。 圖l為本發(fā)明中DSP系統(tǒng)中的網(wǎng)絡(luò)數(shù)據(jù)輸入流程圖。本發(fā)明中網(wǎng)絡(luò)數(shù)據(jù)的輸入過 程為 網(wǎng)絡(luò)數(shù)據(jù)的輸入通常是由以太網(wǎng)控制器的接收報文中斷發(fā)起的,DSP接收到該中 斷后即從以太網(wǎng)控制器中讀取所有新的報文數(shù)據(jù)。接收到的報文必須經(jīng)過TCP/IP協(xié)議棧 分用(Demultiplexing),逐步解析才能傳送到用戶應(yīng)用層。 DSP主控系統(tǒng)中將網(wǎng)絡(luò)數(shù)據(jù)的輸入分為兩個階段以太網(wǎng)驅(qū)動程序收取接收報文 階段和接收報文被協(xié)議棧分用階段。 在接收報文中斷服務(wù)程序中,以太網(wǎng)驅(qū)動程序?qū)⒔邮請笪拇鎯υ赑bufs鏈緩沖 中,同時存儲報文的各個鏈緩沖指針被依次存入一自定義的接收報文循環(huán)隊列,而不直接傳入?yún)f(xié)議棧,當(dāng)報文收取完畢,中斷服務(wù)程序即退出。 循環(huán)隊列中的報文將在DSP系統(tǒng)的主程序中被送入lwIP協(xié)議棧進行分用。此時, 主程序是一個無限循環(huán),循環(huán)隊列將周期性地得到處理,只要主程序的結(jié)構(gòu)設(shè)計得當(dāng),則接 收報文總是能夠被及時處理并回應(yīng)的。 需要注意的一點是,由于在報文分用的過程中,協(xié)議棧可能需要立即發(fā)送一個回 應(yīng)報文,為了避免此時被以太網(wǎng)控制器中斷打斷發(fā)送流程,接收報文被分用時,控制器中斷 需要被暫時禁用。 圖2為本發(fā)明中網(wǎng)絡(luò)數(shù)據(jù)的輸出過程示意圖;圖3為本發(fā)明中以太網(wǎng)控制器的底 層數(shù)據(jù)輸入流程圖;本發(fā)明中,網(wǎng)絡(luò)數(shù)據(jù)的輸出過程為 主控系統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)輸出需要實現(xiàn)兩部分應(yīng)用層數(shù)據(jù)輸出和底層數(shù)據(jù)輸出。
應(yīng)用層數(shù)據(jù)輸出即主控系統(tǒng)的網(wǎng)絡(luò)應(yīng)用軟件調(diào)用lwIP的相關(guān)函數(shù)將用戶數(shù)據(jù)寫 入TCP或UDP緩沖區(qū)的過程,隨后緩沖區(qū)的數(shù)據(jù)將由協(xié)議棧自動封裝成以太網(wǎng)數(shù)據(jù)幀,并發(fā) 送到網(wǎng)絡(luò)中去。根據(jù)主控系統(tǒng)的需求,本發(fā)明編寫相應(yīng)的用戶數(shù)據(jù)輸出函數(shù),實現(xiàn)數(shù)據(jù)送入 傳輸層緩沖區(qū)的功能。 底層數(shù)據(jù)輸出即以太網(wǎng)控制器的底層輸出程序?qū)f(xié)議棧封裝好的以太網(wǎng)數(shù)據(jù)幀 交由控制器進行發(fā)送。它屬于以太網(wǎng)控制器的驅(qū)動程序部分,由協(xié)議棧的網(wǎng)絡(luò)層執(zhí)行該操 作。 以太網(wǎng)控制器的主要功能是收發(fā)網(wǎng)絡(luò)報文,DSP主控系統(tǒng)對控制器的操作是由它
的驅(qū)動程序完成的,包括控制器的初始化、數(shù)據(jù)輸入和輸出等底層函數(shù)。 圖5為本發(fā)明中中斷服務(wù)程序的流程圖。以太網(wǎng)控制器的中斷服務(wù)程序是服務(wù)于
控制器發(fā)生的異步事件的,它由DSP在控制器中斷使能的條件下執(zhí)行,主要實現(xiàn)讀取控制
器接收到的報文數(shù)據(jù)、處理接收緩沖區(qū)溢出、處理接收數(shù)據(jù)包錯誤等功能。系統(tǒng)可以通過訪
問以太網(wǎng)控制器的ISR寄存器來查詢是什么事件觸發(fā)了中斷。 由于接收到的報文必須經(jīng)過TCP/IP協(xié)議棧的分用,逐步解析才能傳送到用戶應(yīng) 用層,因此多個報文通過協(xié)議棧的過程將花費更大的系統(tǒng)開銷,體現(xiàn)在時間上即這一操作 的耗時將相當(dāng)可觀。另外,某些報文在被協(xié)議棧分用時將會引起協(xié)議棧立即發(fā)送一個回應(yīng) 報文,這需要調(diào)用網(wǎng)絡(luò)數(shù)據(jù)的輸出例程,從而不僅進一步增大處理接收報文的時間開銷,而 且在輸出過程中,DMA操作完成中斷將不能被DSP及時響應(yīng),因為此時DSP還處在以太網(wǎng)控 制器的中斷服務(wù)程序中,全局中斷使能位是關(guān)閉的,總之,在中斷服務(wù)程序中即讓接收報文 通過協(xié)議棧進行分用是不明智的,不僅會導(dǎo)致中斷例程的處理時間太長,使得其他中斷得 不到及時響應(yīng),還會和系統(tǒng)的DMA傳輸完成中斷相沖突,造成通信失敗。因此,系統(tǒng)的中斷 服務(wù)程序僅將接收報文的Pbuf鏈緩沖指針依次存入循環(huán)隊列,而不直接傳入?yún)f(xié)議棧。接收 報文將在系統(tǒng)的主程序中得到進一步處理,此時,程序處在非中斷服務(wù)程序中,可以正常執(zhí) 行網(wǎng)絡(luò)輸出例程。 主控系統(tǒng)在DSP上移植了 lwIP的ARP、 RARP、 ICMP、 IP、 UDP、 TCP協(xié)議模塊以及附 屬的緩沖管理、狀態(tài)顯示、協(xié)議棧調(diào)試等模塊,這些協(xié)議已經(jīng)足以組建網(wǎng)絡(luò)連接通道,能夠 滿足主控系統(tǒng)的通信需求。移植結(jié)果在主控系統(tǒng)與PC主機之間進行驗證,兩者通過直連雙 絞線互聯(lián)。經(jīng)過試驗,主控系統(tǒng)的ARP協(xié)議實現(xiàn)正常,查詢主機可以發(fā)現(xiàn)其ARP表中已存 在主控系統(tǒng)的IP地址記錄;ICMP協(xié)議實現(xiàn)正常,ping程序通過,主控系統(tǒng)響應(yīng)迅速,每個ICMP報文的響應(yīng)時間都在1ms以內(nèi);UDP端口通信正常,主控系統(tǒng)使用UDP連接向主機發(fā) 送10MByte字節(jié)有效數(shù)據(jù),總共耗時0. 967486秒,平均通信速度達(dá)到10. 336MByte/s。同 時,當(dāng)主機發(fā)送UDP報文到主控系統(tǒng)未開啟的UDP端口時,主控系統(tǒng)能夠正?;貞?yīng)端口不可 達(dá)的ICMP回應(yīng)報文;TCP通信正常,DSP上的lwIP協(xié)議棧能夠及時響應(yīng)主機的TCP連接請 求,主控系統(tǒng)主動發(fā)送的TCP數(shù)據(jù)可以被正常封裝到各個TCP報文段中,并進入TCP發(fā)送隊 列,隨后通過調(diào)用以太網(wǎng)控制器驅(qū)動被發(fā)送到網(wǎng)絡(luò)上。TCP定位于可靠的有連接的字節(jié)流服 務(wù),通信中任一環(huán)節(jié)出錯,都能導(dǎo)致TCP通信的中斷或連接的丟失。主控系統(tǒng)能夠?qū)崿F(xiàn)通過 TCP連接通道持續(xù)上傳大批量數(shù)據(jù)到主機,TCP通信最大平均速度達(dá)到9. 375MByte/s,峰值 速度達(dá)到9. 875MByte/s,可以滿足主控系統(tǒng)對上傳速度的要求。 通常TCP/IP協(xié)議的應(yīng)用層軟件接口是socket API, lwIP為協(xié)議棧提供了 2種應(yīng)用 軟件接口 :底層的raw API和更高層的sequential API。 Sequential API是類BSD socket 的應(yīng)用層軟件接口 ,它的執(zhí)行是基于傳統(tǒng)socket的打開-讀取_寫入_關(guān)閉的機制,具有 簡單易用的特點。然而,這種類型的API要求協(xié)議棧代碼和應(yīng)用軟件分屬于不同的線程,即 它必須在具有操作系統(tǒng)的系統(tǒng)上運行,因此,主控系統(tǒng)不能采用這種軟件接口。
底層的raw API是基于事件驅(qū)動的,它通過由事件去主動執(zhí)行回調(diào)函數(shù)(callback function)來實現(xiàn)協(xié)議棧與應(yīng)用層的軟件接口,協(xié)議棧代碼和應(yīng)用軟件屬于同一個線程。因 此,raw API使得應(yīng)用程序與協(xié)議棧結(jié)合更緊密,從而使得它比sequential API運行速度更 快,占用內(nèi)存更少,更適合小型嵌入式系統(tǒng)1。然而,由于raw API比sequential API抽象 化層次低,因此應(yīng)用程序的開發(fā)難度將加大。根據(jù)主控系統(tǒng)的實際配置,我們選用raw API 作為協(xié)議棧的應(yīng)用層軟件接口。 DSP主控系統(tǒng),使用TCP進行數(shù)據(jù)通信,應(yīng)用層數(shù)據(jù)輸入和輸出過程包括應(yīng)用層的 初始化,應(yīng)用層的初始化包括設(shè)置主控系統(tǒng)為TCP服務(wù)器,在3個TCP端口上進行監(jiān)聽,等 待后臺處理機的TCP連接請求。3個監(jiān)聽端口分別對應(yīng)實時數(shù)據(jù)通道、錄波文件通道和配置 通道。每個通道的初始化過程都是相同的。圖6為應(yīng)用層的TCP初始化流程圖。
在lwIP中,每個TCP連接都需要一個TCP_PCB數(shù)據(jù)結(jié)構(gòu)體來維護它的所有運行狀 態(tài),在連接斷開時,該結(jié)構(gòu)體才可以被釋放。由于系統(tǒng)使用raw API,應(yīng)用層軟件接口是基于 事件驅(qū)動的,因此,在TCP服務(wù)端口監(jiān)聽之前需要設(shè)置連接到來時的回調(diào)函數(shù),這一步僅需 調(diào)用lwIP的tcp—acc印t配置函數(shù)即可。在后面的應(yīng)用層軟件中仍會遇到類似的需要設(shè)置 回調(diào)函數(shù)的場合。 每個TCP_PCB上都會綁定多個回調(diào)函數(shù),例如,上一節(jié)中的請求連接的回調(diào)函數(shù)。 lwIP中的回調(diào)函數(shù)是由用戶定義,并在初始化時注冊到TCP_PCB結(jié)構(gòu)體中的。當(dāng)TCP報文 段經(jīng)過協(xié)議棧的分用,被傳遞到TCP傳輸層,則協(xié)議棧會根據(jù)該報文對應(yīng)的端口號及其特 定的屬性而調(diào)用預(yù)先注冊過的回調(diào)函數(shù),該函數(shù)將針對屬性執(zhí)行相應(yīng)的操作。通常,每個回 調(diào)函數(shù)是用來專門響應(yīng)一個事件的發(fā)生,進而執(zhí)行用戶層的程序,因此,它已經(jīng)屬于網(wǎng)絡(luò)應(yīng) 用軟件范疇。 例如,當(dāng)有主機連接主控系統(tǒng)監(jiān)聽的TCP服務(wù)端口后,協(xié)議棧的TCP層會收到TCP 連接請求,并主動調(diào)用上一節(jié)設(shè)置的連接請求回調(diào)函數(shù),該函數(shù)將為即將建立的TCP連接 作好準(zhǔn)備,隨后協(xié)議棧即回應(yīng)發(fā)起請求的主機并建立真正的TCP連接。主控系統(tǒng)中定義的 連接請求回調(diào)函數(shù)包括如下內(nèi)容
(1)初始化與該TCP通道對應(yīng)的P0RTINF0結(jié)構(gòu)體中各成員變量值; (2)設(shè)置該TCP連接的多個回調(diào)函數(shù),包括收到新的用戶數(shù)據(jù),數(shù)據(jù)被接收端收
到,連接發(fā)生異常等。 建立TCP連接后,TCP數(shù)據(jù)通道也就建立了 。 一旦該連接有任何事件發(fā)生,協(xié)議棧將自動調(diào)用預(yù)先注冊的回調(diào)函數(shù)予以響應(yīng)。例如,若遠(yuǎn)端發(fā)送用戶數(shù)據(jù)到主控系統(tǒng),協(xié)議棧會調(diào)用用戶定義的"收到新的用戶數(shù)據(jù)"回調(diào)函數(shù),在該函數(shù)中完成用戶數(shù)據(jù)的接收。
由應(yīng)用層對事件的處理方式來看,在宏觀上,主機系統(tǒng)在3個TCP端口上同時監(jiān)聽連接請求,并能同時處理這3個端口的雙工網(wǎng)絡(luò)通信;而在微觀上,每個接收的TCP報文段是被串行處理的,只是因為它們對應(yīng)的服務(wù)端口號不同而被協(xié)議棧區(qū)分為從屬于不同的TCP連接,隨后再交由與該連接對應(yīng)的回調(diào)函數(shù)來處理。因此,在主控系統(tǒng)不使用操作系統(tǒng)的情況下,多端口的TCP連接是可行的。
應(yīng)用層數(shù)據(jù)的輸入過程為 圖7為本發(fā)明中應(yīng)用層數(shù)據(jù)輸入的處理流程圖。遠(yuǎn)端主機通過TCP通道發(fā)送用戶數(shù)據(jù)到主控系統(tǒng)后,經(jīng)過協(xié)議棧的分用,存儲用戶數(shù)據(jù)的緩沖區(qū)指針被作為參數(shù),傳遞給"收到新的用戶數(shù)據(jù)"回調(diào)函數(shù)。 按照lwIP的實現(xiàn)機制,若緩沖區(qū)指針為空,則表明遠(yuǎn)端發(fā)送了關(guān)閉TCP連接的請
求,主控系統(tǒng)也將執(zhí)行相應(yīng)的TCP關(guān)閉流程。否則,系統(tǒng)調(diào)用tCp_reCVed()函數(shù)通知協(xié)議
棧已成功接收該用戶數(shù)據(jù),并將數(shù)據(jù)送到上層由規(guī)約處理模塊接收它們。 調(diào)用tCp_reCVed()函數(shù)是必須的,它的作用是擴大該TCP連接的接收緩沖區(qū),即
將TCP滑動窗口右邊沿向右移動,使得遠(yuǎn)端能發(fā)送更多的數(shù)據(jù)過來。該函數(shù)缺失的后果是,
滑動窗口被關(guān)閉,遠(yuǎn)端將誤以為主控系統(tǒng)接收緩沖區(qū)滿而不再發(fā)送新的數(shù)據(jù)。 規(guī)約處理模塊是比應(yīng)用層更高一層的數(shù)據(jù)處理單元,它將依照通信規(guī)約對接收數(shù)
據(jù)進行解釋,并最終完成相應(yīng)的控制功能。 應(yīng)用層數(shù)據(jù)的輸出過程為 圖8應(yīng)用層數(shù)據(jù)輸出流程圖。在實現(xiàn)應(yīng)用層數(shù)據(jù)的輸出之前,需要先配置對應(yīng)該TCP通道的PORTINFO結(jié)構(gòu)體中的DATASEND成員,在其中填寫輸出數(shù)據(jù)的緩沖區(qū)指針,發(fā)送數(shù)據(jù)長度等,然后將它作為參數(shù)傳遞給應(yīng)用層輸出函數(shù)。應(yīng)用層輸出函數(shù)完成實際的數(shù)據(jù)輸出功能,它的流程如圖4. 19所示。其中,len_left是待發(fā)送的數(shù)據(jù)長度,tcp_SndbUf是當(dāng)前TCP發(fā)送緩沖區(qū)的可用大小。
應(yīng)用層數(shù)據(jù)的輸出分兩個階段 (1)數(shù)據(jù)被寫入lwIP的TCP發(fā)送緩沖區(qū),封裝進多個TCP報文段;
(2) lwIP發(fā)送TCP緩沖區(qū)中的報文段到網(wǎng)絡(luò)中。 在用戶數(shù)據(jù)寫入之前,TCP當(dāng)前發(fā)送緩沖區(qū)的可用大小是不確定的。通常,緩沖區(qū)中會包含所有未被遠(yuǎn)端主機確認(rèn)的已發(fā)送的報文段,這會導(dǎo)致緩沖區(qū)可用大小變小。因此,需要先確定它的可用大小,然后決定能把多少數(shù)據(jù)寫入其中。 將用戶數(shù)據(jù)寫入發(fā)送緩沖區(qū)是通過調(diào)用lwIP的tcp_Write ()函數(shù)實現(xiàn)的,它將數(shù)據(jù)封裝進多個TCP報文段中,等待后續(xù)的發(fā)送。 最終的數(shù)據(jù)輸出是通過調(diào)用tCp_0Utput()函數(shù)實現(xiàn)的。它盡可能地將發(fā)送緩沖區(qū)中的報文段發(fā)送出去,發(fā)送量由接收窗口和擁塞窗口決定,即在某些情況下,發(fā)送緩沖區(qū)中仍然會滯留一部分尚未被發(fā)送的報文段,有可能是對方緩沖區(qū)已滿,或是當(dāng)前網(wǎng)絡(luò)擁堵,協(xié)議棧將根據(jù)特定的算法自動減少發(fā)送報文的數(shù)量。 在進行寫入緩沖區(qū)和發(fā)送報文段的操作時,以太網(wǎng)控制器的中斷是暫時禁用的。該操作是用來保證在協(xié)議棧代碼運行期間,接收報文中斷不會被DSP響應(yīng)。由于系統(tǒng)使用了 DMA方式傳輸網(wǎng)絡(luò)數(shù)據(jù)到以太網(wǎng)控制器,因此,在發(fā)送報文段的大部分時間里,DMA總是在工作中。此時,若DSP響應(yīng)接收報文中斷,則當(dāng)前的網(wǎng)絡(luò)數(shù)據(jù)傳輸將被打斷,DMA操作會失敗。同時,禁用以太網(wǎng)控制器的中斷也是為了保護協(xié)議棧臨界區(qū)的執(zhí)行,它是有必要的。禁用中斷的缺點是,它將導(dǎo)致接收報文的積累。延遲其被DSP讀取的時間。然而,考慮到主控系統(tǒng)在絕大多數(shù)情況下是數(shù)據(jù)發(fā)送者,接收數(shù)據(jù)量很小,同時,以太網(wǎng)控制器中的循環(huán)緩沖區(qū)也能夠暫存足夠多的接收報文,因此,禁用中斷對系統(tǒng)穩(wěn)定性的影響不大。
網(wǎng)絡(luò)通信的效率與多種因素有關(guān),為了提高網(wǎng)絡(luò)通信速度,本文作了如下的工作 (1)調(diào)整DSP訪問網(wǎng)絡(luò)控制器的時序,使得DSP對其進行讀寫操作的周期逼近它能接受的最小值。由于在網(wǎng)絡(luò)通信期間,DSP會非常頻繁地訪問以太網(wǎng)控制器,因此,適當(dāng)減小訪問周期即可獲取更高的數(shù)據(jù)流量。由控制器的技術(shù)文檔可知,它的最短訪問周期是160ns,則在DSP的EMIF控制寄存器中可以相應(yīng)設(shè)置存儲器訪問時序,以剛好滿足該時序要求為宜。 (2)使用匯編語言重寫通信過程中頻繁調(diào)用的關(guān)鍵函數(shù)。網(wǎng)絡(luò)通信過程中被頻繁調(diào)用的函數(shù)通常包括以太網(wǎng)控制器驅(qū)動中的底層數(shù)據(jù)讀寫函數(shù)和傳輸層中的校驗和計算函數(shù),它們都需要對報文中的每一個字節(jié)進行訪問,時間耗費巨大。通常,匯編語言實現(xiàn)的函數(shù)效率更高,因此,本文分別完成了這兩類函數(shù)的匯編語言實現(xiàn)。試驗表明,在完成某一次數(shù)據(jù)發(fā)送任務(wù)的測試中,若這兩類函數(shù)仍使用原有的C語言實現(xiàn),則執(zhí)行一次該任務(wù)將分別在底層數(shù)據(jù)發(fā)送函數(shù)和校驗和計算函數(shù)上花費29643和13936個時鐘周期;若用它們的匯編語言實現(xiàn)代替,則同樣的任務(wù),這兩個函數(shù)分別僅花費了 19855和836個時鐘周期,時間被大大節(jié)省下來了。 (3)在底層網(wǎng)絡(luò)數(shù)據(jù)輸出時使用DMA操作完成數(shù)據(jù)傳輸。使用DMA操作明顯地增大了網(wǎng)絡(luò)數(shù)據(jù)吞吐量,試驗證明,當(dāng)不使用DMA操作完成網(wǎng)絡(luò)數(shù)據(jù)輸出時,TCP平均通信速率在40 50Mbps之間, 一旦換用DMA傳輸方式,則TCP的平均通信速率能達(dá)到72 76Mbps,速度有了大幅度地提升。DMA能大大提高網(wǎng)絡(luò)通信效率的原因在于它是與DSP并行操作的,此時,對以太網(wǎng)控制器的訪問完全由DMA控制器來完成,DSP可以有更多的時間去執(zhí)行協(xié)議棧代碼,因而數(shù)據(jù)處理速度也相應(yīng)提高了 。 (4)調(diào)整最大報文長度(MSS)和協(xié)議棧發(fā)送緩沖區(qū)大小。前文已提到,MSS設(shè)為1460可以最大化每個報文的負(fù)載數(shù)據(jù),因此,同樣多的數(shù)據(jù),封裝后得到的報文數(shù)目就少了,協(xié)議棧處理報文的開銷也相應(yīng)地減小。發(fā)送緩沖區(qū)是協(xié)議棧內(nèi)部的參數(shù),應(yīng)用層將待發(fā)送的用戶數(shù)據(jù)送入TCP緩沖區(qū)中時,協(xié)議棧都會檢查發(fā)送緩沖區(qū)是否足夠容納這些數(shù)據(jù),若不能,則只能將一小部分剛好能存滿緩沖區(qū)的用戶數(shù)據(jù)寫入其中,其余的則需要應(yīng)用程序在下次繼續(xù)嘗試寫入。顯而易見,若發(fā)送緩沖區(qū)過小,則每次應(yīng)用程序只能寫一小部分?jǐn)?shù)據(jù)到緩沖區(qū),發(fā)送大批量的數(shù)據(jù)將造成時間都耗費在等待緩沖區(qū)中數(shù)據(jù)被發(fā)送和不斷嘗試寫入的過程中,網(wǎng)絡(luò)通信效率會很低。因此,將發(fā)送緩沖區(qū)設(shè)置得足夠大,可以明顯提高通信速度。試驗表明,若主控系統(tǒng)循環(huán)發(fā)送21K數(shù)據(jù)到主機端,則當(dāng)發(fā)送緩沖區(qū)大小僅為8760時,TCP平均通信速率在30Mbps 40Mbps ;而當(dāng)其被設(shè)為29200時,由于應(yīng)用程序能一次把所有數(shù)據(jù)都寫入發(fā)送緩沖區(qū)中,TCP平均通信速率達(dá)到了 72Mbps。 (5)優(yōu)化lwIP中的部分代碼。在系統(tǒng)調(diào)試階段,本文使用DSP的profiler工具發(fā)現(xiàn)lwIP的緩沖管理模塊中有一個斷言語句極其嚴(yán)重地影響了協(xié)議棧的性能,該斷言調(diào)用了名為sanity()的函數(shù),其花費DSP的指令周期數(shù)幾倍于通信所需。由lwIP的最新版本可知,該函數(shù)可以被人為屏蔽,不會對協(xié)議棧有本質(zhì)的影響。 (6)設(shè)置DSP軟件的編譯器優(yōu)化選項,使用軟件的Release版本。編譯器將自動對軟件的變量和函數(shù)進行優(yōu)化,能在一定程度上提升通信的效率。 通過嵌入式TCP/IP協(xié)議棧的移植,以太網(wǎng)通信的通道已經(jīng)完好地建立。此時,主控系統(tǒng)與后臺處理機之間的網(wǎng)絡(luò)通信性能還將和以下幾個方面有關(guān) (1) TCP擁塞窗口 。 TCP具有流量控制功能,當(dāng)網(wǎng)絡(luò)擁堵發(fā)生時,協(xié)議棧將自動降低TCP傳輸速率,同時它將根據(jù)擁塞避免等算法動態(tài)調(diào)整發(fā)送數(shù)據(jù)量,避免加重網(wǎng)絡(luò)負(fù)擔(dān)。因此,網(wǎng)絡(luò)阻塞時的通信速率下降是不可避免的。 (2)后臺處理機的接收窗口,即它的接收緩沖區(qū)。主控系統(tǒng)發(fā)送的TCP數(shù)據(jù)都會存入后臺處理機的接收緩沖區(qū),同時,主控系統(tǒng)端將會確認(rèn)接收端的緩沖區(qū)不會被過多的數(shù)據(jù)填滿而溢出,即它將根據(jù)接收緩沖區(qū)大小調(diào)整發(fā)送數(shù)據(jù)量。若接收緩沖中的數(shù)據(jù)不能被應(yīng)用層及時接收并處理,則接收端將向發(fā)送端通報一個越來越小的接收窗口 ,直至窗口關(guān)閉,不允許主控系統(tǒng)繼續(xù)發(fā)送。因此,后臺處理機必須開辟足夠大的接收緩沖區(qū),以使得主控系統(tǒng)可以滿負(fù)荷地執(zhí)行數(shù)據(jù)發(fā)送任務(wù)。 (3)后臺處理機端的延遲的ACK確認(rèn)。由于后臺處理機基本上都處于接收數(shù)據(jù)的角色,因此,它可以延遲ACK確認(rèn)報文的發(fā)送,從而使得一次大批量數(shù)據(jù)的傳輸僅需要少量的ACK確認(rèn)報文返回給主控系統(tǒng),網(wǎng)絡(luò)負(fù)擔(dān)相應(yīng)地減少了,網(wǎng)絡(luò)帶寬可以被更充分地利用起來。對于10KHZ采樣率,16bit AD轉(zhuǎn)換,96路模擬量,256路開入量的錄波系統(tǒng)數(shù)據(jù)傳輸速度要求為(96 X 16+256) *10000 = 17, 920, 000bps = 17. 92Mbps
實測速度達(dá)72Mbps,完全滿足錄波系統(tǒng)數(shù)據(jù)傳輸速度要求。
權(quán)利要求
一種故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,將網(wǎng)絡(luò)控制器與以太網(wǎng)連接,DSP與網(wǎng)絡(luò)控制器相通信,DSP通過總線與采集卡連接,將采樣數(shù)據(jù)存儲于2片F(xiàn)LASH,并與后臺管理機建立以太網(wǎng)通信,其特征在于所述網(wǎng)絡(luò)控制器為AX88796,所述DSP上設(shè)置有TCP/IP協(xié)議棧,用于實現(xiàn)DSP系統(tǒng)與網(wǎng)絡(luò)上主機的通信,所述TCP/IP協(xié)議棧包括1wIP,通信過程包括以下步驟1)在接收報文中斷服務(wù)程序后,以太網(wǎng)驅(qū)動程序?qū)⒔邮請笪拇鎯υ赑bufs發(fā)送報文緩沖鏈緩沖中,同時存儲報文的各個鏈緩沖指針被依次存入一自定義的接收報文循環(huán)隊列,而不直接傳入?yún)f(xié)議棧,當(dāng)報文收取完畢,中斷服務(wù)程序退出;2)將循環(huán)隊列中的報文送入1wIP協(xié)議棧進行分用;3)應(yīng)用層數(shù)據(jù)的輸入將經(jīng)過協(xié)議棧分用的報文傳送到上層由規(guī)約處理的模塊并接收;4)應(yīng)用層數(shù)據(jù)的輸出將用戶報文寫入?yún)f(xié)議棧傳輸層的緩沖區(qū);5)將寫入?yún)f(xié)議棧傳輸層的緩沖區(qū)的報文封裝成網(wǎng)絡(luò)報文;6)將網(wǎng)絡(luò)報文寫入以太網(wǎng)控制器,再由以太網(wǎng)控制器將數(shù)據(jù)幀轉(zhuǎn)換成差分信號送入網(wǎng)絡(luò)。
2. 根據(jù)權(quán)利要求1所述的故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,其特征在于 在所述步驟l)中,所述以太網(wǎng)控制器的報文中斷服務(wù)程序由DSP在控制器中斷使能的條件 下執(zhí)行,實現(xiàn)讀取控制器接收到的報文數(shù)據(jù)、處理接收緩沖區(qū)溢出及處理接收數(shù)據(jù)包錯誤。
3. 根據(jù)權(quán)利要求1所述的故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,其特征在于 在所述步驟2)中,在報文分用的過程中,協(xié)議棧立即發(fā)送一個回應(yīng)報文,為了避免此時被 以太網(wǎng)控制器中斷打斷發(fā)送流程,暫時禁用控制器中斷。
4. 根據(jù)權(quán)利要求1或2或3所述的故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,其特 征在于在所述步驟3)和4)中,協(xié)議棧的應(yīng)用層軟件接口為raw API應(yīng)用接口函數(shù),主控 系統(tǒng)使用TCP進行數(shù)據(jù)通信,應(yīng)用層數(shù)據(jù)輸入和輸出過程包括應(yīng)用層的初始化,應(yīng)用層的 初始化包括以下步驟,a) 設(shè)置主控系統(tǒng)為TCP服務(wù)器;b) 設(shè)置網(wǎng)絡(luò)通信回調(diào)函數(shù),即調(diào)用lwIP的tcp—acc印t配置函數(shù);c) 在3個TCP端口上進行監(jiān)聽,等待后臺處理機的TCP連接請求,所述3個監(jiān)聽端口分 別為實時數(shù)據(jù)通道、錄波文件通道和配置通道。
5. 根據(jù)權(quán)利要求4所述的故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,其特征在于 所述連接請求回調(diào)函數(shù)包括如下內(nèi)容(1) 初始化與該TCP通道對應(yīng)的P0RTINF0端口信息結(jié)構(gòu)體中各成員變量值;(2) 設(shè)置該TCP連接的多個回調(diào)函數(shù),包括收到新的用戶數(shù)據(jù),數(shù)據(jù)被接收端收到,連 接發(fā)生異常。
6. 根據(jù)權(quán)利要求1或2或3所述的故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,其特 征在于在所述步驟4)中,應(yīng)用層數(shù)據(jù)的輸出包括以下步驟a) 數(shù)據(jù)被寫入lwIP的TCP發(fā)送緩沖區(qū),封裝進多個TCP報文段;b) lwIP發(fā)送TCP緩沖區(qū)中的報文段到網(wǎng)絡(luò)中。
7. 根據(jù)權(quán)利要求6所述的故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,其特征在于將用戶數(shù)據(jù)寫入發(fā)送緩沖區(qū)通過調(diào)用lwIP的tcp—write ()函數(shù)實現(xiàn),將數(shù)據(jù)封裝進多個TCP報文段中,等待后續(xù)的發(fā)送。
8.根據(jù)權(quán)利要求6所述的故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,其特征在于在所述步驟b)中,最終的數(shù)據(jù)輸出通過調(diào)用tCp_0utput()函數(shù)實現(xiàn)。
全文摘要
本發(fā)明公開了一種故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法,包括以下步驟1)在接收報文中斷服務(wù)程序后,將接收報文存儲在Pbufs鏈緩沖中,同時存儲報文的各個鏈緩沖指針被依次存入一自定義的接收報文循環(huán)隊列,而不直接傳入?yún)f(xié)議棧,當(dāng)報文收取完畢,中斷服務(wù)程序即退出;2)將循環(huán)隊列中的報文送入1wIP協(xié)議棧進行分用;3)應(yīng)用層數(shù)據(jù)的輸入;4)應(yīng)用層數(shù)據(jù)的輸出;5)將寫入?yún)f(xié)議棧傳輸層的緩沖區(qū)的報文封裝成網(wǎng)絡(luò)報文;6)將網(wǎng)絡(luò)報文寫入以太網(wǎng)控制器,再由以太網(wǎng)控制器將數(shù)據(jù)幀轉(zhuǎn)換成差分信號送入網(wǎng)絡(luò)。本發(fā)明的故障錄波系統(tǒng)中基于DSP的以太網(wǎng)通信方法可實現(xiàn)故障錄波系統(tǒng)的數(shù)據(jù)信息通過以太網(wǎng)進行高速通信。
文檔編號H04L12/28GK101707599SQ20091021255
公開日2010年5月12日 申請日期2009年11月12日 優(yōu)先權(quán)日2009年11月12日
發(fā)明者戴超金 申請人:國電南京自動化股份有限公司