CAN總線的嵌入式Web服務器設計
2 嵌入式Web服務器軟件設計與實現(xiàn)
2.1 以太網(wǎng)接口驅動程序的實現(xiàn)
要將嵌入式Web服務器接入以太網(wǎng),就要對RTL8019AS進行編程,完成以太網(wǎng)幀的數(shù)據(jù)收發(fā),相當于實現(xiàn)PC機中網(wǎng)卡的驅動程序功能。以太網(wǎng)控制器驅動程序用于設置RTL8019AS的工作狀態(tài)和工作方式,分配收發(fā)數(shù)據(jù)的緩沖區(qū),通過對地址及數(shù)據(jù)口的讀寫來完成以太網(wǎng)幀的接收與發(fā)送。首先要對RTL8019AS進行復位,并將其設置為跳線模式;然后對RTL8019AS的工作參數(shù)進行設置,以使其開始工作;接下來就讀寫RTL8019AS的RAM以完成數(shù)據(jù)包的接收和發(fā)送。程序流程如圖3所示。
2.2 嵌入式Web服務器TCP/IP協(xié)議棧的實現(xiàn)
TCP/IP協(xié)議棧是SX虛擬外設的一個重要實現(xiàn),是基于SX處理器的應用系統(tǒng)與Internet實現(xiàn)互聯(lián)的基礎。通過這些協(xié)議棧,可以更加方便地開發(fā)基于Internet的嵌入式應用系統(tǒng)。
以太網(wǎng)數(shù)據(jù)的傳輸是采用MAC地址來識別的,而ARP協(xié)議提供IP地址和數(shù)據(jù)鏈路層使用MAC地址之間的轉換功能。為了保證系統(tǒng)在太網(wǎng)的通信,首先要實現(xiàn)ARP協(xié)議。由于嵌入式Web服務器要能在Internet上通信,在網(wǎng)絡層一定要實現(xiàn)IP協(xié)議,還要實現(xiàn)能報告數(shù)據(jù)傳送差錯等情況的ICMP協(xié)議。在應用層,主要實現(xiàn)遠端主機通過瀏覽器的訪問控制方式,所以要實現(xiàn)HTTP協(xié)議;而HTTP協(xié)議是基于TCP協(xié)議實現(xiàn)傳輸?shù)?,加上TCP協(xié)議是面向可靠的數(shù)據(jù)流的傳輸,基于應用的需要對可靠性的要求,在傳輸層采用TCP協(xié)議,并對TCP協(xié)議進行了簡化處理,主要針對HTTP協(xié)議開發(fā)TCP協(xié)議。
圖4為TCP/IP協(xié)議棧主流程圖。系統(tǒng)初始化后,進入主程序循環(huán)部分。主程序循環(huán)包括兩大部分:對接收到的以太網(wǎng)數(shù)據(jù)幀進行解包和對欲發(fā)送的數(shù)據(jù)進行封裝并發(fā)送。對接收到的以太網(wǎng)數(shù)據(jù)幀進行解包,供應用程序使用;對欲發(fā)送的數(shù)據(jù)進行打包,將數(shù)據(jù)以以太網(wǎng)數(shù)據(jù)幀的格式發(fā)送出去,使采用TCP/IP協(xié)議的以太網(wǎng)內所有計算機能收到此數(shù)據(jù)幀。
圖4
工業(yè)現(xiàn)場數(shù)據(jù)經(jīng)嵌入式Web服務器上傳到以太網(wǎng)才能被用戶利用,因此網(wǎng)絡用戶和Web服務器之間通信程序的開發(fā)也是本課題中很重要的一部分。課題中嵌入式Web服務器實現(xiàn)的功能主要是現(xiàn)場實時數(shù)據(jù)發(fā)布功能。實時數(shù)據(jù)包括溫度、設備運行狀態(tài)信息、通信狀態(tài)信息、時鐘信息等。嵌入式Web服務器將實時數(shù)據(jù)以網(wǎng)頁形式發(fā)布到Internet上,遠方客戶通過接入Internet瀏覽該服務器發(fā)布的工業(yè)現(xiàn)場實時信息。本設計采用Brower/Server(簡稱B/S)開發(fā)模式。用這種方式開發(fā)嵌入式Web服務器應用程序具有很多優(yōu)點。比如降低客戶端的要求,方便客戶端的分布使用,客戶端的開發(fā)和維護費用降低等。但是因為SX單片機的資源有限,在用單片機搭建的服務器上編程實現(xiàn)實時動態(tài)數(shù)據(jù)的瀏覽任務較重。在服務器端運行程序,速度也受到限制,加上網(wǎng)頁界面或程序結構的單方面調整都將導致整個系統(tǒng)全盤修改,系統(tǒng)的靈活性與可擴展性差。在設計中,如果僅僅采用B/S訪問方式,其功能是難以完全完成的。針對應用傳統(tǒng)B/S模式開發(fā)Web服務器應用軟件的弊端,提出了改進方案。
為克服傳B/S訪問模式的弊端,做了以下兩點改進。
①采用套接字編程,實現(xiàn)部分服務器程序在客戶端運行,在客戶端瀏覽器實現(xiàn)動態(tài)網(wǎng)頁顯示實時數(shù)據(jù)。在改進方案中,實現(xiàn)動態(tài)數(shù)據(jù)的實時瀏覽采用了Java applet技術。
②不再將HTML語言寫入?yún)R編程序,在瀏覽器端解板成網(wǎng)頁,而是利用嵌入式Web服務器擴展的EEPROM24C256與SX52相連,用來存儲要瀏覽的Web文件。當瀏覽器與Web服務器交互時,利用HTTP協(xié)議通過統(tǒng)一資源定位器URL來確定Web服務器應該為瀏覽器提供哪些資源。
這種改進方案在訪問模式上還是通過瀏覽器訪問嵌入式Web服務器,在通信模式上卻利用了C/S(Client/Server)模式,其于套接字來編程,即所謂的B/S和C/S相結合模式。圖5為B/S和C/S結合模式的原理。
通過B/S方式訪問Web服務器上的靜態(tài)網(wǎng)頁,在個網(wǎng)頁中嵌有Java applet文件??蛻舳说腎E瀏覽器瀏覽這個網(wǎng)頁時,會把網(wǎng)頁中標識的Java applet源程序下載到客戶端執(zhí)行。在Java applet源程序中,創(chuàng)建了一個套接字來完成與服務器的通信(前提是在Web服務器上同時運行一個相應的服務器監(jiān)聽程序),主要是獲取實時數(shù)據(jù),用于在瀏覽器中顯示。事實上,Java applet中的Socket通信是一個典型的C/S訪問方式。
通過這種B/S和C/S相結合的訪問方式,能夠很好的實現(xiàn)實時數(shù)據(jù)的動態(tài)瀏覽。特別是這種實現(xiàn)方式秉承了B/S和C/S兩者的優(yōu)點,具有很大的靈活性。
以下是服務器與客戶端applet通信具體實現(xiàn)過程。
①創(chuàng)建Socket。用tcbLocalPortMSB和tcbLocalPortLSB設置服務器監(jiān)聽端口號,具體設為8080;用myIP3~0設置服務器IP址,具體設為192.168.1.111。
tcp/ip相關文章:tcp/ip是什么
評論