国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

PC上位機(jī)電池?cái)?shù)據(jù)統(tǒng)計(jì)系統(tǒng)

2015-07-25 07:22:31鄭光熙
關(guān)鍵詞:串口通信上位機(jī)電池容量

鄭光熙

(嶺南師范學(xué)院 信息與教育技術(shù)中心,廣東湛江524048)

PC上位機(jī)電池?cái)?shù)據(jù)統(tǒng)計(jì)系統(tǒng)

鄭光熙

(嶺南師范學(xué)院 信息與教育技術(shù)中心,廣東湛江524048)

摘要:針對(duì)基于串口一類檢測(cè)儀器,用VC開(kāi)發(fā)工具實(shí)現(xiàn)了對(duì)電池檢測(cè)數(shù)據(jù)的采集和處理、對(duì)串口控制、LED顯示模塊和圖形化顯示模塊等功能,通過(guò)截圖和生成繪制圖表,實(shí)現(xiàn)了對(duì)數(shù)據(jù)檢測(cè)和控制的圖形化和智能化,該軟件具有良好的用戶體驗(yàn)和實(shí)用價(jià)值.

關(guān)鍵詞:上位機(jī);電池容量;雙緩沖;串口通信

獨(dú)立電力系統(tǒng)及移動(dòng)的電子設(shè)備中應(yīng)用大量的充電電池(包括鋰離子,聚合物鋰離子,鎳氫,鉛酸電池等)為設(shè)備提供動(dòng)力,設(shè)備的循環(huán)及安全地正常使用依靠充電電池保障,所以對(duì)電池的質(zhì)量監(jiān)控(包括電池的容量、電壓、能量、電導(dǎo))是保障設(shè)備的安全使用的重要手段.價(jià)格上萬(wàn)的專業(yè)電池檢測(cè)設(shè)備昂貴,難以普及,而基于單片機(jī)控制的電池容量檢測(cè)裝置可以降低成本的同時(shí)擁有較高的精度,對(duì)為大眾提供廉價(jià)的檢測(cè)儀有積極意義,可以應(yīng)用在手機(jī)電池,電動(dòng)車電池航模,四驅(qū)車等或其它電池容量檢測(cè)應(yīng)用場(chǎng)合.針對(duì)這個(gè)狀況,使用VC編寫的串口通信程序則為這種廉價(jià)的檢測(cè)儀如虎添翼,操作簡(jiǎn)單,一目了然.

上位機(jī)是指可以直接發(fā)出操控命令的計(jì)算機(jī),單片機(jī)系統(tǒng)采集的數(shù)據(jù)反饋給上位機(jī)處理,PC屏幕上顯示各種信號(hào)變化(如液壓,水位,溫度等),達(dá)到各種控制目的,上位機(jī)系統(tǒng)可以使用不同的計(jì)算機(jī)語(yǔ)言來(lái)實(shí)現(xiàn),上位機(jī)作為建立在性能強(qiáng)大的計(jì)算機(jī)平臺(tái)上的軟件工具,實(shí)現(xiàn)了下位機(jī)難以實(shí)現(xiàn)的一些智能化管理控制的功能.

1 系統(tǒng)需求分析

系統(tǒng)主要分為8大功能模塊:串口通信模塊,接收并處理單片機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù);繪制電壓電流曲線模塊,根據(jù)電壓電流大小繪制動(dòng)態(tài)實(shí)時(shí)曲線;繪制LED數(shù)碼管模塊,以數(shù)碼管的形式顯示電壓和電流的大??;繪制電池電壓百分比模塊,根據(jù)當(dāng)前電壓大小繪制比例;截圖模塊,手動(dòng)或者自動(dòng)全屏、電表截圖;托盤功能模塊,使得系統(tǒng)在后臺(tái)運(yùn)行;文本寫入模塊,保存數(shù)據(jù)到Txt文本;自動(dòng)關(guān)機(jī)設(shè)置模塊,電池測(cè)試完畢后自動(dòng)關(guān)機(jī)、注銷或者重啟.系統(tǒng)框架見(jiàn)圖1.

圖1 系統(tǒng)整體設(shè)計(jì)框架

2 系統(tǒng)功能實(shí)現(xiàn)

2.1串口通信模塊的實(shí)現(xiàn)

2.1.1自動(dòng)注冊(cè)MSCOMM32.OCX控件及搜索串口

系統(tǒng)首次運(yùn)行時(shí)需要注冊(cè)MSCOMM32.OCX控件,需把MSCOMM32.OCX控件文件放置于程序同目錄下,程序會(huì)把MSCOMM32.OCX控件復(fù)制到C盤保存并且進(jìn)行注冊(cè).

