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