標(biāo)準化工業(yè)儀表上位機調(diào)試調(diào)試平臺設(shè)計學(xué)士學(xué)位論文_第1頁
已閱讀1頁,還剩82頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  學(xué) 位 論 文</b></p><p>  標(biāo)準化工業(yè)儀表上位機調(diào)試調(diào)試平臺設(shè)計</p><p>  作 者 姓 名: 許康 </p><p>  學(xué) 科 專 業(yè): 測控技術(shù)與儀器 </p><p>  學(xué) 號:

2、 102028128 </p><p>  指 導(dǎo) 教 師: 張劍平(教授) </p><p>  完 成 日 期: 2014-06-07 </p><p><b>  太原工業(yè)學(xué)院</b></p><p>  Taiyuan Institute of Tec

3、hnology</p><p><b>  誠信申明</b></p><p><b>  本人申明:</b></p><p>  本人所提交的畢業(yè)設(shè)計(論文)《標(biāo)準化工業(yè)儀表上位機調(diào)試調(diào)試平臺設(shè)計》的所有材料是本人在指導(dǎo)教師指導(dǎo)下獨立研究、寫作、完成的成果,設(shè)計(論文)中所引用他人的無論以何種方式發(fā)布的文字、研究成果,均在

4、設(shè)計(論文)中加以說明;有關(guān)教師、同學(xué)和其他人員對我的設(shè)計(論文)的寫作、修訂提出過并為我在設(shè)計(論文)中加以采納的意見、建議,均已在我的致謝辭中加以說明并深致謝意。</p><p>  本設(shè)計(論文)和資料若有不實之處,本人承擔(dān)一切相關(guān)責(zé)任。</p><p><b>  特此申明。</b></p><p>  本人簽名:

5、 </p><p><b>  2014年6月7日</b></p><p>  畢業(yè)設(shè)計(論文)任務(wù)書</p><p>  設(shè)計(論文)題目: 標(biāo)準化工業(yè)儀表上位機調(diào)試調(diào)試平臺設(shè)計 </p><p>  系部: 電子工程系

6、 專業(yè):測控技術(shù)與儀器 學(xué)號: 102028128 </p><p>  學(xué)生: 許康 指導(dǎo)教師(含職稱): 張劍平(教授) </p><p><b>  課題意義及目標(biāo)</b></p><p>  針對工業(yè)儀表目前存在品種繁多、兼容性差、維護困難等諸多不利現(xiàn)狀

7、,構(gòu)建具有圖形化運算模型的工業(yè)儀表操作系統(tǒng)是非常必要的,其思路是通過數(shù)學(xué)模型和優(yōu)化算法,將儀表設(shè)置和信息加工運算轉(zhuǎn)變成圖形化運算模型,用戶只要初具儀表常識,拿手指觸摸圖案就可以輕松完成儀表的配置、運算模型設(shè)定、監(jiān)控、維護和升級等操作。</p><p><b>  主要內(nèi)容</b></p><p>  本課題的任務(wù)是實現(xiàn)工業(yè)儀表上位機的調(diào)試平臺的程序設(shè)計。</p&

8、gt;<p><b>  要求:</b></p><p>  (1)對各個控件進行調(diào)用實現(xiàn)單個儀表或全部儀表的信息調(diào)度;</p><p> ?。?)能將儀表的內(nèi)容顯示在上位機界面上;</p><p>  (3)上位機和在線儀表可以組成一個DCS系統(tǒng)。</p><p><b>  主要參考文獻<

9、;/b></p><p>  [1] 張劍平. 智能化檢測系統(tǒng)及儀器[M]. 第二版. 國防工業(yè)出版社, 2009-07. </p><p>  [2] Blanchette J, Summerfield M. C++ GUI Programming with Qt 4[M]. 2nd Revised Edition. Prentice Hall, 2008-02.</p>

10、;<p>  [3](美)薩維奇, 周靖. C++程序設(shè)計[M]. 第八版. 清華大學(xué)出版社, 2012-02-01.</p><p><b>  進度安排</b></p><p>  標(biāo)準化工業(yè)儀表上位機調(diào)試調(diào)試平臺設(shè)計</p><p><b>  摘要</b></p><p>  

11、本文主要是介紹基于Windows系統(tǒng)和QT 制作標(biāo)準化工業(yè)儀表上位機調(diào)試平臺的設(shè)計方法。設(shè)計的主要目的是實現(xiàn)上位機與標(biāo)準化工業(yè)儀表下位機的通訊,使普通用戶也能夠遠程完成對下位機儀表狀態(tài)的監(jiān)控。此調(diào)試平臺是以計算機為基礎(chǔ),通過串口或者其他通訊方式與標(biāo)準化工業(yè)儀表進行通訊,將儀表的信息傳輸?shù)狡脚_上,在一個界面實現(xiàn)同時監(jiān)控一個或多個儀表的實時信息,從而實現(xiàn)遠距離監(jiān)控的目的。調(diào)試平臺是在Windows系統(tǒng)下,利用QT制作出人機交互界面,使用C+

12、+編程語言實現(xiàn)軟件的基本功能與軟件界面的結(jié)合。本軟件的兩個特點:1. 能夠?qū)崿F(xiàn)多種方式與下位機的通訊;2. 能夠?qū)崟r動態(tài)顯示下位機信息。</p><p>  關(guān)鍵詞: 上位機,TCP通訊,串口通訊,實時監(jiān)控</p><p>  The Debugging PC Platform of the standardized Industrial Instrumentation </p>

13、;<p><b>  Abstract</b></p><p>  The artist focus on introducing the design methods of the debugging PC platform of the standardized industrial instrumentation which is developed by QT in t

14、he Windows System. The main purposes of designing is to make connection between the host PC and the standardized industrial instrumentation and show the information received by the TCP or any other way which making ordin

