鉅大LARGE | 點擊量:1303次 | 2020年05月31日
燃料動力電池發(fā)動機監(jiān)控系統(tǒng)軟件設計
1引言
車用燃料動力電池具有效率高、啟動快、環(huán)保性好、響應速度快等優(yōu)點,是取代汽車內燃機的理想解決方法。燃料動力電池汽車的最大優(yōu)點是清潔、無污染,在全球環(huán)境保護問題日益突出的今天,燃料動力電池汽車作為環(huán)保型汽車越來越受到人們的重視。為提高燃料動力電池發(fā)動機系統(tǒng)的可靠性,要對發(fā)動機的各系統(tǒng)狀態(tài)進行實時監(jiān)控,記錄試驗數(shù)據(jù),分析其運行特性,為發(fā)動機控制策略的不斷改進供應依據(jù),同時對整車性能進行評估。因此,燃料動力電池發(fā)動機監(jiān)控系統(tǒng)的開發(fā)具有很重要的現(xiàn)實意義。2系統(tǒng)概述2.1系統(tǒng)結構簡介本系統(tǒng)由軟件和硬件兩部分組成,如圖1所示。它以高性能的dsp為核心,開發(fā)出控制燃料動力電池發(fā)動機的嵌入式控制器。不僅能完成對燃料動力電池發(fā)動機的控制,并對整車較為嚴重的電磁干擾做了相應的處理,增強了控制系統(tǒng)的抗干擾性和穩(wěn)定性;與其配套的上位機監(jiān)控軟件是一個擁有良好人機界面的試驗數(shù)據(jù)監(jiān)控和記錄中心。系統(tǒng)中dsp的任務重要是完成數(shù)據(jù)的采集與處理,算法的實現(xiàn)與驅動,并通過串口與上位機通信,將采集到的數(shù)據(jù)傳送給上位機,并接收上位機發(fā)來的控制命令。而系統(tǒng)的上位機對燃料動力電池發(fā)動機工作狀態(tài)實現(xiàn)實時監(jiān)控,完成數(shù)據(jù)的轉換、存儲及查詢功能。上位機軟件是在windows2000/xp操作系統(tǒng)下利用vc++6.0開發(fā)完成的,由于篇幅所限,本文重點介紹上位機監(jiān)控軟件的設計與實現(xiàn)。
圖1燃料動力電池發(fā)動機控制器結構圖2.2監(jiān)控軟件的總體設計本系統(tǒng)要監(jiān)控一系列的參數(shù),記錄歷史數(shù)據(jù)及顯示實時曲線圖,并實時地顯示報警事件,供應診斷信息,使監(jiān)控人員可以及時了解異常情況,查詢故障內容??刂破鞯闹匾刂茖ο笥袣錃夤┙o、空氣供給、冷卻水循環(huán)、電堆功率等,監(jiān)控軟件對其中關鍵參數(shù)進行實時顯示、報警顯示及數(shù)據(jù)存儲等。根據(jù)系統(tǒng)分析確定的目標和功能,采用模塊化設計方法,進行了系統(tǒng)的界面結構設計。本系統(tǒng)由多個模塊組成,每一個模塊完成一項獨立的功能,模塊與模塊之間通過數(shù)據(jù)相關聯(lián)。其關系如圖2所示。
圖2監(jiān)控系統(tǒng)結構圖
3重要功能模塊設計3.1信息顯示模塊完成對系統(tǒng)重要設備運行狀態(tài)的實時監(jiān)控,包括用不同的顏色來表示設備的啟、停狀態(tài),用編輯框實時顯示重要的運行參數(shù),如電壓、電流、壓力、溫度等,并設置報警信號。同時,由于控件較多,各部分功能不同,引入屬性頁使不同用途控件分頁表示,達到屏幕美觀且操作方便的效果。燃料動力電池車載監(jiān)控系統(tǒng)的主控畫面如圖3所示。
圖3燃料動力電池車載監(jiān)控系統(tǒng)主界面3.2串行通信模塊完成數(shù)據(jù)通信并對所收到的數(shù)據(jù)進行處理、分析、存盤。把接收到的數(shù)據(jù)進行范圍轉換后存放到事先含義好的結構體內,并檢查每個參數(shù)值是否超限,若超限則置報警標志并報警;該軟件正常使用時處于長期持續(xù)運行狀態(tài),通過串口接收數(shù)據(jù)的工作一直進行。(1)通信協(xié)議。在串行通信中,為了實現(xiàn)特定的用戶功能,必須在軟件中制定通信協(xié)議。在開發(fā)燃料動力電池串行數(shù)據(jù)通信程序的過程中,通過長期的調試和不斷的總結,最終得到一套完整而可靠的通信協(xié)議。該協(xié)議一共分為3層,分別為物理層和數(shù)據(jù)鏈接層。
物理層。規(guī)定了電子電氣方面的特性及原始位流在物理鏈路上的傳輸,供應了原始位流傳輸信道;串行通信口:rs-232串口,硬件接口:dsp輸出的ttl電平經(jīng)專用集成模塊轉換成rs-232信號,波特率:19200,字符格式:8位數(shù)據(jù)位,2位停止位。
數(shù)據(jù)鏈接層。用幀作為信息傳輸單元,使用了兩種幀:控制幀與數(shù)據(jù)幀。數(shù)據(jù)幀包括幀頭和負載數(shù)據(jù),幀頭占6個字節(jié),如表1所示,其中count表示負載數(shù)據(jù)長度,check1表示第二、三字節(jié)的校驗和??刂茙挥袔^,長為6字節(jié),如表2所示。為保證可靠的傳輸,在傳輸開始前,通過握手建立連接,采用發(fā)送/應答/重連/失敗方式。
cmd表示控制信號。check2表示第二、三字節(jié)的校驗和,當cmd=check2=0時,表示傳輸結束。(2)應用層。實現(xiàn)各監(jiān)控參數(shù)的完整性傳輸,包括監(jiān)控數(shù)據(jù)與校驗和。
每個監(jiān)控參數(shù)用兩個字節(jié)表示,低位先傳。校驗和占兩個字節(jié),對監(jiān)控數(shù)據(jù)按位異或校驗。當通信失敗或校驗錯時,往下位機發(fā)出報警信息。
(3)通信軟件設計。vc中進行串口通信通常有三種方法。一是利用microsoft公司供應的activex控件microsoftcommunicationscontrol。這種方法較簡單,只要對串口進行簡單配置,但在數(shù)據(jù)量較大且高速傳遞時程序易掛起。二是直接采用windowsapi通信函數(shù),同時利用多線程技術來提高程序的效率。這種方法通信過程穩(wěn)定,適用于要求較高的通信環(huán)境,但使用較復雜。第三種方法是利用第三方供應或自己編寫的通信類,只要理解這種類的幾個成員函數(shù)就能方便的使用,且通信穩(wěn)定。本程序采用第三種方法,使用了由remonspekreijse供應的多線程串口類cserialport,并在此基礎上進行了一些改進,使之能用于本程序。由于篇幅所限,本文只列出部分關鍵代碼。(1)初始化程序段
//初始化com1//m_serialport是cserialport類的對象,//在頭文件中含義if(m_serialport.initport(this,1,19200,`n`,8,2,ev_rxflag|ev_rxchar,1024)){m_serialport.startmonitoring();//啟動串口監(jiān)視線程m_bserialportopened=true;//m_bserialportopened為串口打開標志}(2)串口通訊程序段串口要對下位機進行控制以及準確采集現(xiàn)場上傳的實時參數(shù),如溫度、電流、電壓、水位等,以便分析和改進整車性能,是通信程序設計的重點。其工作流程如圖4所示.
圖4上位機收發(fā)數(shù)據(jù)流程圖由于原類只能發(fā)送字符(ascii文本),不能處理二進制發(fā)送,而本系統(tǒng)要發(fā)送二進制數(shù)據(jù),所以要對原類進行一些改進,添加一個發(fā)送函數(shù):
voidcserialport::writetoport(byte*bt,intn){assert(m_hcomm!=0);memset(m_szwritebuffer,0,sizeof(m_szwritebuffer));memcpy(m_szwritebuffer,bt,n);//將待發(fā)送數(shù)據(jù)復制到發(fā)送緩沖區(qū)m_nwritesize=n;setevent(m_hwriteevent);//觸發(fā)寫事件}則發(fā)送代碼為:m_serialport.writetoport(sendon,4);//sendon為字節(jié)型發(fā)送數(shù)據(jù)串口接收簡單代碼舉例如下:longc******::oncomm(wparamch,lparamport){………count++;buf[count]=ch;checksum=checksum^ch;if(count==buf1)//全部字節(jié)接受完畢{if(checksum)//校驗錯{afxmessagebox(接收校驗出錯);::sendmessage(m_hwnd,wm_resend,(wparam)0,(lparam)0);//wm_resend為重發(fā)消息}else{bytedol=*(char*)(buf+2);//接受處理數(shù)據(jù)bytedoh=*(char*)(buf+3);………}connectdb();//連接數(shù)據(jù)庫………
3.3數(shù)據(jù)管理模塊采集來的數(shù)據(jù)重要存放在數(shù)據(jù)庫中,方便用戶查詢各歷史數(shù)據(jù)、顯示數(shù)據(jù)曲線和打印功能。vc語言供應了多種操作數(shù)據(jù)庫的方法,使用odbc(開放數(shù)據(jù)庫連接)訪問數(shù)據(jù)庫就是一種很常用的操作方法。另外,通過dbgridcontrol(網(wǎng)格控件)和microsoftremotedatacontrol的協(xié)同工作就能供應一個訪問數(shù)據(jù)庫的界面,用來進行數(shù)據(jù)庫數(shù)據(jù)的瀏覽,添加,刪除,修改等操作。整個過程實現(xiàn)和操作起來非常簡單方便。具體連接步驟如下:(1)建立access數(shù)據(jù)庫。(2)在工程中加入datagrid和remotedatacontrol控件。remote-data控件在數(shù)據(jù)庫和datagrid控件中起著橋梁用途,完成同數(shù)據(jù)庫的綁定。然后對兩控件屬性進行設置。(3)由于odbc數(shù)據(jù)源要手動在控制面板中添加注冊,不方便程序的移植,于是程序通過代碼動態(tài)配置數(shù)據(jù)源。部分程序如下:
char*szdesc;szdesc=newchar[256];sprintf(szdesc,dsn=%s?description=tocsupportsource?dbq=%s?file=microsoftacces-s?defaultdir=%s??,controlh-istory,lpszfile,spath);//controlhistory為數(shù)據(jù)源名稱,//lpszfile為數(shù)據(jù)庫名稱,spath為數(shù)據(jù)庫所//在路徑if(false==sqlconfigdatasou-rce(null,odbc_add_dsn,microsoftaccessdriver(*.mdb),(lpcstr)szdesc))afxmessagebox(sqlconfigda-tasourcefailed);(4)加入數(shù)據(jù)到數(shù)據(jù)庫while(m_bisconnected(iii==1))//m_bisconnected與iii為連接數(shù)據(jù)庫標志{m_set.open();m_set.addnew();………if(m_set.canupdate())m_set.update();………}4結束語現(xiàn)場調試表明,該監(jiān)控系統(tǒng)能夠長時間穩(wěn)定工作,并且抗干擾能力較強,能方便有效地監(jiān)控現(xiàn)場的各種實驗數(shù)據(jù),其數(shù)據(jù)庫管理操作也具有極大的靈活性.
上一篇:簡易的氫氧燃料動力電池制作
下一篇:移動設備電池消耗的分析