摘 要: 應(yīng)用Visual Basic6.0開發(fā)燃料電池發(fā)動(dòng)機(jī)車載監(jiān)控系統(tǒng)軟件,包括動(dòng)態(tài)主控界面設(shè)計(jì)、通訊程序設(shè)計(jì)、控制程序設(shè)計(jì)和數(shù)據(jù)存儲(chǔ)程序設(shè)計(jì)。描述了整個(gè)監(jiān)控畫面的設(shè)計(jì)原理和方法,詳細(xì)地介紹了通信協(xié)議和上位機(jī)監(jiān)控程序的工作流程,并補(bǔ)充說明了VB中PID控制算法的實(shí)現(xiàn),用以調(diào)整電堆溫度、壓力、水位等各種監(jiān)控參數(shù);最后介紹了歷史數(shù)據(jù)存儲(chǔ)程序的操作方法。實(shí)踐證明,該系統(tǒng)圖形界面友好,數(shù)據(jù)采集準(zhǔn)確可靠,操作簡單,安全穩(wěn)定。
關(guān)鍵詞: VB;燃料電池發(fā)動(dòng)機(jī);串行數(shù)據(jù)通信;PID控制
前言
為了保護(hù)地球環(huán)境,以燃料電池代替燃油發(fā)動(dòng)機(jī)是未來汽車發(fā)展的趨勢。燃料電池汽車與傳統(tǒng)汽車的區(qū)別主要在于由燃料電池動(dòng)力系統(tǒng)替換了傳統(tǒng)的內(nèi)燃機(jī)動(dòng)力系統(tǒng)。顯然,其發(fā)動(dòng)機(jī)系統(tǒng)的研究成了燃料電池電動(dòng)汽車研發(fā)的關(guān)鍵。因此,在研發(fā)過程中,需要對(duì)發(fā)動(dòng)機(jī)的各系統(tǒng)進(jìn)行實(shí)時(shí)監(jiān)控,記錄各種相關(guān)試驗(yàn)數(shù)據(jù),分析其運(yùn)行特性,為發(fā)動(dòng)機(jī)控制策略的不斷改進(jìn)提供依據(jù),同時(shí)對(duì)整車性能進(jìn)行評(píng)估。因此,燃料電池發(fā)動(dòng)機(jī)車載控制系統(tǒng)的開發(fā)具有很重要的現(xiàn)實(shí)意義。
VisualBasic6.0提供了豐富的控件,可以方便、快捷地開發(fā)燃料電池發(fā)動(dòng)機(jī)車載系統(tǒng)的整個(gè)軟件程序,達(dá)到對(duì)現(xiàn)場各個(gè)參數(shù)有效監(jiān)控的目的。同時(shí),VB中PID控制算法也可以對(duì)燃料電池水量、溫度、壓力等各個(gè)監(jiān)控量進(jìn)行實(shí)時(shí)整定。
1 燃料電池車載監(jiān)控系統(tǒng)的軟件設(shè)計(jì)
Visual Basic(簡稱VB),是微軟公司推出的強(qiáng)有力的系列開發(fā)軟件之一。不但提供了良好的界面設(shè)計(jì)能力,而且在微機(jī)串口通信方面也有很強(qiáng)的功能,它提供的串行通信控件MSComm32.OCX,全面提供了使用RS-232進(jìn)行數(shù)據(jù)通信的所有協(xié)議,我們可以使用不同的工作方式來處理和解決燃料電池車載監(jiān)控系統(tǒng)通信軟件設(shè)計(jì)的所有問題。
1.1 主控界面設(shè)計(jì)
燃料電池主控界面的設(shè)計(jì)是整個(gè)上位機(jī)軟件設(shè)計(jì)的重點(diǎn)之一,它直接影響發(fā)動(dòng)機(jī)系統(tǒng)監(jiān)控效率的高低。因此,清晰、人性化的界面設(shè)計(jì)是整個(gè)軟件開發(fā)的重要前提。
以VB6.0為軟件平臺(tái)開發(fā)的燃料電池車載監(jiān)控系統(tǒng)的主控畫面如圖1所示。 通過該主界面可以完成對(duì)系統(tǒng)主要設(shè)備運(yùn)行狀態(tài)的實(shí)時(shí)監(jiān)控,包括用不同的顏色來表示設(shè)備的啟、停,用文本框顯示系統(tǒng)主要的運(yùn)行參數(shù),如電壓、電流、壓力等,利用CommandButton控件的Click事件完成布爾變量的發(fā)送,從而實(shí)現(xiàn)對(duì)開關(guān)和閥門的開啟、關(guān)閉控制。同時(shí),添加各種控件,導(dǎo)入圖片,并通過設(shè)置其不同屬性,達(dá)到了美觀、實(shí)用的效果。
[align=center]