15、ary people can monitor the real-time state of the instrumentation by a long distance .The PC platform can connect the instru</p><p>  Key words:PC Platform, TCP Communication, Serial Communication, real-time

16、 Monitoring</p><p><b>  目 錄</b></p><p><b>  1緒論1</b></p><p>  1.1研究的背景和意義1</p><p>  1.2主要實現(xiàn)的功能1</p><p>  2開發(fā)平臺和開發(fā)語言簡介3</p

17、><p>  2.1WINDOWS系統(tǒng)介紹3</p><p>  2.1.1WINDOWS系統(tǒng)的由來和發(fā)展3</p><p>  2.1.2 WINDOWS系統(tǒng)的特點4</p><p>  2.2QT 開發(fā)工具和開發(fā)語言的介紹5</p><p>  2.2.1QT的誕生和發(fā)展5</p>&l

18、t;p>  2.2.2QT 開發(fā)的優(yōu)點和特點5</p><p>  2.2.3C++語言介紹6</p><p>  3SQLite 數(shù)據(jù)庫簡介8</p><p>  3.1 SQLITE 數(shù)據(jù)庫的由來和發(fā)展8</p><p>  3.2 SQLITE 數(shù)據(jù)庫的特點9</p><p>  3.3 數(shù)

19、據(jù)庫設(shè)計10</p><p><b>  4軟件設(shè)計12</b></p><p>  4.1軟件功能概要12</p><p>  4.1.1 軟件結(jié)構(gòu)圖12</p><p>  4.1.2 軟件部分功能流程圖13</p><p>  4.2用戶登錄模塊的設(shè)計16</p>

20、;<p>  4.3狀態(tài)顯示模塊的設(shè)計21</p><p>  4.4軟件主界面設(shè)計22</p><p>  4.5軟件通信模塊設(shè)計25</p><p>  4.5.1軟件通信模塊25</p><p>  4.5.2TCP 通信模塊26</p><p>  4.5.3UDP 通信模塊

21、28</p><p>  4.5.4串口通信模塊29</p><p>  4.6信息處理和顯示模塊的設(shè)計31</p><p>  4.6.1 電壓模塊33</p><p>  4.6.2 電流模塊40</p><p>  4.6.3 波形模塊41</p><p>  4.6.4

22、速度模塊45</p><p>  4.7用戶管理模塊的設(shè)計47</p><p>  4.8 幫助模塊的設(shè)計49</p><p><b>  5 總結(jié)51</b></p><p><b>  參考文獻52</b></p><p><b>  致謝5

23、3</b></p><p><b>  附錄54</b></p><p><b>  1緒論</b></p><p><b>  研究的背景和意義</b></p><p>  工業(yè)儀表是使用廣泛的電氣設(shè)備,生產(chǎn)生活中無處不是工業(yè)儀表的身影,大到機場、研究院,小到社

24、區(qū)、家庭,工業(yè)儀表的普遍性與重要性可見一斑。然而,由于各企事業(yè)單位的建設(shè)是按照自身條件來逐步增加設(shè)備的,而儀表的生產(chǎn)廠商也是按照這些企事業(yè)單位的要求來配置儀表的,再加上生產(chǎn)廠商基于技術(shù)保密等原因的考慮,最終使市場上的工業(yè)儀表形成了儀表品種繁多、標(biāo)準不一、兼容性差、利用率低等一系列問題,同時隨著網(wǎng)絡(luò)節(jié)點的增多,如何實現(xiàn)遠程監(jiān)控儀表狀態(tài),脫離工業(yè)現(xiàn)場的束縛,成了一個全新的課題。近幾年,從國外的一些產(chǎn)品我們也能看到新一代儀表的一些發(fā)展趨勢。如

25、PHILIPS公司,近年來推出一種基于工業(yè)總線的模塊化產(chǎn)品,每個模塊都可以獨立完成規(guī)定的任務(wù),多個模塊也可相互配合完成規(guī)定的任務(wù),但僅限于控制模塊,并沒有標(biāo)準化的要求及操作系統(tǒng)。</p><p>  目的和意義:為解決上述問題,研發(fā)一種能夠具有統(tǒng)一標(biāo)準,兼容性良好,利用率高的工業(yè)儀表成為了關(guān)鍵。</p><p>  本課題恰恰是致力于這種工業(yè)儀表的上位機調(diào)試平臺的設(shè)計與研發(fā)。此調(diào)試平臺是以

26、計算機為基礎(chǔ),通過串口或者其他通訊方式與標(biāo)準化工業(yè)儀表進行通訊,將儀表的信息傳輸?shù)狡脚_上,在一個界面實現(xiàn)同時監(jiān)控一個或多個儀表的實時信息,從而實現(xiàn)遠距離監(jiān)控的目的。通過與下位機的標(biāo)準化工業(yè)儀表相結(jié)合,從而達到簡化人員操作,實現(xiàn)標(biāo)準統(tǒng)一,兼容性好,利用率高的一種工業(yè)儀表的最終目標(biāo)。</p><p><b>  主要實現(xiàn)的功能</b></p><p><b> 

27、 主要實現(xiàn)的功能:</b></p><p>  實現(xiàn)了上位機與下位機通過TCP、UDP及串口通信功能;</p><p>  實現(xiàn)了下位機信息的實時動態(tài)顯示功能;</p><p>  實現(xiàn)了用戶登錄校驗功能。</p><p>  開發(fā)平臺和開發(fā)語言簡介</p><p>  WINDOWS系統(tǒng)介紹</p&

