基于Web的網(wǎng)絡(luò)儲(chǔ)油罐群遠(yuǎn)程監(jiān)控系統(tǒng)研究
4.3 中間層軟件設(shè)計(jì)
中間層的主要功能是:對(duì)來(lái)自底層的數(shù)據(jù)信息進(jìn)行讀取、分解(解析)、運(yùn)算處理(包括對(duì)數(shù)據(jù)庫(kù)存儲(chǔ)),并且響應(yīng)來(lái)自上層的客戶請(qǐng)求,對(duì)該請(qǐng)求分析處理后轉(zhuǎn)發(fā)相應(yīng)的信息給底層,以達(dá)到對(duì)底層的監(jiān)視和控制。其系統(tǒng)軟件應(yīng)用結(jié)構(gòu)如圖3所示。本文引用地址:http://www.ex-cimer.com/article/152452.htm
CAN適配卡的控制程序模塊將來(lái)自CAN適配卡的數(shù)據(jù)進(jìn)行解析、存儲(chǔ)到數(shù)據(jù)庫(kù),以及把來(lái)自Web服務(wù)器應(yīng)用程序傳遞來(lái)的信息進(jìn)行處理并向CAN適配卡發(fā)送相應(yīng)數(shù)據(jù);Web服務(wù)器應(yīng)用程序模塊:負(fù)責(zé)系統(tǒng)的全局調(diào)度,接收客戶端請(qǐng)求并響應(yīng),它擔(dān)當(dāng)著對(duì)客戶控制命令的下傳和對(duì)上傳數(shù)據(jù)信息的處理;而Windows消息處理模塊則建立了Web服務(wù)器應(yīng)用程序和基于CAN適配卡的控制程序的一種溝通機(jī)制。
其中,Web服務(wù)器應(yīng)用程序編程使整個(gè)系統(tǒng)軟件設(shè)計(jì)的關(guān)鍵部分。在WebSnap中,可以創(chuàng)建五種標(biāo)準(zhǔn)類(lèi)型的Web服務(wù)器應(yīng)用程序,它們是ISAPI和NASPI類(lèi)型、獨(dú)立于操作系統(tǒng)的CGI類(lèi)型、獨(dú)立于操作系統(tǒng)的WinCGI類(lèi)型、Apache類(lèi)型和Web服務(wù)器應(yīng)用程序調(diào)試器類(lèi)型。為了方便調(diào)試服務(wù)器應(yīng)用程序起見(jiàn),我們采用了Web服務(wù)器應(yīng)用程序調(diào)試器類(lèi)型。它可以利用本地機(jī)虛擬的Web服務(wù)器所開(kāi)發(fā)的應(yīng)用程序結(jié)合到一起運(yùn)行并通過(guò)C++ Builder強(qiáng)大的調(diào)試功能,方便地發(fā)現(xiàn)程序中存在的邏輯錯(cuò)誤。
由于WebSnap具備了嵌入腳本的能力,因此我們采用Dreamweaver來(lái)制作HTML頁(yè)面文件并將其作為模板集成到C++ Builder的Web服務(wù)器應(yīng)用程序中,構(gòu)成一個(gè)完美的服務(wù)器網(wǎng)站。WebSnap應(yīng)用程序與數(shù)據(jù)庫(kù)的連接主要通過(guò)ADO組件技術(shù)和SQL。在WebSnap應(yīng)用程序的主窗體上嵌入ADOConnection組件,使WebSnap應(yīng)用程序與數(shù)據(jù)庫(kù)總保持邏輯連接[6]。
5 數(shù)據(jù)交互路徑
系統(tǒng)中的數(shù)據(jù)流向大體可分為上行數(shù)據(jù)和下行數(shù)據(jù)。上行數(shù)據(jù)就是從現(xiàn)場(chǎng)采集的數(shù)據(jù)上傳給服務(wù)器,下行數(shù)據(jù)就是服務(wù)器接收來(lái)自客戶瀏覽器的命令請(qǐng)求下傳到相應(yīng)的現(xiàn)場(chǎng)設(shè)備。
5.1 下行數(shù)據(jù)
當(dāng)遠(yuǎn)程客戶通過(guò)身份(用戶名和口令)驗(yàn)證進(jìn)入控制主頁(yè)時(shí),選擇任務(wù),如“關(guān)閉1號(hào)儲(chǔ)液罐進(jìn)油閥”,點(diǎn)擊提交按鈕,這樣服務(wù)器便接收來(lái)自客戶瀏覽器的控制命令請(qǐng)求??蛻魹g覽器把地址欄中的URL(http://192.168.1.238:1024/chuyeguan.LhjSnap/Command)內(nèi)容傳給了Web服務(wù)器,將URL 第二部分服務(wù)器名(192.168.1.238:1024)解碼與Web服務(wù)器相連,Web服務(wù)器應(yīng)用程序通過(guò)WebDispatcher將URL 第四部分路徑名(Command)解析,從它的動(dòng)作項(xiàng)列表中選取【PathInfo】屬性值與Command相同的動(dòng)作項(xiàng)。該動(dòng)作項(xiàng)觸發(fā)其對(duì)應(yīng)的頁(yè)面制作器PageCommand。如果沒(méi)有找到匹配的動(dòng)作項(xiàng),WebDispatcher將調(diào)用默認(rèn)的動(dòng)作項(xiàng)。PageCommand的屬性【HTMLFile】標(biāo)記著對(duì)應(yīng)的HTML文件地址,其事件屬性【OnHTMLTag】標(biāo)記著PageCommandHTMLTag。當(dāng)關(guān)閉1號(hào)儲(chǔ)液罐進(jìn)油閥事件被觸發(fā)時(shí),頁(yè)面制作器PageCommand開(kāi)始構(gòu)造HTML頁(yè)面,當(dāng)發(fā)現(xiàn)透明書(shū)簽〈#IsIn進(jìn)油閥〉(HTML文件代碼中)時(shí),用相應(yīng)的解析函數(shù)PageCommandHTMLTag中的替換文本替代。與此同時(shí),我們?cè)诮馕龊瘮?shù)PageCommandHTMLTag中自定義Windows消息(關(guān)閉1號(hào)進(jìn)油閥)并且發(fā)送它,當(dāng)基于CAN適配卡的控制程序截獲這個(gè)消息時(shí),把關(guān)閉1號(hào)進(jìn)油閥編制成命令碼“1101100000”封裝成CAN信息幀數(shù)組的結(jié)構(gòu)成員ID發(fā)送到CAN適配卡。經(jīng)CAN適配卡(轉(zhuǎn)換成CAN協(xié)議能識(shí)別的數(shù)據(jù)格式)傳到CAN總線時(shí),經(jīng)驗(yàn)收碼和屏蔽碼辨別,被CAN總線智能節(jié)點(diǎn)1接收,表明要控制的對(duì)象是1號(hào)大型儲(chǔ)液罐。與此同時(shí),CAN控制器產(chǎn)生接收中斷,單片機(jī)把ID分解后知道被控量是進(jìn)油閥,然后運(yùn)行關(guān)閉進(jìn)油閥子程序滿足該控制要求,經(jīng)執(zhí)行器執(zhí)行關(guān)閉進(jìn)油閥命令。至此,客戶瀏覽器把控制命令下傳給了1號(hào)大型儲(chǔ)液罐進(jìn)油閥。
評(píng)論