圖1 燃料電池車載監(jiān)控系統(tǒng)主畫面[/align]
1.2 通信程序設(shè)計(jì)
燃料電池發(fā)動(dòng)機(jī)車載監(jiān)控系統(tǒng)的通信包括上位機(jī)和下位機(jī)的通信。主要是PC機(jī)和下位機(jī)硬件之間通過串口線完成數(shù)據(jù)的傳輸,以期對(duì)工業(yè)現(xiàn)場采集的信息進(jìn)行適時(shí)準(zhǔn)確地監(jiān)控。
1.2.1 通信協(xié)議
在串行通信的實(shí)現(xiàn)過程中,底層為通信工作以及操作系統(tǒng)和計(jì)算機(jī)硬件提供了有力的支持,但是為了實(shí)現(xiàn)特定的用戶功能,必須在軟件中制定基于應(yīng)用的通信協(xié)議。在開發(fā)燃料電池串行數(shù)據(jù)通信程序的過程中,通過長期的調(diào)試和不斷的總結(jié),最終得到一套完整而可靠的通信協(xié)議.該協(xié)議一共分為3層,分別為:
1.物理層。規(guī)定了電子電氣方面的特性及原始位流在物理鏈路上的傳輸,提供了原始位流傳輸信道;
串行通信口:RS-232串口
硬件接口:DSP輸出的TTL電平經(jīng)專用集成塊轉(zhuǎn)換成RS-232信號(hào)
波特率:9600
字符格式:8位數(shù)據(jù)位,1位停止位
差錯(cuò)校驗(yàn):無奇偶校驗(yàn)
2.數(shù)據(jù)鏈接層。定義了數(shù)據(jù)幀作為信息傳輸單元,使用差錯(cuò)校驗(yàn)和幀應(yīng)答等技術(shù),屏蔽物理路上的噪聲,使傳輸通道變成一條可靠的信道;數(shù)據(jù)鏈接層為數(shù)據(jù)的準(zhǔn)確通信提供了充足的信息。表1描述了設(shè)備數(shù)據(jù)包傳輸?shù)慕Y(jié)構(gòu)。
表1 數(shù)據(jù)包傳輸結(jié)構(gòu)

LENGTH——數(shù)據(jù)包字節(jié)總數(shù);
TYPE——命令類型。分為系統(tǒng)型(0X00)、具體型(0X11,0X13,0X15,0X16,0X17,0X18,0X1A,0X1B)和多協(xié)議型(0X14);
CMD——命令的ID號(hào)。決定命令類型為命令信息還是應(yīng)答信息;
DATA——由CMD決定數(shù)據(jù)字節(jié)長度;
CHKSUM——校驗(yàn)和碼。循環(huán)冗余校驗(yàn)是一種常用的校驗(yàn)碼。
3.應(yīng)用層。負(fù)責(zé)建立通信伙伴之間的連接關(guān)系,實(shí)現(xiàn)操作同步,報(bào)警及數(shù)據(jù)完整性等管理任務(wù)。對(duì)用戶及用戶程序提供以下功能:
?。?)選擇控制多臺(tái)下位機(jī)定時(shí),即時(shí)或適時(shí)跟蹤采樣現(xiàn)場信息,將數(shù)據(jù)送數(shù)據(jù)庫保存,數(shù)據(jù)庫存儲(chǔ)一定時(shí)段的數(shù)據(jù),程序具有對(duì)數(shù)據(jù)二次處理,繪制曲線圖及報(bào)警等功能;
?。?)設(shè)置采樣參數(shù);
?。?)當(dāng)通信線路中斷或通信失敗時(shí),往下位機(jī)發(fā)出報(bào)警信息;
1.2.2 上位機(jī)工作流程
燃料電池發(fā)動(dòng)機(jī)車載監(jiān)控系統(tǒng)的上位機(jī)軟件分為手動(dòng)程序和自動(dòng)程序,自動(dòng)程序是通信程序設(shè)計(jì)的最終版,一旦進(jìn)入開機(jī)工作狀態(tài),就能夠自動(dòng)完成對(duì)下位機(jī)的監(jiān)控功能,包括發(fā)送和接收信息。(‘*******為注釋部分)
?。?) 發(fā)送信息程序段。其工作流程如下圖2。簡單代碼舉例如下:
Private Sub Cmdstop_Click() ‘***********發(fā)送開機(jī)命令***********
byteout(0) = &HAA
byteout(1) = &H55
MSComm1.Output = byteout
End Sub
?。?)接收信息程序段。接收部分需要準(zhǔn)確采集現(xiàn)場上傳的適時(shí)參數(shù),如溫度、電流、電壓、水位等,以便分析和改進(jìn)整車性能,是通信程序設(shè)計(jì)的重點(diǎn),通過VB中MSComm控件的OnComm事件來完成。其工作流程如下圖3,簡單代碼舉例如下:
Private Sub MSComm1_OnComm() ‘***數(shù)據(jù)接收
Dim buf() As Variant
Dim buf1(1 To 2) As Byte
buf = MSComm1.Input ‘***通過MSComm的Iutput屬性接收數(shù)據(jù)
buf1(1) = buf(0)
buf1(2) = buf(1)
Text1.Text = buf1(2) * 256 + buf1(1)
End Sub
[align=center]

