<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Linux的WEB服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)

          基于Linux的WEB服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2014-10-21 來(lái)源:網(wǎng)絡(luò) 收藏

            嵌入式服務(wù)器的主要設(shè)計(jì)思想就是將嵌入式系統(tǒng)和 技術(shù)結(jié)合起來(lái),將 技術(shù)引入到現(xiàn)場(chǎng)測(cè)量和控制設(shè)備中,從而實(shí)現(xiàn)基于嵌入式 WEB服務(wù)器的控制系統(tǒng)。用戶(hù)可以通過(guò)現(xiàn)有的公共通信網(wǎng)絡(luò),使用標(biāo)準(zhǔn)的 Web瀏覽器作為接口直接對(duì)現(xiàn)場(chǎng)的控制設(shè)備進(jìn)行訪(fǎng)問(wèn),監(jiān)控和維護(hù)等操作,實(shí)現(xiàn)了異構(gòu)設(shè)備之間的跨平臺(tái)互訪(fǎng)。 1嵌入式 Web服務(wù)器總體設(shè)計(jì)

          本文引用地址:http://www.ex-cimer.com/article/264209.htm

            系統(tǒng)硬件設(shè)計(jì)如圖 1所示。嵌入式 WEB服務(wù)器由網(wǎng)絡(luò)模塊、接口模塊和存儲(chǔ)模塊三個(gè)部分組成。網(wǎng)絡(luò)模塊是整個(gè)嵌入式 WEB服務(wù)器的核心,負(fù)責(zé)完成服務(wù)器的初始化,并且在 80端口等待用戶(hù)的連接請(qǐng)求。根據(jù)用戶(hù)請(qǐng)求的類(lèi)型提供相應(yīng)的服務(wù)。此外還要實(shí)現(xiàn)電子郵件功能,用來(lái)完成自動(dòng)報(bào)警和數(shù)據(jù)的保存,此外通過(guò)選擇以太網(wǎng)或者電話(huà)線(xiàn)進(jìn)入 Internet。

            接口模塊及存儲(chǔ)模塊。為了使 WEB服務(wù)器具有更好的通用性,在系統(tǒng)提供了一些通用接口,如 RS-232、RS-485、、Modem、Ethernet??梢院筒煌涌诘目刂圃O(shè)備進(jìn)行連接;系統(tǒng)提供了一個(gè)建立在外部串行 Flash芯片上的小型文件系統(tǒng),主要用來(lái)存放操作系統(tǒng),嵌入式 Web服務(wù)器需要發(fā)布的網(wǎng)頁(yè)和運(yùn)行的程序。而各個(gè)接口采集的數(shù)據(jù)暫時(shí)存放在 1 M的 RAM里,每隔一定的時(shí)間就將數(shù)據(jù)通過(guò)電子郵件發(fā)送到指定的郵箱,然后覆蓋原有的數(shù)據(jù)。

            

          1.jpg

          ?

            1.1 LX972ALC網(wǎng)絡(luò)通訊接口電路電路設(shè)計(jì)

            DS80C400網(wǎng)絡(luò)微控制器是目前集成度最高的 8 0 5 1器件。集成外設(shè)包括 1 0/1 0 0M以太網(wǎng)控制器,三個(gè)串行端口,一個(gè) 2.0B控制器, 1-Wire主機(jī)和 64個(gè) I/O引腳。能夠通過(guò)以太網(wǎng) M AC提供高達(dá) 5Mbps的吞吐率。24位尋址方式簡(jiǎn)化了對(duì)于大容量程序或數(shù)據(jù)存儲(chǔ)器的訪(fǎng)問(wèn),支持高達(dá) 1 6 M B的連續(xù)存儲(chǔ)空間。 LXT972ALC是 Intel公司推出的遵循正 IEEE標(biāo)準(zhǔn)的網(wǎng)絡(luò)通訊接口電路,支持 10M/100M的雙絞線(xiàn)應(yīng)用,同時(shí)也支持 100Mb/s的光纖接口;該電路提供的 MII口能很好的符合 10/100MACs。

            其主要完成的是 IEEE802.3標(biāo)準(zhǔn)定義的物理編碼子層 (PCS)、物理媒體附加子層 (PMA)和物理媒體獨(dú)立子層 (PMD)的主要功能。單片機(jī)與芯片的電路如圖 2所示:

            當(dāng)合法的數(shù)據(jù)出現(xiàn)在 RXD上的時(shí)候, LXT972ALC使 RX_DV有效,當(dāng)合法的數(shù)據(jù)出現(xiàn)在 TXD上的時(shí)候,DSS0C400使 TX_EN有效;當(dāng) LXT972ALC檢測(cè)到幀中有錯(cuò)誤時(shí),它使 RX_ER有效;當(dāng) DSSOC400緩沖器沒(méi)有準(zhǔn)備好時(shí),它使 TX_ER有效;當(dāng)發(fā)送或者接收沒(méi)有處于空閑狀態(tài)時(shí),LX972ALC使 CRS有效;當(dāng) LXT972AL檢測(cè)到?jīng)_突時(shí),它使 COL有效,

            

          2.jpg

          ?

            并且在沖突期間一直保持高電平,如果 COL失效,那么 RX進(jìn)入跟蹤模式。MDIO是 PHY管理數(shù)據(jù)的時(shí)鐘,MDIO是 PHY和 MAC之間控制信息的接口。 MDIO是通過(guò)軟件實(shí)現(xiàn)高級(jí)控制,因此必須通過(guò)并行口來(lái)實(shí)現(xiàn)。

            1.2 Modem接口設(shè)計(jì)

            本系統(tǒng)利用主控制器的 UART2進(jìn)行模擬 Modem通信的基本過(guò)程:DS80C400先把準(zhǔn)備寫(xiě)入串行設(shè)備的數(shù)據(jù)發(fā)送到 UART的寄存器中,再通過(guò) FIFO傳送到串行設(shè)備。 Modem接口電路我們采用芯片 MAX213EAI。MAXZ13EAI是 5V工作電源的 RS-232電平轉(zhuǎn)換芯片。它集成了 4個(gè)輸入和 5個(gè)輸出的 RS-232電平轉(zhuǎn)換口,可以很好的滿(mǎn)足 Modem接口標(biāo)準(zhǔn)傳輸?shù)男枰?。接口電路如圖 3所示。

            

          3.jpg

          ?

            2 嵌入式

            WEB服務(wù)器軟件設(shè)計(jì)從設(shè)計(jì)角度,則可將嵌入式軟件分為 4個(gè)模塊:網(wǎng)絡(luò)通訊模塊、接口管理模塊、人機(jī)交互模塊和遠(yuǎn)程加載模塊。

            2.1 網(wǎng)絡(luò)通訊模塊設(shè)計(jì)

            2.1.1 以太網(wǎng)接入 Internet的實(shí)現(xiàn)

            嵌入式 WEB服務(wù)器是溝通客戶(hù)和控制現(xiàn)場(chǎng)的重要橋梁,客戶(hù)通過(guò)認(rèn) Web瀏覽器來(lái)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的功能。本 WEB服務(wù)是以 TCP/IP協(xié)議來(lái)傳輸數(shù)據(jù),以 HTTP協(xié)議來(lái)進(jìn)行客戶(hù)端與服務(wù)器之間的請(qǐng)求和響應(yīng),其體系結(jié)構(gòu)如圖 4所示。

            

          4.jpg

          ?

            當(dāng)客戶(hù)在界面上進(jìn)行操作時(shí),如點(diǎn)擊復(fù)選框或在文本框中輸入數(shù)據(jù)。 Applet根據(jù)用戶(hù)的操作進(jìn)行響應(yīng),從而構(gòu)造出新的命令字,向嵌入式 WEB服務(wù)器發(fā)出請(qǐng)求,服務(wù)器根據(jù)新的命令字驅(qū)動(dòng)控制系統(tǒng)中相應(yīng)的執(zhí)行機(jī)構(gòu),并將新的狀態(tài)信息和數(shù)據(jù)信息返回到客戶(hù)端,客戶(hù)端解析返回的數(shù)據(jù),并進(jìn)行實(shí)時(shí)顯示。

            2.1.2公用電話(huà)網(wǎng)接入 Internet的實(shí)現(xiàn)

            為保證能在無(wú)以太網(wǎng)環(huán)境的情況下進(jìn)行通信,系統(tǒng)還采用了串口外接調(diào)制解調(diào)器通過(guò)電話(huà)網(wǎng)來(lái)實(shí)現(xiàn)與遠(yuǎn)程客戶(hù)機(jī)的通信。網(wǎng)絡(luò)建立的實(shí)現(xiàn)就要用到 PPP協(xié)議(Point to Point Protocol點(diǎn)對(duì)點(diǎn)協(xié)議)。在程序運(yùn)行的時(shí)候先要讀取 PPP通信的控制信息,判斷是否使用 PPP進(jìn)行通信,否則默認(rèn)使用 Ethernet來(lái)進(jìn)行數(shù)據(jù)的傳輸。而不是同時(shí)開(kāi)啟這兩種模式。

            由于 PPP通信并不區(qū)分客戶(hù)端和服務(wù)器,把負(fù)責(zé)認(rèn)證和 IP分配的端認(rèn)為是服務(wù)器,而不需要認(rèn)證和使用服務(wù)器提供 IP的端認(rèn)為是客戶(hù)端。設(shè)計(jì)了 LinkManger類(lèi)、PPPDaemon類(lèi)、PPPModemLink類(lèi)、ModemCommand類(lèi)、PPPException類(lèi),用來(lái)實(shí)現(xiàn) PPP通信。其中 LinkManger類(lèi):用于管理 PPP連接,啟動(dòng)經(jīng)由網(wǎng)絡(luò)接到遠(yuǎn)端服務(wù)器的出站連接,生成一個(gè) PPPDaemon實(shí)例用來(lái)設(shè)置 IP,驗(yàn)證用戶(hù)名和密碼。并實(shí)現(xiàn)接收 PPP事務(wù)。

            PPPModemLink類(lèi)首先打開(kāi)一個(gè)串口并進(jìn)行初始化,初始化完成后,把一個(gè)串口的對(duì)象傳遞給 PPP,然后創(chuàng)建 ModemCommand對(duì)象來(lái)控制與調(diào)制解調(diào)器的串行通信,并通過(guò) SerialPortEvenlistener接口監(jiān)視 CD以檢測(cè)調(diào)制解調(diào)器是否掛起。其定義了 Modem的初始化和復(fù)位方法:initializeLink()和 resetModem()。

            ModemCommand類(lèi)負(fù)責(zé)和 modem具體的串行通信,其分別定義了 sendcommand()、 waitFoResponse()和 receiveCommand()方法。分別用來(lái)發(fā)送、等待和接收命令。當(dāng)操作超時(shí),則拋出 DataLinkException;waitforMatc()主要用來(lái)供 sendCommand()和 receiveCommand()進(jìn)行調(diào)用,用來(lái)判斷接收到的字符串是否和匹配字符串一致。當(dāng)相應(yīng)操作超時(shí),則拋出 DataLinkException。

          linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關(guān)文章:linux教程


          雙絞線(xiàn)傳輸器相關(guān)文章:雙絞線(xiàn)傳輸器原理

          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: Linux WEB CAN

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();