北汽福田股份有限公司諸城奧鈴汽車廠 張育紅
在許多工業(yè)設備中,由于考慮的數(shù)據(jù)傳輸速度的問題及其現(xiàn)在以太網(wǎng)的網(wǎng)速越來越高,技術越來越成熟,很多工業(yè)設備已經考慮用以太網(wǎng)通信協(xié)議,從而代替串口通信。在以太網(wǎng)通信中,由于TCP/IP協(xié)議具有可重傳和應答機制,UDP協(xié)議不需要應答。所以TCP/IP協(xié)議的應用更加受人們的青睞。
1、表1是TCP/IP在網(wǎng)絡7層結構中的位置。
表1 TCP/IP在網(wǎng)絡7層結構中的位置
TCP/IP協(xié)議在上面的7層中用到了其中的五層。
1)應用層,可以根據(jù)自己的需要進行設計,不一定是Telnet,F(xiàn)TP,email。在工業(yè)應用中可以是MODBUS協(xié)議或者其他的協(xié)議,根據(jù)需要來決定。應用數(shù)據(jù)在TCP/IP數(shù)據(jù)包中在鏈路上傳輸,通信雙方需要進行數(shù)據(jù)解析和數(shù)據(jù)打包的工作。
2)運輸層,主要為兩臺主機上的應用程序提供端到端的通信。在TCP/IP協(xié)議族中,有兩個互不相同的傳輸協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報協(xié)議)。
TCP為兩臺主機提供高可靠性的數(shù)據(jù)通信。它所做的工作包括把應用程序交給它的數(shù)據(jù)分成合適的小塊交給下面的網(wǎng)絡層,確認接收到的分組,設置發(fā)送最后確認分組的超時時鐘等。由于運輸層提供了高可靠性的端到端的通信,因此應用層可以忽略所有這些細節(jié)。TCP是一個面向連接的協(xié)議。無論哪一方向另一方發(fā)送數(shù)據(jù)之前,都必須先在雙方之間建立一條連接。其他層是保證數(shù)據(jù)傳輸正確的一個通道傳輸。
而另一方面,UDP則為應用層提供一種非常簡單的服務。它只是把稱作數(shù)據(jù)報的分組從一臺主機發(fā)送到另一臺主機,但并不保證該數(shù)據(jù)報能到達另一端。任何必需的可靠性必須由應用層來提供。這兩種運輸層協(xié)議分別在不同的應用程序中有不同的用途。
3)網(wǎng)絡層,有時也稱作互聯(lián)網(wǎng)層,處理分組在網(wǎng)絡中的活動,例如分組的選路。在TCP/IP協(xié)議族中,網(wǎng)絡層協(xié)議包括IP協(xié)議(網(wǎng)際協(xié)議),ICMP協(xié)議(Internet互聯(lián)網(wǎng)控制報文協(xié)議),以及IGMP協(xié)議(Internet組管理協(xié)議)。
ICMP是IP協(xié)議的附屬協(xié)議。IP層用它來與其他主機或路由器交換錯誤報文和其他重要信息。盡管ICMP主要被IP使用,但應用程序也有可能訪問它。我們在通信建立連接后通常會用到ping指令來訪問另一臺主機是否建立連接,ping就是用了ICMP協(xié)議。
ARP(地址解析協(xié)議)和RARP(逆地址解析協(xié)議)是某些網(wǎng)絡接口(如以太網(wǎng)和令牌環(huán)網(wǎng))使用的特殊協(xié)議,用來轉換IP層和網(wǎng)絡接口層使用的地址。通信雙方,客戶端知道服務器端的IP地址,但是不知道對應的物理地址(MAC地址),就發(fā)送一條ARP請求協(xié)議,服務器端看到是自己的IP地址,就發(fā)ARP應答數(shù)據(jù)給客戶端,至此,雙方的IP地址和MAC地址都是互知的。
2、具體到實際應用中TCP/IP協(xié)議在嵌入式系統(tǒng)中如何封裝和分用。
A、數(shù)據(jù)封裝。
圖1的1-5數(shù)據(jù)進行層層封裝最后通過鏈路發(fā)送。下面具體解釋。
圖1
圖2 硬件框圖
1)在一個嵌入式產品中,比如儀表型產品,需要把儀表的測量信息通過TCP/IP協(xié)議送到后臺的控制軟件那里進行匯總,儀表本身測量到一些基本信息,比如電流,電壓等這些就是屬于用戶數(shù)據(jù)。
2)用戶數(shù)據(jù)直接發(fā)送到服務器端,服務器是不知道什么意思的,一堆數(shù)字無法解析。在儀表通信中常用的MODBUS協(xié)議將數(shù)據(jù)進行一次封裝。這樣數(shù)據(jù)發(fā)送到服務器端,服務器根據(jù)MODBUS協(xié)議可以知道是那些具體信息。這就是應用層數(shù)據(jù)的首部信息。
3)應用數(shù)據(jù)準備OK后,當應用程序用TCP傳送數(shù)據(jù),數(shù)據(jù)被送入?yún)f(xié)議棧中,首先到得是傳輸層,TCP協(xié)議會給應用數(shù)據(jù)增加自己的TCP首部。形成TCP段。TCP首部有20個字節(jié)。
4)形成TCP段傳輸?shù)骄W(wǎng)絡層,IP協(xié)議會給數(shù)據(jù)增加IP首部,IP首部也是20個字節(jié)。形成IP段。
5)IP段數(shù)據(jù)傳輸?shù)綌?shù)據(jù)鏈路層,數(shù)據(jù)鏈路層將自己的以太網(wǎng)首尾部信息增加到數(shù)據(jù)上,就完成了數(shù)據(jù)的全部封裝。數(shù)據(jù)發(fā)送到鏈路上進行傳輸。
B、數(shù)據(jù)分用。
當目的主機收到一個以太網(wǎng)數(shù)據(jù)幀時,數(shù)據(jù)就開始從協(xié)議棧中由底向上升,同時去掉各層協(xié)議加上的報文首部。每層協(xié)議都要去檢查報文首部中的協(xié)議標識,以確定接收數(shù)據(jù)的上層協(xié)議。這個過程稱作分用。直到應用層數(shù)提取出來。
圖3
我們現(xiàn)在用TI公司的TMS28335與亞信公司的AX88796B來設計。由于TI的DSP技術比較成熟,運算速度快可以達到150MHz,支持浮點運算,外設比較豐富幾乎包括所有的外設接口。目前很多工控產品用這款芯片。同時由于現(xiàn)在很多工控產品已經傾向于用以太網(wǎng)進行數(shù)據(jù)的快速交換。AX88796B性價比高,支持全雙工,100M流量,完全滿足我們的設計需求。
如硬件框圖圖2。對XZCS0和PWMA6信號線進行分析。
XZCS0作為片選信號。由于AX88796B是映射到TMS28335的某個外設地址(External Memory)的,可以在XZCS0,XZCS6,XZCS7之間任意選擇一個位置來映射。
PWMA6是TMS28335做外部中斷的一個腳。與AX88796B的外部中斷輸出腳相連。網(wǎng)卡芯片接收到外部數(shù)據(jù)后存放在網(wǎng)卡芯片緩沖環(huán)中,會產生一個外部中斷信號。TMS28335接收到這個中斷信號以后就接收數(shù)據(jù),從網(wǎng)卡芯片緩沖環(huán)中將數(shù)據(jù)讀取到TMS28335中,進行TCP/IP協(xié)議處理。AX88796B就是七層結構中的物理層。
uip是專為8位和16位的嵌入式微控制器設計的微型TCP/IP協(xié)議棧,uIP提供了網(wǎng)絡通信所必須的協(xié)議,本身代碼和占用的內存數(shù)都非常少-uIP的源代碼只有幾KB,RAM占用僅幾百字節(jié)??偟膬却嬲加脤⒁蕾嚕悍峙淞硕嗌賯€TCP鏈接數(shù),分配了多少個ARP表項,分配了多大的包緩沖。這些在編譯時候可以設置。每一個正在監(jiān)聽的TCP端口增加額外的2個字節(jié)內存。
1、下面是我們項目的配置
#define UIP_ARPTAB_SIZE 10
(分配了10個ARP表項)
#define UIP_BUFSIZE 297
(一個297字節(jié)大小的包緩沖)
#define UIP_CONNS 10
(10個TCP連接數(shù))
#define UIP_TIME_WAIT_TIMEOUT 60
(定義超時時間為60個時鐘節(jié)拍)
2、軟件處理流程
在硬件設計的時候配置了一個外部中斷IO口,所在如果網(wǎng)卡收到數(shù)據(jù)會觸發(fā)一個中斷,TMS28335通過執(zhí)行interrupt void XINT1_ISR(void)這樣的外部中斷來處理數(shù)據(jù)包。代碼示例??紤]到中斷不可能處理太多東西,要不占用資源太多,影響CPU的正常工作,所以在中斷里面只進行讀網(wǎng)卡芯片數(shù)據(jù)的過程。在這個中斷里面再使能另一個中斷,當讀網(wǎng)卡芯片的中斷退出來后通過中斷優(yōu)先級的分配,進入到PieCtrlRegs.PIEIFR10.bit.INTx1=1所使能的中斷中執(zhí)行TCP/IP的數(shù)據(jù)處理,這個中斷的優(yōu)先級比較低。
在新開的這個低優(yōu)先級的中斷里面進行協(xié)議處理,代碼如下:
另外還有一個定時中斷處理,每隔500毫秒秒調用一次。這個中斷中主要做2件事情。第一是輪訓UIP_CONNS定義的連接,判斷是否有連接超時時間到,如果到就關閉連接,該連接的資源空出來。第二件事情就是每隔10秒鐘將UIP_ARPTAB_SIZE個長度的ARP緩沖表的數(shù)據(jù)清空。然后在正常收到TCP/IP協(xié)議數(shù)據(jù)的時候再進行數(shù)據(jù)更新。
3、UIP下載包各個文件功能描述
Uip.c——是主要的處理TCP/IP協(xié)議的文件。
其中函數(shù)Void uip_process(Uint16 flag)是協(xié)議處理程序的入口處。
Uip_arch.c是IP數(shù)據(jù)包進行校驗和計算
Uip_arp.c是ARP請求處理的函數(shù)
Uipopt.h是TCP/IP協(xié)議配置的宏定義
由于協(xié)議包里面的內容基本不用怎么改變,只要把外部的配置調整好,寫好網(wǎng)卡驅動程序,編譯就可以調試了。通過PING指令可以PING到局域網(wǎng)內的其他主機?;蛘呤桥c應用程序配套的TCP/IP協(xié)議都是可以通信正常的。
UIP協(xié)議棧的成功移植,再配合MODBUS TCP/IP協(xié)議的應用,我們的工控產品可以快速的和其他設備進行快速的通信。比之485通信速度高了很多,優(yōu)勢明顯。