圖2 上位機(jī)發(fā)送信息流程圖

圖3 上位機(jī)接收信息流程圖[/align]
2 控制程序設(shè)計(jì)
PID控制是比例,積分,微分控制的縮寫。它具有原理簡單、使用方便、適用性廣和魯棒性強(qiáng)等特點(diǎn),在工業(yè)控制領(lǐng)域具有強(qiáng)大的生命力。改變P可提高響應(yīng)速度,減小靜態(tài)誤差,但太大會(huì)增大超調(diào)量和穩(wěn)定時(shí)間;I與P的作用基本相似,但要使靜態(tài)誤差為0,必須使用積分;D與P,I的作用相反,主要是為了減小超調(diào),減小穩(wěn)定時(shí)間。在仿真和實(shí)驗(yàn)中,如果被控對(duì)象的結(jié)構(gòu)和參數(shù)不能完全把握,或者得不到精確的數(shù)學(xué)模型,而且其它常規(guī)的控制方法難以實(shí)現(xiàn),這時(shí),系統(tǒng)控制器的結(jié)構(gòu)和參數(shù)必須依靠經(jīng)驗(yàn)和現(xiàn)場調(diào)試來確定,采用PID控制技術(shù)最為方便。
現(xiàn)階段,我們對(duì)燃料電池電堆的模型不是十分了解,還不能通過有效的測試手段來獲得系統(tǒng)的參數(shù),因此,采用增量PID控制算法比較適合。在VB中,增量PID控制算法是通過自定義Function函數(shù)及調(diào)用該函數(shù)來實(shí)現(xiàn)的。
自定義Function函數(shù):
Public Function PID(ByVal P As Single, I As Single, D As Single, PIDset As Single, PIDreturn As Single, DeltaPIDpre_1 As Single, DeltaPIDpre_2 As Single) As Single ‘********增量PID計(jì)算自定義函數(shù)**********
‘**P——PID比例系數(shù);I——PID積分系數(shù);D——PID微分系數(shù)
‘**PIDset——PID設(shè)定值
‘**PIDreturn——PID反饋值
‘**DeltaPIDpre_1——PID偏差前值
‘**DeltaPIDpre_2——PID偏差前前值
Dim PIDout As Single ‘**PID輸出值**
Dim DeltaPID As Single ‘**PID偏差值,為中間變量**
DeltaPID = PIDset - PIDreturn
PIDout = P * (DeltaPID - DeltaPIDpre_1) + I * DeltaPID + D * (DeltaPID - 2 * DeltaPIDpre_1 + DeltaPIDpre_2)
DeltaPIDpre_2 = DeltaPIDpre_1
DeltaPIDpre_1 = DeltaPID
End Function
要對(duì)輸入的控制量進(jìn)行PID調(diào)節(jié),只需簡單的調(diào)用上述函數(shù)即可。
例如,在對(duì)電堆的輸入溫度進(jìn)行控制時(shí),調(diào)用上述函數(shù)過程如下:
Private Sub MSComm1_OnComm() ‘*******數(shù)據(jù)接收***********
Dim Mid As Single
Mid = Format(Round((buf1(5) * 256 + buf1(4) - 4095 / 5) * 125 / 4095, 2), "0.0") ‘*****輸入電堆溫度*****
Text1.Text = Mid + PID(outTP, outTI, outTD, outTPIDset, outTPIDreturn, outTDeltaPIDpre_1, outTDeltaPIDpre_2)
‘**********outTP——溫度P, outTI——溫度I, outTD——溫度D, outTPIDset——溫度設(shè)定, outTPIDreturn——溫度, outTDeltaPIDpre_1——溫度前值, outTDeltaPIDpre_2——溫度后值
End Sub
3 數(shù)據(jù)存儲(chǔ)程序設(shè)計(jì)
VB語言提供了多種操縱數(shù)據(jù)庫的方法,使用Ado Data控件訪問數(shù)據(jù)庫就是一種很常用的操縱方法。通過設(shè)置和操縱其屬性就可以實(shí)現(xiàn)與數(shù)據(jù)庫的連接,通過綁定數(shù)據(jù)感知控件就能提供一個(gè)訪問數(shù)據(jù)庫的界面,用來對(duì)數(shù)據(jù)庫數(shù)據(jù)的瀏覽,添加,刪除,修改等操作。整個(gè)過程實(shí)現(xiàn)和操作起來非常簡單方便。具體連接步驟如下:
(1)建立Access數(shù)據(jù)庫
?。?)引用Ado Data控件和數(shù)據(jù)感知控件DataGrid
(3)分別設(shè)置Ado Data控件的ConnectionString、CommandType、RecordSource三個(gè)重要的屬性以及DataGrid控件的DataSource屬性
在設(shè)置Ado Data控件的ConnectionString屬性的最后,將出現(xiàn)“測試連接”的按扭,通過單擊此按扭可以清楚的了解到數(shù)據(jù)庫連接成功與否,非常簡單方便。具體程序的編寫格式為:
數(shù)據(jù)庫畫面名稱.Adodc1.Recordset.AddNew
數(shù)據(jù)庫畫面名稱.Adodc1.Recordset.Fields("日期") = Date
數(shù)據(jù)庫畫面名稱.Adodc1.Recordset.Fields("時(shí)間") = Format(Now, "h:mm:ss")
數(shù)據(jù)庫畫面名稱.Adodc1.Recordset.Fields("參數(shù)名稱") =接收到的參量數(shù)據(jù)
數(shù)據(jù)庫畫面名稱.Adodc1.Recordset.Update
數(shù)據(jù)庫的設(shè)計(jì)需要特別注意的是:
1.在Access數(shù)據(jù)庫定義的各個(gè)參數(shù)的名稱、類型、出現(xiàn)的順序以及格式都必須與代碼中的“參數(shù)名稱“完全一致。
2.設(shè)置Ado Data控件的ConnectionString屬性的時(shí)候,必須選擇正確的數(shù)據(jù)庫所在路徑。
4 結(jié)束語
現(xiàn)場調(diào)試表明,該車載監(jiān)控系統(tǒng)能夠長時(shí)間穩(wěn)定工作,并且抗干擾能力較強(qiáng),能方便有效地監(jiān)控現(xiàn)場的各種實(shí)驗(yàn)數(shù)據(jù)。其數(shù)據(jù)庫管理操作也具有極大的靈活性和控制力。
本文作者創(chuàng)新點(diǎn):
1. VB中PID控制算法的實(shí)現(xiàn),以調(diào)整電堆溫度、壓力、水位等各種監(jiān)控參數(shù);
2. 基于VB的串口通信技術(shù)在燃料電池車載監(jiān)控系統(tǒng)中的應(yīng)用。
參考文獻(xiàn)
【1】 冀常鵬,包劍 基于CANBUS的汽車發(fā)動(dòng)機(jī)控制器研究 技術(shù) 2005
【2】 王文東,陳實(shí),吳鋒 溫度、壓力和濕度對(duì)質(zhì)子交換膜燃料電池性能的影響 能源研究與信息 Vol.19 No.1 2003
【3】 張永宏,胡德金 基于Visual Basic的串行通信技術(shù)在自動(dòng)化監(jiān)控系統(tǒng)中的應(yīng)用 組合機(jī)床與自動(dòng)化加工技術(shù) 2003年第10期
【4】 夏臨閩,胡仁杰 串行通信中數(shù)據(jù)正確性的保證 電子工程師2000年第11期
【5】 宋娟,羅志平,全書海 基于PID算法的燃料電池實(shí)驗(yàn)室組態(tài)王監(jiān)控系統(tǒng) 微計(jì)算機(jī)信息 2006年第22卷第1—1期第28頁