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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

8、gt;<p><b>  要求:</b></p><p> ?。?)對各個控件進行調用實現(xiàn)單個儀表或全部儀表的信息調度;</p><p> ?。?)能將儀表的內容顯示在上位機界面上;</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++程序設計[M]. 第八版. 清華大學出版社, 2012-02-01.</p><p><b>  進度安排</b></p><p>  標準化工業(yè)儀表上位機調試調試平臺設計</p><p><b>  摘要</b></p><p>  

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

12、+編程語言實現(xiàn)軟件的基本功能與軟件界面的結合。本軟件的兩個特點:1. 能夠實現(xiàn)多種方式與下位機的通訊;2. 能夠實時動態(tài)顯示下位機信息。</p><p>  關鍵詞: 上位機,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ù)庫設計10</p><p><b>  4軟件設計12</b></p><p>  4.1軟件功能概要12</p><p>  4.1.1 軟件結構圖12</p><p>  4.1.2 軟件部分功能流程圖13</p><p>  4.2用戶登錄模塊的設計16</p>

20、;<p>  4.3狀態(tài)顯示模塊的設計21</p><p>  4.4軟件主界面設計22</p><p>  4.5軟件通信模塊設計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信息處理和顯示模塊的設計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用戶管理模塊的設計47</p><p>  4.8 幫助模塊的設計49</p><p><b>  5 總結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è)儀表是使用廣泛的電氣設備,生產(chǎn)生活中無處不是工業(yè)儀表的身影,大到機場、研究院,小到社

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

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

26、計算機為基礎,通過串口或者其他通訊方式與標準化工業(yè)儀表進行通訊,將儀表的信息傳輸?shù)狡脚_上,在一個界面實現(xiàn)同時監(jiān)控一個或多個儀表的實時信息,從而實現(xiàn)遠距離監(jiān)控的目的。通過與下位機的標準化工業(yè)儀表相結合,從而達到簡化人員操作,實現(xiàn)標準統(tǒng)一,兼容性好,利用率高的一種工業(yè)儀表的最終目標。</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ā)展成為個人電腦和服務器用戶設計的操作系統(tǒng),并最終在世界個人電腦操作系統(tǒng)領域內占據(jù)壟斷地位。Windows系統(tǒng)擁有不同的平臺版本,如個人電腦

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

30、視,也沒有協(xié)助商業(yè)化的應用。這時,蘋果計算機的創(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è)界標準的重要性,所以在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的錯誤診斷和修復機制更加強大,能夠在用戶最少的干預下完成修復工作;開機和關機速度更快,改善了用戶體驗度。</p><p>  Windows 7 因其創(chuàng)新的性能、出色的兼容性和卓越的使用體驗,獲得了來自IT各界人士的一致好評。以下為Windows 7 的3個特點。</p><p><b&g

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

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

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

