版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘 要</b></p><p> 本論文以停車場(chǎng)的管理為主題,該系統(tǒng)軟件是使用WINDOWS操作平臺(tái)和SQL Server 2000開發(fā)的。本系統(tǒng)是一個(gè)功能比較完備的停車場(chǎng)系統(tǒng),通過實(shí)現(xiàn)串口通信,使用SQL Server數(shù)據(jù)庫(kù)處理圖像等技術(shù),使之具有Checkin、Checkout和計(jì)費(fèi)等主要功能,并在這些功能支持下,停車場(chǎng)管理人員可以監(jiān)視出門的車輛是否和進(jìn)門
2、的車輛是同一輛,收款人員可以通過電子顯示屏、語音等多種方式告訴顧客應(yīng)付的金額,停車場(chǎng)的管理人員可以通過后臺(tái)的數(shù)據(jù)庫(kù),得知收益狀況和對(duì)歷史交易記錄進(jìn)行查詢。</p><p> 關(guān)鍵字:串口通信,捕捉圖像,動(dòng)畫播放,視頻</p><p><b> ABSTRACT</b></p><p> This thesis set the topic
3、of Park System,and the system bases on WINDOWS operating system and SQL Server 2000 database.This park system has mature functions,it communicates the interface and uses SQL Server managing the image which get from the v
4、idicon,so this system has the functions of Checkin,Checkout,charging and so on.</p><p> Having this functions,the manager can check if the car was the same car when it putting off,and tell the chauffeur how
5、 much must pay for which via the LED,voice and so on.The manger can know the income and inquire about the historical business record from the background database.</p><p> KEYWORDS:communication port,catch i
6、mage,cartoon play,</p><p> video frequency</p><p><b> 目 錄</b></p><p> 第一章 引言··············
7、3;····································
8、183;··3</p><p> 1.1本課題研究的目的及意義···························
9、3;·····3</p><p> 1.2本課題的研究目標(biāo)與預(yù)期達(dá)到的結(jié)果··················3</p><p> 第二章 串口通信概述及其實(shí)
10、現(xiàn)····································
11、83;·3</p><p> 2.1串口通信概述·····························
12、3;·············3</p><p> 2.2串口通信實(shí)現(xiàn)··················
13、;·························4</p><p> 2.2.1用控件的方法實(shí)現(xiàn)串口通信····
14、3;······················4</p><p> 2.2.2文件的方法實(shí)現(xiàn)串口通信·······
15、3;·····················6</p><p> 第三章 主要功能簡(jiǎn)述·········
16、3;····································9&
17、lt;/p><p> 3.1打印憑據(jù)································
18、;···············9</p><p> 3.2抓拍圖像················
19、183;······························9</p><p> 3.3掃描條碼·
20、;····································
21、83;·········10</p><p> 3.4收費(fèi)······················&
22、#183;····························10</p><p> 第四章 系統(tǒng)分析與設(shè)計(jì)··
23、;····································
24、83;·····10</p><p> 4.1數(shù)據(jù)庫(kù)設(shè)計(jì)·························
25、3;···················10</p><p> 4.2系統(tǒng)配置信息···········
26、3;·······························11</p><p> 4.3實(shí)現(xiàn)功能
27、的主界面····································
28、···13</p><p> 第五章 重點(diǎn)功能實(shí)現(xiàn)及其代碼···························&
29、#183;··········13</p><p> 5.1串口通信····················
30、83;··························13</p><p> 5.1.1初始化串口····
31、183;····································
32、16</p><p> 5.1.2發(fā)送數(shù)據(jù)·······························
33、············20</p><p> 5.1.3接收數(shù)據(jù)···················
34、························23</p><p> 5.1.4工作現(xiàn)程函數(shù)······
35、3;································26</p><p> 5
36、.2視頻功能的實(shí)現(xiàn)···································&
37、#183;······31</p><p> 第六章 自定義動(dòng)畫播放························
38、;·····················36</p><p> 致謝···········
39、····································
40、3;··············38</p><p> 參考文獻(xiàn)·················
41、83;····································&
42、#183;···38</p><p><b> 第一章引言</b></p><p> 1.1本課題研究的目的及意義</p><p> 隨著社會(huì)經(jīng)濟(jì)的發(fā)展,汽車越來越多走進(jìn)家庭,開發(fā)一個(gè)具有憑票泊車、車輛拍照、語音報(bào)價(jià)、電子屏顯示費(fèi)用、交費(fèi)等一套完整的停車場(chǎng)的業(yè)務(wù)邏輯功能的停車場(chǎng)管理系統(tǒng)也就越來越有價(jià)值,因此,
43、停車場(chǎng)的管理顯得越來越重要。</p><p> :進(jìn)入21世紀(jì),信息處理技術(shù)有著突飛猛進(jìn)的發(fā)展,各類數(shù)據(jù)、信息急劇增長(zhǎng),大家對(duì)信息處理技術(shù)的利用已滲透到各行各業(yè)的各個(gè)環(huán)節(jié)中,而此同時(shí)我國(guó)汽車的產(chǎn)量和銷量也逐年增長(zhǎng),故對(duì)停車場(chǎng)的需求也逐年增加,而對(duì)停車場(chǎng)更需要有較好的管理,主要是實(shí)現(xiàn)對(duì)停車場(chǎng)的智能管理,實(shí)現(xiàn)給人們一個(gè)安全合理的服務(wù),為人們省去很多麻煩,讓人們更關(guān)注其他重要的事。</p><p&
44、gt; 1.2本課題的研究目標(biāo)與預(yù)期達(dá)到的結(jié)果</p><p> 本課題的研究目標(biāo)是建立一個(gè)功能比較完備的停車場(chǎng)系統(tǒng)。通過實(shí)現(xiàn)串口通信,使用SQL Server數(shù)據(jù)庫(kù)處理圖像等技術(shù),使之具有Checkin、Checkout和計(jì)費(fèi)等主要功能,并在這些功能支持下,停車場(chǎng)管理人員可以監(jiān)視出門的車輛是否和進(jìn)門的車輛是同一輛,收款人員可以通過電子顯示屏、語音等多種方式告訴顧客應(yīng)付的金額,停車場(chǎng)的管理人員可以通過后臺(tái)的數(shù)
45、據(jù)庫(kù),得知收益狀況和對(duì)歷史交易記錄進(jìn)行查詢。</p><p> 第二章串口通信概述及其實(shí)現(xiàn)</p><p><b> 2.1串口通信概述</b></p><p> 計(jì)算機(jī)進(jìn)行數(shù)據(jù)傳送的方式通常有兩種:一種是并行,一種是串行。</p><p> 并行數(shù)據(jù)傳送是指數(shù)據(jù)在多條并行、1位寬的傳輸線上,同時(shí)由發(fā)送方傳送到接
46、收方的數(shù)據(jù)傳送方式。串行數(shù)據(jù)傳送則是指數(shù)據(jù)在單條1位寬的傳輸線上,一位接一位地按順序分時(shí)傳送的數(shù)據(jù)傳送方式。并行數(shù)據(jù)通信的距離通常很短,串行數(shù)據(jù)通信的距離可以很長(zhǎng),從幾百米到幾千公里均可;并行數(shù)據(jù)通信的速度比串行數(shù)據(jù)通信快。</p><p> ?。?)串口通信的連接方式</p><p> 按照數(shù)據(jù)在傳輸線上的傳輸方向的不同,可以將串口通信分為:?jiǎn)喂し绞?、半雙工方式和全雙工方式。</
47、p><p><b> (2)串口通信協(xié)議</b></p><p> 為了使通信雙方順利地進(jìn)行通信,那么發(fā)送方和接收方必須共同遵守一些基本的通信規(guī)則,比如雙方的同步方式、差錯(cuò)校驗(yàn)方式、數(shù)據(jù)傳輸?shù)乃俣?、通信?bào)文的格式及控制字符的定義與含義。這些通信規(guī)則也可以稱為通信協(xié)議,通常用到的協(xié)議有異步通信和同步通信兩種。</p><p> 2.2串口通信的
48、實(shí)現(xiàn)</p><p> 使用Visual C++實(shí)現(xiàn)串口通信的方法有三種:一種是使用微軟提供的MsComm控件的方法;一種是使用Visual C++提供的標(biāo)準(zhǔn)通信函數(shù)的方法;一種是使用API的方法,也就是使用文件的方法,串口也是文件。</p><p> 2.2.1用控件的方法實(shí)現(xiàn)串口通信:</p><p> 微軟公司提供了MSComm32控件,這個(gè)組件專門用于
49、串口通信,因此,我們可以使用該組件進(jìn)行串口通信程序的編寫。</p><p><b> ?。?)屬性</b></p><p> MSComm32控件提供了許多屬性,不過常用的并不是很多,下面是幾個(gè)常用的屬性:</p><p> CommPort:設(shè)置/取得串口號(hào);</p><p> Settings:設(shè)置/取得串口通
50、信的波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位4個(gè)通信特征,這是一個(gè)字符串;</p><p> PortOpen:打開/關(guān)閉串口,TRUE為串口打開,F(xiàn)ALSE為串口關(guān)閉。</p><p> Input:從串口接收緩沖區(qū)中讀取數(shù)據(jù)。</p><p> Output:向串口發(fā)送緩沖區(qū)寫入數(shù)據(jù)。</p><p><b> ?。?)方法<
51、;/b></p><p> 當(dāng)這個(gè)控件加入到Visual C++的工程后,會(huì)產(chǎn)生針對(duì)于這個(gè)控件的類,默認(rèn)情況下類的名稱為CMSComm。當(dāng)然,我們可以進(jìn)行修改,這個(gè)類中提供了大量的方法,其中針對(duì)于上面提到的屬性操作的方法有:</p><p> void SetCommPort(short nNew Value);</p><p> 這個(gè)函數(shù)用來設(shè)置串口號(hào)
52、,即CommPort屬性。</p><p> short GetCommPort()</p><p> 這個(gè)函數(shù)用來獲取當(dāng)前操作的串口號(hào)。</p><p> void SetInBufferSize(short nNew Value);</p><p> 這個(gè)函數(shù)用來設(shè)置輸入緩沖區(qū)的大小。</p><p>
53、short GetInBufferSize();</p><p> 這個(gè)函數(shù)用來獲取輸入緩沖區(qū)的大小。</p><p> void SetOutBufferSize(short nNew Value);</p><p> 這個(gè)函數(shù)用來設(shè)置輸出緩沖區(qū)的大小。</p><p> short GetOutBufferSize();</
54、p><p> 這個(gè)函數(shù)用來獲取輸出緩沖區(qū)的大小。</p><p> Void SetPortOpen(BOOL bNewValue);</p><p> 這個(gè)函數(shù)通過bNewValue的值來打開/關(guān)閉串口,TRUE表示打開串口,F(xiàn)ALSE表示關(guān)閉串口。</p><p> BOOL GetPortOpen();</p>&l
55、t;p> 這個(gè)函數(shù)用來取得當(dāng)前串口的狀態(tài),是打開還是關(guān)閉。</p><p> Void SetOutput(const VARIANT&new Value);</p><p> 這個(gè)函數(shù)用來向串口中寫入數(shù)據(jù),或者稱為發(fā)送數(shù)據(jù)。</p><p> VARIANT GetInput();</p><p> 這個(gè)函數(shù)用來從串
56、口讀取數(shù)據(jù),或者稱為接收數(shù)據(jù)。</p><p> Void SetSetting(LPCTSTR lpszNewValue);</p><p> 這個(gè)函數(shù)用來設(shè)置Setting屬性,參數(shù)lpszNewValue是一個(gè)包含波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位信息的字符串。</p><p> CString GetSettings();</p><
57、p> 這個(gè)函數(shù)用來獲取串口的屬性,并返回到一個(gè)字符串中。</p><p> void SetCommEvent(short nNewValue);</p><p> 這個(gè)函數(shù)用來設(shè)置串口事件,對(duì)于這些已經(jīng)設(shè)置了的事件發(fā)生后,系統(tǒng)將會(huì)自動(dòng)進(jìn)行響應(yīng),響應(yīng)函數(shù)為OnComm。在Visual C++中可以對(duì)這個(gè)函數(shù)進(jìn)行重載,然后再在這個(gè)事件響應(yīng)函數(shù)中,使用下面的short GetCom
58、mEvent()函數(shù)對(duì)發(fā)生的事件進(jìn)行分析,作出不同的動(dòng)作。</p><p> void SetRThreshold(short nNewValue);</p><p> 這個(gè)函數(shù)用來設(shè)置接收數(shù)據(jù)事件發(fā)生的時(shí)間,當(dāng)接收緩沖區(qū)中有大于或等于參數(shù)nNewValue時(shí),將發(fā)生接收數(shù)據(jù)事件,從而導(dǎo)致事件響應(yīng)函數(shù)OnComm的執(zhí)行。</p><p> (3)響應(yīng)串口事件介
59、紹</p><p> MSComm32控件提供了兩種響應(yīng)串口事件的方式:</p><p><b> ①事件驅(qū)動(dòng)方式:</b></p><p> 當(dāng)串口事件(接收緩沖區(qū)中有數(shù)據(jù)、串口狀態(tài)發(fā)生了改變、串口操作發(fā)生錯(cuò)誤等)發(fā)生后,會(huì)導(dǎo)致OnComm事件響應(yīng)函數(shù)的運(yùn)行,因此可以在應(yīng)用程序中獲取發(fā)生的事件,并經(jīng)過分析,針對(duì)不同的事件采取不同的操作。
60、這種方法有程序響應(yīng)及時(shí),可靠性比較高的優(yōu)點(diǎn)。</p><p><b> ?、诓樵兎绞剑?lt;/b></p><p> 通過不斷地查看CommEvent屬性來得知當(dāng)前串口事件的發(fā)生情況。這種方法顯然沒有事件驅(qū)動(dòng)方式對(duì)串口事件的響應(yīng)及時(shí),比如當(dāng)查看程序的一次查看剛剛結(jié)束,事件就發(fā)生了,可是響應(yīng)事件要等到下一次查看發(fā)現(xiàn)后,才能進(jìn)行響應(yīng)。</p><p>
61、;<b> ?。?)使用</b></p><p> Visual C++中,使用MSComm控件方法進(jìn)行串口通信程序的編寫時(shí),一般情況是將MSComm控件放入某個(gè)對(duì)話框中,然后在對(duì)話框類中定義這個(gè)控件對(duì)應(yīng)的控件類型的數(shù)據(jù)成員,之后再使用這個(gè)數(shù)據(jù)成員對(duì)串口進(jìn)行操作即可。對(duì)話框資源編輯環(huán)境中,默認(rèn)情況下是沒有MSComm控件的,我們可以首先將控件加入到工程中,這時(shí)會(huì)產(chǎn)生一個(gè)默認(rèn)名稱為CMsCo
62、mm的類,而且,對(duì)話框資源編輯環(huán)境中將會(huì)出現(xiàn)該控件的小圖標(biāo),只要將這個(gè)控件拖到對(duì)話框中即可。</p><p> 2.2.2文件的方法實(shí)現(xiàn)串口通信</p><p> 在16位的Windows中,有提供了一些關(guān)于串口通信的函數(shù),有OpenComm、WriteComm、ReadComm、CloseComm等,還提供了WM_COMMNOTIFY消息。在Win32系統(tǒng)中,除了一般意義上的文件外,
63、還有許多設(shè)備也被當(dāng)作文件進(jìn)行操作。下面介紹在32位Windows平臺(tái)下,使用Visual C++中的文件方法實(shí)現(xiàn)串口通信:</p><p><b> ?。?)打開串口</b></p><p> 串口在Win32中作為文件處理,它的打開函數(shù)是CreateFile。</p><p><b> 函數(shù)原型</b></p&
64、gt;<p> HANDLE CreateFile(</p><p> LPCTSTR lpFileName,</p><p> DWORD dwDesiredAccess,</p><p> DWORD dwShareMode,</p><p> LPSECURITY_ATTRIBUTES lpSecurityAt
65、tributes,</p><p> DWORD dwCreationDisposition,</p><p> DWORD dwFlagsAndAttributes,</p><p> HANDLE hTemplateFile</p><p><b> );</b></p><p>
66、第一個(gè)參數(shù)lpFileName:指定要打開的文件的文件名。</p><p> 第二個(gè)參數(shù)dwDesiredAccess:訪問模式。</p><p> 第三個(gè)參數(shù)dwShareMode:共享模式,對(duì)于串口來說,這個(gè)參數(shù)必須給定為0,也就是說,串口不能象一般的文件那樣共享,它屬于獨(dú)占設(shè)備。</p><p> 第四個(gè)參數(shù)lpSecurityAttributes:安全
67、屬性,指向一個(gè)SECURITY_ATTRIBUTES結(jié)構(gòu)體,可以通過它來設(shè)定設(shè)備文件的關(guān)聯(lián)內(nèi)核對(duì)象的安全屬性,以及設(shè)備文件句柄能否被繼承,一般給值為NULL,表示創(chuàng)建的文件句柄不能被繼承。</p><p> 第五個(gè)參數(shù)dwCreationDisposition:創(chuàng)建方式,對(duì)于串口來說,此參數(shù)必須設(shè)定為OPEN_EXISTING屬性,表示打開的是已經(jīng)存在的文件,如果文件(串口)不存在,則CreateFile函數(shù)失
68、敗。因此不能設(shè)定為CREATE_NEW、CREATE_ALWAYS、OPEN_ALWAY、STRUNCATE_EXISTING值。</p><p> 第六個(gè)參數(shù)dwFlagsAndAttributes:表示新創(chuàng)建文件的屬性和標(biāo)志,對(duì)于串口來說,如果設(shè)定了FILE_FLAG_OVERLAPPED,則表示串口通信方式是重疊式的也就是異步的,并且對(duì)串口進(jìn)行讀寫時(shí)必須定義OVERLAPPED結(jié)構(gòu)體。如果沒有設(shè)定FILE
69、_FLAG_OVERLAPPED,也就是缺省情況,表示串口通信是非重疊式的也就是說是同步的。在MS_DOS和16位的Windows下,許多程序員習(xí)慣使用同步方式,比如對(duì)文件進(jìn)行讀操作時(shí),程序會(huì)處于等待狀態(tài),一直等到文件的讀操作結(jié)束返回后,程序才繼續(xù)執(zhí)行,用網(wǎng)絡(luò)的話來說就是阻塞。</p><p> 第七個(gè)參數(shù)hTemplateFile:臨時(shí)文件的句柄,必須給NULL值。</p><p>&
70、lt;b> 其返回值:</b></p><p> 成功:返回文件或設(shè)備的句柄,表示函數(shù)成功地創(chuàng)建或打開了一個(gè)文件或設(shè)備。</p><p> 失?。悍祷豂NVALID_HANDLE_VALUE。</p><p><b> ?。?)設(shè)置串口狀態(tài)</b></p><p> 打開串口后,接下來的事情應(yīng)該
71、是進(jìn)行串口通信,也就是進(jìn)行數(shù)據(jù)的讀寫。可是,我們發(fā)現(xiàn)串口通信程序出現(xiàn)問題的原因,往往是沒有對(duì)串口的屬性進(jìn)行正確的設(shè)置。因此,在進(jìn)行串口數(shù)據(jù)讀寫之前,應(yīng)該進(jìn)行串口屬性的設(shè)置,這些屬性包括波特率、是否允許奇偶校驗(yàn)、奇偶校驗(yàn)的方式、每個(gè)字符的數(shù)據(jù)位數(shù)、接收發(fā)送緩沖區(qū)情況和停止位數(shù)等,在Windows中,把這些屬性包裝在一個(gè)稱為DCB的結(jié)構(gòu)體中。</p><p><b> ?。?)串口的讀寫</b>
72、</p><p> Win32中使用ReadFile()和 WriteFile()函數(shù)代替ReadComm()、WriteComm()函數(shù)來進(jìn)行串口的讀寫。</p><p><b> (4)異步串口通信</b></p><p> 對(duì)于異步操作方式的串口通信來說,當(dāng)調(diào)用了ReadFile函數(shù)或者WriteFile函數(shù)后,調(diào)用者會(huì)立
73、刻返回繼續(xù)做別的事情。Win32中使用線程同步內(nèi)核對(duì)象得知讀寫是否返回,可以通過SetCommMask函數(shù)來設(shè)置串口的事件掩碼,然后使用WaitCommEvent函數(shù)等待已經(jīng)設(shè)置的某個(gè)或某些串口事件的發(fā)生。</p><p> SetCommMask函數(shù):</p><p> BOOL SetCommMask(HANDLE hFile,DWORD dwEvtMask event);<
74、/p><p> hFile參數(shù):表示文件句柄。</p><p> Events:事件掩碼</p><p> 事件掩碼可以是如下值的組合:</p><p> EV_BREAK:檢測(cè)到一個(gè)輸入中斷;</p><p> EV_CTS:CTS信號(hào)改變狀態(tài);</p><p> EV_DSR:DSR
75、(數(shù)據(jù)設(shè)置就緒)信號(hào)改變狀態(tài);</p><p> EV_ERR:發(fā)生了線路狀態(tài)錯(cuò)誤;</p><p> EV_RING:檢測(cè)到振鈴信號(hào);</p><p> EV_RXCHAR:輸入緩沖區(qū)接收到新字符,并把這個(gè)字符放入輸入緩沖區(qū);</p><p> EV_RXFLAG:輸入緩沖區(qū)接收到事件字符(屬于DCB 結(jié)構(gòu)體的EvtChar數(shù)據(jù)成員
76、);</p><p> EV_TXEMPTY:出緩沖區(qū)的最后一個(gè)字符被發(fā)送出去;</p><p> ?。?)串口的超時(shí)設(shè)置</p><p> 對(duì)于串口通信來說,可以通過設(shè)置它的超時(shí)值來影響讀寫操作函數(shù)的返回,簡(jiǎn)單地說,就是當(dāng)讀寫操作超過設(shè)置的時(shí)間段時(shí)返回。</p><p> 設(shè)置時(shí),首先定義一個(gè)COMMTIMEOUTS結(jié)構(gòu)體變量,然后通
77、過SetCommmTimeouts函數(shù)進(jìn)行設(shè)置即可。</p><p> COMMTIMEOUTS結(jié)構(gòu)體定義如下:</p><p> Typedef struct_COMMTIMEOUTS{</p><p> DWORD ReadIntervalTimeout;</p><p> DWORD ReadTotalTimeoutMult
78、iplier;</p><p> DWORD ReadTotalTimeoutConstant;</p><p> DWORD WriteTotalTimeoutMultiplier;</p><p> DWORD WriteTotalTimeoutConstant;</p><p> }COMMTIMEOUTS,*LPCOMM
79、TIMEOUTS;</p><p> ReadIntervalTimeout:指的是讀取兩個(gè)字符的間隔超時(shí)指標(biāo),當(dāng)一個(gè)字符讀取結(jié)束后,開始計(jì)時(shí),如果已經(jīng)超過了這個(gè)間隔,那么ReadFile函數(shù)將返回。</p><p> ReadTotalTimeoutMultiplier,WriteTotalTimeoutMultiplier:用來計(jì)算總超時(shí)的乘法器。</p><p
80、> ReadTotalTimeoutConstant,WriteTotalTimeoutConstant:這個(gè)值加上ReadTotalTimeoutMultiplier與需要讀取的字符數(shù)的乘積就是總超時(shí)。</p><p> 具體計(jì)算公式就是(其中的bytes指的是要讀取或?qū)懭氲淖止?jié)數(shù)):</p><p> 讀總超時(shí)值=( ReadTotalTimeoutMultiplier*b
81、ytes)+ ReadTotalTimeoutConstant</p><p> 寫總超時(shí)值=( WriteTotalTimeoutMultiplier*bytes)+ WriteTotalTimeoutConstant</p><p><b> ?。?)關(guān)閉串口</b></p><p> 當(dāng)不再使用串口后,應(yīng)該使用CloseHandle函
82、數(shù)將串口句柄關(guān)閉,CloseHandle函數(shù)原型;</p><p> BOOL CloseHandle(HANDLE hobject);</p><p> hObject:對(duì)于串口來說,指的是使用CreatFile函數(shù)打開串口時(shí)得到的句柄。</p><p><b> 其返回值:</b></p><p> TRU
83、E:表示成功關(guān)閉;</p><p> FALSE:表示關(guān)閉失敗;</p><p><b> 第三章主要功能簡(jiǎn)述</b></p><p><b> 3.1打印憑據(jù)</b></p><p> 汽車到達(dá)停車場(chǎng)入口時(shí),入口處的擋車器處于關(guān)閉狀態(tài)。管理員點(diǎn)擊“出票”按鈕后,系統(tǒng)打印一張印有當(dāng)前時(shí)間和憑
84、據(jù)號(hào)的紙票。司機(jī)拿到此票據(jù)后,管理員打開擋車器,汽車進(jìn)入停車場(chǎng)。</p><p> 在系統(tǒng)內(nèi)部要保存這個(gè)票號(hào)和它相關(guān)的數(shù)據(jù),為隨后汽車從出口駛出做準(zhǔn)備。</p><p><b> 3.2抓拍圖像</b></p><p> 在打印憑據(jù)的時(shí)候,系統(tǒng)同時(shí)要抓拍一張?jiān)谶M(jìn)口處的汽車的圖像,目的是為了在汽車駛出的時(shí)候進(jìn)行校驗(yàn)。</p>
85、<p> 由于有上述的用法,所以要求本圖像一定要保存在數(shù)據(jù)庫(kù)中,在日后可以對(duì)停車場(chǎng)曾經(jīng)服務(wù)過的車輛進(jìn)行跟蹤。圖像格式要求采用JPEG方式,大小270像素×200像素左右。</p><p><b> 3.3掃描條碼</b></p><p> 在汽車駛出前司機(jī)要進(jìn)行交費(fèi),交費(fèi)的時(shí)候司機(jī)要提供紙票。紙票上的號(hào)碼通過條形碼識(shí)別儀讀入到系統(tǒng)中。<
86、/p><p><b> 3.4收費(fèi)</b></p><p> 在本系統(tǒng)中使用統(tǒng)一的費(fèi)率標(biāo)準(zhǔn):2元/小時(shí)。計(jì)費(fèi)的準(zhǔn)確性至少精確到秒。當(dāng)司機(jī)開車要離開停車場(chǎng),在出口處出示憑據(jù)進(jìn)行掃描或者是人工輸入號(hào)碼,系統(tǒng)讀出車輛的停泊時(shí)間,根據(jù)費(fèi)率計(jì)算司機(jī)應(yīng)付的錢款。</p><p> 司機(jī)交費(fèi)后,管理員打開擋車器對(duì)車輛放行。</p><p
87、> 汽車在數(shù)據(jù)庫(kù)中的記錄要備份下來,其中包括使用的憑據(jù)的號(hào)碼、進(jìn)入時(shí)間、離開時(shí)間、進(jìn)入時(shí)候的圖像和交費(fèi)。</p><p> 第四章系統(tǒng)分析與設(shè)計(jì)</p><p><b> 4.1數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p> 本系統(tǒng)使用SQL Server數(shù)據(jù)庫(kù)VicAly,程序使用ODBC操作數(shù)據(jù)。</p><p>
88、; 下面介紹在VicAly數(shù)據(jù)庫(kù)中的各個(gè)數(shù)據(jù)表。</p><p> 在正式工作之前,管理員或者是收款員要輸入系統(tǒng)的帳號(hào)和口令才能進(jìn)入。因此要設(shè)計(jì)操作員表,如圖所示:</p><p><b> SQL語句為:</b></p><p> CREATE TABLE [dbo].[TAB_OPERATER] (</p><p
89、> [OPERATER] [varchar] (50) NOT NULL ,</p><p> [PASSWORD] [varchar] (50) NULL </p><p> ) ON [PRIMARY]</p><p> 汽車進(jìn)入停車場(chǎng),系統(tǒng)立刻記錄下當(dāng)時(shí)的時(shí)間和司機(jī)所持的卡號(hào)還有當(dāng)時(shí)的汽車的圖像,所以TAB_COUNTTIME數(shù)據(jù)表的設(shè)計(jì)如圖所示
90、:</p><p> CARD_ID條形碼的,也就是司機(jī)所持的憑據(jù)上的條形碼的含義。</p><p> IN_TIME是汽車進(jìn)入時(shí)間。</p><p> CARD_IMAGE是在汽車進(jìn)入停車場(chǎng)之前,由系統(tǒng)拍攝得到的照片。</p><p><b> SQL語句為:</b></p><p>
91、 CREATE TABLE [dbo].[TAB_COUNTTIME] (</p><p> [CARD_ID] [varchar] (50) NOT NULL ,</p><p> [IN_TIME] [datetime] NULL ,</p><p> [CAR_IMAGE] [image] NULL </p><p><b&
92、gt; )</b></p><p> 系統(tǒng)的需求中要保存每個(gè)車輛進(jìn)入車場(chǎng)的歷史記錄,包括進(jìn)入時(shí)所持卡的號(hào)碼、進(jìn)入時(shí)間、出門時(shí)間、收費(fèi)情況和當(dāng)時(shí)進(jìn)門時(shí)的圖像。根據(jù)上面的要求設(shè)計(jì)表TAB_HISTORY_CARD,字段說明如圖所示:</p><p> CARD_ID表示紙卡的卡號(hào),也就是打印到憑據(jù)上的條形碼。</p><p> IN_TIME汽車進(jìn)入
93、的時(shí)間</p><p> OUT_TIME汽車駛出的時(shí)間</p><p> PAY_AMOUNT司機(jī)所交的費(fèi)用</p><p> CAR_IMAGE汽車進(jìn)入時(shí)的圖片</p><p><b> SQL語句為:</b></p><p> CREATE TABLE [dbo].[TAB_HIS
94、TORY_CARD] (</p><p> [CARD_ID] [varchar] (50) NULL ,</p><p> [IN_TIME] [datetime] NULL ,</p><p> [OUT_TIME] [datetime] NULL ,</p><p> [PAY_AMOUNT] [money] NULL ,<
95、;/p><p> [CAR_IMAGE] [image] NULL </p><p> ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]</p><p> 4.2系統(tǒng)配置信息(主要配置ODBC數(shù)據(jù)庫(kù))</p><p> 打開配置對(duì)話框,配置名為DSN_VicAly,驅(qū)程為SQL Server的數(shù)據(jù)源:</p
96、><p> 并改變默認(rèn)數(shù)據(jù)庫(kù)名為VicAly:</p><p> 4.3實(shí)現(xiàn)功能的主界面</p><p> 第五章重點(diǎn)功能實(shí)現(xiàn)及其代碼</p><p><b> 5.1串口通信</b></p><p> 在本系統(tǒng)中實(shí)現(xiàn)串口通信的類為CSerialPort,它是一個(gè)開發(fā)源碼的類,作者為Remo
97、n Spekreijse.</p><p><b> 類的定義:</b></p><p> 【代碼示例】CSerialPort類定義(串口通信類)</p><p> //*******************************************************</p><p> **FILE
98、NAMECSerialPort.h</p><p> **PURPOSEThis class can read, write and watch one serial port.</p><p> **It sends messages to its owner when something happends </p><p> on the
99、 port</p><p> ** The class creates a thread for reading and writing so the main</p><p> ** program is not blocked.</p><p> **AUTHORRemon Spekreijse</p&g
100、t;<p><b> */</b></p><p> #ifndef __SERIALPORT_H__</p><p> #define __SERIALPORT_H__</p><p> #define WM_COMM_BREAK_DETECTEDWM_USER+1</p><p> //
101、 A break was detected on input.</p><p> #define WM_COMM_CTS_DETECTEDWM_USER+2</p><p> // The CTS (clear-to-send) signal changed state. </p><p> #define WM_COMM_DSR_DETECTEDW
102、M_USER+3</p><p> // The DSR (data-set-ready) signal changed state. </p><p> #define WM_COMM_ERR_DETECTEDWM_USER+4</p><p> // A line-status error occurred. Line-status errors
103、are CE_FRAME, CE_OVERRUN, and CE_RXPARITY. </p><p> #define WM_COMM_RING_DETECTEDWM_USER+5</p><p> // A ring indicator was detected. </p><p> #define WM_COMM_RLSD_DETECTEDWM
104、_USER+6</p><p> // The RLSD (receive-line-signal-detect) signal changed state. </p><p> #define WM_COMM_RXCHARWM_USER+7</p><p> // A character was received and placed in th
105、e input buffer. </p><p> #define WM_COMM_RXFLAG_DETECTEDWM_USER+8</p><p> // The event character was received and placed in the input buffer. </p><p> #define WM_COMM_TXEMPTY
106、_DETECTEDWM_USER+9</p><p> // The last character in the output buffer was sent. </p><p> class CSerialPort</p><p> { </p><p><b> public:</
107、b></p><p> BOOL ClearRXBuffer();</p><p> // contruction and destruction</p><p> CSerialPort();</p><p> virtual~CSerialPort();</p><p> // port ini
108、tialisation</p><p> BOOLInitPort(CWnd* pPortOwner, UINT portnr = 3, UINT baud = 1200, char parity = 'E', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR | EV_CTS,
109、UINT nBufferSize = 512);</p><p> // start/stop comm watching</p><p> BOOLStartMonitoring();</p><p> BOOLRestartMonitoring();</p><p> BOOLStopMonitoring();<
110、/p><p> DWORDGetWriteBufferSize();</p><p> DWORDGetCommEvents();</p><p> DCBGetDCB();</p><p> voidWriteToPort(char* string);</p><p> protected:&
111、lt;/p><p> // protected memberfunctions</p><p> voidProcessErrorMessage(char* ErrorText);</p><p> static UINTCommThread(LPVOID pParam);</p><p> static voidReceiveC
112、har(CSerialPort* port, COMSTAT comstat);</p><p> static voidWriteChar(CSerialPort* port);</p><p><b> // thread</b></p><p> CWinThread*m_Thread;</p><p&g
113、t; // synchronisation objects</p><p> CRITICAL_SECTIONm_csCommunicationSync;</p><p> BOOLm_bThreadAlive;</p><p> // handles</p><p> HANDLEm_hShutdownEvent
114、;</p><p> HANDLEm_hComm;</p><p> HANDLEm_hWriteEvent;</p><p> // Event array. </p><p> // One element is used for each event. There are two event handles fo
115、r each port.</p><p> // A Write event and a receive character event which is located in the overlapped structure (m_ov.hEvent).</p><p> // There is a general shutdown when the port is closed.
116、</p><p> HANDLEm_hEventArray[3];</p><p> // structures</p><p> OVERLAPPEDm_ov;</p><p> COMMTIMEOUTSm_CommTimeouts;</p><p> DCBm_dcb;<
117、/p><p> // owner window</p><p> CWnd*m_pOwner;</p><p><b> // misc</b></p><p> UINTm_nPortNr;</p><p> char*m_szWriteBuffer;</p&
118、gt;<p> DWORDm_dwCommEvents;</p><p> DWORDm_nWriteBufferSize;</p><p><b> };</b></p><p> #endif __SERIALPORT_H__</p><p> //**************
119、*****************************************</p><p><b> 初始化串口</b></p><p> 【代碼示例】初始化串口(CSerialPort::InitPort函數(shù))</p><p> //************************************************
120、*******</p><p><b> /*</b></p><p> **FILENAMECSerialPort.cpp</p><p> // Initialize the port. This can be port 1 to 4.</p><p><b> //</b>&l
121、t;/p><p> BOOL CSerialPort::InitPort(CWnd* pPortOwner,// the owner (CWnd) of the port (receives message)</p><p> UINT portnr,// portnumber (3..6)</p><p> UINT baud,// baudra
122、te</p><p> char parity,// parity </p><p> UINT databits,// databits </p><p> UINT stopbits,// stopbits </p><p> DWORD dwCommEvents,// EV_RXCHAR, EV_CTS et
123、c</p><p> UINT writebuffersize)// size to the writebuffer</p><p><b> {</b></p><p> //assert(portnr > 2 && portnr < 7);</p><p> assert(p
124、PortOwner != NULL);</p><p> // if the thread is alive: Kill</p><p> if (m_bThreadAlive)</p><p><b> {</b></p><p><b> do</b></p><p&
125、gt;<b> {</b></p><p> SetEvent(m_hShutdownEvent);</p><p> } while (m_bThreadAlive);</p><p> TRACE("Thread ended\n");</p><p><b> }</b&
126、gt;</p><p> // create events</p><p> if (m_ov.hEvent != NULL)</p><p> ResetEvent(m_ov.hEvent);</p><p> m_ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);</p>
127、<p> if (m_hWriteEvent != NULL)</p><p> ResetEvent(m_hWriteEvent);</p><p> m_hWriteEvent = CreateEvent(NULL, TRUE, FALSE, NULL);</p><p> if (m_hShutdownEvent != NULL)<
128、/p><p> ResetEvent(m_hShutdownEvent);</p><p> m_hShutdownEvent = CreateEvent(NULL, TRUE, FALSE, NULL);</p><p> // initialize the event objects</p><p> m_hEventArray[0]
129、 = m_hShutdownEvent;// highest priority</p><p> m_hEventArray[1] = m_ov.hEvent;</p><p> m_hEventArray[2] = m_hWriteEvent;</p><p> // initialize critical section</p><p
130、> InitializeCriticalSection(&m_csCommunicationSync);</p><p> // set buffersize for writing and save the owner</p><p> m_pOwner = pPortOwner;</p><p> if (m_szWriteBuffer !
131、= NULL)</p><p> delete [] m_szWriteBuffer;</p><p> m_szWriteBuffer = new char[writebuffersize];</p><p> m_nPortNr = portnr;</p><p> m_nWriteBufferSize = writebuffer
132、size;</p><p> m_dwCommEvents = dwCommEvents;</p><p> BOOL bResult = FALSE;</p><p> char *szPort = new char[50];</p><p> char *szBaud = new char[50];</p><
133、p> // now it critical!</p><p> EnterCriticalSection(&m_csCommunicationSync);</p><p> // if the port is already opened: close it</p><p> if (m_hComm != NULL)</p>&l
134、t;p><b> {</b></p><p> CloseHandle(m_hComm);</p><p> m_hComm = NULL;</p><p><b> }</b></p><p> // prepare port strings</p><p>
135、; sprintf(szPort, "COM%d", portnr);</p><p> sprintf(szBaud, "baud=%d parity=%c data=%d stop=%d", baud, parity, databits, stopbits);</p><p> // get a handle to the port<
136、/p><p> m_hComm = CreateFile(szPort,// communication port string (COMX)</p><p> GENERIC_READ | GENERIC_WRITE,// read/write types</p><p> 0, // comm devices must be opened with
137、exclusive access</p><p> NULL,// no security attributes</p><p> OPEN_EXISTING,// comm devices must use OPEN_EXISTING</p><p> FILE_FLAG_OVERLAPPED,// Async I/O</p><
138、;p> 0);// template must be 0 for comm devices</p><p> if (m_hComm == INVALID_HANDLE_VALUE)</p><p><b> {</b></p><p> // port not found</p><p> dele
139、te [] szPort;</p><p> delete [] szBaud;</p><p> return FALSE;</p><p><b> }</b></p><p> // set the timeout values</p><p> m_CommTimeouts.Re
140、adIntervalTimeout = 1000;</p><p> m_CommTimeouts.ReadTotalTimeoutMultiplier = 1000;</p><p> m_CommTimeouts.ReadTotalTimeoutConstant = 1000;</p><p> m_CommTimeouts.WriteTotalTimeo
141、utMultiplier = 1000;</p><p> m_CommTimeouts.WriteTotalTimeoutConstant = 1000;</p><p> // configure</p><p> if (SetCommTimeouts(m_hComm, &m_CommTimeouts))</p><p>
142、 { </p><p> if (SetCommMask(m_hComm, dwCommEvents))</p><p><b> {</b></p><p> if (GetCommState(m_hComm, &m_dcb))</p><p><b> {</b>
143、;</p><p> m_dcb.fRtsControl = RTS_CONTROL_ENABLE;// set RTS bit high!</p><p> if (BuildCommDCB(szBaud, &m_dcb))</p><p><b> {</b></p><p> if (SetCo
144、mmState(m_hComm, &m_dcb))</p><p> ; // normal operation... continue</p><p><b> else</b></p><p> ProcessErrorMessage("SetCommState()");</p><p&
145、gt;<b> }</b></p><p><b> else</b></p><p> ProcessErrorMessage("BuildCommDCB()");</p><p><b> }</b></p><p><b> els
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 本科畢業(yè)論文——停車場(chǎng)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 停車場(chǎng)管理系統(tǒng)畢業(yè)論文
- 停車場(chǎng)管理系統(tǒng)畢業(yè)論文
- 停車場(chǎng)收費(fèi)管理系統(tǒng)畢業(yè)論文
- 停車場(chǎng)收費(fèi)管理系統(tǒng)畢業(yè)論文
- 計(jì)算機(jī)本科畢業(yè)論文--在線考試系統(tǒng)
- 計(jì)算機(jī)專業(yè)本科畢業(yè)論文(招聘管理系統(tǒng))
- 智能停車場(chǎng)管理系統(tǒng)設(shè)計(jì)畢業(yè)論文
- 停車場(chǎng)(庫(kù))計(jì)費(fèi)管理系統(tǒng)計(jì)算機(jī)選型原則
- 計(jì)算機(jī)專業(yè)本科畢業(yè)論文
- 計(jì)算機(jī)專業(yè)本科畢業(yè)論文
- 計(jì)算機(jī)專業(yè)本科畢業(yè)論文
- 計(jì)算機(jī)本科畢業(yè)論文--企業(yè)人事管理系統(tǒng)設(shè)計(jì)
- 智能停車場(chǎng)畢業(yè)論文
- 計(jì)算機(jī)本科畢業(yè)論文-delphi稅務(wù)信息采集系統(tǒng)
- 停車場(chǎng)管理系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 基于計(jì)算機(jī)通信技術(shù)的停車場(chǎng)收費(fèi)系統(tǒng)設(shè)計(jì)
- 計(jì)算機(jī)本科畢業(yè)論文校園網(wǎng)站設(shè)計(jì)
- 計(jì)算機(jī)本科畢業(yè)論文---計(jì)算機(jī)局域網(wǎng)組建與應(yīng)用
- 軟件工程畢業(yè)論文-停車場(chǎng)管理系統(tǒng)——前臺(tái)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論