在鋰離子電池監控系統中,除了下位機單片機系統電路板及其程序設計外,還需要上位機程序對鋰離子電池系統的進行各種監控管理設置。根據系統要求,上位機程序的主要功能有以下幾個: 1.接收并顯示下位機采集的各路數據信息,包含16路鋰電池電壓、主回路充放電電流、4路溫度、電量等數據信息; 2.設置下位機工作時需要配置的系統參數; 3.校正下位機上傳的各路數據; 4.根據需要保存下位機上傳的數據。 該上位機程序采用VC++6.0編程工具進行程序設計,本章對上位機程序的設計思想和內容進行了描述。 5.1上位機程序 開發平臺及相關技術上位機程序采用非常流行的可視化編程工具VC++6.0進行開發,為完成相應的顯示和設置功能,程序采用了許多VC++6.0自帶的控件,同時應用了多線程編程技術。 5.1.1 VC++6.0簡介 VC++6.0是微軟公司開發的編程平臺,具有強大的功能。本軟件是基于Windows系統開發的,編程語言采用的是C++語言,并且微軟給該軟件提供了功能強大的MFC(Microsoft Foundation Class)類庫。MFC中封裝了大部分Windows API函數和Windows控件,它包含的功能涉及到整個Windows操作系統。MFC不僅給用戶提供了Windows圖形環境下應用程序的框架,而且還提供了創建應用程序的組件,這樣,開發人員不必從頭設計創建和管理一個標準Windows應用程序所需的程序,而是從一個比較高的起點編程,故節省了大量的時間。另外,它提供了大量的代碼,指導用戶編程時實現某些技術和功能。因此,使用VC++可以使程序員更加方便的進行應用程序開發。 5.1.2相關控件介紹 系統使用了Edit Box控件、Static Text控件、Button控件、Group Box控件、Check Box控件、Combo Box控件、Tab Control控件和MSComm控件八個控件,本部分對這些控件進行簡單介紹。 1.Edit Box控件CEdit類提供了Windows編輯控件中的功能。編輯控件是一個子窗口矩形,用戶可以向其中輸入文本。可以通過對話模板或直接從代碼中創建一個編輯控件。 在兩種情形下,首先調用CEdit構造程序構造CEdit對象,再調用Create成員函數創建Windows編輯控件并將其與CEdit對象連接。 2.Static Text控件CStatic類提供了一個Windows靜態控件的性能。一個靜態控件用來顯示一個文本字符串、框、矩形、圖標、光標、位圖或增強的圖元文件。它可以被用來作為標簽、框或用來分隔其它的控件。一個靜態控件不接收輸入,也不提供輸出;但是,如果它是用SS_NOTIFY風格創建的,則它可以通知其父有關設備點擊的消息。 3.Button控件類CButton提供了對Windows按鈕控件的操作。按鈕控件是一個小的矩形子窗口,可以通過單擊選中(按下)或不選中。按鈕可以單獨使用,也可以成組使用,它還可以具有文本標題。在用戶單擊它的時候,按鈕通常要改變顯示外觀。 典型的按鈕控件有:復選框、單選鈕和下壓式按鈕(push button)。一個CButton對象可以是它們中的一種,這由它的按鈕風格和成員函數Create的初始化決定。 4.Check Box控件CheckBox控件就是我們一般所說的復選框,通常用于某選項的打開或關閉。 大多數應用程序的“設置”對話框內均有此控件。我們看到的可以打勾的就是CheckBox.該控件表明一個特定的狀態(即選項)是選定(on,值為1)還是清除(off,值為0)。在應用程序中使用該控件為用戶提供“True/False”或“yes/no”的選擇。因為CheckBox彼此獨立工作,所以用戶可以同時選擇任意多個CheckBox,進行選項組合。 5.Combo Box控件類CCombo Box封裝了Windows組合框。組合框由一個列表框和一個靜態控件(或編輯控件)組成。列表框部分可以是一直顯示的,也可以是隱藏的,在用戶單擊編輯控件邊上的按鈕(下拉箭頭)時下拉該列表框。列表框中當前選中的項(如果有的話)顯示在靜態控件或編輯控件中。如果組合框帶有下拉風格,則當用戶在編輯框中輸入列表項的開始字符時,對應項(如果有的話)中的第一個將會加亮顯示。 可以從對話框模板中建立一個CComboBox對象,也可以直接在代碼中創建。 無論采用哪種方法,都要先調用CComboBox的構造函數構造一個CComboBox對象,然后調用成員函數Create創建控件并在CComboBox對象上應用它。 消息映射入口的格式如下: ON_Notification( id,memberFxn ) 其中id指定了發送通知的組合框控件的子窗口ID,而memberFxn是用于處理該通知的父成員函數的名字。 父窗口的函數原型的格式如下: afx_msg void memberFxn( ); 6.Tab Control控件一個“標簽控件”類似于一個筆記本中的分隔器,或一個文件柜上的標簽。通過使用標簽控件,應用程序可以將一個窗口或對話框的相同區域定義為多個頁面。 每一頁包含了一套信息或一組控件,當用戶選擇了相應的標簽時應用程序就會顯示相應的信息或控件。一種特殊類型的標簽控件把標簽顯示得像按鈕一樣。點擊一個按鈕將立即執行一條命令而不是顯示一個頁。 CTabCtrl類提供了Windows通用標簽控件的性能。這個控件(也就是CTabCtrl類)只對運行在Windows 95和Windows NT 3.51或更新版本下的程序來說是可用的。 7.Group Box控件Group Box控件本質上確實是class CStatic的一個實例化對象。在一個對話框上布置好一個Group Box控件后,默認ID為IDC_STATIC,這時候是無法在代碼里動態地控制它的隱藏/顯示屬性。必須給它一個新的ID號,比如IDC_GROUPBOX1,最后再給它關聯一個CStatic控件變量(這個你應該自己會吧),然后就可以在必要時候(另一個控件被選擇)調用ModifyStyle(0,SWP_HIDEWINDOW/*SWP_SHOWWINDOW*/);實現Group Box的隱藏/顯示狀態的動態切換。 8. MSComm控件Visual C++為我們提供了一種好用的ActiveX控件Microsoft Communications Control(即MSComm)來支持應用程序對串口的訪問,在應用程序中插入MSComm控件后就可以較為方便地實現對通過計算機串口收發數據。 使用VC++提供的串行通信控件MSComm進行編程,首先,在對話框中創建通信控件,若Control工具欄中缺少該控件,可通過菜單Project ——>Add to Project——> Components and Control插入即可,再將該控件從工具箱中拉到對話框中。此時,你只需要關心控件提供的對Windows通訊驅動程序的API函數的接口。換句話說,只需要設置和監視MSComm控件的屬性和事件。 在ClassWizard中為新創建的通信控件定義成員對象(CMSComm m_Serial),通過該對象便可以對串口屬性進行設置,MSComm控件共有27個屬性,這里只介紹其中幾個常用屬性:CommPort設置并返回通訊端口號,缺省為COM1. Settings以字符串的形式設置并返回波特率、奇偶校驗、數據位、停止位。 PortOpen設置并返回通訊端口的狀態,也可以打開和關閉端口。 Input從接收緩沖區返回和刪除字符。 Output向發送緩沖區寫一個字符串。 InputLen設置每次讀入的字符個數,缺省值為0,表明讀取接收緩沖區中的全部內容。 InBufferCount返回接收緩沖區中已接收到的字符數,將其置0可以清除接收緩沖區。 InputMode定義Input屬性獲取數據的方式(為0:文本方式;為1:二進制方式)。 RThreshold和SThreshold屬性,表示在OnComm事件發生之前,接收緩沖區或發送緩沖區中可以接收的字符數。 打開所需串口后,需要考慮串口通信的時機。在接收或發送數據過程中,可能需要監視并響應一些事件和錯誤,所以事件驅動是處理串行端口交互作用的一種非常有效的方法。使用OnComm事件和CommEvent屬性捕捉并檢查通訊事件和錯誤的值。發生通訊事件或錯誤時,將觸發OnComm事件,CommEvent屬性的值將被改變,應用程序檢查CommEvent屬性值并作出相應的反應。 5.2上位機程序方案 上位機程序主要完成數據顯示、參數設置、存儲器讀取、數據校正等功能。 該程序通過串口與下位機板進行通信,將需要顯示的信息和設置的參數等信息進行傳輸。 上位機程序功能框圖如下圖5.1所示。 圖中下位機通過串口與上位機進行數據通信。根據通信協議,將雙方傳輸的數據進行轉換,得到對應的數值,在進行相應的操作。 下面分別對數據顯示、參數設置、數據保存、數據校正等功能進行如下分析。 5.2.1數據顯示 上位機程序的數據顯示功能直接放置在主程序界面上,如下圖5.2所示。 主界面主要包含顯示鋰電池電壓、溫度、電流、電量、狀態等信息的文本控件和參數設置、數據校正、存儲器讀寫的按鈕以及保存數據的選項,另外還可對串口號進行選擇。 5.2.2參數設置 參數設置子窗口如圖5.3所示。由于需要設置的參數較多,所以在參數設置子窗口中將所有參數分為系統參數、電流參數、電壓參數、溫度參數、均衡參數、電量參數和版本參數共七類,在一個復選頁中進行顯示和設置。 系統參數包含電池類型、電池數、電池內阻、數據采樣頻率、睡眠模式使能、睡眠模式喚醒時間、用戶權限、系統密碼等。 電流參數包含充電過載電流、放電過載電流、判斷過載電流持續時間、短路電流、放電過流恢復時間、充電過流恢復時間、短路恢復時間等。 電壓參數包含過充電壓、釋放過充電壓、過放電壓、釋放過放電壓、最大不平衡電壓、判斷過充過放電壓持續時間等。 溫度參數包含外部溫度通道1使能、外部溫度通道2使能、判斷溫度超范圍持續時間、可承受外部最高溫度、釋放可承受外部最高溫度、可承受外部最低溫度、釋放可承受外部最低溫度、可承受內部最高溫度、釋放可承受內部最高溫度、可承受內部最低溫度、釋放可承受內部最低溫度等。 均衡參數包含均衡使能、每組均衡電池數、均衡模式、均衡開始電壓、均衡壓差等。 電量測量參數包括電量測量電壓一、測量電壓二、測量電壓三、測量電壓四、測量電壓五等。 另外,還有版本版本號、工廠名、設備編號等。 5.2.3數據校正 數據校正子窗口如圖5.4所示。 校正采用線性修復法,即利用公式:A=K*S+B進行校正,其中A表示實際測量值,S表示通過系統獲取的原始采樣值,K為修正系數,B為修正基址。 校正過程中對,對每一路采樣電路的采樣值和實測值進行若干組采集。根據上述公式,每兩組組成一個二元一次方程,計算出若干個修正系數和修正基址并求平均值,獲得本路采樣電路的修正系數和修正基址。 在上位機軟件中,接收下位機傳送過來的21路信號的實測值和采樣值。通過兩次接收,可分別得到21路采樣信號的兩組實測值和采樣值,按上述計算方法分別計算出各路采樣電路的修正系數和修正基址,按通信協議發送給下位機。 5.2.4存儲器讀寫 存儲器讀寫子窗口如圖5.5所示。 在存儲器讀寫子窗口中,有讀存儲器、寫存儲器、存儲器擦除三個按鈕,可分別讀出指定存儲單元的數據、將指定數據寫入指定單元、擦除存儲器所有單元。 5.3上位機程序測試 |