吳高明 周 健 康鳳梅 王土央
(1.桂林電子科技大學(xué)電子工程及自動(dòng)化學(xué)院 廣西 桂林 541004;2.桂林電子科技大學(xué)教學(xué)實(shí)踐部 廣西 桂林 541004)
管理軟件的主要功能是:通過(guò)RS232串行口接收匯聚節(jié)點(diǎn)收集到的停車(chē)場(chǎng)車(chē)位狀態(tài)數(shù)據(jù);根據(jù)這些數(shù)據(jù)以圖形的方式顯示車(chē)位的占用情況,并顯示汽車(chē)進(jìn)入和離開(kāi)的時(shí)間,通過(guò)設(shè)置收費(fèi)單價(jià)可以計(jì)算并顯示每個(gè)車(chē)位的收費(fèi)情況;軟件還能顯示每個(gè)車(chē)位當(dāng)天的使用情況,也可以查詢(xún)車(chē)位的歷史數(shù)據(jù)信息。本軟件界面簡(jiǎn)潔明了,管理者可以很直觀(guān)的知道每個(gè)車(chē)位的具體使用信息。同時(shí)還設(shè)置了一個(gè)狀態(tài)數(shù)據(jù)顯示框,管理者能夠通過(guò)這些數(shù)據(jù)準(zhǔn)確地對(duì)匯聚節(jié)點(diǎn)發(fā)送來(lái)的狀態(tài)數(shù)據(jù)進(jìn)行解讀和分析,如:無(wú)線(xiàn)探測(cè)節(jié)點(diǎn)是否工作,剩余的電量;路由節(jié)點(diǎn)覆蓋了多少探測(cè)節(jié)點(diǎn)等。本軟件主程序流程圖如圖1所示。
圖1 主程序流程圖
本軟件系統(tǒng)使用RS232串口和匯聚節(jié)點(diǎn)進(jìn)行通信。串口參數(shù)最重要的是波特率、數(shù)據(jù)位、停止位還有校驗(yàn)位,進(jìn)行通信的端口必須要匹配這些重要參數(shù)。波特率是一個(gè)衡量通信速度的參數(shù),表示每秒鐘傳送多少位數(shù)據(jù)。數(shù)據(jù)位是衡量通信中數(shù)據(jù)位的個(gè)數(shù)。停止位表示單個(gè)周期的最后一位,通常為1,1.5和2。校驗(yàn)位表示通信中的檢錯(cuò)方式,在上位機(jī)與單片機(jī)中一般不進(jìn)行校驗(yàn)。軟件初始設(shè)置時(shí),為了匹配匯聚節(jié)點(diǎn)的串口通信設(shè)置,把串口的參數(shù)初始化為:波特率57600,數(shù)據(jù)位8位,停止位1位,校驗(yàn)位無(wú)。
編程工具使用Visual C++6.0。為了實(shí)時(shí)查看串口接收到的數(shù)據(jù),創(chuàng)建了一個(gè)接收數(shù)據(jù)編輯框。添加5個(gè)組合框,分別用來(lái)選擇串口號(hào)、波特率、數(shù)據(jù)位、停止位、校驗(yàn)位等參數(shù)。在表示串口號(hào)組合框的屬性欄下面的 “數(shù)據(jù)”選項(xiàng)卡中填入COM1、COM2、COM3、COM4 用來(lái)初始化串口號(hào);在表示波特率的組合框?qū)傩詸谙碌?“數(shù)據(jù)”選項(xiàng)卡輸入4800、9600、19200、57600、115200、843200,用來(lái)初始化串口的波特率,軟件設(shè)計(jì)的默認(rèn)波特率是57600;在表示數(shù)據(jù)位的組合框?qū)傩詸谙碌摹皵?shù)據(jù)”選項(xiàng)卡輸入以下數(shù)據(jù):8、7、6、5,軟件默認(rèn)的是8位數(shù)據(jù)位;在表示停止位的組合框?qū)傩詸谙碌摹皵?shù)據(jù)”選項(xiàng)卡輸入以下數(shù)據(jù):1、1.5、2,軟件默認(rèn)的是1位停止位;在表示校驗(yàn)位的組合框?qū)傩詸谙碌?“數(shù)據(jù)”選項(xiàng)卡輸入以下數(shù)據(jù):None、Odd、Even,軟件默認(rèn)的是沒(méi)有校驗(yàn)位。最后在每個(gè)組合框的“樣式”選項(xiàng)卡中的“類(lèi)型”選擇“下拉列表”,這樣用戶(hù)就不能主動(dòng)輸入數(shù)據(jù),只能從給定的選項(xiàng)中選擇,可以有效防止由于用戶(hù)輸入非法數(shù)據(jù)而引起的異常。以上組合框的功能是完成串口參數(shù)的選擇,要使這些參數(shù)生效必須設(shè)置一個(gè)“打開(kāi)串口”的按鍵,相應(yīng)的設(shè)置一個(gè)“關(guān)閉串口”的按鍵來(lái)中斷串口通信。
軟件的主界面如圖2所示,左邊顯示車(chē)位的使用情況,包括車(chē)位開(kāi)始占用的時(shí)間、開(kāi)始計(jì)費(fèi)時(shí)間、離開(kāi)時(shí)間;中間顯示每個(gè)車(chē)位的計(jì)費(fèi)信息,以及車(chē)位的使用情況等;右邊主要是串口通信的設(shè)置。該軟件主要是通過(guò)計(jì)算機(jī)串口接收匯聚節(jié)點(diǎn)上傳的數(shù)據(jù),并進(jìn)行數(shù)據(jù)處理分析。具體的工作流程是:先進(jìn)行串口參數(shù)設(shè)置,選擇計(jì)算機(jī)與匯聚節(jié)點(diǎn)相連的串口,再選擇“波特率”、“數(shù)據(jù)位”、“停止位”、“校驗(yàn)位”等信息與匯聚節(jié)點(diǎn)的串口設(shè)置相同,即波特率115200,數(shù)據(jù)位8位,停止位1位,校驗(yàn)位無(wú)。這在初始化的時(shí)候已經(jīng)默認(rèn)配置好,所以一般情況下都無(wú)需更改。點(diǎn)擊“打開(kāi)串口”按鍵,如果串口號(hào)存在并且沒(méi)有其他程序占用該串口,串口可以成功被打開(kāi)。軟件所要做的就是等待匯聚節(jié)點(diǎn)通過(guò)串口把數(shù)據(jù)傳送過(guò)來(lái)。串口數(shù)據(jù)包的格式是以$開(kāi)頭,第二個(gè)數(shù)字表示停車(chē)位N(這里代表是第幾個(gè)停車(chē)位),第三個(gè)是分隔符@,第四個(gè)代表車(chē)位被占用否(0:表示未占用,1:表示已占用)。比如,$1@0代表停車(chē)位1是空的,同時(shí)把顯示區(qū)的相應(yīng)圖標(biāo)改成 “空”;$5@1表示停車(chē)位5已經(jīng)有車(chē)了,同時(shí)把顯示區(qū)的車(chē)位圖標(biāo)換成車(chē),這樣看起來(lái)就比較形象,能夠讓管理者一目了然。當(dāng)不想繼續(xù)接收數(shù)據(jù),則可以點(diǎn)擊“關(guān)閉串口”,釋放串口資源。在“數(shù)據(jù)接收區(qū)”里能夠?qū)崟r(shí)顯示下位機(jī)傳回來(lái)的數(shù)據(jù)和狀態(tài),以便錯(cuò)誤分析和觀(guān)察。
圖2 軟件主界面
要初始化串口的默認(rèn)值,可以在CDlg類(lèi)下的OnInitDialog()函數(shù)下添加初始化語(yǔ)句:
m_ctrlCommN.SetCurSel(3);
m_ctrlBaudRate.SetCurSel(4);
m_ctrlDataBit.SetCurSel(0);
m_ctrlStopBit.SetCurSel(0);
m_ctrlCrcBit.SetCurSel(0);
為“打開(kāi)串口”這個(gè)按鈕添加一個(gè)消息響應(yīng)函數(shù)OnButtonOpencomm(),用來(lái)響應(yīng)打開(kāi)串口時(shí)的一些設(shè)置。為“關(guān)閉串口”這個(gè)按鈕添加一個(gè)消息響應(yīng)函數(shù)OnButtonClosecomm(),用來(lái)響應(yīng)關(guān)閉串口的配置。為CMSComm這個(gè)類(lèi)所對(duì)應(yīng)的空間添加一個(gè)消息響應(yīng)函數(shù)OnComm(),這個(gè)函數(shù)專(zhuān)門(mén)處理串口數(shù)據(jù)到達(dá)時(shí)的一些處理,其中包括數(shù)據(jù)轉(zhuǎn)換和車(chē)位圖片變換。
為保證匯聚節(jié)點(diǎn)能通過(guò)串口與軟件進(jìn)行通信,需要把匯聚節(jié)點(diǎn)的Atmega128L單片機(jī)的串口設(shè)置為波特率57600,數(shù)據(jù)位8位,停止位1位,無(wú)校驗(yàn)位。初始化完成后,就可以把要發(fā)送的數(shù)據(jù)賦值給UDR寄存器,這樣就能通過(guò)串口把需要發(fā)送的8位數(shù)據(jù)傳送到終端服務(wù)器了。
本停車(chē)場(chǎng)管理軟件系統(tǒng)設(shè)置了車(chē)子開(kāi)始占用開(kāi)始時(shí)間,離開(kāi)時(shí)間,還有計(jì)費(fèi)時(shí)間等計(jì)費(fèi)選項(xiàng),管理員可以根據(jù)需要改變計(jì)費(fèi)單價(jià),在管理軟件上可以實(shí)時(shí)顯示每個(gè)車(chē)位應(yīng)付費(fèi)總額。還設(shè)置了車(chē)位停車(chē)總數(shù),用來(lái)統(tǒng)計(jì)某天或者某幾天車(chē)輛在該停車(chē)場(chǎng)停車(chē)數(shù)量。在軟件界面的右方還設(shè)計(jì)了用于設(shè)置一些參數(shù)調(diào)整的功能選項(xiàng),比如說(shuō)傳感器檢測(cè)的頻率,頻率越高檢測(cè)時(shí)間越準(zhǔn)確,但是整個(gè)檢測(cè)系統(tǒng)的功耗也隨之加大;還有節(jié)點(diǎn)和車(chē)位的對(duì)應(yīng)關(guān)系,通常每個(gè)傳感器都有唯一的標(biāo)識(shí),此標(biāo)識(shí)與車(chē)位一一對(duì)應(yīng),但是遇到特殊情況的時(shí)候,可能需要相應(yīng)調(diào)整,則可以用該功能模塊進(jìn)行修改。本軟件界面簡(jiǎn)潔明了,使用簡(jiǎn)單方便,采用圖形化的方式實(shí)時(shí)顯示停車(chē)場(chǎng)各個(gè)車(chē)位的使用情況,實(shí)現(xiàn)了較好的效果。
[1]龔建偉,熊光明.Visual C++/Turbo C 串口通信編程實(shí)踐[M].北京:電子工業(yè)出版社,2007,9.
[2]沈建良,等.ATmega128 單片機(jī)入門(mén)與提高[M].北京:北京航空航天大學(xué)出版社,2009.
[3]周韌研,商斌.Visual C++串口通信開(kāi)發(fā)入門(mén)與編程實(shí)踐[M].北京:電子工業(yè)出版社,2009.
[4]王公仆,王文成.計(jì)算機(jī)與單片機(jī)的串口通訊程序設(shè)計(jì)[J].輕工機(jī)械,2007,25.
[5]王軍政,湯金元.基于PC與Atmega128單片機(jī)的室內(nèi)服務(wù)機(jī)器人控制系統(tǒng)設(shè)計(jì)[J].機(jī)床與液壓,2010,38(20).