程序?qū)崿F(xiàn)了程序運(yùn)行時(shí)就自動(dòng)搜索計(jì)算機(jī)中已經(jīng)存在的通訊端口號(hào),并把它們顯示在組合框控件中.這樣避免了用戶輸入錯(cuò)誤或者不存在的端口號(hào).

實(shí)現(xiàn)原理:Windows的通訊端口號(hào)碼存放在注冊(cè)表中,搜索注冊(cè)表HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm,查找出當(dāng)前計(jì)算機(jī)中存在的通訊端口號(hào)碼.實(shí)現(xiàn)如下:清空組合框打開(kāi)注冊(cè)表HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm的位置枚舉串口號(hào)碼存在此串口則把串口插入到組合框中.

2.1.2接收數(shù)據(jù)函數(shù)OnOnComm()

添加OnOnComm()成功后,在數(shù)據(jù)接收函數(shù)OnOnComm()中實(shí)現(xiàn)代碼如下:

void CTextDlg::OnOnComm()

{VARIANT variant_tmp;//建立轉(zhuǎn)換數(shù)據(jù)類型用到的變量

CString str="";

if(m_mscomm.GetCommEvent()==2)//數(shù)據(jù)緩沖區(qū)內(nèi)有數(shù)據(jù)

{variant_tmp=m_mscomm.GetInput();//讀緩沖區(qū)

str=variant_tmp.bstrVal;//variant_tmp轉(zhuǎn)換成CString

m_csLowInfo.push(str);//放入STL隊(duì)列

}}

其中m_csLowInfo是隊(duì)列變量,訪問(wèn)屬性是Public,當(dāng)串口打開(kāi),該函數(shù)每隔一段時(shí)間就被執(zhí)行一次,從單片機(jī)發(fā)送來(lái)的數(shù)據(jù)都插入到隊(duì)列m_csLowInfo中.

2.2 繪制電壓電流曲線模塊的實(shí)現(xiàn)

當(dāng)數(shù)據(jù)量很大時(shí),繪圖可能需要幾秒鐘甚至更長(zhǎng)的時(shí)間,而且有時(shí)還會(huì)出現(xiàn)閃爍現(xiàn)象,為了解決這些問(wèn)題,采用雙緩沖技術(shù)來(lái)繪圖.

雙緩沖即在內(nèi)存中創(chuàng)建一個(gè)與屏幕繪圖區(qū)域一致的對(duì)象,先將圖形繪制到內(nèi)存中的這個(gè)對(duì)象上,再一次性將這個(gè)對(duì)象上的圖形拷貝到屏幕上,這樣能大大加快繪圖的速度.基于CStatic的CoordinateSystem類雙緩沖實(shí)現(xiàn)過(guò)程如下:在內(nèi)存中創(chuàng)建與畫(huà)布一致的緩沖區(qū);在緩沖區(qū)畫(huà)圖;將緩沖區(qū)位圖拷貝到當(dāng)前畫(huà)布上;釋放內(nèi)存緩沖區(qū).在實(shí)現(xiàn)電壓電流曲線模塊之中,最重要的是3個(gè)函數(shù),分別是:

DrawXTimeCoord(CDC*pDC);//繪制X坐標(biāo)上的時(shí)間軸

圖2 繪圖區(qū)域的命名

DrawYLeft(CDC*pDC);//繪制電壓軸

DrawYRight(CDC*pDC);//繪制電流軸

DrawMiddle(CDC*pDC);//繪制中間部分

各部分命名見(jiàn)圖2.因?yàn)樵诿總€(gè)網(wǎng)格代表的電壓或者電流大小不變時(shí),之前計(jì)算出來(lái)的所有電壓和電流的(x,y)坐標(biāo)都不會(huì)改變,再一次計(jì)算的結(jié)果也還是一樣.于是使用了另外兩個(gè)vector容器保存這些已經(jīng)計(jì)算好的(x,y)坐標(biāo),下一次繪圖時(shí),直接從這兩個(gè)容器中取出(x,y)的坐標(biāo),直接繪制,直到網(wǎng)格代表的電壓或者電流大小發(fā)生了變化,再重新進(jìn)行計(jì)算,重新更新已經(jīng)計(jì)算好(x,y)坐標(biāo)的容器.

