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

圖1 燃料電池車載監(jiān)控系統(tǒng)主畫面[/align]
1.2 通信程序設(shè)計
燃料電池發(fā)動機車載監(jiān)控系統(tǒng)的通信包括上位機和下位機的通信。主要是PC機和下位機硬件之間通過串口線完成數(shù)據(jù)的傳輸,以期對工業(yè)現(xiàn)場采集的信息進行適時準確地監(jiān)控。
1.2.1 通信協(xié)議
在串行通信的實現(xiàn)過程中,底層為通信工作以及操作系統(tǒng)和計算機硬件提供了有力的支持,但是為了實現(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信號
波特率:9600
字符格式:8位數(shù)據(jù)位,1位停止位
差錯校驗:無奇偶校驗
2.數(shù)據(jù)鏈接層。定義了數(shù)據(jù)幀作為信息傳輸單元,使用差錯校驗和幀應(yīng)答等技術(shù),屏蔽物理路上的噪聲,使傳輸通道變成一條可靠的信道;數(shù)據(jù)鏈接層為數(shù)據(jù)的準確通信提供了充足的信息。表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號。決定命令類型為命令信息還是應(yīng)答信息;
DATA——由CMD決定數(shù)據(jù)字節(jié)長度;
CHKSUM——校驗和碼。循環(huán)冗余校驗是一種常用的校驗碼。
3.應(yīng)用層。負責建立通信伙伴之間的連接關(guān)系,實現(xiàn)操作同步,報警及數(shù)據(jù)完整性等管理任務(wù)。對用戶及用戶程序提供以下功能:
?。?)選擇控制多臺下位機定時,即時或適時跟蹤采樣現(xiàn)場信息,將數(shù)據(jù)送數(shù)據(jù)庫保存,數(shù)據(jù)庫存儲一定時段的數(shù)據(jù),程序具有對數(shù)據(jù)二次處理,繪制曲線圖及報警等功能;
(2)設(shè)置采樣參數(shù);
?。?)當通信線路中斷或通信失敗時,往下位機發(fā)出報警信息;
1.2.2 上位機工作流程
燃料電池發(fā)動機車載監(jiān)控系統(tǒng)的上位機軟件分為手動程序和自動程序,自動程序是通信程序設(shè)計的最終版,一旦進入開機工作狀態(tài),就能夠自動完成對下位機的監(jiān)控功能,包括發(fā)送和接收信息。(‘*******為注釋部分)
?。?) 發(fā)送信息程序段。其工作流程如下圖2。簡單代碼舉例如下:
Private Sub Cmdstop_Click() ‘***********發(fā)送開機命令***********
byteout(0) = &HAA
byteout(1) = &H55
MSComm1.Output = byteout
End Sub
?。?)接收信息程序段。接收部分需要準確采集現(xiàn)場上傳的適時參數(shù),如溫度、電流、電壓、水位等,以便分析和改進整車性能,是通信程序設(shè)計的重點,通過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 上位機發(fā)送信息流程圖

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