28、gt;<p>  WINDOWS系統(tǒng)的由來和發(fā)展</p><p>  WINDOWS系統(tǒng),即Microsoft Windows系統(tǒng),是微軟公司推出的一系列的操作系統(tǒng)。最早版本的Windows 推出于1985年,起初僅僅是MS-DOS之下的桌面環(huán)境,其后續(xù)版本逐漸發(fā)展成為個人電腦和服務(wù)器用戶設(shè)計的操作系統(tǒng),并最終在世界個人電腦操作系統(tǒng)領(lǐng)域內(nèi)占據(jù)壟斷地位。Windows系統(tǒng)擁有不同的平臺版本,如個人電腦

29、、服務(wù)器以及近幾年剛剛涉及的移動設(shè)備領(lǐng)域,其中在個人電腦領(lǐng)域內(nèi)應(yīng)用最為普遍。</p><p>  Windows起源可以追溯到多年前的施樂公司所進行的研發(fā)工作。1970年,美國施樂公司成立了著名的研究機構(gòu)帕羅奧多研究中心,主要從事局域網(wǎng)絡(luò)、激光打印機、圖形用戶界面和面向?qū)ο蠹夹g(shù)的研究。施樂公司于1981年宣布推出世界上第一個商用的圖形用戶界面系統(tǒng)“Star 8010”工作站。但由于種種原因,此技術(shù)并未得到大眾的重

30、視,也沒有協(xié)助商業(yè)化的應(yīng)用。這時,蘋果計算機的創(chuàng)始人之一的史蒂夫?喬布斯在參觀了施樂公司的帕羅奧多研究中心后認識到了圖形用戶界面的重要性及廣闊的市場前景,便開始著手進行自己的圖形用戶界面系統(tǒng)的研發(fā)工作并于1983年研發(fā)出第一個圖形用戶界面系統(tǒng)Lisa。不久第二個圖形用戶界面系統(tǒng)Macintosh 推出,并成為了世界上第一個成功的商業(yè)圖形用戶界面系統(tǒng)。但由于蘋果計算機的商業(yè)化考慮,及Intel x86微處理器芯片的IBM兼容計算機已漸露頭

31、角,因此就給了微軟公司所開發(fā)的Windows生存空間和市場。微軟公司也意識到了創(chuàng)建業(yè)界標(biāo)準的重要性,所以在1983年春季就宣布開始研究開發(fā)Windows,并于1985年和1987年分別推出了Windows 1.0版和Windows 2.0版。</p><p>  WINDOWS 系統(tǒng)的特點</p><p>  本課題所進行的軟件開發(fā)是基于Window 7。Windows 7操作系統(tǒng)是微軟公

32、司最新推出的基于 Windows Vista升級的操作系統(tǒng),相對于以往的系統(tǒng) Windows 7的錯誤診斷和修復(fù)機制更加強大,能夠在用戶最少的干預(yù)下完成修復(fù)工作;開機和關(guān)機速度更快,改善了用戶體驗度。</p><p>  Windows 7 因其創(chuàng)新的性能、出色的兼容性和卓越的使用體驗,獲得了來自IT各界人士的一致好評。以下為Windows 7 的3個特點。</p><p><b&g

33、t;  更加簡單</b></p><p>  Windows 7將會讓搜索和使用信息更加簡單,包括本地、網(wǎng)絡(luò)和互聯(lián)網(wǎng)搜索功能;直觀的用戶體驗將更加高級。</p><p><b>  更加安全</b></p><p>  Windows 7包括改進的安全和功能合法性,還將數(shù)據(jù)保護和管理擴展到外圍設(shè)備。Windows 7改進了基于角色的

34、計算方案和用戶賬戶管理,在數(shù)據(jù)保護和兼顧協(xié)作的固有沖突之間搭建了溝通橋梁,同時也開啟了企業(yè)級的數(shù)據(jù)保護和權(quán)限許可。</p><p><b>  更好的連接</b></p><p>  Windows 7將進一步增強移動工作能力,無論在 何時、何地,任何設(shè)備都能訪問數(shù)據(jù)和應(yīng)用程序,開啟堅固的特別協(xié)作體驗,無線連接、管理和安全功能進一步擴展,性能和當(dāng)前功能以及新興移動硬件

35、得到了優(yōu)化,多設(shè)備同步、管理和數(shù)據(jù)保護功能被擴展。 另外,Windows 7還帶來了靈活計算基礎(chǔ)設(shè)施,包括 網(wǎng)絡(luò)中心模型。</p><p>  QT 開發(fā)工具和開發(fā)語言的介紹</p><p><b>  QT的誕生和發(fā)展</b></p><p>  QT是一個跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI

36、程序,比如控制臺工具和服務(wù)器。QT是面向?qū)ο蟮目蚣埽褂锰厥獾拇a生成擴展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,易于擴展,允許組件編程。</p><p>  1991年,Haavard Nord 和 Eirik Chambe-Eng 開始開發(fā)QT,并于1994年創(chuàng)立公司Trolltech,中文名為“奇趣科技”,2008年 Trolltech被NOKIA 公司收購,以

37、增強該公司在跨平臺軟件研發(fā)方面的實力,更名為QT Software。</p><p>  2009年5月11日,諾基亞QT Software宣布QT源代碼管理系統(tǒng)面向公眾開放,QT開發(fā)人員可通過QT 以及與QT相關(guān)的項目貢獻代碼、翻譯、示例以及其他內(nèi)容,協(xié)助引導(dǎo)和塑造QT未來的發(fā)展。</p><p>  2012年8月9日,Digia宣布已完成對諾基亞QT業(yè)務(wù)以及軟件技術(shù)的全面收購。201

38、4年,跨平臺集成開發(fā)環(huán)境QT Creator 3.1 發(fā)布,實現(xiàn)了對于iOS的完全支持,新增WinRT、Beautifier等插件,廢棄了無Python接口的GDB調(diào)試支持,集成了基于Clang的C/C++代碼模塊,并對Android支持做出了調(diào)整,至此實現(xiàn)了全面支持iOS、Android、WP。</p><p>  QT 開發(fā)的優(yōu)點和特點</p><p>  QT 所具有的優(yōu)點和特點主要