各部分命名見(jiàn)圖2.因?yàn)樵诿總€(gè)網(wǎng)格代表的電壓或者電流大小不變時(shí),之前計(jì)算出來(lái)的所有電壓和電流的(x,y)坐標(biāo)都不會(huì)改變,再一次計(jì)算的結(jié)果也還是一樣.于是使用了另外兩個(gè)vector容器保存這些已經(jīng)計(jì)算好的(x,y)坐標(biāo),下一次繪圖時(shí),直接從這兩個(gè)容器中取出(x,y)的坐標(biāo),直接繪制,直到網(wǎng)格代表的電壓或者電流大小發(fā)生了變化,再重新進(jìn)行計(jì)算,重新更新已經(jīng)計(jì)算好(x,y)坐標(biāo)的容器.

在繪圖設(shè)置面板中,可以設(shè)置電壓曲線和電流曲線的線條大小、線條顏色,是否顯示電池統(tǒng)計(jì)信息,是否同時(shí)繪制電壓和電流曲線.正是因?yàn)闉镃oordinateSystem類編寫了如此多的方法,才方便了對(duì)曲線各種屬性的控制,見(jiàn)圖3.

2.3繪制LED數(shù)碼管模塊的實(shí)現(xiàn)

基于CStatic的Digitron類實(shí)現(xiàn)LED模塊,見(jiàn)圖4.其中Digitron類的方法設(shè)計(jì):

public:

void SetNum(CString cs_num);

void StartShow();

void EndShow();

protected:

VoidDrawDigitron(CDC*pDC);

bool IsNum(CString str);.

2.4繪制電池電壓百分比模塊的實(shí)現(xiàn)

添加一個(gè)基于CStatic的Battery類,其中Battery類的方法設(shè)計(jì):

public:

void SetPercent(float ref);//設(shè)置電池百分比的大小(0到1)

void SetVData(float ref);//根據(jù)電壓大小設(shè)置百分比

protected:

void DrawBattery(CDC*pDC);//繪制電池百分比

圖3 繪圖設(shè)置面板

圖4 LED模塊

2.5截圖原理

把需要截圖的區(qū)域看作一張靜態(tài)的背景圖片,根據(jù)這張背景圖片填寫B(tài)MP文件的文件頭、位圖信息頭、顏色信息和圖形數(shù)據(jù),就可以保存成一張圖片了.截圖的關(guān)鍵代碼如下:

CDC*pdc=GetDC();

this->GetClientRect(&rect);//獲得客戶區(qū)的區(qū)域

CBitmap bm;//定義位圖對(duì)象

bm.CreateCompatibleBitmap(pdc,width,high);//創(chuàng)建兼容位圖

CDC memdc;//定義一個(gè)內(nèi)存畫(huà)布

memdc.CreateCompatibleDC(pdc);//創(chuàng)建一個(gè)兼容的畫(huà)布

memdc.SelectObject(&bm);//選中位圖對(duì)象

memdc.StretchBlt(0,0,width,high,pdc,x,y,width,high,SRCCOPY);

BITMAP btm;//定義位圖信息

bm.GetBitmap(&btm);//獲取位圖信息

DWORD size=btm.bmWidthBytes*btm.bmHeight;//計(jì)算圖像大小

LPSTR lpData=(LPSTR)::GlobalAlloc(GPTR,size);//定義位圖信息對(duì)象

2.6 文本寫入模塊的實(shí)現(xiàn)

文本寫入模塊是指把測(cè)試電池過(guò)程中得到的電壓、電流大小以及其他一些電池的信息寫入到Txt文本中保存起來(lái),方便日后查看.

如果得到一個(gè)數(shù)據(jù)就寫入一個(gè)數(shù)據(jù),這樣會(huì)造成長(zhǎng)時(shí)間占用IO資源.所以文本寫入設(shè)定在測(cè)試完畢,關(guān)閉串口之時(shí)進(jìn)行的,沒(méi)有數(shù)據(jù),不寫入.主要代碼如下;

CreateDirectory(m_csPath_temp_1,NULL);//新建文件夾

CFile*pFile;

pFile=new CFile(temp,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);

從Vector向量中提取需要的數(shù)據(jù)格式化好保存于m_csPath_temp_1變量

pFile->W(wǎng)rite(m_csPath_temp_1,strlen(m_csPath_temp_1));//寫入

pFile->Close();//關(guān)閉文件句柄

3 系統(tǒng)測(cè)試

握手成功后,單片機(jī)會(huì)實(shí)時(shí)檢測(cè)并發(fā)送電池的電壓和電流的大小,本軟件的數(shù)碼管開(kāi)始亮起,并實(shí)時(shí)顯示電壓和電流的大小,電池電壓百分比也開(kāi)始繪制(見(jiàn)圖5).

