摘要:隨著測控技術與網絡技術日益緊密的結合,測控系統接入互聯網已經成為大勢所趨。本文闡述在一種異構網絡互聯——CAN總線與以太網互聯系統設計方案中嵌入式TCP/IP協議棧的設計與實現。從而實現了將基于TCP/IP協議的計算機網絡設備與基于CAN總線協議的底層現場網絡連通。
引言
Internet現已成為社會重要的信息流通渠道。如果嵌入式系統能夠連接到Internet上面,則可以方便、低廉地將信息傳送到幾乎世界上的任何一個地方。可以預言,嵌入式設備與Internet的結合代表著嵌入式系統和網絡技術的真正未來。隨著IPv6的應用,設備都可能獲得一個全球唯一的IP地址,通過IP地址和互聯網相連成為一個網絡設備。但是傳統的TCP/IP協議在實現實時性方面做得不夠好,它把大量的精力花在保證數據傳送的可靠性以及數據流量的控制上。而在實時性要求比較高的嵌入式領域中,傳統的TCP/IP不能滿足其實時要求。另外,傳統TCP/IP的實現過于復雜,需占用大量系統資源,而嵌入式應用的系統資源往往都很有限。因此,需要把傳統TCP/IP在不違背協議標準的前提下加以改進實現,使其實現性得到提高,占用的存儲空間盡可能少,以滿足嵌入式應用的要求。
在大型企業自動化系統中,上層企業管理層和生產監控層一般采用的都是以太網和PC機,而在下層車間現場都是采用現場總線和單片機測控設備。上下兩層的溝通,通常采用工業控制機加以太網卡,再加上PC機插槽上的接口卡和并行打印口EPP接口卡來實現。這種連接方式成本高,開發周期長。針對這些情況,本文提出了一種單獨的嵌入式CAN-以太網網關互連系統的設計方案,成功地實現以太網和現有的CAN總線網的直接數據傳輸。
1 異構網絡互聯系統結構設計
CAN總線是一個設備互連總線型控制網絡。在CAN總線上可以掛接多達110個設備節點,各設備間可以自主相互通信,實現復雜網絡控制系統。但設備信息層無法直接到達信息管理層,要想設備信息進入信息管理層就要通過一種數據網關。
這里設計了一個SX52網關,用于CAN總線與以太網的互連。圖1所示的系統總體結構分為三部分:現場測控網絡(CAN網絡)、嵌入式透明SX52網關和以太網信息管理終端(如監控平臺和網絡數據庫等)。以太網信息管理終端與CAN總線上的CAN節點通過Ethernet、SX52網關、CAN總線相互通信,其中SX52網關起核心異構網絡的互連作用。
協議轉換是異構網絡互連的技術關鍵和難點。協議轉換一般遙相呼應采用分層轉換的方法,自低向上逐層進行。目前互連大都是在網絡層或網絡層展開的,因而必須對互連層以下各層協議逐層向上轉換。這種轉換方法的依據是協議分層的基本原理,即低層支持高層,高層調用低層,低層斷開連接后,高層連接也隨之斷開,但高層斷開連接卻不會影響低層。從網絡的分層結構上來看我們設計的互連系統具有如圖2所示的分層結構。以太網上運行TCP/IP協議,它具有應用層、傳輸層、網絡層以太網數據鏈路層和物理層;CAN總線具有應用層、數據鏈路層和物理層,其中應用層由用戶自己定義,數據鏈路層和物理層由CAN協議所定義;SX52數據網關具有物理層、數據鏈路層和應用層,其應用層也就是Ethernet與CAN的信息數據交換層,SX52微控制器在此層相互解釋并轉發這兩種不同協議的數據。
在本設計中,SX52網關被設計成了一個透明數據網關。也就是在以太網應用層構建和解析完整的CAN協議數據包。CAN協議數據包作為TCP/IP網絡的應用層的數據進行傳輸。對通信數據的具體實際意義不做任何解釋。
透明式網關由通信處理器、CAN總線控制器和以太網控制器三個部分組成。其中SX52單片機為核心處理器,實現CAN控制網絡與以太網之間的協議轉換。以太網信息管理 層的控制指令發送到嵌入式透明SX52網關,經過它將TCP/IP協議包數據轉換為CAN協議形式發送至CAN控制網絡中的指定設備節點,完成信息管理層對現場設備層的控制。同樣地,當CAN網絡上的設備數據(如定時采樣數據或報警信息)要傳輸到信息管理層時,可將數據發送到嵌入式透明SX52網關,再通過網關協議轉換程序將CAN協議數據封裝成TCP/IP協議的以太網數據幀發送至以太網上的監控計算機。
2 SX52中TCP/IP協議棧的設計
按照層次結構思想,對計算機網絡模塊化的研究結果是,形成了一組從上到下單向依賴關系的協議棧(protocol stack),也叫協議族。在標準的TCP/IP協議族中有很多協議。這里SX52中TCP/IP協議棧層次結構如圖3所示。
2.1 SX52 ARP協議的設計與實現
地址解析協議ARP(Address Resolution Protocol)可以實現邏輯地址到物理地址的動態映射。它提供了一種使以太網絡節點可以傳輸一個IP數據包到目的地址的映射機制。
在SX52中,ARP協議是通過一個“IP地址對應以太網地址”的單登記實現的。當遠程主機需要知道它的物理地址時,遠程主機會向它發送ARP請求。這時它就會響應這個遠程主機的請求,告訴對方自己的物理地址。當然,當應用層需要傳輸IP數據包時,SX52 ARP協議也可以請求遠程目的物理地址。
要傳輸的Internet數據包在以太網控制器的發送緩沖區中被構建,它使用最近接收到的數據包的目的以太網地址作為發送數據包的目的地址。當然,這可能不是正確的以太網地址,因此,在實際發送數據包之前,ARP協議將檢查發送數據包中的IP地址是否存在于ARP核中。如果發送數據中包中的IP地址在這個核中,在以太網發送緩沖區中的數據包將使用ARP核中的以太網地址更新;如果不在,ARP協議將發送一個ARP請求包,然后等待一個應答。一旦這個ARP應答接收到,這個ARP核將使用剛接收到的目標以太網地址更新,接著,等待發送的數據包也將使用這個以太網地址更新,然后被發送出去。如果發送的ARP請求包沒有應答,導致ARP定時器超時,這時等待發送的數據包將被廢棄,正常的協議棧繼續運行。使用的變量有:ARP核中的IP地址{hostlIP3,hostlIP2,hostlIP1,host1IP0};ARP核中的以太網物理地址{host1Eth0,host1Eth1,host1Eth2,host1Eth3,host1Eth4,host1Eth5};ARP協議的定時器{arpTimerMSB,arpTimerLSB}等。使用涉及的函數有:ARPInit(),ARPCheckCache(),ARPSendResponse(),ARPUpdateEthAddr(),ARPCheckIfIs(),ARPCompare4(),ARPSendStPacket(),ARPSendCommon(),ARPSendRequest()。
2.2 SX52 IP協議的設計與實現
IP是TCP/IP協議族中最為核心的協議。所有的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸。IP提供不可靠、無連接的數據報傳送服務。本設計中的IP協議是針對特殊的應用環境下的合理簡化。CAN總線的控制網絡是一種短幀(每個數據幀為8字節)的實時網絡,所以,IP數據包無須分片(MF=DF=0),同時,設置IP為服務類型為一般類型,其頭長為20字節,壽命TTL設置為64。使用的變量有:目的IP地址{remoteIP3,remoteIP2,remoteIP1,remoteIP0};源IP地址{myIP3,myIP2,myIP1,myIP0};IP校驗和{ipCheckSumMSB,ipCheckSumLSB};IP數據包長度{ipLengthMSB,}ipLengthLSB};上層使用的協議ipProtocol,IP標識{ipIdentMSB,ipIdentLSB}。使用涉及的函數有:TCPIPInit(),CheckIPDatagram(),CheckIPDestAddr(),IPStartPktOut()等。
2.3 SX52 ICMP協議的設計與實現
為了讓互聯網中的路由器報告或提供有關意外情況的信息,在TCP/IP協議系列中加入了一個專門用于發送差錯報文的協議——互聯網控制報文協議ICMP(Internet Control Message Protocol)。ICMP是IP的一部分在每個IP實現中都必須用到它。像其它所有的通信業務一樣,ICMP報文是放在一個IP數據報的數據部分中傳送的。ICMP報文的最終目的不是應用程序或目的機器上的用戶,而是該機上處理它的Internet協議軟件模塊。也就是說:Internet控制報文協議允許路由器向其它路由器或主機發送差錯或控制報文;ICMP在兩臺主機的Internet協議軟件之間提供通信。
每個ICMP報文都以相同的3個字節開始:1個8位整數的報文類型(TYPE)字段用來識別報文,1個8位代碼(CODE)字段提供有關報文類型的進一步信息,1個16位校驗和字段。此外,ICMP報文還總是包括產生問題的數據報首部及其開頭的64位數據。
ICMP使用IP來傳送每一個差錯報文。當路由器有一個ICMP報文要傳遞時,它會創建一個IP數據報并將ICMP報文封裝其中,也就是說,ICMP報文被置于IP數據報的數據區中,然后這一數據報像通常一樣被轉發。即整個數據報被封裝進幀中進行傳遞。
每一個ICMP報文的產生總是對應于一個數據報。路由器將一個ICMP報文將回給產生數據報的主機。在這里,只實現了ICMP的回應請求/應答服務,主要用于PING程序測試通信鏈路的暢通性,即只處理接收的報文類型為0x08的ICMP幀,發送的ICMP報文類型為0x00。它沒有自己專有的變量,涉及的函數也只有ICMPGenCheckSum()和ICMPProcPktIn()。
2.4 SX52 UDP協議的設計與實現
UDP是一個簡單的面向數據報的運輸層協議:進程的每個輸出操作都正好產生一個UDP數據報,并組裝成一份待發送的IP數據報。UDP不提供可靠性,它把應用程序傳給IP層的數據發送出去,但是并不保證它們能到達目的地。由于缺乏可靠性,我們似乎覺得要避免使用UDP,而使用一種可靠的協議,如TCP。但分析發現,UDP在我們的互連設計中有很多的優點:其一,UDP協議傳輸效率高,無須TCP通信前的連接開銷;第二,UDP協議簡單,無須復雜的狀態機傳輸機制,可以很好地避免SX52網關死機復位后由于狀態不一致而無法正常通信,且上層協議又很難發現的危險。因此,可以使用UDP來實現通信(避免TCP連接的開銷),而讓許多需要的特征(如動態超和重傳、擁塞避免、查錯等)放置在應用層設計和實現。使用的變量有:
UDP接收數據報的源端口{udpRxSrcPortMSB,udpRxSrcPortLSB};
UDP接收數據報的目的端口{udpRxDestPortMSB,udpRxDestPortLSB};
UDP接收數據報的長度{udpRxDataLenMSB,udpRxDataLenLSB};
UDP發送數據報的源端口{udpTxSrcPortMSB,udpTxSrcPortLSB};
UDP發送數據報的目的端口{udpTxDestPortMSB,udpTxDestPortLSB};
UDP發送數據報的長度{udpTxDataLenMSB,udpTxDataLenLSB}。
設計的相關函數有:UDPAppInit(),DPGenCheckSum(),UDPStartPktOut(),UDPProcPktIn(),UDPEndPktOut(),UDPAppProcPktIn(),UDPAppProcPktOut()等。
2.5 SX52 TCP協議的設計與實現
傳輸控制協議TCP(Transmission Control Protocol)是傳輸層的重要協議。它提供一個完全可靠的(沒有數據重復或丟失)、面向連接的、全雙工的流傳輸服務。本設計中,對復雜的TCP協議做了合理的簡化:①因為CAN網絡傳輸速度較快,數據量小且10Mbps的以太網傳輸一般不會發生阻塞,以太網上的主機也會有足夠的能力及時處理通信數據,所以可以固定超時與重傳的時間為5s。②RTL8019AS上有兩個1500字節的接收緩沖區,且CAN網絡為控制網,信息量小,所以可以固定接收窗口為1400字節。③因為我們采用一般的TCP服務就可以滿足應用,所以可以忽略緊急指針和選項及填充字段的值。通過上述三點簡化,實際上大大簡化了TCP協議的實現。因為TCP的超時與重傳時間的確定和窗口大小的控制有著較復雜的算法和實現機制。
它的實現變量有:tcpState,{tcpTmpSeq4,tcpTmpSeq3,tcpTmpSeq2,tcpTmpSeq1},{tcpTmpAck4,tcpTmpAck3,tcpTmpAck2,tcpTmpAck1},{tcpUnAckMSB,tcpUnAckLSB},tcpRxFlags,{tcpCheckSumMSB,tcpCheckSumLSB},{tcpLengthMSB,tcpLengthLSB},{tcpTmpMSB,TcpTmpLSB},{tcbLocalPortMSB,tcbLocalPortLSB},{tcbRemotePortMSB,tcbRemotePortLSB},{tcbSndUna4,tcbSndUna3,tcbSndUna2,tcbSndUnal},{tcbRcvNxt4,tcbRcvNxt3,tcbRcvNxt2,tcbRcvNxt1},tcbOffset,tcbFlags,{tcbSendWinMSB,tcbSendWinLSB},{tcpTimerMSB,tcpTimerLSB}等。
相關函數有:TCPIPInit(),TCPRxHeader(),TCPProcPktIn(),TCPTransmit(),TCPReTransmit(),TCPAppPassiveOpen(),TCPAppActiveOpen(),CPAppClose(),TCPAddRcvNxt(),TCPIncRcvNxt(),TCPIncSndUna(),TCPCopySeqToNxt(),TCPAckUpdate(),TCPUpdateSeq(),TCPChkSeq(),TCPRestorePrev(),TCPCmpNxtSeq(),TCPSendEmptyPkt(),TCPSendReset(),TCPSendSyn(),TCPSendISN(),TCPSendSynAck()TCPSendAck(),TCPSendFin(),TCPCheckSuminit(),CPCheckSumAcc(),TCPCheckSumAddHdr(),CPTxByte(),TCPStartPktOut(),TCPAppInit(),TCPAppTxBytes(),TCPAppTxData(),TCPAppTxDone(),TCPAppRxBytes(),TCPAppRxData(),等。
2.6 TCP和IP傳輸層協議的選擇
把TCP/IP協議應用到控制網絡中如何選擇傳輸層協議類型很關鍵。如果要與現有的應用程序通信,必須使用與其相同的協議類型。在實際應用時,從可靠性來說,TCP提供了可靠的數據連接,UDP和直接訪問IP的一些協議是不可靠的,數據報可能會丟失、損壞或重復;從性能上講,UDP的性能最快,可靠性、流量控制重組包和連接維護等附加開銷降低了TCP的性能。對于速度比較慢的系統來說,如溫度、濕度傳感器,選擇TCP或UDP都無所謂,對于不太重要的傳感器選用UDP就可以了;對于可靠性要求較高的傳感器,應該選用TCP協議;對于實時性要求高的網絡設備,如網絡會議系統、IP音響、實時播放的電視等設備,數據傳輸率較高,應該選用UDP協議;有些有嚴格要求的同步系統應采用UDP;數據監控系統傳輸的可靠性要求較高,應采用TCP;Web和Email也應采用了TCP。總之,要根據實際情況來確定選用何種協議。
結語
針對本嵌入式異構網絡互連方案,對TCP/IP協議棧簡化設計為SX52型CAN總線與以太網互連方案,達到了測控通信系統高實時性、可靠性和嵌入式設計的要求。該互連方案很好地保證及管理監控層和生產測控層之間的連接,方便了上下層信息交換,能滿足工廠、變電站等工業場合的應用要求。
相關推薦
嵌入式TCP/IP協議單片機技術在網絡通信中的應用
![](https://skin.elecfans.com/images/2021-soft/eye.png)
TCP/IP網絡協議圖
TCP/IP網絡協議簡介
協議棧介紹--TCP/IP
在uIP協議棧實現基于AJAX和CGI的動態Web服務器
嵌入式SIP協議棧怎么設計?
嵌入式linux TCP/IP協議棧概述
嵌入式以太網控制器WIZNET相關資料推薦
嵌入式的系統特點
嵌入式系統與遠程監控主機的網絡通信怎么實現?
EasyWeb:微小的TCP/IP協議棧和Web服務器
LwIP協議棧開發嵌入式網絡有哪幾種方法
LwIP協議棧開發嵌入式網絡的三種方法有何關系
SIP協議在嵌入式環境下有什么應用?
ST2014官方tcp/ip協議培訓視頻高清全集
【STM32H7】第2章 嵌入式網絡協議棧基礎知識 精選資料推薦
一種uIP TCP/IP協議棧在51系列單片機上的實現
串口wifi,內置tcp/ip協議棧,單片機控制
為什么會有TCP/IP協議
主流的小型嵌入式網絡協議棧
介紹在ARM系列MCU中使用精簡的TCP/IP協議的幾種方式
介紹嵌入式網絡協議棧基礎知識
使用IPort-1模塊怎么給嵌入式設備增加網絡接口?
剖析:WIZnet以太網核心技術–全硬件TCP/IP協議棧
單片機嵌入式Internet技術的Web應用實現
單片機輕松實現以太網應用 ,全硬件TCP/IP 協議W5500模塊資料
基于TCP IP協議棧的嵌入式以太網終端設計
基于TCP/IP的網絡通信應用程序分享
基于TCP/IP的網絡通信應用程序的相關資料分享
基于LPC2368的CANTCP-IP嵌入式網關的設計
基于UDP協議的網絡通信應用程序
基于dsp嵌入式uiptcp_ip協議棧的應用研究
基于μC/OS—II的μC/IP協議棧在ARM系統中的實現
如何去簡化Simplified TCP/IP協議棧?
如何移植小型嵌入式 TCP/IP協議棧uIP0.9進嵌入式網絡型門禁控制系統?
學嵌入式網絡編程少不了的協議:TCP/IP
怎么實現TCP/IP協議棧在單片機上的移植?
怎么實現嵌入式TCP/IP協議棧的設計?
怎么實現嵌入式TCP/IP的優化設計?
怎么實現嵌入式WEB傳感器的網絡化接口設計?
怎么實現基于8051嵌入式系統的GPRS終端的設計?
怎么用微芯片5.42 TCP/IP協議棧在PIC24上實現DNP?
怎樣去設計嵌入式LWIP網絡客戶端
第1章 當前主流的小型嵌入式網絡協議棧
第2章 嵌入式網絡協議棧基礎知識
請問嵌入式系統實現以太網,TCP/IP協議棧是都是移植的嗎?
采用IP核實現PCI總線接口設計
采用IP核實現PCI總線接口設計
采用ARM實現嵌入式TCP/IP網絡系統設計
集成硬件TCP/IP協議棧網口芯片
集成硬件TCP/IP協議棧網口芯片
嵌入式系統TCP/IP網絡解決方案
![](https://skin.elecfans.com/images/2021-soft/load.png)
TCP IP協議棧在嵌入式異構網絡互連中的應用
![](https://skin.elecfans.com/images/2021-soft/load.png)
在TMS320VC5402 上實現的嵌入式TCP IP協議棧
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式Internet中TCP協議的設計與實現
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式WEB服務器中TCP/IP協議棧的設計與實現
![](https://skin.elecfans.com/images/2021-soft/load.png)
一種嵌入式TCP/IP協議的設計與實現
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式系統中TCP/IP 協議的精簡與實現
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于嵌入式TCP/IP協議單片機的雜散電流監測系統
![](https://skin.elecfans.com/images/2021-soft/load.png)
嵌入式TCP/IP協議棧在DSP上的實現
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于DSP的嵌入式TCP/IP協議的研究與實現
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A6/52/wKgZomUMPOWAIIBaAAAW7kDtkY0268.jpg)
TCP/IP協議典型的優化原則和方法
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A7/3C/wKgZomUMQzqAMIIUAAANeMDM0j0929.jpg)
評論