39、為以下幾個:</p><p>  優(yōu)良的跨平臺特性:QT支持下列操作系統(tǒng):Microsoft Windows 7/8, Microsoft Windows NT, Linux , Unix ,FreeBSD, Ubuntu , SCO等;</p><p><b>  面向?qū)ο?lt;/b></p><p>  QT具有良好的封裝機制,這也使得其模塊化

40、成都非常高,可重用性好,對用戶的開發(fā)非常方便;QT 提供了SIGNAL/SLOT 的安全類來簡化各個元件之間的協(xié)同操作;</p><p><b>  豐富的API</b></p><p>  QT 包括多大250個以上的C++類,提供了基于模板的collections,date/time類。也提供對正則表達式的處理;</p><p>  支持2

41、D/3D 圖形渲染,支持OpenGL;</p><p>  擁有大量的開發(fā)文檔,多種實例;</p><p><b>  支持XML。</b></p><p><b>  C++語言介紹</b></p><p>  C++是在C語言的基礎(chǔ)上開發(fā)的一種集面向?qū)ο缶幊?、泛型編程和過程化編程于一體的編程語言

42、,而QT則是C++的比較知名的開源庫之一。因而想要使用QT進行軟件開發(fā),學(xué)習(xí)C++也就成了至關(guān)重要的基礎(chǔ)。</p><p>  計算機誕生初期,人們要使用計算機必須用機器語言或匯編語言編寫程序。世界上第一種計算機高級語言是誕生于1954年的FORTRAN語言。之后出現(xiàn)了多種計算機高級語言,其中使用最廣泛、影響最大的當(dāng)推BASIC語言和C語言。BASIC語言是1964年由 Dartmouth 學(xué)院 John G.

43、Kemeny 與 Thomas E. Kurtz 兩位教授在FORTRAN語言的基礎(chǔ)上簡化而成的, 適用于初學(xué)者設(shè)計的小型高級語言;C語言是1972年由美國貝爾實驗室的D.M.Ritchie所開發(fā),采用結(jié)構(gòu)化編程方法,遵從自頂向下的原則。在操作系統(tǒng)和系統(tǒng)使用程序以及需要對硬件進行操作的場合,用C語言明顯優(yōu)于其它高級語言,但在編寫大型程序時,C語言仍面臨著挑戰(zhàn)。</p><p>  1983年,在C語言基礎(chǔ)上貝爾實

44、驗室的Bjarne Stroustrup推出了C++。 C++進一步擴充和完善了C語言,是一種面向?qū)ο蟮某绦蛟O(shè)計語言,目前流行的C語言版本。</p><p>  C++語言既保留了C語言的有效性、靈活性、便于移植等全部精華和特點,又添加了面向?qū)ο缶幊痰闹С郑哂袕姶蟮木幊坦δ?,可方便地?gòu)造出模擬現(xiàn)實問題的實體和操作;編寫出的程序具有結(jié)構(gòu)清晰、易于擴充等優(yōu)良特性,適合于各種應(yīng)用軟件、系統(tǒng)軟件的程序設(shè)計。用C++編寫

45、的程序可讀性好,生成的代碼質(zhì)量高,運行效率僅比匯編語言慢10%~20%。</p><p>  C++語言具有以下特點。</p><p>  C++語言是C語言的超集。它保持了C語言簡潔高效等特點,同時能夠其編譯系統(tǒng)能夠檢查更多的語法錯誤,因而C++比C語言更加的安全。</p><p>  C++保持了與C語言的兼容。絕大多數(shù)C語言程序可以不經(jīng)修改直接在C++環(huán)境中運

46、行,用C語言編寫的眾多庫函數(shù)可以用于C++程序中。</p><p>  支持面向?qū)ο蟪绦蛟O(shè)計的特征。C++既支持面向過程的程序設(shè)計,又支持面向?qū)ο蟮某绦蛟O(shè)計。</p><p>  C++程序在可重用性、可擴充性、可維護性和可靠性等方面都較C語言得到了提高,使其更適合開發(fā)大中型的系統(tǒng)軟件和應(yīng)用程序。</p><p>  C++設(shè)計成直接的和廣泛的支援多種程序設(shè)計風(fēng)格(

47、程序化程序設(shè)計、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計)。</p><p>  C++設(shè)計成無需復(fù)雜的程序設(shè)計環(huán)境。</p><p>  SQLITE 數(shù)據(jù)庫簡介</p><p>  3.1 SQLITE 數(shù)據(jù)庫的由來和發(fā)展</p><p>  從某個角度來說,SQLITE 最初的構(gòu)思是在一條軍艦上進行的。SQLITE的作者D. Rich

48、ard Hipp當(dāng)時正在為美國海軍編制一種是用在導(dǎo)彈驅(qū)逐艦上的程序。那個程序最初是運行在Hewlett-Packard Unix(HPUX)上,后臺使用Informix數(shù)據(jù)庫。Informix數(shù)據(jù)庫功能很強大,一個有經(jīng)驗的數(shù)據(jù)庫管理員也需要一整天來進行安裝升級。</p><p>  2000年1月,Hipp開始和一個同事討論關(guān)于創(chuàng)建一個簡單的內(nèi)嵌式SQL數(shù)據(jù)庫的想法,這個數(shù)據(jù)庫將使用GNU DBM B-Tree

49、library (gdbm)做后臺,同時這個數(shù)據(jù)庫將不需要安裝和管理支持。后來,在閑暇時間,Hipp就開始實施這項工作,并在2000年的8月份發(fā)布了SQLITE的1.0版。</p><p>  按照原計劃,SQLITE 1.0 用gdbm 來進行存儲管理。不過,Hipp 很快就換成了自己的B-tree,以便于支持事物和主鍵的存儲。在以后的幾年里,開源社區(qū)的其他成員開始為自己喜歡的程序編寫SQLITE擴展。SQLI

