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