36、程序,比如控制臺工具和服務器。QT是面向對象的框架,使用特殊的代碼生成擴展(稱為元對象編譯器(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相關的項目貢獻代碼、翻譯、示例以及其他內容,協(xié)助引導和塑造QT未來的發(fā)展。</p><p>  2012年8月9日,Digia宣布已完成對諾基亞QT業(yè)務以及軟件技術的全面收購。201

38、4年,跨平臺集成開發(fā)環(huán)境QT Creator 3.1 發(fā)布,實現(xiàn)了對于iOS的完全支持,新增WinRT、Beautifier等插件,廢棄了無Python接口的GDB調試支持,集成了基于Clang的C/C++代碼模塊,并對Android支持做出了調整,至此實現(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>  面向對象</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語言的基礎上開發(fā)的一種集面向對象編程、泛型編程和過程化編程于一體的編程語言

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

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

44、驗室的Bjarne Stroustrup推出了C++。 C++進一步擴充和完善了C語言,是一種面向對象的程序設計語言,目前流行的C語言版本。</p><p>  C++語言既保留了C語言的有效性、靈活性、便于移植等全部精華和特點,又添加了面向對象編程的支持,具有強大的編程功能,可方便地構造出模擬現(xiàn)實問題的實體和操作;編寫出的程序具有結構清晰、易于擴充等優(yōu)良特性,適合于各種應用軟件、系統(tǒng)軟件的程序設計。用C++編寫

45、的程序可讀性好,生成的代碼質量高,運行效率僅比匯編語言慢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>  支持面向對象程序設計的特征。C++既支持面向過程的程序設計,又支持面向對象的程序設計。</p><p>  C++程序在可重用性、可擴充性、可維護性和可靠性等方面都較C語言得到了提高,使其更適合開發(fā)大中型的系統(tǒng)軟件和應用程序。</p><p>  C++設計成直接的和廣泛的支援多種程序設計風格(

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

48、ard Hipp當時正在為美國海軍編制一種是用在導彈驅逐艦上的程序。那個程序最初是運行在Hewlett-Packard Unix(HPUX)上,后臺使用Informix數(shù)據(jù)庫。Informix數(shù)據(jù)庫功能很強大,一個有經(jīng)驗的數(shù)據(jù)庫管理員也需要一整天來進行安裝升級。</p><p>  2000年1月,Hipp開始和一個同事討論關于創(chuàng)建一個簡單的內嵌式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和其它主流的程序設計語言提供支持,這證明了SQLITE有廣闊的應用前景。</p><p>  2004年,SQLITE從版本2升級到版本3,增加了內置的對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ù)增長并始終堅持其最初的設計目標:簡單、彈性、緊湊、速度和徹底的易用。</p><p>  3.2 SQLITE 數(shù)據(jù)庫的特點</p><p>  在SQLITE的觀念和實現(xiàn)中,都遵循著一系列指導原

52、則。下面就來詳述這些原則。</p><p><b>  零配置</b></p><p>  從SQLITE的設計之始,就沒準備在應用時使用DBA。配置和管理SQLITE就像得到它一樣簡單。</p><p><b>  兼容性</b></p><p>  SQLITE在設計時特別注意了兼容性。針對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體系結構,SQLITE也能夠實現(xiàn)無縫工作并能夠同時適應字節(jié)的大端格式和小端格式。SQLITE的兼容性并不只表現(xiàn)在代碼上,還表現(xiàn)在其數(shù)據(jù)庫文件上。SQLITE的數(shù)據(jù)庫文件在其所支持的所有操作系統(tǒng)、硬

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

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

56、后端。</p><p><b>  不受拘束的授權</b></p><p>  SQLITE的全部代碼都在公共域中,不需要授權。無論你如何是用SQLITE ,都不會有法律方面的限制。</p><p><b>  可靠性</b></p><p>  SQLITE源代碼包含大約30000行標準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ù)庫設計</b></p><p>  數(shù)據(jù)庫設計(Database Design)是指對于一個給定的應用環(huán)境,構造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其

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

60、可。</p><p>  UserInformation表的結構如下:</p><p>  圖 3.1 用戶數(shù)據(jù)表設計</p><p>  將UserName和Password均設置為主鍵,避免出現(xiàn)密碼為空的情況。</p><p>  使用SQL語句建表,設置用戶名和密碼為主鍵。</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>  軟件設計</b></p><p><b>  軟件功能概要</b></p><p>  4.1.1 軟件結構圖</p><p>  上位機下設六個模塊,分別為登錄模塊、狀態(tài)顯示模塊、通信模塊、信息顯示模塊、用戶管理模塊和幫助模塊。</p><p>  

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

64、TCP通信、UDP通信和串口通信,同時能夠顯示設備的連接狀態(tài)。</p><p>  信息顯示模塊:采用了QT 2D繪圖方法,使用代碼繪制界面。通過代碼判斷下位機發(fā)送的信息內容來實現(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>  用戶登錄模塊的設計

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

67、此基礎上,添加以下函數(shù)設置窗體的效果。</p><p>  void Login::setTheStyle ()</p><p><b>  {</b></p><p>  /*設置窗體居中*/</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>  /*設置窗體大小固定*/</p><p>  int width = this->

69、;geometry ().width ();</p><p>  int height = this->geometry ().height ();</p><p>  this->setFixedSize (width,height);</p><p>  /*設置背景圖片*/</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)顯示模塊的設計</b></p><p>  狀態(tài)顯示模塊為用戶登錄成功后,主

85、界面顯示的第一個界面。狀態(tài)顯示模塊的主要目的是為了能夠更加直觀的向用戶顯示下位機和上位機的連接狀態(tài),為了達到這個目的,模塊的界面設計使用QLabel來存放上位機、下位機和連接狀態(tài)的圖片,字符使用QPushButton存放,設計為扁平化,并且將字體顏色進行了設計。</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)顯示界面的離線按鈕點擊,調用出通信設置界面。</p><

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

88、on)添加到菜單上。然后,創(chuàng)建自定義的信號槽,通過QAction的信號triggered() 與對應的信號槽相連接,從而將界面按鈕的功能實現(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("端口設置"));</p><p>  aboutAction =new QAction(this);</p><p>  aboutAction->setText ("關于Qt");</p><p>  aboutAuth = new QAction(this);</p>

91、<p>  aboutAuth ->setText ("關于軟件");</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("設置"));</p><p>  aboutMenu = new QMenu;</p><p>

93、  aboutMenu = menuBar ()->addMenu (tr("關于"));</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ù)將信號與信號槽連接起來,完成主界面設計。</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>  軟件通信模塊設計</b></p><p>  軟件通信模塊為整個軟件的核心部分,能否順利實

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

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

107、UI界面選擇TCP連接方式后,填寫相應的端口和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信號每當新的數(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為結束符)。</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通信模塊的設計和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模式(即允許其它的服務連接到相同的地址和端口,特別是用在多客戶端監(jiān)聽同一個服務器端口等時特別有效),和ReuseAddressHint模式(重新連接服務器),readyRead()信號是每當有新的數(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論