50、TE的ODBC接口可以為Perl、Python、Ruby、Java和其它主流的程序設(shè)計語言提供支持,這證明了SQLITE有廣闊的應(yīng)用前景。</p><p>  2004年,SQLITE從版本2升級到版本3,增加了內(nèi)置的對UTF-8、UTF-16及用戶定義字符集的支持。除國際化功能外,版本3的其它新特性包括:經(jīng)過修補的C API,更緊湊的數(shù)據(jù)庫文件格式(比原來節(jié)省25%的空間),弱類型,大二進制對象(BLOB)的支

51、持,64-bit的ROWID,auto vacuum和改進了的并發(fā)控制。盡管增加了這一系列新特性,版本3的運行庫仍然小于240K字節(jié)。</p><p>  SQLITE持續(xù)增長并始終堅持其最初的設(shè)計目標(biāo):簡單、彈性、緊湊、速度和徹底的易用。</p><p>  3.2 SQLITE 數(shù)據(jù)庫的特點</p><p>  在SQLITE的觀念和實現(xiàn)中,都遵循著一系列指導(dǎo)原

52、則。下面就來詳述這些原則。</p><p><b>  零配置</b></p><p>  從SQLITE的設(shè)計之始,就沒準備在應(yīng)用時使用DBA。配置和管理SQLITE就像得到它一樣簡單。</p><p><b>  兼容性</b></p><p>  SQLITE在設(shè)計時特別注意了兼容性。針對Wi

53、ndows、Linux、BSD、Mac OS X及商用的Unix 系統(tǒng)如AIX和Solaris,嵌入式平臺如Vxworks、Palm OS 和Windows CE,SQLITE 都可以編譯運行,同時,對于16-bit、32-bit和64-bit體系結(jié)構(gòu),SQLITE也能夠?qū)崿F(xiàn)無縫工作并能夠同時適應(yīng)字節(jié)的大端格式和小端格式。SQLITE的兼容性并不只表現(xiàn)在代碼上,還表現(xiàn)在其數(shù)據(jù)庫文件上。SQLITE的數(shù)據(jù)庫文件在其所支持的所有操作系統(tǒng)、硬

54、件體系結(jié)構(gòu)和字節(jié)順序上都是一致的。SQLITE數(shù)據(jù)庫文件在遷移時不需要進行任何的轉(zhuǎn)換和修改。此外,SQLITE內(nèi)置的支持UTF-8和UTF-16編碼。</p><p><b>  緊湊性</b></p><p>  SQLITE的設(shè)計功能齊全但體積很小,只需要1個頭文件,1個庫,不需要擴展的數(shù)據(jù)庫服務(wù)。所有資料打包之后不過1/4M。</p><p&

55、gt;<b>  簡單</b></p><p>  作為程序庫,SQLITE的API可以算是最簡單最易用的了。同時SQLITE具有很好的幫助文檔。</p><p><b>  適應(yīng)性</b></p><p>  作為一個內(nèi)嵌式的數(shù)據(jù)庫,SQLITE具有以下兩個特點:強有力而可伸縮的關(guān)系型數(shù)據(jù)庫前端,簡單而緊湊的B-tree

56、后端。</p><p><b>  不受拘束的授權(quán)</b></p><p>  SQLITE的全部代碼都在公共域中,不需要授權(quán)。無論你如何是用SQLITE ,都不會有法律方面的限制。</p><p><b>  可靠性</b></p><p>  SQLITE源代碼包含大約30000行標(biāo)準C代碼,它

57、是干凈的、模塊化的和完好注釋的。SQLITE源代碼易理解、易定制。</p><p>  SQLITE的核心軟件(庫和工具)由約30000行代碼組成,但分發(fā)的程序中還包含有超過30000行的回歸測試代碼,它們覆蓋了97%的核心代碼。也就是說,超過一半的SQLITE項目代碼是專門用于回歸測試的,也就是說,差不多每寫一行功能代碼,都要寫一行測試代碼對它進行測試。</p><p><b>

58、;  易用性</b></p><p>  SQLITE還提供一些獨特的功能來提高易用性,包括動態(tài)類型、沖突解決和“附加”多個數(shù)據(jù)庫到一個連接的能力。</p><p><b>  3.3 數(shù)據(jù)庫設(shè)計</b></p><p>  數(shù)據(jù)庫設(shè)計(Database Design)是指對于一個給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其

59、應(yīng)用系統(tǒng),使之能夠有效地存儲數(shù)據(jù),滿足各種用戶的應(yīng)用需求(信息要求和處理要求)。數(shù)據(jù)庫在一個信息管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫結(jié)構(gòu)設(shè)計的好壞將直接對應(yīng)用系統(tǒng)的效率以及實現(xiàn)的效果產(chǎn)生影響。合理的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計可以提高數(shù)據(jù)存儲的效率,保證數(shù)據(jù)庫的完整和一致。同時,合理的數(shù)據(jù)庫結(jié)構(gòu)也將有利于程序的實現(xiàn)。</p><p>  由于本課題只是針對用戶信息使用了數(shù)據(jù)庫,所以,數(shù)據(jù)庫內(nèi)只需要設(shè)計一張用于存放用戶信息的表即

60、可。</p><p>  UserInformation表的結(jié)構(gòu)如下:</p><p>  圖 3.1 用戶數(shù)據(jù)表設(shè)計</p><p>  將UserName和Password均設(shè)置為主鍵,避免出現(xiàn)密碼為空的情況。</p><p>  使用SQL語句建表,設(shè)置用戶名和密碼為主鍵。</p><p>  create ta

