湯佳明,安偉
(江南大學(xué)機(jī)械工程學(xué)院,江蘇無(wú)錫214122)
隨著電子技術(shù)的發(fā)展,現(xiàn)代汽車(chē)許多系統(tǒng)使用了大量傳感器和電子控制單元[1],相應(yīng)的軟件開(kāi)發(fā)需求也不斷增加。同時(shí),傳感器采集的數(shù)據(jù)不僅是一種巨大的經(jīng)濟(jì)資產(chǎn)[2],也是設(shè)計(jì)優(yōu)化與生產(chǎn)改良的重要來(lái)源。因此,針對(duì)當(dāng)前車(chē)輛系統(tǒng)軟件化程度不斷提升的趨勢(shì)與項(xiàng)目需求,開(kāi)發(fā)相應(yīng)的上位機(jī)通信界面與數(shù)據(jù)庫(kù)管理軟件極為必要。
Delphi是一款可創(chuàng)建應(yīng)用服務(wù)器與客戶(hù)端應(yīng)用[3]的商業(yè)軟件。在使用由傳統(tǒng)面向過(guò)程的Pascal語(yǔ)言發(fā)展而來(lái)的Object Pascal語(yǔ)言[4]與數(shù)據(jù)庫(kù)語(yǔ)言的同時(shí),包含面向?qū)ο蟮目梢暬_(kāi)發(fā)模塊,可在Windows環(huán)境下開(kāi)發(fā)各類(lèi)應(yīng)用程序,在用戶(hù)界面與數(shù)據(jù)庫(kù)設(shè)計(jì)方面應(yīng)用廣泛。因此,考慮其簡(jiǎn)易高效、成熟度高等特點(diǎn)[5],本文采用Delphi7.0開(kāi)發(fā)上位機(jī)數(shù)據(jù)通信界面與數(shù)據(jù)庫(kù)管理軟件。
本文設(shè)計(jì)的上位機(jī)數(shù)據(jù)通信界面也被稱(chēng)為用戶(hù)界面,主要作用為使用戶(hù)能夠根據(jù)需求通過(guò)串口發(fā)送涉及汽車(chē)尾氣后處理過(guò)程的各類(lèi)專(zhuān)用參數(shù)數(shù)據(jù),如發(fā)動(dòng)機(jī)轉(zhuǎn)速、環(huán)境溫度壓力、進(jìn)/排氣壓力等。
在設(shè)計(jì)用戶(hù)界面的同時(shí),為方便對(duì)參數(shù)數(shù)據(jù)進(jìn)行管理與編輯,將其統(tǒng)一置于數(shù)據(jù)庫(kù)文件中,并根據(jù)實(shí)際需求設(shè)計(jì)了相應(yīng)的簡(jiǎn)易數(shù)據(jù)庫(kù)管理系統(tǒng)軟件。數(shù)據(jù)庫(kù)作為一類(lèi)包含數(shù)據(jù)屬性描述的結(jié)構(gòu)化數(shù)據(jù)集合,具有數(shù)據(jù)采集、編輯、開(kāi)發(fā)、共享等功能,是當(dāng)前大數(shù)據(jù)時(shí)代最基本的數(shù)據(jù)存儲(chǔ)單元之一,應(yīng)用前景廣闊。數(shù)據(jù)庫(kù)管理系統(tǒng)可對(duì)數(shù)據(jù)庫(kù)實(shí)施統(tǒng)一管控,根據(jù)使用的數(shù)據(jù)軟件類(lèi)型分為大中型數(shù)據(jù)庫(kù)管理系統(tǒng)和小型數(shù)據(jù)庫(kù)管理系統(tǒng),前者基于Oracle、SQL Server、Sybase等軟件開(kāi)發(fā),后者一般使用Access開(kāi)發(fā)。本文在設(shè)計(jì)過(guò)程中采用MicrosoftAccess建立數(shù)據(jù)庫(kù)文件,這也是目前應(yīng)用最廣泛的桌面數(shù)據(jù)庫(kù)編輯系統(tǒng)[6],屬于小型數(shù)據(jù)庫(kù)管理系統(tǒng)。
根據(jù)項(xiàng)目開(kāi)發(fā)要求,上位機(jī)數(shù)據(jù)通信工作方式分為按照控制器局域網(wǎng)(Controller Area Network,CAN)標(biāo)準(zhǔn)協(xié)議單點(diǎn)數(shù)據(jù)發(fā)送與Excel表格數(shù)據(jù)發(fā)送兩種。單點(diǎn)數(shù)據(jù)發(fā)送即每次發(fā)送單個(gè)參數(shù)數(shù)據(jù);表格數(shù)據(jù)發(fā)送則是選擇一個(gè)或多個(gè)以表格形式存在的參數(shù)數(shù)據(jù)發(fā)送,發(fā)送數(shù)量較多。在明確設(shè)計(jì)要求的基礎(chǔ)上,將界面分為4個(gè)功能模塊:通訊設(shè)置模塊、工作方式模塊、單點(diǎn)發(fā)送模塊、表格發(fā)送模塊,前兩者作用為選擇發(fā)送端口和波特率、選擇發(fā)送模式,后兩者實(shí)現(xiàn)不同數(shù)據(jù)發(fā)送模式的切換,上位機(jī)用戶(hù)界面工作流程如圖1所示。
圖1 用戶(hù)界面工作流程
實(shí)現(xiàn)界面功能的首要環(huán)節(jié)是讀取數(shù)據(jù),數(shù)據(jù)的讀取按照工作方式也分為單點(diǎn)讀取和表格讀取兩類(lèi)。
在單點(diǎn)數(shù)據(jù)發(fā)送過(guò)程中,每個(gè)CAN數(shù)據(jù)前均有信息識(shí)別碼,用于區(qū)分特定數(shù)據(jù),在此也為每個(gè)參數(shù)設(shè)置了單獨(dú)的兩字節(jié)CAN線(xiàn)識(shí)別碼,統(tǒng)一用a[1]、a[2]表示,用于識(shí)別并讀取單點(diǎn)參數(shù),以“發(fā)送機(jī)轉(zhuǎn)速”參數(shù)為例,其CAN線(xiàn)識(shí)別碼為:a[1]=1,a[2]=0。
在表格數(shù)據(jù)發(fā)送過(guò)程中,由于數(shù)據(jù)以Excel文件形式編輯,故需準(zhǔn)確定位與引用文件,這涉及到了文件資源的分配操作。在Delphi7.0中,通常使用try…finally語(yǔ)句保證文件的讀取和釋放,實(shí)現(xiàn)讀取表格文件功能的部分代碼如下:
數(shù)據(jù)處理過(guò)程分為解析和發(fā)送兩步,即將數(shù)據(jù)解析為規(guī)定格式后發(fā)送。在汽車(chē)電子系統(tǒng)的開(kāi)發(fā)過(guò)程中,涉及電控系統(tǒng)—尤其是數(shù)據(jù)傳輸處理模塊—的開(kāi)發(fā)時(shí),通常根據(jù)CAN總線(xiàn)協(xié)議設(shè)計(jì)。作為由德國(guó)Bosch公司推出的一種現(xiàn)場(chǎng)總線(xiàn)技術(shù),其被廣泛應(yīng)用于車(chē)輛內(nèi)部的數(shù)據(jù)通信領(lǐng)域[7],我國(guó)也根據(jù)CAN標(biāo)準(zhǔn)制定了適用于國(guó)內(nèi)汽車(chē)開(kāi)發(fā)領(lǐng)域的《商用車(chē)控制系統(tǒng)局域網(wǎng)絡(luò)(CAN)通信協(xié)議》(本文在此簡(jiǎn)稱(chēng)《協(xié)議》),《協(xié)議》規(guī)定了汽車(chē)電子系統(tǒng)開(kāi)發(fā)過(guò)程中所涉及參數(shù)的數(shù)據(jù)范圍、分辨率、數(shù)據(jù)長(zhǎng)度、類(lèi)型等屬性,設(shè)計(jì)過(guò)程中根據(jù)其標(biāo)準(zhǔn)解析數(shù)據(jù)格式。在車(chē)輛發(fā)動(dòng)機(jī)測(cè)試過(guò)程中,也有使用Delphi開(kāi)發(fā)發(fā)動(dòng)機(jī)電子測(cè)試系統(tǒng)的實(shí)例[8],在此可以作為參考。
以“發(fā)動(dòng)機(jī)轉(zhuǎn)速”參數(shù)為例:《協(xié)議》中規(guī)定其數(shù)據(jù)長(zhǎng)度為兩個(gè)字節(jié),數(shù)據(jù)范圍為0-8031.875rpm(轉(zhuǎn)/分鐘),分辨率為0.125rpm/位遞增,類(lèi)型為測(cè)量值,故在此將轉(zhuǎn)速分為高位和低位兩個(gè)字節(jié),每個(gè)字節(jié)分兩部分發(fā)送,解析代碼如下:
由于轉(zhuǎn)速分辨率為0.125=1/8,所以將緩沖量放大8倍后進(jìn)行解析運(yùn)算,解析完成后通過(guò)串口端發(fā)送數(shù)據(jù)。a[5]、a[6]組成發(fā)動(dòng)機(jī)轉(zhuǎn)速低位字節(jié),a[7]、a[8]組成轉(zhuǎn)速高位字節(jié)。同時(shí),由于串口只能發(fā)送字符型變量,故在發(fā)送前需將解析數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù),在此使用轉(zhuǎn)換字符char()將解析數(shù)據(jù)轉(zhuǎn)換為字符型量后經(jīng)串口發(fā)送,轉(zhuǎn)化語(yǔ)句如下:
MSComm1.Output:=char(a[5]);
編譯完成的用戶(hù)通信界面如圖2所示。界面分為四個(gè)功能區(qū),通訊設(shè)置完成后指示燈變?yōu)榧t色,選擇工作方式后即可在對(duì)應(yīng)模塊區(qū)域進(jìn)行操作,如當(dāng)前確定單點(diǎn)發(fā)送后在對(duì)應(yīng)區(qū)域選擇參數(shù)發(fā)送即可。
圖2 用戶(hù)通信界面
數(shù)據(jù)庫(kù)管理系統(tǒng)實(shí)現(xiàn)了對(duì)數(shù)據(jù)的編輯與管理功能,典型的數(shù)據(jù)庫(kù)管理系統(tǒng)通常分為三部分:用戶(hù)界面、數(shù)據(jù)訪(fǎng)問(wèn)鏈路和數(shù)據(jù)庫(kù)文件,三者組成一個(gè)完整的數(shù)據(jù)庫(kù)體系結(jié)構(gòu)。在設(shè)計(jì)過(guò)程中,如何訪(fǎng)問(wèn)和連接數(shù)據(jù)庫(kù)是關(guān)鍵。目前,Delphi提供并支持兩種數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)連接方式:數(shù)據(jù)引擎(Borland Database Engine,BDE)方式和動(dòng)態(tài)數(shù)據(jù)對(duì)象(Active Data Objects,ADO)方式[9]。
BDE方式是Borland公司自身開(kāi)發(fā)的專(zhuān)用數(shù)據(jù)庫(kù)連接方式,通過(guò)BDE組件連接。ADO全稱(chēng)為動(dòng)態(tài)數(shù)據(jù)對(duì)象,是由微軟公司開(kāi)發(fā)的一種訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的常用技術(shù),由一組組件模型構(gòu)成,簡(jiǎn)潔易控、功能豐富[10]、占用內(nèi)存少[11]。兩者相比,ADO技術(shù)應(yīng)用廣泛,在工業(yè)生產(chǎn)[12-13]與軌道交通領(lǐng)域[14]均有應(yīng)用實(shí)例。Delphi中的ADO技術(shù)是Borland公司基于微軟ADO數(shù)據(jù)庫(kù)連接引擎開(kāi)發(fā)的一種數(shù)據(jù)連接方法,其優(yōu)勢(shì)在于當(dāng)使用到該數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)時(shí),不需要對(duì)數(shù)據(jù)庫(kù)驅(qū)動(dòng)打包。同時(shí),由于Delphi采用的是本地編譯器直接生成技術(shù)[15],在設(shè)計(jì)數(shù)據(jù)庫(kù)管理軟件時(shí)執(zhí)行效率較高,因此在此選擇ADO數(shù)據(jù)庫(kù)連接方式。
采用ADO組件的數(shù)據(jù)庫(kù)連接方式如圖3所示。Access數(shù)據(jù)庫(kù)需通過(guò)ADO連接方式對(duì)數(shù)據(jù)進(jìn)行訪(fǎng)問(wèn)[16],經(jīng)由數(shù)據(jù)控制組件訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),通過(guò)顯示組件進(jìn)行查詢(xún)編輯。
圖3 ADO連接方式
數(shù)據(jù)庫(kù)管理軟件包含3個(gè)主功能:數(shù)據(jù)修改、數(shù)據(jù)添加、數(shù)據(jù)刪除,同時(shí),考慮到數(shù)據(jù)庫(kù)所含數(shù)據(jù)較多,所以在修改和刪除前添加數(shù)據(jù)查詢(xún)功能,以上均為目前項(xiàng)目開(kāi)發(fā)過(guò)程中使用最頻繁的功能。因此,用戶(hù)界面也基于這一需求設(shè)計(jì)為修改數(shù)據(jù)、添加數(shù)據(jù)、刪除數(shù)據(jù)三大部分,數(shù)據(jù)庫(kù)管理系統(tǒng)工作流程如圖4所示。
圖4 數(shù)據(jù)庫(kù)管理系統(tǒng)工作流程
數(shù)據(jù)修改界面用于查詢(xún)并修改指定數(shù)據(jù)、數(shù)據(jù)刪除界面用于查詢(xún)并刪除用戶(hù)指定數(shù)據(jù),由于數(shù)據(jù)庫(kù)往往包含大量數(shù)據(jù),故實(shí)現(xiàn)數(shù)據(jù)的查詢(xún)功能是關(guān)鍵,兩者均遵循“先查詢(xún)后操作”的原則,界面布局也相同。在本文設(shè)計(jì)的數(shù)據(jù)庫(kù)中,單個(gè)數(shù)據(jù)通常包含編號(hào)、名稱(chēng)、單位、數(shù)值等多個(gè)屬性,其中僅編號(hào)與名稱(chēng)具有唯一性,故將二者作為查詢(xún)關(guān)鍵詞。以根據(jù)參數(shù)編號(hào)查詢(xún)參數(shù)為例,實(shí)現(xiàn)數(shù)據(jù)查詢(xún)功能的部分代碼如下:
數(shù)據(jù)添加界面用于根據(jù)需求增加參數(shù),拓展數(shù)據(jù)范圍。此處輸入的增添數(shù)據(jù)與修改時(shí)有區(qū)別,主要在于編輯組件的不同。此處用到了控制組件中的TDBEdit組件,這是一類(lèi)單行字段編輯框組件,可編輯修改數(shù)據(jù)集中一個(gè)特定字段的值。實(shí)現(xiàn)數(shù)據(jù)添加功能的部分代碼如下:
圖5 系統(tǒng)運(yùn)行界面
數(shù)據(jù)庫(kù)管理系統(tǒng)運(yùn)行顯示界面如圖5所示。3個(gè)功能頁(yè)面置于同一窗體中,點(diǎn)擊不同的頁(yè)面標(biāo)簽完成功能切換,頁(yè)面均包含左側(cè)的表格數(shù)據(jù)顯示與右側(cè)的屬性編輯界面,不同之處在于修改和刪除功能頁(yè)面增加了位于左下方的查詢(xún)功能。圖中,圖(a)為修改編號(hào)為10的參數(shù)數(shù)據(jù)界面,圖(b)增添了編號(hào)為157的參數(shù),圖(c)則通過(guò)刪除功能刪除了新增的157號(hào)參數(shù)。
本文說(shuō)明了基于CAN通信標(biāo)準(zhǔn)的上位機(jī)用戶(hù)數(shù)據(jù)通信界面和相應(yīng)數(shù)據(jù)庫(kù)系統(tǒng)管理軟件的設(shè)計(jì)過(guò)程。使用Delphi開(kāi)發(fā)用戶(hù)界面和數(shù)據(jù)庫(kù)系統(tǒng)軟件,解決了汽車(chē)后處理系統(tǒng)開(kāi)發(fā)過(guò)程中數(shù)據(jù)的通信與管理問(wèn)題,在降低軟件成本的同時(shí)具有良好的擴(kuò)展性。其中,用戶(hù)界面根據(jù)CAN通信協(xié)議標(biāo)準(zhǔn)設(shè)置數(shù)據(jù)發(fā)送格式,采用可視化模塊組件進(jìn)行界面布局,簡(jiǎn)潔方便;簡(jiǎn)易數(shù)據(jù)庫(kù)管理系統(tǒng)通過(guò)ADO方式構(gòu)建訪(fǎng)問(wèn)鏈路以連接數(shù)據(jù)庫(kù)與用戶(hù)界面,設(shè)置ADO表格連接組件與數(shù)據(jù)源模塊控制系統(tǒng)界面的數(shù)據(jù)顯示。
總體而言,上位機(jī)界面與數(shù)據(jù)庫(kù)管理系統(tǒng)達(dá)到了設(shè)計(jì)要求,能夠執(zhí)行特定的數(shù)據(jù)通信與編輯任務(wù),對(duì)依托更高級(jí)工具平臺(tái)的深入開(kāi)發(fā)過(guò)程具有一定參考價(jià)值。但其仍存在不足之處,主要在于通信界面與數(shù)據(jù)庫(kù)系統(tǒng)功能較少,無(wú)法滿(mǎn)足較復(fù)雜的通信管理任務(wù),需進(jìn)一步拓展功能。