圖5 連機(jī)界面

當(dāng)發(fā)送終止電壓,當(dāng)電池低于或等于該終止電壓時(shí),充電或者放電就會(huì)停止;當(dāng)發(fā)送放電電流,只有在放電時(shí),此操作才有有效,指定了單片機(jī)會(huì)以多大的電流進(jìn)行放電,放電電流越大,測(cè)試過(guò)程越快結(jié)束;在繪圖設(shè)置面板,可以設(shè)置電壓或者電流曲線的大小和顏色,也可以只繪制電壓或者只繪制電流曲線,當(dāng)然也可以取消統(tǒng)計(jì)信息的顯示;填寫電池型號(hào)和電池上標(biāo)注的容量,可以在繪圖區(qū)域顯示出來(lái).系統(tǒng)運(yùn)行見(jiàn)圖6.

圖6 PC控制軟件下的飛毛腿電池檢測(cè)

4 結(jié)語(yǔ)

本文對(duì)電池容量統(tǒng)計(jì)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行了全面的闡述,從開(kāi)發(fā)背景到功能分析,再?gòu)倪x擇相關(guān)技術(shù)到電池容量統(tǒng)計(jì)系統(tǒng)的具體實(shí)現(xiàn)都作了比較詳盡的介紹,以及展現(xiàn)了這個(gè)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)思路.配合通用的串口控制器,可實(shí)現(xiàn)對(duì)電池監(jiān)控的界面化和直觀化,可以應(yīng)用在串口通信數(shù)據(jù)處理顯示的各種場(chǎng)合,具有一定的應(yīng)用價(jià)值.

參考文獻(xiàn):

[1]求是科技.單片機(jī)通信技術(shù)[M].北京:人民郵電出版社,2005.

[2]譚浩強(qiáng).C程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2005.

[3]孫皓.Visual C++范例大全[M].北京:機(jī)械工業(yè)出版社,2009.

[4]陸宗騏.C/C++圖像處理編程[M].北京:清華大學(xué)出版社,2005.

[5]劉蕾.21天學(xué)通C++[M].北京:電子工業(yè)出版社,2014.

(責(zé)任編輯:歐愷)

中圖分類號(hào):TP274

文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1007-5348(2015)06-0014-05

[收稿日期]2014-04-13

[作者簡(jiǎn)介]鄭光熙(1986-),男,廣東湛江人,嶺南師范學(xué)院信息與教育技術(shù)中心助理實(shí)驗(yàn)師,碩士研究生;研究方向:嵌入式系統(tǒng)研究.

PC Battery Data Statistics System

ZHENG Guang-xi

(Information&Educational Technology Center,Lingnan Normal University,Zhangjiang 524048,Guangdong,China)

Abstract:For a serial-based testing instruments,VC development tools for battery testing data collection and processing,serial control,LED display module and graphic display module and other functions,through screenshots and generate charting,achieve the data detection and control of graphs and intelligence,which has a good user experience and practical value.

Key words:battery capacity;double buffer;a serial port communication

猜你喜歡
串口通信上位機(jī)電池容量
基于Qt和Flash的嵌入式Linux軟件架構(gòu)設(shè)計(jì)
論網(wǎng)絡(luò)通信技術(shù)
串口通信在智能家居監(jiān)控系統(tǒng)中的應(yīng)用
基于云的短波發(fā)射機(jī)機(jī)房中央空調(diào)自動(dòng)控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
4000mAh途鴿T2 稍顯優(yōu)勢(shì)
景點(diǎn)智能導(dǎo)航系統(tǒng)
全自動(dòng)包裝及碼垛系統(tǒng)的發(fā)展與應(yīng)用
基于OpenCV的室內(nèi)照明智能控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
科技視界(2016年13期)2016-06-13 22:01:19
鋰離子電池充電管理及電池容量測(cè)量研究
鋰離子電池容量衰減研究進(jìn)展
海晏县| 海宁市| 宝坻区| 南宁市| 高平市| 固安县| 云林县| 漠河县| 宜兰县| 汕尾市| 根河市| 富蕴县| 安乡县| 财经| 化州市| 台北县| 齐齐哈尔市| 固安县| 佛冈县| 临潭县| 全南县| 灵川县| 竹溪县| 诏安县| 延川县| 台东市| 黄大仙区| 环江| 西青区| 视频| 枣强县| 左贡县| 苍山县| 民乐县| 竹溪县| 石嘴山市| 三门县| 竹北市| 建平县| 宁化县| 永春县|