61、ble UserInformation (</p><p>  UserName Varchar NOT NULL,</p><p>  Password Varchar NOT NULL,</p><p>  PRIMARY KEY (UserName, Password)</p><p><b>  )</b><

62、;/p><p><b>  軟件設(shè)計</b></p><p><b>  軟件功能概要</b></p><p>  4.1.1 軟件結(jié)構(gòu)圖</p><p>  上位機下設(shè)六個模塊,分別為登錄模塊、狀態(tài)顯示模塊、通信模塊、信息顯示模塊、用戶管理模塊和幫助模塊。</p><p>  

63、軟件的結(jié)構(gòu)框架如下圖:</p><p>  登錄模塊:通過與SQLITE數(shù)據(jù)庫的連接,進行用戶密碼的校驗,以提高軟件的安全性。</p><p>  狀態(tài)顯示模塊:此模塊的主要目的是通過直觀的方式向用戶顯示下位機與上位機的連接狀態(tài),用戶界面登錄之后,主界面內(nèi)的顯示的第一個界面即為狀態(tài)顯示界面。</p><p>  通信模塊:主要涉及上位機與下位機的通信方式,目前實現(xiàn)了

64、TCP通信、UDP通信和串口通信,同時能夠顯示設(shè)備的連接狀態(tài)。</p><p>  信息顯示模塊:采用了QT 2D繪圖方法,使用代碼繪制界面。通過代碼判斷下位機發(fā)送的信息內(nèi)容來實現(xiàn)下位機狀態(tài)的實時動態(tài)顯示。</p><p>  用戶管理模塊:通過與SQLITE數(shù)據(jù)庫的連接,可進行添加新用戶,修改密碼等操作。</p><p>  幫助模塊:實現(xiàn)版本信息提示等功能。&l

65、t;/p><p>  4.1.2 軟件部分功能流程圖</p><p>  圖 4.2 登錄模塊流程</p><p>  圖 4.3 通信模塊流程圖</p><p>  圖 4.4 修改密碼流程</p><p>  圖 4.5 更改用戶密碼流程</p><p><b>  用戶登錄模塊的設(shè)計

66、</b></p><p>  用戶登錄界面采用傳統(tǒng)布局方式,將我校的校徽作為軟件的圖標(biāo),將我校的圖片作為登錄背景,并取消最大化窗口。</p><p>  窗體實現(xiàn)效果如下圖:</p><p>  首先,將QWidget 作為用戶登錄界面的UI,在UI設(shè)計界面添加相應(yīng)的控件,通過拖拽控件實現(xiàn)登錄按鈕、取消按鈕、用戶名提示、密碼提示、用戶名輸入和密碼輸入。在

67、此基礎(chǔ)上,添加以下函數(shù)設(shè)置窗體的效果。</p><p>  void Login::setTheStyle ()</p><p><b>  {</b></p><p>  /*設(shè)置窗體居中*/</p><p>  int x = (qApp->desktop ()->width()- this->wi

68、dth ())/2;</p><p>  int y = (qApp->desktop ()->height() - this->height ())/2;</p><p>  this->move (x,y);</p><p>  /*設(shè)置窗體大小固定*/</p><p>  int width = this->

69、;geometry ().width ();</p><p>  int height = this->geometry ().height ();</p><p>  this->setFixedSize (width,height);</p><p>  /*設(shè)置背景圖片*/</p><p>  QPixmap pixmap

70、(":/new/prefix1/gate.jpg");</p><p>  QPalette palette=this->palette();</p><p>  palette.setBrush(QPalette::Background,QBrush(pixmap));</p><p>  this->setPalette(pale

71、tte);</p><p>  ui->passwordLine->setPlaceholderText (tr("請輸入密碼"));</p><p>  ui->passwordLine->setEchoMode (QLineEdit::Password);</p><p>  ui->nameLine->s

72、etFocus ();</p><p><b>  }</b></p><p>  將登錄按鈕和取消登錄按鈕使用connect 函數(shù)與信號槽相連接,其中信號clicked()為系統(tǒng)提供的信號,槽close()為系統(tǒng)提供,login()槽為自定義,用以實現(xiàn)用戶登錄信息的校驗。</p><p>  connect (ui->cancelBut

73、ton,SIGNAL(clicked()),this,SLOT(close()));</p><p>  connect (ui->confirmButton,SIGNAL(clicked()),this,SLOT(login()));</p><p>  函數(shù)void login () 聲明為自定義信號槽。Login函數(shù)用以判斷登錄時,用戶名、密碼是否為空,用戶名、密碼是否正確。&

