




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上電機(jī)上位機(jī)控制及界面設(shè)計(jì) 吳牛俊(自動(dòng)化與電氣工程學(xué)院 指導(dǎo)教師:周克寧)摘要:隨著計(jì)算機(jī)、電子、通訊技術(shù)的飛速發(fā)展,人們對(duì)于車間現(xiàn)場設(shè)備的運(yùn)行管理控制,可視化操作等綜合水平提出了新的要求。為了滿足這新的要求,本畢業(yè)設(shè)計(jì)本著“不在現(xiàn)場,遠(yuǎn)離現(xiàn)場”的原則,以C語言作為開發(fā)語言,VC為開發(fā)環(huán)境,針對(duì)某充電機(jī)產(chǎn)品編寫了應(yīng)用程序,將充電機(jī)的現(xiàn)場設(shè)備界面通過串口通信技術(shù),與上位機(jī)界面有機(jī)的結(jié)合起來,以實(shí)現(xiàn)計(jì)算機(jī)的遠(yuǎn)程監(jiān)控功能。此外,該上位機(jī)應(yīng)用軟件還實(shí)現(xiàn)了查看充電機(jī)存儲(chǔ)在U盤中的運(yùn)行記錄文件的功能。在本畢業(yè)論文通過這個(gè)項(xiàng)目的開發(fā)過程,闡述了編程環(huán)境的選擇,串口通訊實(shí)現(xiàn)遠(yuǎn)程測試的
2、方法,通過文件操作讀取U盤數(shù)據(jù)的技巧。探討如何在PC平臺(tái)與工控機(jī)平臺(tái)間建立遠(yuǎn)程測試和歷史數(shù)據(jù)讀取和分析的一般方法。關(guān)鍵詞:人機(jī)界面;串口通信;Visual C+6.0;文件操作Abstract:With the development of computer, electronics, communications technology, the people are requiring that the the operation and management of the equipment control,and the Visualization operation must deve
3、lop too.To meet these new requirements, the design of the graduates base on that not on the scene, the scene away from the principle of and use the C language and VC environment programming the charger procedures. The design uses the communications technology to put the charger field equipment inter
4、face and PC interface combination.And it can be achieved RMON. In addition, the PC application software also can view the test records stored in the U disk.This paper through the project development process describes the following points.First is The choice of programming environments.Second is Seri
5、al Communication remote test method.Third is the skills of reading the test records stored in the U disk.Discussion on general methods that through the PC platform with the establishment of industrial computer platform for remote testing and reading historical data and analysisKeywords:Human-machine
6、 interface; Serial Communication;;Visual C+6.0;File 1 緒 論1.1 背 景隨著計(jì)算機(jī)、電子、通訊技術(shù)的飛速發(fā)展,人們對(duì)于車間現(xiàn)場設(shè)備的運(yùn)行管理控制,可視化操作等綜合水平提出了新的要求。隨著計(jì)算機(jī)的運(yùn)算速度不斷升級(jí)功能日漸強(qiáng)大,在車間現(xiàn)場測控中扮演了越來越重要的角色。利用計(jì)算機(jī)軟件通過運(yùn)用先進(jìn)的通訊技術(shù)監(jiān)控遠(yuǎn)程現(xiàn)場設(shè)備的運(yùn)行狀況和運(yùn)行參數(shù)。這將大大提高生產(chǎn)效率,保證生產(chǎn)安全。出于節(jié)省人工,提高效率或者安全生產(chǎn)方面的考慮很多環(huán)節(jié)需要遠(yuǎn)程監(jiān)控車間設(shè)備的運(yùn)行情況,這就離不開通訊技術(shù)的應(yīng)用。這里所說的通信是只計(jì)算機(jī)與遠(yuǎn)程設(shè)備之間的信息交換。由于串行通
7、信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現(xiàn)成的電話網(wǎng)進(jìn)行信息傳送,因此,特別適合于遠(yuǎn)距離傳輸。對(duì)于那些與計(jì)算機(jī)相距不遠(yuǎn)的人機(jī)交換設(shè)備和串行存儲(chǔ)的外部設(shè)備如終端、打印機(jī)、邏輯分析儀、磁盤等,采用串行方式交換數(shù)據(jù)也很普遍。同時(shí),隨著人們對(duì)車間現(xiàn)場設(shè)備智能化的要求的提高,越來越多的設(shè)備采用了外存儲(chǔ)器對(duì)生產(chǎn)測試過程中的數(shù)據(jù)進(jìn)行存儲(chǔ),監(jiān)控人員通過定期對(duì)存儲(chǔ)了歷史數(shù)據(jù)記錄的分析,可以清楚得了解到設(shè)備的動(dòng)態(tài)運(yùn)行情況,這些數(shù)據(jù)對(duì)設(shè)備排錯(cuò)和參數(shù)設(shè)置提供依據(jù)都有很高的價(jià)值。隨著PC端USB接口技術(shù)的普及,以U盤作為設(shè)備外存儲(chǔ)器存儲(chǔ)運(yùn)行數(shù)據(jù),具有實(shí)現(xiàn)簡單,讀取方便的特點(diǎn),應(yīng)用也越來越廣泛。
8、如何高效,方便的通過最常用的PC機(jī)來讀取設(shè)備外存儲(chǔ)器中的數(shù)據(jù),為數(shù)據(jù)的快速分析提供了保證。因此研究計(jì)算機(jī)通過串行通信對(duì)遠(yuǎn)程車間設(shè)備的監(jiān)控,讀取U盤歷史數(shù)據(jù)文件并顯示具有一定的現(xiàn)實(shí)意義。1.2 任務(wù)和目標(biāo)本畢業(yè)設(shè)計(jì)本著“不在現(xiàn)場,遠(yuǎn)離現(xiàn)場”的原則,為導(dǎo)師研制的某型號(hào)充電機(jī)產(chǎn)品編寫PC端應(yīng)用程序?qū)⒊潆姍C(jī)設(shè)備界面通過串口通信技術(shù),與上位機(jī)界面有機(jī)的結(jié)合起來,以實(shí)現(xiàn)計(jì)算機(jī)的遠(yuǎn)程監(jiān)控功能。按要求在上位機(jī)中打開并查看充電機(jī)設(shè)備運(yùn)行過程中的存儲(chǔ)在U盤中的歷史數(shù)據(jù)文件,以便于分析測試。另外還要編寫下位機(jī)微型打印機(jī)數(shù)據(jù)打印程序,為用戶提供多種查看選擇。我在認(rèn)真分析以上設(shè)計(jì)要求之后,以C語言作為開發(fā)語言,VC為開
9、發(fā)環(huán)境,在MFC框架上編寫完成一個(gè)應(yīng)用程序。這個(gè)應(yīng)用程序采用MSCOMM控件來實(shí)現(xiàn)串口通訊,以C語言文件操作實(shí)現(xiàn)U盤歷史數(shù)據(jù)文件的讀寫和顯示操作。并且在此基礎(chǔ)上,我還對(duì)上位機(jī)軟件的界面進(jìn)行了美化和優(yōu)化,還添加了現(xiàn)場測試數(shù)據(jù)自動(dòng)生成WORD文檔,使得軟件更人性化和操作更簡單。在本畢業(yè)論文通過這個(gè)項(xiàng)目的開發(fā)過程,闡述了編程環(huán)境的選擇,串口通訊實(shí)現(xiàn)遠(yuǎn)程測試的方法,通過文件操作讀取U盤數(shù)據(jù)的技巧。探討如何在PC平臺(tái)與工控機(jī)平臺(tái)間建立遠(yuǎn)程測試和歷史數(shù)據(jù)讀取和分析的一般方法。2 總體設(shè)計(jì)方案2.1 系統(tǒng)總體結(jié)構(gòu)系統(tǒng)總體結(jié)構(gòu)如下圖所示,下位機(jī)是一臺(tái)試用在變電所等電力部門的充電機(jī)設(shè)備,采用工控機(jī)作為核心處理器
10、。PC機(jī)端的應(yīng)用程序通過RS232串口與設(shè)備實(shí)現(xiàn)通訊。充電機(jī)設(shè)備帶有USB接口,用于接入U(xiǎn)盤存儲(chǔ)充電機(jī)歷史數(shù)據(jù)。當(dāng)用戶需要查看歷史記錄數(shù)據(jù)時(shí),將U盤從設(shè)備中拔下,接入PC端可以利用應(yīng)用程序通過文件操作打開查看。圖1. 系統(tǒng)總體結(jié)構(gòu)圖另外,該充電機(jī)設(shè)備通過工控機(jī)打印口連接一臺(tái)微型打印機(jī)用于運(yùn)行參數(shù)和測試數(shù)據(jù)的即時(shí)打印,供用戶查看。2.2 上位機(jī)用戶操作界面結(jié)構(gòu) 圖2. 軟件組織結(jié)構(gòu)3 上位機(jī)用戶操作界面的建立3.1 編程語言及編程環(huán)境3.1.1 C+語言介紹C+是脫胎自C語言的一種中級(jí)語言。從計(jì)算機(jī)角度看, 它可以嵌入ASM等低端語言; 從面向?qū)ο蟮某绦蛟O(shè)計(jì)角度看, 它有具備OOP的三個(gè)基本特征
11、抽象, 封裝和繼承。C語言是結(jié)構(gòu)化和模塊化的語言,它是面向過程的。C+保留了C語言原有的所有優(yōu)點(diǎn),增加了面向?qū)ο蟮臋C(jī)制。C+與C完全兼容。C+是對(duì)C的擴(kuò)充,是C的超集。它既可用于結(jié)構(gòu)化程序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),功能強(qiáng)大。C+性能良好,因?yàn)樗痪幾g為機(jī)器代碼。對(duì)于VBScript和Java等語言,代碼在運(yùn)行時(shí)由程序解釋,而且每次運(yùn)行程序時(shí)都要將代碼轉(zhuǎn)換為機(jī)器碼,這樣做效率比較低,不僅僅是已編譯過的C+程序運(yùn)行得較快,而且微軟C+編譯器已存在多年。這意味著微軟的編譯器程序員已經(jīng)把許多優(yōu)點(diǎn)集中到編譯器上,以致于它能產(chǎn)生非常高效的機(jī)器碼。因?yàn)镃+是編譯語言,而且非常自然,比VB更接近機(jī)器代
12、碼,所以由C+編譯器產(chǎn)生的代碼一定比VB的編譯代碼效率更高。C+是一種編譯語言,即C+代碼在執(zhí)行之前已轉(zhuǎn)換為機(jī)器碼。只要此代碼不依賴于外部的動(dòng)態(tài)鏈接庫(DLL),C+就可以在不需要安裝額外程序的情況下移動(dòng)到運(yùn)行同樣操作系統(tǒng)的其他機(jī)器和微處理器上,而移動(dòng)Java程序時(shí)需要先安裝Java運(yùn)行期庫。因此,使用C+語言相比其他語言具有最小的依賴性由于C和C+已經(jīng)存在許多年了,現(xiàn)在有許多可利用的代碼,我們的服務(wù)器組件可以使用現(xiàn)有的C/C+代碼或庫。鑒于上述特點(diǎn),我在本設(shè)計(jì)中選擇C+作為主要編程語言。3.3.2 Visual C+6.0編程環(huán)境介紹本次設(shè)計(jì)中使用的Visual C+6.0是一個(gè)基于C+語言
13、,基于Windows操作系統(tǒng)的功能強(qiáng)大的可視化軟件開發(fā)工具。這不僅表現(xiàn)出在應(yīng)用程序界面編輯和代碼的編寫中,還表現(xiàn)為數(shù)據(jù)處理上的高可視化和高面向?qū)ο笮?。Visual C+6.0不僅是一個(gè)C+編譯器,而且是一個(gè)基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrated development environment,IDE)。它由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lass Wizard等開發(fā)工具。 這些組件通過一個(gè)名為Developer Studio的組件集成為和諧的開發(fā)環(huán)境。另外,Visual C+6.0還提供了一個(gè)無所不包的應(yīng)用框架MFC,并且可
14、以非常方便的使用MSCcomm控件進(jìn)行串口編程。使用Visual C+6.0的向?qū)Э梢陨纱罅康氖褂么a,而不必人工地編寫代碼。從編寫程序的難易程度和程序的性能綜合考慮,這些特點(diǎn)完全能夠滿足我在本次課題設(shè)計(jì)中的各種需求。3.3.3 MFC程序框架介紹MFC就是一個(gè)程序的框架。這個(gè)框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法。使用者只要通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓就可以了。在它基礎(chǔ)上來建立Windows下的應(yīng)用程序,相對(duì)SDK來說更為簡單。Visual C+6.0提供了相應(yīng)的工具來完成這個(gè)工作:AppWizard可以用來生成初步的框架文件(代碼和資源等);資源
15、編輯器用于幫助直觀地設(shè)計(jì)用戶接口; ClassWizard用來協(xié)助添加代碼到框架文件;最后,編譯,則通過類庫實(shí)現(xiàn)了應(yīng)用程序特定的邏輯。在本設(shè)計(jì)中要求通過編寫代碼來建立必要的用戶界面,控制并定制其外觀。同時(shí)還要響應(yīng)用戶的操作行為。例如,如果用戶單擊了現(xiàn)場測試按鈕,就需要有代碼來響應(yīng)這一動(dòng)作。而使用MFC框架,則會(huì)自動(dòng)添按鈕的響應(yīng)消息,只需在對(duì)應(yīng)位置添加事件處理動(dòng)作就能完成控制任務(wù)。為此采用了Visual C+6.0的MFC單文檔程序框架作為上位機(jī)軟件的基本框架。3.4 基本界面的建立3.4.1單文檔一個(gè)典型的應(yīng)用程序應(yīng)該活動(dòng)在稱為“框架窗口”中。一個(gè)框架窗口是一個(gè)全功能的主窗口,用戶可以改變尺寸
16、、最小化、最大化等。本設(shè)計(jì)方案中主要涉及單文檔窗口,和對(duì)話框窗口。整個(gè)上位機(jī)界面的底層是單文檔,而上層使用的使對(duì)話框,并在對(duì)話框上添加主要控件,從而構(gòu)成了完整的界面外觀。圖3. 單文檔結(jié)構(gòu)圖使用MFC的向?qū)Ъ纯缮扇缟纤镜膯挝臋n窗口。這是整個(gè)界面的基礎(chǔ)框架部分。3.4.1對(duì)話框在基礎(chǔ)的單文檔框架上面添加了兩個(gè)無(標(biāo)題欄)對(duì)話框?qū)挝臋n窗體分為兩部分。上一部Dialog1分為工具條按鈕,下一部分Dialog2為具體功能顯示區(qū)。此兩部分窗口均為非模態(tài)化對(duì)話框。首先在資源里插入新建對(duì)話框,修改其屬性;然后添加相應(yīng)的類,如CUDiskDlg;再使用以下代碼分別創(chuàng)建模態(tài)化對(duì)話框和非模態(tài)化對(duì)話框。CUD
17、iskDlg m_CUDiskDlg;/定義對(duì)象m_UDHisDlg.Create(IDD_UDISKHIS,this);/創(chuàng)建非模態(tài)化對(duì)話框m_UDHisDlg.ShowWindow(TRUE);/顯示對(duì)話框m_UDHisDlg.DoModal();/創(chuàng)建模態(tài)化對(duì)話框3.4.1控件介紹Button控件:Button控件是按鈕控件,可以響應(yīng)單擊(BN_KLICKED)和雙擊(BN_DUBLEKLICKED)事件。其使用方法是:在資源標(biāo)簽的相應(yīng)窗體下,從Controls對(duì)話框中將Button控件拖至對(duì)話框的相應(yīng)位置,修改屬性及ID號(hào)后,在其對(duì)應(yīng)的事件處理函數(shù)中添加事件代碼即可。在本設(shè)計(jì)中使用頗多
18、,如U盤歷史數(shù)據(jù)查詢按鈕,現(xiàn)場測試按鈕等。Edit控件:Edit控件是文本編輯控件,在本設(shè)計(jì)中主要用于U盤查詢界面中詳細(xì)數(shù)據(jù)的參數(shù)顯示,和現(xiàn)場測試中參數(shù)設(shè)置部分的數(shù)據(jù)輸入和測試結(jié)果表格中的數(shù)據(jù)顯示及測試結(jié)論、處理意見的輸入。將Edit控件在類向?qū)е信c一變量(如m_edit8)以value的形式相關(guān)聯(lián)。當(dāng)用于數(shù)據(jù)顯示時(shí),使用語句m_edit8 =str;將值賦予變量m_edit8,再用語句UpdateData(FALSE);將變量內(nèi)容顯示。當(dāng)用于數(shù)據(jù)輸入時(shí),應(yīng)用語句UpdateData(TRUE);將控件中的數(shù)據(jù)讀入賦予相關(guān)變量。ListContrl控件:ListContrl控件主要用于顯示列表
19、式的數(shù)據(jù)顯示。在本設(shè)計(jì)中,歷史信息,詳細(xì)數(shù)據(jù),現(xiàn)場測試數(shù)據(jù)的顯示均使用了ListContrl控件。該控件使用前需進(jìn)行風(fēng)格設(shè)置。即通過以下語句獲得原有風(fēng)格:DWORD dwStyle = :GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);dwStyle &= (LVS_TYPEMASK); dwStyle &= (LVS_EDITLABELS);通過以下語句置新風(fēng)格:SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS
20、); 通過以下語句設(shè)置擴(kuò)展風(fēng)格DWORD styles =LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES; ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,styles );。進(jìn)行風(fēng)格設(shè)置后,先插入列頭,后才可以逐行添加數(shù)據(jù)信息。插入列頭時(shí),應(yīng)用InsertColum方法,而逐行添加信息時(shí),第一列的信息應(yīng)該用InsertItem方法,而后幾列則應(yīng)用SetItem方法。ListContrl控件也可以響應(yīng)雙擊事件,其函數(shù)為OnDblclkListHis(NMH
21、DR* pNMHDR, LRESULT* pResult)。并且能獲得雙擊時(shí)鼠標(biāo)所在的Item號(hào)。由此來實(shí)現(xiàn)雙擊歷史信息記錄后,顯示對(duì)應(yīng)的詳細(xì)數(shù)據(jù)。Picture控件:Picture控件是一個(gè)靜態(tài)控件,用于插入圖片等功能。而圖片的插入,有靜態(tài)插入和動(dòng)態(tài)插入兩種方法。靜態(tài)插入是指,直接在Picture控件屬性中,將將“類型”選項(xiàng)改為Bitmap,然后再在“圖像”選項(xiàng)中選擇合適的位圖即可。動(dòng)態(tài)插入是指,在程序中定義HBITMAP類型變量m_Brown_h1,用語句m_Brown_h1=:LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BR
22、OWN_H1)將變量m_Brown_h1與位圖資源IDB_BROWN_H1關(guān)聯(lián)起來。然后再將Picture控件與變量m_h1關(guān)聯(lián),再通過語句m_h1.SetBitmap(m_Blue_h1);就可以將圖片動(dòng)態(tài)插入。3.5 歷史數(shù)據(jù)察看功能3.5.1歷史數(shù)據(jù)察看功能介紹歷史數(shù)據(jù)察看功能主要是用于察看直接通過下位機(jī),以文件形式存儲(chǔ)在USB可移動(dòng)存儲(chǔ)設(shè)備上的歷史檢測數(shù)據(jù)紀(jì)錄的。該紀(jì)錄由歷史信息和歷史信息對(duì)應(yīng)的詳細(xì)數(shù)據(jù)信息兩部分。每條歷史信息包括序號(hào)、日期、時(shí)間、整定電壓(在放電測試項(xiàng)目中無該紀(jì)錄)、整定電流、已放容量(只在放電測試項(xiàng)目中有該紀(jì)錄)五項(xiàng)內(nèi)容;每條歷史信息對(duì)應(yīng)得詳細(xì)數(shù)據(jù)信息有各自不同的幾
23、項(xiàng)內(nèi)容。各項(xiàng)測試的詳細(xì)數(shù)據(jù)信息如下:放電參數(shù)測試包括序號(hào)、時(shí)、分、端電壓、放電電流五項(xiàng);電壓穩(wěn)定精度測試包括輸入電壓、電壓最大值、電壓最小值、穩(wěn)壓精度、紋波系數(shù)五項(xiàng);電流穩(wěn)定精度測試包括輸入電壓最大值、電流最大值、電流最小值、穩(wěn)流精度四項(xiàng);限流特性測試包括輸入電壓、-10%、100%、+10%、穩(wěn)流精度五項(xiàng)。在用戶進(jìn)入該程序后,單擊U盤歷史查詢按鈕就會(huì)進(jìn)入歷史數(shù)據(jù)察看狀態(tài)。按下各測試項(xiàng)目選擇按鈕,則進(jìn)入不同的測試項(xiàng)目歷史紀(jì)錄查詢狀態(tài)。對(duì)應(yīng)的歷史信息就立刻顯示在List中。雙擊List條目,則將對(duì)應(yīng)的詳細(xì)數(shù)據(jù)信息顯示在List中,其參數(shù)也將顯示在對(duì)應(yīng)位置。 圖4. 歷史數(shù)據(jù)查詢界面3.5.2歷史
24、數(shù)據(jù)察看功能實(shí)現(xiàn)的方法3.5.2.1盤符的確定由于每臺(tái)PC的盤符劃分不同,USB移動(dòng)存儲(chǔ)設(shè)備連接后所在的盤符也將不同。而對(duì)文件的操作必須指定明確的文件路徑,方能正確的打開文件,讀取數(shù)據(jù)。因此,如何確定USB移動(dòng)存儲(chǔ)設(shè)備的盤符是必須解決的問題。在本設(shè)計(jì)中,我采用了添加配置文件方式來解決該問題。即在可執(zhí)行程序的根目錄下添加一可讀寫的文件,用于保存指定的盤符。當(dāng)用戶在某一PC機(jī)上第一次使用本軟件時(shí),將提示配置USB可移動(dòng)存儲(chǔ)設(shè)備盤符。當(dāng)用戶輸入該P(yáng)C機(jī)上USB可移動(dòng)存儲(chǔ)設(shè)備所在盤符,并按配置按鈕后,盤符信息將寫入配置文件,并一直保存至下一次配置前。按下推出按鈕,則向主框架發(fā)出消息,要求其重新創(chuàng)建歷史
25、數(shù)據(jù)察看功能對(duì)話框,在對(duì)話框的初始化中重新裝載配置文件,讀入正確的盤符。其中配置文件的裝載,采用函數(shù)GetCurrentDirectory(dirlen,sDir)獲得可執(zhí)行文件的根目錄,再用函數(shù)strcat(sDir,con_set.ini)生成完整的配置文件路徑。 圖5. 第一次配置文件界面生成配置文件代碼如下:UpdateData();if(m_usb.GetLength()0&m_usb.GetLength()0)&m_com.GetLength()2)FILE* fp;fp=fopen(con_set.ini,wb);char Disk,Com;Disk=m_usb.GetAt(0)
26、;Com=m_com.GetAt(0);fputc(Disk,fp);fputc(Com,fp);fclose(fp);MessageBox(配置成功!);elseMessageBox(輸入的參數(shù)格式錯(cuò)誤,無法配置!);配置文件的裝載代碼如下:FilePath=C:FHIST;FilePath.SetAt(0,Disk);l=FilePath.GetLength();FileName=FileName_tmp;for(r=0;rl;r+)*(FileName+r)=FilePath.GetAt (r);*(FileName+l)=NULL;/打開文件并判斷文件是否打開成功if(fp=fopen
27、(FileName,rb)=NULL)MessageBox(文件不存在,請(qǐng)檢查文件位置并重新配置);return;3.5.2.2歷史數(shù)據(jù)及對(duì)應(yīng)的詳細(xì)數(shù)據(jù)的讀取和顯示歷史紀(jì)錄在USB移動(dòng)存儲(chǔ)設(shè)備中以文件的形式存儲(chǔ)。各項(xiàng)歷史信息和詳細(xì)數(shù)據(jù)信息對(duì)應(yīng)的文件名如下圖:檢測項(xiàng)目歷史信息文件名詳細(xì)數(shù)據(jù)文件名放電測試FHISTVDATA電壓穩(wěn)定精度測試UHISTUDATA電流穩(wěn)定精度測試IHISTIDATA效率測試EHISTEDATA限流特性測試XHISTXDATA圖6. 各項(xiàng)歷史信息和詳細(xì)數(shù)據(jù)信息實(shí)現(xiàn)歷史信息的讀取,首先從配置文件中讀入盤符,獲取到對(duì)應(yīng)歷史信息的文件路徑,以二進(jìn)制流形式打開對(duì)應(yīng)文件,讀取歷史
28、信息條數(shù)(即第一個(gè)二進(jìn)制數(shù)據(jù))到int變量mark中。由于下位是16位操作系統(tǒng),一個(gè)int型占16位,而上位機(jī)是32位操作系統(tǒng),一個(gè)int型占32位,一個(gè)short int型占16位。由文件存儲(chǔ)格式可知,實(shí)際的標(biāo)志位為16位數(shù),因此需將讀取的二進(jìn)制數(shù)強(qiáng)制轉(zhuǎn)換為short int 型數(shù)據(jù)。然后根據(jù)各項(xiàng)歷史信息數(shù)據(jù)的存儲(chǔ)格式,移動(dòng)指針,依次讀取一條數(shù)據(jù)到數(shù)組data_tmp7中,共讀取mark次。移動(dòng)指針讀取數(shù)據(jù)到數(shù)組data_tmp7中的代碼如下:fseek(fp,(2+i*7*4),SEEK_SET);/移動(dòng)指針到相應(yīng)位置fread(data_tmp,4,7,fp);/詳細(xì)數(shù)據(jù)的讀取是當(dāng)鼠標(biāo)雙
29、擊list1控件的某一條歷史信息時(shí),將響應(yīng)list1控件的雙擊事件,進(jìn)入的其響應(yīng)函數(shù)。在該函數(shù)中,通過switch語句判斷該條歷史信息所屬的測試項(xiàng)目,并由此打開相應(yīng)的詳細(xì)數(shù)據(jù)文件。當(dāng)雙擊list1控件的某一條歷史信息時(shí),nItem=m_listctrl.GetNextItem(-1, LVNI_FOCUSED);將獲取該行索引值,即該條歷史信息在全部信息中排列的序號(hào)。根據(jù)此及對(duì)應(yīng)測試項(xiàng)詳細(xì)數(shù)據(jù)存儲(chǔ)格式,可計(jì)算出該條歷史信息所對(duì)應(yīng)得詳細(xì)數(shù)據(jù)的第一個(gè)數(shù)據(jù)的指針。然后移動(dòng)指針,讀取該詳細(xì)數(shù)據(jù)信息到數(shù)組tem。放電測試項(xiàng)詳細(xì)數(shù)據(jù)讀取時(shí)移動(dòng)指針,讀取數(shù)據(jù)到數(shù)組data_tmp7中的代碼如下:fseek(
30、fp,(2+nItem*1240),SEEK_SET);/移動(dòng)指針到對(duì)應(yīng)日期 的數(shù)據(jù)存儲(chǔ)位置fread(data,4,310,fp);/讀取數(shù)據(jù)流到tem,float *data 的指向tem的首地址歷史信息和對(duì)應(yīng)的詳細(xì)數(shù)據(jù)的顯示,主要是edit控件的顯示和listContrl控件的信息插入。以放電測試為例,歷史信息數(shù)據(jù)顯示的主要代碼如下:for(i=0;imark;i+)/插入數(shù)據(jù)fseek(fp,(2+i*7*4),SEEK_SET);/移動(dòng)指針到相應(yīng)位置fread(data_tmp,4,7,fp);rewind(fp);itIndex=m_list_his.GetItemCount();
31、LV_ITEM lvitem;lvitem.mask=LVIF_TEXT;lvitem.iItem=itIndex;lvitem.iSubItem=0;itoa(i+1),ch1,10);lvitem.pszText =ch1;m_list_his.InsertItem(&lvitem);/日期str=;itoa(int)data_tmp0,ch1,10);str=str+ch1+.;itoa(int)data_tmp1,ch1,10);str=str+ch1+.;itoa(int)data_tmp2,ch1,10);str=str+ch1;int str_length;str_length=
32、str.GetLength();char *str_data;char s_data15;str_data=s_data;for(j=0;j=10)itoa(int)data_tmp3,ch1,10);else itoa(int)data_tmp3,ch1,10);ch11=ch10;ch10=0;ch2=0;str=str+ch1+:;if(data_tmp4=10)itoa(int)data_tmp4,ch1,10);else itoa(int)data_tmp4,ch1,10);ch11=ch10;ch10=0;ch2=0;str=str+ch1+:+00;str_length=str.
33、GetLength();char *str_time;char time_tem10;str_time=time_tem;for(j=0;jstr_length;j+)*(str_time+j)=str.GetAt (j);*(str_time+str_length)=NULL;lvitem.pszText =str_time;lvitem.iSubItem=2;m_list_his.SetItem(&lvitem);/已放容量chang(data_tmp5*0.01,str_da,h);lvitem.pszText =str_da;lvitem.iSubItem=3;m_list_his.S
34、etItem(&lvitem);/整定電流chang_A(data_tmp6*0.01,str_da,A);lvitem.pszText =str_da;lvitem.iSubItem=4;m_list_his.SetItem(&lvitem);以放電測試為例,詳細(xì)數(shù)據(jù)顯示的主要代碼如下:for(i=0;i=10)itoa(int)data3,ch,10);else itoa(int)data3,ch,10);ch1=ch0;ch0=0;ch2=0;str=str+ch+:;if(data4=10)itoa(int)data4,ch,10);else itoa(int)data4,ch,10)
35、;ch1=ch0;ch0=0;ch2=0;str=str+ch+:+00;m_edit_u9 =str;/開始端電壓chang_V(data5*62.5,str_da,V);m_edit_u10 =str_da;/整定放電電流chang_A(data6*0.01,str_da,A);m_edit_u11 =str_da;/已放容量chang(data7+i*6+5,str_da,h);m_edit_u12 =str_da ;m_edit_u13 = _T();m_edit_u14 = _T();UpdateData(FALSE);3.4 現(xiàn)場測試功能隨著計(jì)算機(jī)、電子、通信技術(shù)的飛速發(fā)展,人們對(duì)
36、于車間現(xiàn)場設(shè)備的運(yùn)行管理控制,可視化操作等綜合水平提出了新的要求。本設(shè)計(jì)中的現(xiàn)場測試功能就是本著“不在現(xiàn)場,遠(yuǎn)離現(xiàn)場”的原則,將充電機(jī)的現(xiàn)場設(shè)備界面通過串口通信技術(shù),與上位機(jī)界面有機(jī)的結(jié)合起來,以實(shí)現(xiàn)計(jì)算機(jī)的遠(yuǎn)程監(jiān)控功能。該功能的使用,可實(shí)現(xiàn)在非車間場地,通過簡單、人性的操作界面,對(duì)充電機(jī)測試數(shù)據(jù)的進(jìn)行實(shí)時(shí)監(jiān)控以及歷史數(shù)據(jù)的準(zhǔn)確查詢,并且能在實(shí)際的生產(chǎn)任務(wù)中,最大限度的降低人工成本,提高生產(chǎn)效率,保證生產(chǎn)安全。3.4.1現(xiàn)場測試功能介紹本設(shè)計(jì)中的現(xiàn)場測試功能主要是指上位機(jī)和下位機(jī)間通過通信來實(shí)現(xiàn)上位機(jī)與下位機(jī)間的信息交換。將下位機(jī)檢測到的數(shù)據(jù)實(shí)時(shí)上傳給上位機(jī),并在界面中顯示,保存。由此實(shí)現(xiàn)在非
37、車間場地,通過簡單、人性的操作界面,對(duì)充電機(jī)測試數(shù)據(jù)的進(jìn)行實(shí)時(shí)監(jiān)控。圖7. 現(xiàn)場測試功能界面(該圖需表出參數(shù)設(shè)置部分,表格部分)上圖為現(xiàn)場測試功能界面。該界面能實(shí)現(xiàn)對(duì)五個(gè)測試項(xiàng)目的測試數(shù)據(jù)進(jìn)行實(shí)時(shí)監(jiān)測。要求監(jiān)測到的數(shù)據(jù)包括:放電參數(shù)測試包括序號(hào)、時(shí)、分、端電壓、放電電流五項(xiàng)及測試日期、測試時(shí)間、開始端電整定放電電流、已放容量等五個(gè)參數(shù);電壓穩(wěn)定精度測試包括輸入電壓、電壓最大值、電壓最小值、穩(wěn)壓精度、紋波系數(shù)五項(xiàng)及測試日期、測試時(shí)間、直流電壓、負(fù)載電流、整定電壓、交流電壓、紋波峰值等七個(gè)參數(shù);電流穩(wěn)定精度測試包括輸入電壓最大值、電流最大值、電流最小值、穩(wěn)流精度四項(xiàng)及測試日期、測試時(shí)間、直流電流、
38、直流電壓、整定電流、交流電壓、計(jì)算整定電流等七個(gè)參數(shù);限流特性測試包括輸入電壓、-10%、100%、+10%、穩(wěn)流精度五項(xiàng)及測試日期、測試時(shí)間、直流電壓值、交流電壓、限流整定值等5個(gè)參數(shù)。當(dāng)用戶按下現(xiàn)場測試按鈕后,由單文檔試圖創(chuàng)建并顯示一對(duì)話框,即現(xiàn)場測試界面。當(dāng)按下不同的現(xiàn)場測試項(xiàng)目按鈕后,通過標(biāo)志位flag_Face的置位及判斷,進(jìn)入到不同的現(xiàn)場測試狀態(tài)。如圖所示的參數(shù)設(shè)置圖位置可進(jìn)行各項(xiàng)測試的設(shè)備信息及參數(shù)設(shè)置。按下保存設(shè)置按鈕,設(shè)置被禁用,并且設(shè)置的內(nèi)容將被保存在測試結(jié)果表格中如圖所示的表格設(shè)置。保存設(shè)置后,按準(zhǔn)備測試按鈕,則打開串口,進(jìn)入通信等待狀態(tài)。一但下位機(jī)向上位機(jī)發(fā)送數(shù)據(jù),就會(huì)
39、進(jìn)入通信狀態(tài),根據(jù)預(yù)先定義的協(xié)議,進(jìn)行數(shù)據(jù)通信。若要停止接收數(shù)據(jù),則需按下停止接收數(shù)據(jù)按鈕,即關(guān)閉串口。測試結(jié)束后,可在Edit1,Edit2中輸入相應(yīng)的測試論和意見。按保存按鈕,則可以將測試結(jié)果導(dǎo)入word中,并保存下來。各按鈕功能及相關(guān)變量如下表:按鈕名稱按鈕功能相關(guān)變量放電測試進(jìn)入放電測試功能flag_Face=1電壓穩(wěn)定精度測試進(jìn)入電壓穩(wěn)定精度測試功能flag_Face=2電流穩(wěn)定精度測試進(jìn)入電流穩(wěn)定精度測試功能flag_Face=3充電機(jī)效率測試進(jìn)入充電機(jī)效率測試功能flag_Face=4限流特性測試進(jìn)入限流特性測試功能flag_Face=5保存設(shè)置參數(shù)設(shè)置禁用,將設(shè)置內(nèi)容保存在測試
40、結(jié)果表格中flag_IfParSave=1修改設(shè)置參數(shù)設(shè)置可用flag_IfParSave=0準(zhǔn)備測試判斷設(shè)置是否保存,若已保存則打開串口無停止接收數(shù)據(jù)若串口打開,則關(guān)閉串口無保存結(jié)果根據(jù)標(biāo)志位flag_nFormWord的值,將測試結(jié)果導(dǎo)入對(duì)應(yīng)word中無返回隱藏現(xiàn)場測試界面,顯示信息輸入界面無圖8. 各按鈕功能及相關(guān)變量3.4.2串行通信的建立及基本參數(shù)的設(shè)定所謂“串行通信”是指外設(shè)和計(jì)算機(jī)間使用一根數(shù)據(jù)信號(hào)線(另外需要地線,可能還需要控制線),數(shù)據(jù)在一根數(shù)據(jù)信號(hào)線上一位一位地進(jìn)行傳輸,每一位數(shù)據(jù)都占據(jù)一個(gè)固定的時(shí)間長度。如圖所示。而串行接口是微機(jī)應(yīng)用系統(tǒng)常用的接口。在串行通信時(shí),要求通信
41、雙方都采用一個(gè)標(biāo)準(zhǔn)接口,使不同的設(shè)備可以方便地連接起來進(jìn)行通信。目前RS-232是PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口。它被定義為一種在低速率串行通信中增加通信距離的單端標(biāo)準(zhǔn)。RS-232采取不平衡傳輸方式,即所謂單端通信。 收、發(fā)端的數(shù)據(jù)信號(hào)是相對(duì)于信號(hào)地,如從DTE設(shè)備發(fā)出的數(shù)據(jù)在使用DB25連接器時(shí)是2腳相對(duì)7腳(信號(hào)地)的電平,DB25各引腳定義參見圖1。典型的RS-232信號(hào)在正負(fù)電平之間擺動(dòng),在發(fā)送數(shù)據(jù)時(shí),發(fā)送端驅(qū)動(dòng)器輸出正電平在+5+15V,負(fù)電平在-5-15V電平。當(dāng)無數(shù)據(jù)傳輸時(shí),線上為TTL,從開始傳送數(shù)據(jù)到結(jié)束,線上電平從TTL電平到RS-232電平再返回TTL電平。
42、接收器典型的工作電平在+3+12V與-3-12V。由于發(fā)送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s。RS-232是為點(diǎn)對(duì)點(diǎn)(即只用一對(duì)收、發(fā)設(shè)備)通信而設(shè)計(jì)的,其驅(qū)動(dòng)器負(fù)載為37k。所以RS-232適合本地設(shè)備之間的通信。圖9. RS232DB25連接器引腳規(guī)定RS232RS422R485工作方式單端差分差分節(jié)點(diǎn)數(shù)1收、1發(fā)1發(fā)10收1發(fā)32收最大傳輸電纜長度50英尺400英尺400英尺最大傳輸速率20Kb/S10Mb/s10Mb/s最大驅(qū)動(dòng)輸出電壓+/-25V-0.25V+6V-7V+12V驅(qū)動(dòng)器輸
43、出信號(hào)電平(負(fù)載最小值)負(fù)載+/-5V+/-15V+/-2.0V+/-1.5V驅(qū)動(dòng)器輸出信號(hào)電平(空載最大值)空載+/-25V+/-6V+/-6V驅(qū)動(dòng)器負(fù)載阻抗()3K7K10054擺率(最大值)30V/sN/AN/A接收器輸入電壓范圍+/-15V-10V+10V-7V+12V接收器輸入門限+/-3V+/-200mV+/-200mV接收器輸入電阻()3K7K4K(最小)12K驅(qū)動(dòng)器共模電壓-3V+3V-1V+3V接收器共模電壓-7V+7V-7V+12V圖10. RS-232電氣參數(shù)表因此考慮到適用,經(jīng)濟(jì),兼容等原因,在本設(shè)計(jì)中采用RS-232串行通信標(biāo)準(zhǔn)是較好的選擇。3.4.3使用MSCcom
44、m控件進(jìn)行串口編程Windows與以往DOS下串行通信程序不同,Windows不提倡應(yīng)用程序直接控制硬件,而是通過Windows操作系統(tǒng)提供的設(shè)備驅(qū)動(dòng)程序來進(jìn)行數(shù)據(jù)傳遞。因此串行口在Win 32中是作為文件來進(jìn)行處理的,而不是直接對(duì)端口進(jìn)行操作。對(duì)于串行通信,Win 32 提供了相應(yīng)的文件I/O函數(shù)與通信函數(shù),通過了解這些函數(shù)的使用,可以編制出符合不同需要的通信程序。 MSComm(Microsoft Communications Control)控件是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件,通過串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能。選用
45、的事件驅(qū)動(dòng)方式處理通信問題。事件驅(qū)動(dòng)方式是指,當(dāng)串口發(fā)生事件或者錯(cuò)誤的時(shí)候,會(huì)產(chǎn)生一個(gè)OnComm的事件,通過對(duì)這個(gè)事件的捕捉,進(jìn)行相應(yīng)的處理來完成串口通信任務(wù)。而在事件驅(qū)動(dòng)方式中,MSComm有一個(gè)重要屬性-CommEvent屬性。當(dāng)串口發(fā)生事件或者錯(cuò)誤的時(shí)候,MSComm就為它賦不同的代碼,同時(shí),產(chǎn)生一個(gè)OnComm事件。這時(shí)候,我們就可以針對(duì)不同的代碼,進(jìn)行相應(yīng)的處理。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。因此,在本設(shè)計(jì)中選用了MSComm控件來實(shí)現(xiàn)串行通信功能。 首先,在對(duì)話框中創(chuàng)建通信控件,若Control工具欄中缺少該控件,可通過菜單Project - Add to Projec
46、t - Components and Control插入即可,再將該控件從工具箱中拉到對(duì)話框中。然后通過設(shè)置和監(jiān)視MSComm控件的屬性和事件來完成任務(wù)。打開所需串口后,使用OnComm的事件來捕捉事件,使用m_Com.GetCommEvent()函數(shù)獲得CommEvent 屬性值。并由此來檢查其是否正確接收數(shù)據(jù)(正確接收數(shù)據(jù)時(shí),m_Com.GetCommEvent()函數(shù)獲得的值為2),否則作拋棄處理。由于該通信的目的是建立上位機(jī)和下位機(jī)間的數(shù)據(jù)交換紐帶,使得上位機(jī)能夠?qū)崟r(shí)的顯示并處理下位機(jī)檢測到的數(shù)據(jù)。為了保證數(shù)據(jù)處理時(shí)間,進(jìn)入OnOnCommMscomm1()串口通信中斷函數(shù)后,馬上使用
47、使用m_Com.SetRThreshold(0);語句將緩沖區(qū)引發(fā)接收數(shù)據(jù)的字符數(shù)設(shè)置為0,即相當(dāng)于不接收緩沖區(qū)的任何數(shù)據(jù)。以確保已接收的數(shù)據(jù)由足夠的處理時(shí)間。當(dāng)已接收的數(shù)據(jù)處理完畢,則使用m_Com.SetRThreshold(1);語句,繼續(xù)接收數(shù)據(jù)。如此往復(fù)。使用MSComm控件實(shí)現(xiàn)串口通信的主要代碼如下:void CNTestDlg:OnOnCommMscomm1() /串口通信中斷處理/ TODO: Add your control notification handler code here/原理: 進(jìn)入中斷后,關(guān)閉中斷,逐個(gè)處理緩存中的數(shù)據(jù),結(jié)束后再開啟中斷,緩存中若有新的數(shù)據(jù),
48、則進(jìn)入中斷。往復(fù)循環(huán)。m_Com.SetRThreshold(0);/關(guān)閉串口中斷m_list_FPar.SetFont(&m_Font);/設(shè)置字體VARIANT vResponse;char *tem_data;char str;int nEvent,DataCount;nEvent=m_Com.GetCommEvent();/nEvent是一個(gè)狀態(tài)值switch(nEvent)case 2:/數(shù)據(jù)正確接收時(shí),nEvent總為2DataCount=m_Com.GetInBufferCount();/獲取緩存中的數(shù)據(jù)大小vResponse=m_Com.GetInput();/讀緩存區(qū)tem_
49、data=(char*)vResponse.parray-pvData;/將讀入的數(shù)據(jù)放入數(shù)組for(int i=0;iDataCount;i+)str=*(tem_data+i);operateData(str);/逐個(gè)對(duì)數(shù)據(jù)進(jìn)行處理m_Com.SetRThreshold(1);void CNTestDlg:PortOpen()/初始化串口/在開始按鈕按下后才初始化串口if(m_Com.GetPortOpen()m_Com.SetPortOpen(FALSE);m_Com.SetCommPort(Com-48); /選擇串口號(hào) Com 讀入的數(shù)據(jù)為字符型的數(shù)字,48對(duì)應(yīng)字符0if( !m_Com.GetPortOpen()m_Com.SetPortOpen(TRUE);/打開串口elseAfxMessageBox(cannot open serial port);m_Com.SetSettings(9600,E,8,2);/波特率9600,無校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位m_Com.SetInputMode(1);/設(shè)置串口接收的方式:二進(jìn)制方式m_Com.SetRThreshold(1); /參數(shù)1表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美容儀器在皮膚治療技術(shù)的研究與開發(fā)策略考核試卷
- 智能康復(fù)機(jī)器人的運(yùn)動(dòng)控制技術(shù)考核試卷
- 2025裝修合同條款不全 延期完工仍需賠償
- 2025企業(yè)與企業(yè)之間租賃合同
- 2025養(yǎng)殖業(yè)承包合同 定義
- 2025房地產(chǎn)合作開發(fā)合同模板
- 2025年土地使用權(quán)買賣合同樣本
- 第01講 豐富的圖形世界(解析版)
- 二零二五單位臨時(shí)用員工聘用合同書
- 專業(yè)施工配合費(fèi)協(xié)議
- GB/T 17214.1-1998工業(yè)過程測量和控制裝置工作條件第1部分:氣候條件
- 豬生殖器官(課堂PPT)
- 2023年廣東學(xué)位英語試題學(xué)位英語考試真題(含答案)
- 《旅行社經(jīng)營管理》考試復(fù)習(xí)題庫及答案
- 粵教版五年級(jí)下冊(cè)科學(xué)知識(shí)點(diǎn)
- 危大工程巡視檢查記錄表(深基坑)
- 《最好的未來》合唱曲譜
- GB∕T 36765-2018 汽車空調(diào)用1,1,1,2-四氟乙烷(氣霧罐型)
- 《覺醒年代》朗誦稿
- 小學(xué)教育專業(yè)畢業(yè)論文
- 水保工程驗(yàn)收檢驗(yàn)記錄表
評(píng)論
0/150
提交評(píng)論