基于車載網(wǎng)絡(luò)嵌入式瀏覽器的設(shè)計(jì)
摘要:本文在汽車網(wǎng)絡(luò)復(fù)雜的分層結(jié)構(gòu)和多種網(wǎng)絡(luò)協(xié)議并存的基礎(chǔ)上,提出一個(gè)以車載多層網(wǎng)絡(luò)為應(yīng)用環(huán)境、以瀏覽器為中心的應(yīng)用模型,并詳細(xì)討論了一種基于該模型的車載網(wǎng)絡(luò)的嵌入式瀏覽器設(shè)計(jì)和實(shí)現(xiàn)。
關(guān)鍵詞:汽車網(wǎng)絡(luò);XML;瀏覽器;B/S模型;消息機(jī)制
現(xiàn)在,車輛的控制向高精度、高安全性發(fā)展,汽車行業(yè)正走向智能化、網(wǎng)絡(luò)化。在此過(guò)程中,汽車網(wǎng)絡(luò)起著重要的作用,CAN總線和LIN總線就是重要的汽車網(wǎng)絡(luò)總線。
但是,在汽車逐漸發(fā)展成為一個(gè)信息終端時(shí),卻存在著網(wǎng)絡(luò)體系結(jié)構(gòu)滯后的情況,在互聯(lián)網(wǎng)絡(luò)普遍采用B/S(瀏覽器/服務(wù)器模式)三層網(wǎng)絡(luò)結(jié)構(gòu)的同時(shí),車載網(wǎng)絡(luò)還處在簡(jiǎn)單的C/S(客戶端/服務(wù)器模式)兩層網(wǎng)絡(luò)結(jié)構(gòu)的階段。針對(duì)汽車網(wǎng)絡(luò)標(biāo)準(zhǔn)不統(tǒng)一、接口混亂、管理困難、網(wǎng)絡(luò)體系滯后的狀況,可以引入當(dāng)前互聯(lián)網(wǎng)絡(luò)中廣泛使用的標(biāo)記語(yǔ)言(ML Markup Language)和B/S網(wǎng)絡(luò)結(jié)構(gòu)。標(biāo)記語(yǔ)言是一種跨平臺(tái)的信息交換方式,在汽車網(wǎng)絡(luò)中采用標(biāo)記語(yǔ)言,可以解決不同智能節(jié)點(diǎn)之間標(biāo)準(zhǔn)不統(tǒng)一、接口不同和跨層信息交換的問(wèn)題。B/S網(wǎng)絡(luò)結(jié)構(gòu)可以很好地解決網(wǎng)絡(luò)節(jié)點(diǎn)信息處理能力不足的狀況,把大部分的信息處理通過(guò)網(wǎng)絡(luò)提交到處理能力強(qiáng)大的主設(shè)備,甚至通過(guò)互聯(lián)網(wǎng)絡(luò)連接到大型主機(jī),而從設(shè)備僅僅需要通過(guò)瀏覽器軟件解析主機(jī)處理的結(jié)果。
但是目前使用標(biāo)記語(yǔ)言和B/S網(wǎng)絡(luò)結(jié)構(gòu)最大的問(wèn)題是缺乏針對(duì)車載網(wǎng)絡(luò)的嵌入式瀏覽器系統(tǒng)。通用的嵌入式瀏覽器使用HTML語(yǔ)言作為信息的載體,而HTML語(yǔ)言存在著內(nèi)容和顯示信息不分、描述結(jié)構(gòu)數(shù)據(jù)能力差等缺點(diǎn)。此外,通用的嵌入式瀏覽器對(duì)實(shí)時(shí)數(shù)據(jù)的處理和顯示的能力不足等,也是需要解決的問(wèn)題。因此,設(shè)計(jì)一款面向多層汽車局域網(wǎng)絡(luò),針對(duì)車載網(wǎng)絡(luò)信息處理需要,使用可擴(kuò)展標(biāo)記語(yǔ)言(XML)為信息載體,可以同時(shí)顯示汽車內(nèi)部實(shí)時(shí)信息和互聯(lián)網(wǎng)絡(luò)信息的專用嵌入式瀏覽器,具有非常重要的意義。
嵌入式瀏覽器總體設(shè)計(jì)
根據(jù)汽車網(wǎng)絡(luò)自身的特點(diǎn)、車載網(wǎng)絡(luò)瀏覽器的特殊要求,以及模塊內(nèi)高內(nèi)聚和模塊間低耦合的要求,將車載網(wǎng)絡(luò)瀏覽器的設(shè)計(jì)和實(shí)現(xiàn)劃分5個(gè)模塊,分別為擴(kuò)展標(biāo)記語(yǔ)言模塊、網(wǎng)絡(luò)接入和信息緩存模塊、標(biāo)記語(yǔ)言解析模塊、布局模塊、用戶界面模塊。
擴(kuò)展標(biāo)記語(yǔ)言模塊主要根據(jù)車載網(wǎng)絡(luò)的特點(diǎn),在保持與HTML語(yǔ)言兼容性的同時(shí),使用XML技術(shù)對(duì)HTML語(yǔ)言進(jìn)行擴(kuò)展,定義一種基于車載網(wǎng)絡(luò)的標(biāo)記語(yǔ)言EXML,擴(kuò)展標(biāo)記語(yǔ)言模塊以模塊的方式定義。網(wǎng)絡(luò)接口與緩沖模塊主要用于同時(shí)連接汽車局域網(wǎng)絡(luò)和互聯(lián)網(wǎng)絡(luò),以獲取汽車實(shí)時(shí)信息和廣泛的互聯(lián)網(wǎng)信息;文檔解析模塊是在基于車載網(wǎng)絡(luò)的嵌入式瀏覽器中使用的標(biāo)記語(yǔ)言,有兩種,分別為HTML和EXML,其中包括HTML語(yǔ)言的基本標(biāo)簽。因此,在語(yǔ)言解析模塊中使用同一個(gè)解析器,對(duì)兩種標(biāo)記語(yǔ)言進(jìn)行解析,并將解析的結(jié)果存在內(nèi)存中;文檔布局模塊主要用于確定每個(gè)頁(yè)面元素的大小,頁(yè)面元素分為文本、圖像和圖形兩類,其中圖像和圖像的大小可以直接獲取,文本的大小則受標(biāo)簽和屬性的影響;用戶界面顯示模塊的作用是顯示用戶界面,其中包括:工作區(qū)、標(biāo)題欄、標(biāo)簽欄、實(shí)時(shí)標(biāo)簽顯示區(qū)等。他們之間的關(guān)系如圖1所示。
基于車載網(wǎng)絡(luò)的嵌入式瀏覽器的模塊設(shè)計(jì)
網(wǎng)絡(luò)接口設(shè)計(jì)
網(wǎng)絡(luò)結(jié)構(gòu)模塊分為兩部分,即互聯(lián)網(wǎng)絡(luò)接口與實(shí)時(shí)網(wǎng)絡(luò)接口。
互聯(lián)網(wǎng)絡(luò)接口主要負(fù)責(zé)互聯(lián)網(wǎng)絡(luò)接入功能。首先是通過(guò)網(wǎng)絡(luò)協(xié)議建立到服務(wù)器的連接,然后向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器確認(rèn)請(qǐng)求,并負(fù)責(zé)把瀏覽器請(qǐng)求的文件通過(guò)網(wǎng)絡(luò)協(xié)議傳送給瀏覽器。具體的過(guò)程如圖2所示。
圖2 互聯(lián)網(wǎng)絡(luò)接口的工作模型
車載局域網(wǎng)絡(luò)接口主要實(shí)現(xiàn)瀏覽器對(duì)汽車實(shí)時(shí)信息的獲取。瀏覽器和汽車網(wǎng)絡(luò)節(jié)點(diǎn)通信的方式有兩種:應(yīng)答式通信和被動(dòng)式通信。
在應(yīng)答式通信過(guò)程中,車載網(wǎng)絡(luò)嵌入式瀏覽器對(duì)節(jié)點(diǎn)發(fā)送獲取某項(xiàng)參數(shù)的請(qǐng)求,網(wǎng)絡(luò)節(jié)點(diǎn)根據(jù)請(qǐng)求以EXML消息的形式發(fā)送實(shí)時(shí)信息。瀏覽器收到信息后通過(guò)解析模塊解析,更新數(shù)據(jù)并刷新顯示。
在被動(dòng)方式下,網(wǎng)絡(luò)節(jié)點(diǎn)按一定的時(shí)間周期發(fā)送包含實(shí)時(shí)信息的EXML消息,瀏覽器偵聽(tīng)網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)送來(lái)的信息。一旦有新消息傳來(lái),瀏覽器就通知解析模塊更新數(shù)據(jù),并刷新顯示。EXML消息的格式如下:
msg>信息類別>參數(shù)值信息類別>msg>
解析模塊的設(shè)計(jì)
文檔解析模塊是整個(gè)系統(tǒng)的基礎(chǔ)模塊。在基于車載網(wǎng)絡(luò)的嵌入式瀏覽器中,我們根據(jù)車載網(wǎng)絡(luò)的應(yīng)用實(shí)踐將HTML語(yǔ)言進(jìn)行擴(kuò)展,形成了EXML語(yǔ)言。EXML語(yǔ)言是XML語(yǔ)言在車載網(wǎng)絡(luò)系統(tǒng)中的一個(gè)應(yīng)用,所以對(duì)EXML語(yǔ)言的解析可以使用標(biāo)準(zhǔn)的XML語(yǔ)言解析技術(shù)。XML的解析方式又有兩種:基于事件驅(qū)動(dòng)的解析方式(SAX方式)和基于樹(shù)的解析方式(DOM方式)。SAX技術(shù)在響應(yīng)事件的同時(shí)對(duì)標(biāo)記文本進(jìn)行處理,并不保存中間數(shù)據(jù)結(jié)構(gòu)。DOM解析方式采用的是基于樹(shù)的解析方式,并使用XML Schema驗(yàn)證。這種方式在解析完XML文檔后生成一個(gè)文檔樹(shù),應(yīng)用程序可以遍歷、搜索、編輯該文檔樹(shù)。
在實(shí)際的車載網(wǎng)絡(luò)中,嵌入式瀏覽器不僅僅需要對(duì)靜態(tài)的超文本信息進(jìn)行瀏覽,還需要把下層節(jié)點(diǎn)發(fā)來(lái)的數(shù)據(jù)進(jìn)行實(shí)時(shí)處理、顯示和保存。這就需要在內(nèi)存中保存一個(gè)完整的解析數(shù)據(jù)結(jié)構(gòu),以方便數(shù)據(jù)的實(shí)時(shí)更新和顯示。因此使用DOM解析技術(shù)更加符合車載網(wǎng)絡(luò)的應(yīng)用要求。
在文檔解析中,遵循先外后內(nèi)、標(biāo)簽后屬性、先到先解析的順序。首先處理處于嵌套外層的標(biāo)簽,然后處理標(biāo)簽的屬性;對(duì)于同一層次的標(biāo)簽,先解析前面的。通過(guò)一個(gè)標(biāo)簽堆棧來(lái)獲得嵌套信息,對(duì)標(biāo)簽的父標(biāo)簽指針賦值。具體的解析算法如圖3所示。
圖3 解析模塊算法流程圖
布局模塊的設(shè)計(jì)
HTML語(yǔ)言在對(duì)標(biāo)記的定義中包括兩類信息:數(shù)據(jù)信息和顯示信息,而在XML語(yǔ)言定義的標(biāo)記語(yǔ)言文檔是對(duì)信息的結(jié)構(gòu)化表示,并不包括顯示信息。在處理對(duì)XML語(yǔ)言的顯示中,可以使用CSS(Cascading Style Sheets)樣式單添加額外的顯示信息,或者通過(guò)xCBL將XML文檔轉(zhuǎn)換成HTML格式的文件,然后再交付給瀏覽器,由瀏覽器顯示轉(zhuǎn)換的結(jié)果。
EXML語(yǔ)言也不包括顯示信息,不能決定頁(yè)面元素的顯示位置。通過(guò)CSS和XML定義顯示的方式會(huì)照成瀏覽器的高資源占用。因此,在嵌入式瀏覽器中采用主題文件定義每個(gè)頁(yè)面元素的顯示位置。
頁(yè)面元素的布局分為動(dòng)態(tài)布局和靜態(tài)布局兩種,因?yàn)镠TML標(biāo)記包含顯示數(shù)據(jù),在解析HTML兼容標(biāo)記時(shí)采用動(dòng)態(tài)布局算法,通過(guò)標(biāo)記的屬性和標(biāo)記本身來(lái)決定布局。在對(duì)其他標(biāo)簽布局時(shí),根據(jù)顯示分辨率和使用習(xí)慣對(duì)元素的布局進(jìn)行定義并儲(chǔ)存在主題文件中。瀏覽器在處理這些標(biāo)簽的布局時(shí),首先讀取主題文件獲得布局信息,然后根據(jù)標(biāo)簽內(nèi)容進(jìn)行布局。
文檔布局模塊負(fù)責(zé)將經(jīng)過(guò)解析器處理的標(biāo)記語(yǔ)言文檔中元素在瀏覽器工作區(qū)中合適的位置顯示。頁(yè)面的布局分為以下3個(gè)步驟:
(1)獲取頁(yè)面元素。頁(yè)面元素以EXML文檔中標(biāo)記的形式存儲(chǔ),瀏覽器解析模塊通過(guò)對(duì)標(biāo)記語(yǔ)言的解析,將標(biāo)記中所包含的模塊化信息儲(chǔ)存在標(biāo)簽數(shù)據(jù)結(jié)構(gòu)中。布局模塊首先順次讀取標(biāo)簽信息。
(2)調(diào)用標(biāo)簽的布局函數(shù)。布局模塊通過(guò)綁定布局函數(shù)實(shí)現(xiàn)對(duì)布局函數(shù)的調(diào)用。綁定元素的布局函數(shù)是通過(guò)查找布局函數(shù)列表來(lái)實(shí)現(xiàn)的。布局函數(shù)列表是一張儲(chǔ)存標(biāo)簽名字和對(duì)應(yīng)標(biāo)簽布局函數(shù)地址的二維表。布局模塊調(diào)用布局函數(shù),將元素根據(jù)布局算法布局到虛擬的顯示數(shù)據(jù)結(jié)構(gòu)中。如果標(biāo)簽的名字不在標(biāo)簽布局函數(shù)列表中,說(shuō)明標(biāo)簽屬于擴(kuò)展標(biāo)記,將通過(guò)擴(kuò)展標(biāo)記函數(shù)顯示。
(3)通過(guò)顯示窗口完成以布局標(biāo)記的顯示。由于嵌入式應(yīng)用中顯示屏的分辨率限制,有時(shí)候不能一次顯示所有的元素。布局模塊會(huì)根據(jù)顯示屏分辨率和頁(yè)面的大小決定顯示元素的數(shù)量。
交互界面的設(shè)計(jì)
交互界面也即瀏覽器界面模塊,主要負(fù)責(zé)瀏覽器的主框架顯示,提供標(biāo)簽瀏覽、主題顯示,以及處理與用戶的交互。
針對(duì)不同的硬件平臺(tái)甚至相同硬件平臺(tái)不同尺寸的液晶屏,交互界面也要發(fā)生改變??梢浦残院涂膳渲眯砸彩乔度胧綖g覽器所必需的。
為了適應(yīng)不同的硬件環(huán)境特別是不同分辨率的屏幕,在基于車載網(wǎng)絡(luò)的嵌入式瀏覽器設(shè)計(jì)過(guò)程中使用多主題,以實(shí)現(xiàn)可移植和可配置。主題方法是指使用配置文件對(duì)可視化系統(tǒng)中實(shí)現(xiàn)用戶交互界面進(jìn)行圖形效果配置的一種方式。基于車載網(wǎng)絡(luò)的嵌入式瀏覽器的主題是對(duì)可配置主題方法的擴(kuò)展,利用主題文件不僅僅可以配置界面的顏色樣式、顯示模式,還可以根據(jù)不同屏幕的分辨率,方便地調(diào)整界面元素的大小和布局。
考慮到系統(tǒng)的可移植性、可配置性和系統(tǒng)的時(shí)間空間性能,基于車載網(wǎng)絡(luò)的嵌入式瀏覽器的圖形系統(tǒng)采用microwindows 嵌入式圖形系統(tǒng)。這是一個(gè)開(kāi)放源碼嵌入式GUI軟件,目的是把現(xiàn)代圖形視窗環(huán)境引入到小型設(shè)備平臺(tái)上。
雙層消息機(jī)制的設(shè)計(jì)
由于車載網(wǎng)絡(luò)的復(fù)雜性,瀏覽器所要處理的信息不僅僅來(lái)源于互聯(lián)網(wǎng)絡(luò),還可以來(lái)自底層網(wǎng)絡(luò)通過(guò)網(wǎng)關(guān)傳來(lái)的實(shí)時(shí)消息。來(lái)自互聯(lián)網(wǎng)的信息往往是靜態(tài)的,根據(jù)用戶的要求進(jìn)行更新,而來(lái)自底層網(wǎng)絡(luò)的實(shí)時(shí)消息是動(dòng)態(tài)的,對(duì)實(shí)時(shí)性要求很高。使用單層的消息循環(huán)機(jī)制會(huì)造成實(shí)時(shí)信息不能及時(shí)顯示,或者交互消息占用大量的系統(tǒng)資源,因此,在瀏覽器中采用雙層消息機(jī)制。
在雙層消息機(jī)制是通過(guò)消息分組來(lái)實(shí)現(xiàn)的。首先把消息分為實(shí)時(shí)消息和交互消息兩組,實(shí)時(shí)消息表示消息需要實(shí)時(shí)處理,交互消息表示非實(shí)時(shí)的交互消息。其中,實(shí)時(shí)消息按照不同的優(yōu)先級(jí)排列成為一組,系統(tǒng)自動(dòng)處理優(yōu)先級(jí)較高的消息,延遲優(yōu)先級(jí)較低的消息。交互消息組的消息不分優(yōu)先級(jí),系統(tǒng)在某一時(shí)刻首先檢查實(shí)時(shí)優(yōu)先級(jí)組消息結(jié)構(gòu)體數(shù)組是否有被占用的消息,如果有則選擇最高優(yōu)先級(jí)消息進(jìn)行響應(yīng),響應(yīng)完畢清除實(shí)時(shí)消息占用標(biāo)志。如果為空則轉(zhuǎn)入交互消息循環(huán)。具體消息循環(huán)算法示意性代碼如下所示:
Msgloop()
{
while (1){
if (msg_select_hmsg()==-1)
//沒(méi)有實(shí)時(shí)消息到來(lái)
{
GrSelectNextMSG();
//獲取交互消息隊(duì)列中的下個(gè)消息
switch()
//根據(jù)交互消息類型選擇消息處理函數(shù)
…….}
else
{
*(Rtmsg_msgarr[msg_select_ hmsg()].func)();
//選擇最高優(yōu)先級(jí)實(shí)時(shí)消息進(jìn)行響應(yīng)。
}
}
雙層消息循環(huán)結(jié)構(gòu)的實(shí)質(zhì)是將交互消息組作為優(yōu)先級(jí)最低的消息來(lái)處理。邏輯結(jié)構(gòu)和具體消息響應(yīng)如圖4所示。
圖4 實(shí)時(shí)消息優(yōu)先級(jí)判斷流程圖
嵌入式瀏覽器在不同嵌入式硬件平臺(tái)上的應(yīng)用
像其他可移植軟件一樣,嵌入式瀏覽器的開(kāi)發(fā)采用分層結(jié)構(gòu),根據(jù)不同的網(wǎng)絡(luò)環(huán)境預(yù)留了標(biāo)準(zhǔn)接口,并使用標(biāo)準(zhǔn)C語(yǔ)言編寫。因此,瀏覽器具可以很好地適應(yīng)日益復(fù)雜的車載網(wǎng)絡(luò)環(huán)境。
只要提供對(duì)應(yīng)操作系統(tǒng)的硬件驅(qū)動(dòng),就可以在不同的硬件平臺(tái)上使用。
表1是通過(guò)測(cè)試的嵌入式瀏覽器所支持的操作系統(tǒng)和編譯器列表。
結(jié)語(yǔ)
基于車載網(wǎng)絡(luò)的嵌入式瀏覽器研發(fā)主要成果是設(shè)計(jì)和實(shí)現(xiàn)了一款面向多層汽車局域網(wǎng)絡(luò),針對(duì)于車載網(wǎng)絡(luò)信息處理需要,使用XML為信息載體,可以同時(shí)顯示汽車內(nèi)部實(shí)時(shí)信息和互聯(lián)網(wǎng)絡(luò)信息的專用嵌入式瀏覽器。該瀏覽器可以同時(shí)顯示汽車內(nèi)部實(shí)時(shí)信息和互聯(lián)網(wǎng)絡(luò)信息,通用性好,能夠運(yùn)行于不同的硬件平臺(tái)?!?/P>
參考文獻(xiàn):
1. Extensible Markup Language (XML) 1.1 (Second Edition) [S] W3C Recommendation.16 August 2006
2. 彭新宇,姚振強(qiáng).XML技術(shù)在嵌入式系統(tǒng)中的應(yīng)用[J] .計(jì)算機(jī)應(yīng)用研究.第8期:133-135
3. W3C XML Activity W3C Recommendation XML Information Set (Second Edition) [S] .W3C Recommendation 4 February 2004
4. 郭瑞杰,王斌,丁捷.基于表格驅(qū)動(dòng)的XML配置文件解析與生成技術(shù)[J] .計(jì)算機(jī)工程與應(yīng)用.2006年09:90-92
5. Lee J. White, Regression Testing of GUI Event Interactions, IEEE 1996
6. Lan Ye, Yong Luo, Motoyasu Nagata.XML Based Message Queuing[J] . IEEE 2005
7. T. Nolte, M. Nolin, and H. Hansson. Server-Based Real-TimeScheduling of the CAN Bus, in Proc. 11th IFAC Symp. InformationControl Problems in Manufacturing (INCOM’04), Salvador, Brazil,Apr. 2004.
評(píng)論