74、lt;/p><p>  void Login::login()</p><p><b>  {</b></p><p>  /*判斷用戶名是否為空*/</p><p>  if(ui->nameLine->text ().isEmpty ()){</p><p>  QMessageBox

75、::warning (this,tr("警告"),</p><p>  tr("請輸入用戶名!"),</p><p>  QMessageBox::Ok);</p><p>  ui->nameLine->setFocus ();</p><p><b>  return;<

76、/b></p><p><b>  }</b></p><p>  else if (ui->passwordLine->text ().isEmpty ()) {</p><p>  QMessageBox::warning (this,tr("警告"),</p><p>  tr

77、("請輸入密碼!"),</p><p>  QMessageBox::Ok);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  使用代碼在數(shù)據(jù)庫中查詢輸入的用戶名,將密碼進行比對。如果密碼正確,則顯示程序主窗體,錯誤

78、,顯示錯誤提示。</p><p>  /*數(shù)據(jù)庫操作語句*/ </p><p>  QString information = QString ("select * from UserInformation where NAME = '%1'").arg (ui->nameLine->text () );</p><p&

79、gt;  QSqlQuery query;</p><p>  QString userPassword;</p><p>  if(query.exec(information)){</p><p>  int s_password = query.record().indexOf("PASS");</p><p>  

80、while (query.next()){</p><p>  userPassword = query.value(s_password).toString();</p><p>  userPassword = query.value (1).toString ();</p><p><b>  }</b></p><p

81、><b>  }</b></p><p>  if(userPassword == ui->passwordLine->text ()){</p><p>  if(m_mainwindow == NULL)</p><p><b>  {</b></p><p>  m_main

82、window = new MainWindow;</p><p><b>  }</b></p><p>  m_mainwindow->show ();</p><p>  this->hide ();</p><p><b>  }</b></p><p>&

83、lt;b>  錯誤處理代碼如下。</b></p><p>  QMessageBox::warning (this,tr("警告"),tr("用戶名或密碼錯誤\n"</p><p>  "請重新輸入"),QMessageBox::Yes);</p><p>  ui->nameLin

84、e->setFocus ();</p><p>  ui->nameLine->selectAll ();</p><p>  ui->passwordLine->clear ();</p><p><b>  狀態(tài)顯示模塊的設(shè)計</b></p><p>  狀態(tài)顯示模塊為用戶登錄成功后,主

85、界面顯示的第一個界面。狀態(tài)顯示模塊的主要目的是為了能夠更加直觀的向用戶顯示下位機和上位機的連接狀態(tài),為了達到這個目的,模塊的界面設(shè)計使用QLabel來存放上位機、下位機和連接狀態(tài)的圖片,字符使用QPushButton存放,設(shè)計為扁平化,并且將字體顏色進行了設(shè)計。</p><p><b>  字體顏色實現(xiàn)代碼:</b></p><p>  ui->stateBut

86、ton->setStyleSheet ("color:red");</p><p>  connect (ui->stateButton,SIGNAL(clicked()),this,SLOT(connectSignal()));</p><p>  信號的產(chǎn)生主要是為了能夠通過狀態(tài)顯示界面的離線按鈕點擊,調(diào)用出通信設(shè)置界面。</p><

87、p><b>  軟件主界面設(shè)計</b></p><p>  軟件主界面采用QMainwindow類制作UI,創(chuàng)建stackwidget用于存放各個子界面,將各個子界面壓入stackwidget中,通過QMainwindow的公共函數(shù)setCentralWidget(),將stackwidget設(shè)置為主界面的centralwidget。通過自寫代碼實現(xiàn)各個菜單,并將菜單的按鈕(QActi

88、on)添加到菜單上。然后,創(chuàng)建自定義的信號槽,通過QAction的信號triggered() 與對應(yīng)的信號槽相連接,從而將界面按鈕的功能實現(xiàn),信號槽的主要實現(xiàn)將創(chuàng)建的各個子界面顯示到主界面的功能。</p><p>  創(chuàng)建各個菜單的按鈕。</p><p>  void MainWindow::createActions()</p><p><b>  {&

89、lt;/b></p><p>  stateAction = new QAction(this);</p><p>  stateAction->setText (tr("狀態(tài)"));</p><p>  portAction = new QAction(this);</p><p>  portAction-

90、>setText (tr("端口設(shè)置"));</p><p>  aboutAction =new QAction(this);</p><p>  aboutAction->setText ("關(guān)于Qt");</p><p>  aboutAuth = new QAction(this);</p>

91、<p>  aboutAuth ->setText ("關(guān)于軟件");</p><p><b>  }</b></p><p>  首先創(chuàng)建各個動作,即QAction,然后創(chuàng)建菜單,將各個動作添加到菜單中。</p><p>  void MainWindow::createMenus()</p>

92、<p><b>  {</b></p><p>  portMenu = new QMenu;</p><p>  portMenu = menuBar ()->addMenu (tr("設(shè)置"));</p><p>  aboutMenu = new QMenu;</p><p>

93、  aboutMenu = menuBar ()->addMenu (tr("關(guān)于"));</p><p>  createActions ();</p><p>  portMenu->addAction(portAction);</p><p>  portMenu->addAction(stateAction);</

94、p><p>  aboutMenu->addAction(aboutAction);</p><p><b>  }</b></p><p>  創(chuàng)建各個子界面,并將子界面進行壓棧,壓入stackwidget中。</p><p>  void MainWindow::createStack()</p>&

95、lt;p><b>  {</b></p><p>  m_stack = new QStackedWidget(this);</p><p>  m_stateUI = new StateForm;</p><p>  m_portSetting = new PortSettingForm;</p><p>  m

96、_userUI = new userForm;</p><p>  m_detailStateUI = new frmMain;</p><p>  m_stack->addWidget (m_stateUI);</p><p>  m_stack->addWidget (m_portSetting);</p><p>  m_s

97、tack->addWidget (m_userUI);</p><p>  m_stack->addWidget (m_detailStateUI);</p><p>  m_stack->setCurrentIndex (0);</p><p>  this->setCentralWidget (m_stack);</p>&

98、lt;p><b>  }</b></p><p>  創(chuàng)建自定義信號槽,用于將子界面顯示在主界面中。</p><p>  使用connect函數(shù)將信號與信號槽連接起來,完成主界面設(shè)計。</p><p>  connect (portAction,SIGNAL(triggered()),this,SLOT(showPortUI()));&l

99、t;/p><p>  connect (stateAction,SIGNAL(triggered()),this,SLOT(showStateUI()));</p><p>  connect(ui->action_U,SIGNAL(triggered()),this,SLOT(showUserUI()));</p><p>  connect (aboutAct

100、ion,SIGNAL(triggered()),this,SLOT(aboutQT()));</p><p>  void MainWindow::showStateUI()</p><p><b>  {</b></p><p>  m_stack->setCurrentIndex (0);</p><p>&l

101、t;b>  }</b></p><p>  void MainWindow::showPortUI()</p><p><b>  {</b></p><p>  m_stack->setCurrentIndex (1);</p><p><b>  }</b></p&

102、gt;<p>  void MainWindow::showUserUI()</p><p><b>  {</b></p><p>  m_stack->setCurrentIndex (2);</p><p><b>  }</b></p><p>  void MainWi

103、ndow::aboutQT()</p><p><b>  {</b></p><p>  QMessageBox::aboutQt (this);</p><p><b>  }</b></p><p>  void MainWindow::showDetail()</p><

104、p><b>  {</b></p><p>  m_stack->setCurrentIndex (3);</p><p><b>  }</b></p><p><b>  軟件通信模塊設(shè)計</b></p><p>  軟件通信模塊為整個軟件的核心部分,能否順利實

105、現(xiàn)上位機與下位機的通信,軟件通信模塊的代碼實現(xiàn)至關(guān)重要。首先要成功實現(xiàn)TCP,UDP和串口通信方式,針對各個通信方式的設(shè)定,對串口通信的配置,都對接下來的顯示模塊打下了基礎(chǔ)。</p><p><b>  軟件通信模塊</b></p><p>  通信模塊的設(shè)計包括兩個部分,UI界面設(shè)計和功能實現(xiàn)。UI界面通過設(shè)計界面通過拖拽控件實現(xiàn)界面的設(shè)計。</p>

106、<p>  軟件設(shè)計時,采用單一方式選擇方式,只能選擇一種連接方式。界面左部為通信方式選擇,右半部份為設(shè)備連接狀態(tài)。</p><p>  選擇連接方式后,右下部的狀態(tài)提示欄會給出相應(yīng)的狀態(tài)提示。</p><p><b>  TCP 通信模塊</b></p><p>  對于TCP通信模塊,采用可控的設(shè)計,可選擇監(jiān)聽的IP地址和端口,在

107、UI界面選擇TCP連接方式后,填寫相應(yīng)的端口和IP地址,點擊連接按鈕,即可通訊。</p><p>  TCP創(chuàng)建連接的實現(xiàn)代碼如下。</p><p>  void PortSettingForm::newTcpConnect()</p><p><b>  {</b></p><p>  socket = new QTc

108、pSocket(this);</p><p>  socket->abort ();</p><p>  socket->connectToHost (ui->comboBox_2->currentText (),ui->lineEdit_2->text ().toInt ());</p><p>  connect (socke

109、t,SIGNAL(readyRead()),this,SLOT(readDataFromTcp()));</p><p>  connect (socket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError( QAbstractSocket::SocketError)));</p><p><

110、b>  }</b></p><p>  其中 函數(shù)void PortSettingForm::displayError(QAbstractSocket::SocketError)為自定義信號槽,用于TCP錯誤輸出,readReady信號每當(dāng)新的數(shù)據(jù)到來時,都會被觸發(fā)。error(QAbstractSocket::SocketError)信號會將socket的信號發(fā)出。</p>&l

111、t;p>  函數(shù)void PortSettingForm::readDataFromTcp()用于接收TCP數(shù)據(jù)。</p><p>  socket->isReadable () 返回true ,表示有至少一個數(shù)據(jù)報待讀取。socket->readAll ()將TCP流中的所有數(shù)據(jù)。dataFromTcp.truncate (dataFromTcp.indexOf ("E")

112、)會對數(shù)據(jù)包進行截斷(假定數(shù)據(jù)包以字符E為結(jié)束符)。</p><p>  void PortSettingForm::readDataFromTcp()</p><p><b>  {</b></p><p>  if(socket->isReadable ())</p><p><b>  {</

113、b></p><p>  QString dataFromTcp = socket->readAll ();</p><p>  recievedData = dataFromTcp.truncate (dataFromTcp.indexOf ("E"));</p><p>  connectReadySignal (1);</

114、p><p><b>  }</b></p><p><b>  }</b></p><p>  void PortSettingForm::displayError(QAbstractSocket::SocketError)</p><p><b>  {</b></p>

115、;<p>  qDebug() << socket->errorString ()<<endl;</p><p><b>  }</b></p><p><b>  UDP 通信模塊</b></p><p>  UDP通信模塊的設(shè)計和TCP基本一致,其實現(xiàn)代碼如下。</p&

116、gt;<p>  void PortSettingForm::newUdpConnect()</p><p><b>  {</b></p><p>  socketUdp = new QUdpSocket(this);</p><p>  socketUdp->bind(ui->lineEdit_2->text

117、 ().toInt (), QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);</p><p>  connect(socketUdp,SIGNAL(readyRead()),this,SLOT(readDataFromUdp()));</p><p><b>  }</b></p><

118、;p>  此處的bind是個重載函數(shù),連接本機的port端口,采用ShareAddress模式(即允許其它的服務(wù)連接到相同的地址和端口,特別是用在多客戶端監(jiān)聽同一個服務(wù)器端口等時特別有效),和ReuseAddressHint模式(重新連接服務(wù)器),readyRead()信號是每當(dāng)有新的數(shù)據(jù)來臨時就被觸發(fā),readDataFromUdp()信號槽為自定義信號槽,用來接收UDP數(shù)據(jù)。</p><p>  has

119、PendingDatagrams返回true時表示至少有一個數(shù)據(jù)報在等待被讀取,pendingDatagramSize為返回第一個在等待讀取報文的size,resize函數(shù)是把datagram的size歸一化到參數(shù)size的大小一樣, 將讀取到的不大于datagram.size()大小數(shù)據(jù)輸入到datagram.data()中,datagram.data()返回的是一個字節(jié)數(shù)組中存儲數(shù)據(jù)位置的指針。</p><p&g

120、t;  void PortSettingForm::readDataFromUdp()</p><p><b>  {</b></p><p>  while(socketUdp->hasPendingDatagrams())</p><p><b>  {</b></p><p>  QBy

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論