引言 嵌入式WEB服務(wù)器的主要設計思想就是將嵌入式系統和WEB技術(shù)結合起來(lái),將WEB技術(shù)引入到現場(chǎng)測量和控制設備中,從而實(shí)現基于嵌入式WEB服務(wù)器的控制系統。用戶(hù)可以通過(guò)現有的公共通信網(wǎng)絡(luò ),使用標準的WEB瀏覽器作為接口直接對現場(chǎng)的控制設備進(jìn)行訪(fǎng)問(wèn),監控和維護等操作,實(shí)現了異構設備之間的跨平臺互訪(fǎng)。 1 嵌入式WEB服務(wù)器總體設計 系統硬件設計如圖1所示。嵌入式WEB服務(wù)器由網(wǎng)絡(luò )模塊、接口模塊和存儲模塊三個(gè)部分組成。網(wǎng)絡(luò )模塊是整個(gè)嵌入式WEB服務(wù)器的核心,負責完成服務(wù)器的初始化,并且在80端口等待用戶(hù)的連接請求。根據用戶(hù)請求的類(lèi)型提供相應的服務(wù)。此外還要實(shí)現電子郵件功能,用來(lái)完成自動(dòng)報警和數據的保存,此外通過(guò)選擇以太網(wǎng)或者電話(huà)線(xiàn)進(jìn)入Internet。 ![]() 圖1 嵌入式WEB服務(wù)器的硬件設計 接口模塊及存儲模塊。為了使WEB服務(wù)器具有更好的通用性,在系統提供了一些通用接口,如RS-232、RS-485、CAN、Modem、Ethernet?梢院筒煌涌诘目刂圃O備進(jìn)行連接;系統提供了一個(gè)建立在外部串行Flash芯片上的小型文件系統,主要用來(lái)存放操作系統,嵌入式WEB服務(wù)器需要發(fā)布的網(wǎng)頁(yè)和運行的程序。而各個(gè)接口采集的數據暫時(shí)存放在1M的RAM里,每隔一定的時(shí)間就將數據通過(guò)電子郵件發(fā)送到指定的郵箱,然后覆蓋原有的數據。 1.1 LX972ALC網(wǎng)絡(luò )通訊接口電路電路設計 DS80C400網(wǎng)絡(luò )微控制器是目前集成度最高的8051器件。集成外設包括10/100M以太網(wǎng)控制器,三個(gè)串行端口,一個(gè)CAN 2.0B控制器, 1-Wire主機和64個(gè)I/O引腳。能夠通過(guò)以太網(wǎng)MAC提供高達5Mbps的吞吐率。24位尋址方式簡(jiǎn)化了對于大容量程序或數據存儲器的訪(fǎng)問(wèn),支持高達16MB的連續存儲空間。LXT972ALC是 Intel公司推出的遵循正IEEE標準的網(wǎng)絡(luò )通訊接口電路,支持10M/100M的雙絞線(xiàn)應用,同時(shí)也支持100Mb/s的光纖接口;該電路提供的MII口能很好的符合 10/100MACs。其主要完成的是IEEE802.3標準定義的物理編碼子層(PCS)、物理媒體附加子層(PMA)和物理媒體獨立子層(PMD)的主要功能。單片機與芯片的電路如圖2所示: ![]() 圖2 DSSOC400與LXT972ALC相連原理圖 當合法的數據出現在RXD上的時(shí)候, LXT972ALC使RX_DV有效,當合法的數據出現在TXD上的時(shí)候,DSS0C400使TX_EN有效;當LXT972ALC檢測到幀中有錯誤時(shí),它使RX_ER有效;當DSSOC400緩沖器沒(méi)有準備好時(shí),它使TX_ER有效;當發(fā)送或者接收沒(méi)有處于空閑狀態(tài)時(shí),LX972ALC使CRS有效;當LXT972AL檢測到?jīng)_突時(shí),它使COL有效,并且在沖突期間一直保持高電平,如果 COL失效,那么 RX進(jìn)入跟蹤模式。MDIO是 PHY管理數據的時(shí)鐘,MDIO是 PHY和 MAC之間控制信息的接口。 MDIO是通過(guò)軟件實(shí)現高級控制,因此必須通過(guò)并行口來(lái)實(shí)現。 1.2 Modem接口設計 本系統利用主控制器的UART2進(jìn)行模擬Modem通信的基本過(guò)程:DS80C400先把準備寫(xiě)入串行設備的數據發(fā)送到UART的寄存器中,再通過(guò)FIFO傳送到串行設備。 Modem接口電路我們采用芯片MAX213EAI。MAXZ13EAI是5V工作電源的RS-232電平轉換芯片。它集成了4個(gè)輸入和5個(gè)輸出的RS-232電平轉換口,可以很好的滿(mǎn)足 Modem接口標準傳輸的需要。接口電路如圖3所示。 ![]() 圖3 Modem接口電路原理圖 2 嵌入式WEB服務(wù)器軟件設計 從設計角度,則可將嵌入式軟件分為4個(gè)模塊:網(wǎng)絡(luò )通訊模塊、接口管理模塊、人機交互模塊和遠程加載模塊。 2.1 網(wǎng)絡(luò )通訊模塊設計 2.1.1 以太網(wǎng)接入Internet的實(shí)現 嵌入式WEB服務(wù)器是溝通客戶(hù)和控制現場(chǎng)的重要橋梁,客戶(hù)通過(guò)認WEB瀏覽器來(lái)實(shí)現遠程監控的功能。本W(wǎng)EB服務(wù)是以TCP/IP協(xié)議來(lái)傳輸數據,以HTTP協(xié)議來(lái)進(jìn)行客戶(hù)端與服務(wù)器之間的請求和響應,其體系結構如圖4所示。 ![]() 圖4 Web體系結構 當客戶(hù)在界面上進(jìn)行操作時(shí),如點(diǎn)擊復選框或在文本框中輸入數據。Applet根據用戶(hù)的操作進(jìn)行響應,從而構造出新的命令字,向嵌入式WEB服務(wù)器發(fā)出請求,服務(wù)器根據新的命令字驅動(dòng)控制系統中相應的執行機構,并將新的狀態(tài)信息和數據信息返回到客戶(hù)端,客戶(hù)端解析返回的數據,并進(jìn)行實(shí)時(shí)顯示。 2.1.2 公用電話(huà)網(wǎng)接入 Internet的實(shí)現 為保證能在無(wú)以太網(wǎng)環(huán)境的情況下進(jìn)行通信,系統還采用了串口外接調制解調器通過(guò)電話(huà)網(wǎng)來(lái)實(shí)現與遠程客戶(hù)機的通信。網(wǎng)絡(luò )建立的實(shí)現就要用到PPP協(xié)議(Point to Point Protocol點(diǎn)對點(diǎn)協(xié)議)。在程序運行的時(shí)候先要讀取PPP通信的控制信息,判斷是否使用 PPP進(jìn)行通信,否則默認使用Ethernet來(lái)進(jìn)行數據的傳輸。而不是同時(shí)開(kāi)啟這兩種模式。 由于PPP通信并不區分客戶(hù)端和服務(wù)器,把負責認證和IP分配的端認為是服務(wù)器,而不需要認證和使用服務(wù)器提供IP的端認為是客戶(hù)端。設計了LinkManger類(lèi)、PPPDaemon類(lèi)、PPPModemLink類(lèi)、ModemCommand類(lèi)、PPPException類(lèi),用來(lái)實(shí)現PPP通信。其中LinkManger類(lèi):用于管理PPP連接,啟動(dòng)經(jīng)由網(wǎng)絡(luò )接到遠端服務(wù)器的出站連接,生成一個(gè)PPPDaemon實(shí)例用來(lái)設置IP,驗證用戶(hù)名和密碼。并實(shí)現接收PPP事務(wù)。 PPPModemLink類(lèi)首先打開(kāi)一個(gè)串口并進(jìn)行初始化,初始化完成后,把一個(gè)串口的對象傳遞給PPP,然后創(chuàng )建ModemCommand對象來(lái)控制與調制解調器的串行通信,并通過(guò)SerialPortEvenlistener接口監視CD以檢測調制解調器是否掛起。其定義了Modem的初始化和復位方法:initializeLink()和resetModem()。 ModemCommand類(lèi)負責和modem具體的串行通信,其分別定義了sendcommand()、 waitFoResponse()和receiveCommand()方法。分別用來(lái)發(fā)送、等待和接收命令。當操作超時(shí),則拋出DataLinkException;waitforMatc()主要用來(lái)供 sendCommand()和receiveCommand()進(jìn)行調用,用來(lái)判斷接收到的字符串是否和匹配字符串一致。當相應操作超時(shí),則拋出DataLinkException。 2.2 電子郵件功能的實(shí)現 在系統設計時(shí),考慮到系統的存儲容量,不可能將采集的數據全部存儲在本地的系統中,為了保存系統的日志,可以采取定時(shí)向指定郵箱發(fā)送數據。本系統用Java語(yǔ)言開(kāi)發(fā)了后臺自動(dòng)發(fā)送郵件的功能。郵件采用BASE64編碼,并且支持 SMTP認證。 在本系統中,只需要完成SMTP的發(fā)送方式,而不要求其完成SMTP的接收方式,這樣就簡(jiǎn)化了編程的難度。SMTP開(kāi)服務(wù)器和SMTP客戶(hù)之間的對話(huà)過(guò)程:首先建立TCP連接,然后客戶(hù)端發(fā)送HELO命令以標識發(fā)件人的身份,客戶(hù)端發(fā)送MAIL命令,服務(wù)器端以OK作為響應,表明準備接收。接下來(lái)客戶(hù)端發(fā)送RCPT命令,以標識該電子郵件的計劃接收人,服務(wù)器端如表示愿意為收件人接收郵件。則在協(xié)商結束后發(fā)送郵件,用命令DATA發(fā)送,將輸入內容一起發(fā)送出去。最后結束此次發(fā)送,用QUIT命令退出。所有的命令都是以換行符作為結束。 2.3 嵌入式WEB服務(wù)器接口模塊的實(shí)現 在本系統中為了滿(mǎn)足不同工業(yè)控制系統的需要,設計有串口、CAN總線(xiàn)接口、Modem接口和RS-485接口。系統在啟動(dòng)時(shí),從系統的FLASH中讀取120個(gè)字節的初始化信息,并據此來(lái)判斷是否開(kāi)啟接口,并對所開(kāi)啟的接口進(jìn)行初始化。由于各個(gè)模塊的初始化函數己經(jīng)存在,因此系統初始化時(shí),只要調用相應的函數就夠了。PPP已經(jīng)在網(wǎng)絡(luò )模塊部分介紹,而RS-485的使用和普通串口的初始化相似,本部分主要介紹RS-232和CAN。 2.3.1 RS-232串口驅動(dòng)函數設計 系統的開(kāi)發(fā)語(yǔ)言是Java,但Java本身不提供對串口操作的類(lèi),要實(shí)現對串口的讀寫(xiě)操作,需要用第三方API函數完成,實(shí)際的開(kāi)發(fā)過(guò)程中,使用串口通訊協(xié)議開(kāi)發(fā)包c(diǎn)omm.jar,它是J2SE的標準擴展,支持RS-231串口,并提供了一種與平臺無(wú)關(guān)的串口通信機制。 串口驅動(dòng)主要實(shí)現對串口的讀寫(xiě)操作,給應用程序提供發(fā)詢(xún)接收數據的接口。串口正常工作之前,需要進(jìn)行初始化設置,因此驅動(dòng)中還有初始化函數。串口的驅動(dòng)函數串口的驅動(dòng)函數主要包括:serialInit()用來(lái)初始化UART、serialRead()用來(lái)接收字節組、serialWrite()用來(lái)發(fā)送字節組。 2.3.2 CAN總線(xiàn)模塊 CAN接口在工業(yè)控制系統的運用越來(lái)越廣泛,操作系統提供了對CAN進(jìn)行操作的dalsem.com.CanBus類(lèi),如要對CAN進(jìn)行操作,首先要建立一個(gè)CAN的對象。 CanBus canTest = new CanBus(CanBus.CANBUS0); 由于DS80C400只提供一個(gè)CAN控制器,所以只能選用CANBUS0。一旦對象被初始化,就需要設置CAN的速率。CAN速率的設置通過(guò)設置 Prescaler,TSEGI,TSEGZ和同步段來(lái)完成。CAN的計算速率為:CAN波特率=晶振頻率/Prescaler+(TSEG1+TSEG2)。 將上述設置完成后,就可以使 CAN控制器使能了:canTest.enableController();要想完成幀的發(fā)送和接收,除了在信息中心設置接收和發(fā)送模式外,還必須先定義一個(gè)CanFrame的對象即CanFrame frame =new CanFrame();要接收一個(gè)CAN的幀時(shí),信息是以CanFrame對象的形式進(jìn)行接收,并且調用canTest.receive(frame);如要發(fā)送數據,也必須將數據封裝層CanFrame對象的形式進(jìn)行發(fā)送,并且調用canTest.sendFrame(frame)。 2.4人機接口模塊 本系統將瀏覽器/服務(wù)器(B/S)結構和客戶(hù)端/服務(wù)器(C/S)結構相結合,客戶(hù)端仍只需使用易于操作的WEB瀏覽器,使用該模式不僅統一了用戶(hù)界面,為用戶(hù)對系統的查詢(xún)和操作提供了極大的方便,系統還通過(guò)Java Applet平衡了服務(wù)器端與瀏覽器端的負載狀況。 為了對控制對象進(jìn)行遠程操作,WEB頁(yè)面需要給用戶(hù)提供三個(gè)功能:一是現場(chǎng)設備查詢(xún),主要是對現場(chǎng)設備的運行狀態(tài)和采集數據進(jìn)行查詢(xún);二是設備遠程控制,提供對運行現場(chǎng)某些參數的修改能力;三是報警 (如高限報警、下限報警等),如果現場(chǎng)設備超過(guò)設定的報警值,一方面會(huì )在網(wǎng)頁(yè)上發(fā)出聲音警報。此外還會(huì )在后臺向指定的郵箱發(fā)送報警郵件。 2.4.1 網(wǎng)頁(yè)的交互方式 Web系統主要采用HTTP協(xié)議。HTTP采用請求/響應的握手方式,每個(gè)HTTP交互都由從客戶(hù)端發(fā)往服務(wù)器的請求和從服務(wù)器發(fā)往客戶(hù)端的響應組成。HTTP采用TCP連接,而且該連接狀態(tài)僅在此次連接中保持,無(wú)論服務(wù)器或是瀏覽器都不會(huì )記憶上次的連接狀態(tài)。在設計中首先采用com.dalsemi.tininet包中的http類(lèi),實(shí)現在80端口等待客戶(hù)端的請求。其主要實(shí)現如下: HTTPServer httpd = new HTTPServer(80); 然后給出將對應的 HTML頁(yè)面返回到瀏覽器。 httpd.setIndexPage(“index.html”); 初始化結束后,Web服務(wù)器進(jìn)入正常的工作狀態(tài)以輪詢(xún)的方式來(lái)進(jìn)行處理。 2.5 系統的遠程加載和調試 為了使系統滿(mǎn)足不同任務(wù)的需要,有時(shí)需要對嵌入式系統中運行的軟件進(jìn)行動(dòng)態(tài)更新。本系統可以直接將新版本的監控軟件通過(guò)計算機網(wǎng)絡(luò )傳送到現場(chǎng)的嵌入式系統,對原有的軟件進(jìn)行更換,從而實(shí)現軟件的遠程動(dòng)態(tài)更新。利用操作系統自帶的FTP和Telnet功能,就可以實(shí)現系統的遠程更新和調試。在系統初始化結束后開(kāi)始運行,一個(gè)線(xiàn)程創(chuàng )建了服務(wù)器套接字(Server Socket)來(lái)偵聽(tīng)客戶(hù)端的FTP和Telnet連接請求。我們利用Telnet和FTP技術(shù),可以實(shí)現在Internet上對嵌入式節點(diǎn)的遠程操作,包括程序的運行和停止、程序下載、在線(xiàn)更新、調試、配置等。 3 總結 本文的創(chuàng )新點(diǎn)是采用Java技術(shù)進(jìn)行軟件開(kāi)發(fā),在實(shí)現傳統的數據采集和發(fā)布的基礎上,還增加了電子郵件功能,使得系統保存日志更為方便,增加了遠程文件的上傳和下載,使得系統可以遠程更新;其次,對原有的操作系統進(jìn)行重新編譯,實(shí)現了對Rash的加載。從而省去了傳統的通過(guò)電池保護電路來(lái)完成掉電后的數據保存;最后,系統設計了多個(gè)接口可以和不同接口的控制設備相連,增強了系統的通用性。在網(wǎng)絡(luò )接入模式上以太網(wǎng)和PPP相結合使得系統的靈活性大為增強。 作者:姜孝軍,楊海鵬 來(lái)源:《微計算機信息》(嵌入式與SOC)2009年第6-2期 |