電機上位機控制及界面設計_第1頁
電機上位機控制及界面設計_第2頁
電機上位機控制及界面設計_第3頁
電機上位機控制及界面設計_第4頁
電機上位機控制及界面設計_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、精選優質文檔-傾情為你奉上電機上位機控制及界面設計 吳牛俊(自動化與電氣工程學院 指導教師:周克寧)摘要:隨著計算機、電子、通訊技術的飛速發展,人們對于車間現場設備的運行管理控制,可視化操作等綜合水平提出了新的要求。為了滿足這新的要求,本畢業設計本著“不在現場,遠離現場”的原則,以C語言作為開發語言,VC為開發環境,針對某充電機產品編寫了應用程序,將充電機的現場設備界面通過串口通信技術,與上位機界面有機的結合起來,以實現計算機的遠程監控功能。此外,該上位機應用軟件還實現了查看充電機存儲在U盤中的運行記錄文件的功能。在本畢業論文通過這個項目的開發過程,闡述了編程環境的選擇,串口通訊實現遠程測試的

2、方法,通過文件操作讀取U盤數據的技巧。探討如何在PC平臺與工控機平臺間建立遠程測試和歷史數據讀取和分析的一般方法。關鍵詞:人機界面;串口通信;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 背 景隨著計算機、電子、通訊技術的飛速發展,人們對于車間現場設備的運行管理控制,可視化操作等綜合水平提出了新的要求。隨著計算機的運算速度不斷升級功能日漸強大,在車間現場測控中扮演了越來越重要的角色。利用計算機軟件通過運用先進的通訊技術監控遠程現場設備的運行狀況和運行參數。這將大大提高生產效率,保證生產安全。出于節省人工,提高效率或者安全生產方面的考慮很多環節需要遠程監控車間設備的運行情況,這就離不開通訊技術的應用。這里所說的通信是只計算機與遠程設備之間的信息交換。由于串行通

7、信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現成的電話網進行信息傳送,因此,特別適合于遠距離傳輸。對于那些與計算機相距不遠的人機交換設備和串行存儲的外部設備如終端、打印機、邏輯分析儀、磁盤等,采用串行方式交換數據也很普遍。同時,隨著人們對車間現場設備智能化的要求的提高,越來越多的設備采用了外存儲器對生產測試過程中的數據進行存儲,監控人員通過定期對存儲了歷史數據記錄的分析,可以清楚得了解到設備的動態運行情況,這些數據對設備排錯和參數設置提供依據都有很高的價值。隨著PC端USB接口技術的普及,以U盤作為設備外存儲器存儲運行數據,具有實現簡單,讀取方便的特點,應用也越來越廣泛。

8、如何高效,方便的通過最常用的PC機來讀取設備外存儲器中的數據,為數據的快速分析提供了保證。因此研究計算機通過串行通信對遠程車間設備的監控,讀取U盤歷史數據文件并顯示具有一定的現實意義。1.2 任務和目標本畢業設計本著“不在現場,遠離現場”的原則,為導師研制的某型號充電機產品編寫PC端應用程序將充電機設備界面通過串口通信技術,與上位機界面有機的結合起來,以實現計算機的遠程監控功能。按要求在上位機中打開并查看充電機設備運行過程中的存儲在U盤中的歷史數據文件,以便于分析測試。另外還要編寫下位機微型打印機數據打印程序,為用戶提供多種查看選擇。我在認真分析以上設計要求之后,以C語言作為開發語言,VC為開

9、發環境,在MFC框架上編寫完成一個應用程序。這個應用程序采用MSCOMM控件來實現串口通訊,以C語言文件操作實現U盤歷史數據文件的讀寫和顯示操作。并且在此基礎上,我還對上位機軟件的界面進行了美化和優化,還添加了現場測試數據自動生成WORD文檔,使得軟件更人性化和操作更簡單。在本畢業論文通過這個項目的開發過程,闡述了編程環境的選擇,串口通訊實現遠程測試的方法,通過文件操作讀取U盤數據的技巧。探討如何在PC平臺與工控機平臺間建立遠程測試和歷史數據讀取和分析的一般方法。2 總體設計方案2.1 系統總體結構系統總體結構如下圖所示,下位機是一臺試用在變電所等電力部門的充電機設備,采用工控機作為核心處理器

10、。PC機端的應用程序通過RS232串口與設備實現通訊。充電機設備帶有USB接口,用于接入U盤存儲充電機歷史數據。當用戶需要查看歷史記錄數據時,將U盤從設備中拔下,接入PC端可以利用應用程序通過文件操作打開查看。圖1. 系統總體結構圖另外,該充電機設備通過工控機打印口連接一臺微型打印機用于運行參數和測試數據的即時打印,供用戶查看。2.2 上位機用戶操作界面結構 圖2. 軟件組織結構3 上位機用戶操作界面的建立3.1 編程語言及編程環境3.1.1 C+語言介紹C+是脫胎自C語言的一種中級語言。從計算機角度看, 它可以嵌入ASM等低端語言; 從面向對象的程序設計角度看, 它有具備OOP的三個基本特征

11、抽象, 封裝和繼承。C語言是結構化和模塊化的語言,它是面向過程的。C+保留了C語言原有的所有優點,增加了面向對象的機制。C+與C完全兼容。C+是對C的擴充,是C的超集。它既可用于結構化程序設計,又可用于面向對象的程序設計,功能強大。C+性能良好,因為它被編譯為機器代碼。對于VBScript和Java等語言,代碼在運行時由程序解釋,而且每次運行程序時都要將代碼轉換為機器碼,這樣做效率比較低,不僅僅是已編譯過的C+程序運行得較快,而且微軟C+編譯器已存在多年。這意味著微軟的編譯器程序員已經把許多優點集中到編譯器上,以致于它能產生非常高效的機器碼。因為C+是編譯語言,而且非常自然,比VB更接近機器代

12、碼,所以由C+編譯器產生的代碼一定比VB的編譯代碼效率更高。C+是一種編譯語言,即C+代碼在執行之前已轉換為機器碼。只要此代碼不依賴于外部的動態鏈接庫(DLL),C+就可以在不需要安裝額外程序的情況下移動到運行同樣操作系統的其他機器和微處理器上,而移動Java程序時需要先安裝Java運行期庫。因此,使用C+語言相比其他語言具有最小的依賴性由于C和C+已經存在許多年了,現在有許多可利用的代碼,我們的服務器組件可以使用現有的C/C+代碼或庫。鑒于上述特點,我在本設計中選擇C+作為主要編程語言。3.3.2 Visual C+6.0編程環境介紹本次設計中使用的Visual C+6.0是一個基于C+語言

13、,基于Windows操作系統的功能強大的可視化軟件開發工具。這不僅表現出在應用程序界面編輯和代碼的編寫中,還表現為數據處理上的高可視化和高面向對象性。Visual C+6.0不僅是一個C+編譯器,而且是一個基于Windows操作系統的可視化集成開發環境(integrated development environment,IDE)。它由許多組件組成,包括編輯器、調試器以及程序向導AppWizard、類向導Class Wizard等開發工具。 這些組件通過一個名為Developer Studio的組件集成為和諧的開發環境。另外,Visual C+6.0還提供了一個無所不包的應用框架MFC,并且可

14、以非常方便的使用MSCcomm控件進行串口編程。使用Visual C+6.0的向導可以生成大量的使用代碼,而不必人工地編寫代碼。從編寫程序的難易程度和程序的性能綜合考慮,這些特點完全能夠滿足我在本次課題設計中的各種需求。3.3.3 MFC程序框架介紹MFC就是一個程序的框架。這個框架定義了應用程序的輪廓,并提供了用戶接口的標準實現方法。使用者只要通過預定義的接口把具體應用程序特有的東西填入這個輪廓就可以了。在它基礎上來建立Windows下的應用程序,相對SDK來說更為簡單。Visual C+6.0提供了相應的工具來完成這個工作:AppWizard可以用來生成初步的框架文件(代碼和資源等);資源

15、編輯器用于幫助直觀地設計用戶接口; ClassWizard用來協助添加代碼到框架文件;最后,編譯,則通過類庫實現了應用程序特定的邏輯。在本設計中要求通過編寫代碼來建立必要的用戶界面,控制并定制其外觀。同時還要響應用戶的操作行為。例如,如果用戶單擊了現場測試按鈕,就需要有代碼來響應這一動作。而使用MFC框架,則會自動添按鈕的響應消息,只需在對應位置添加事件處理動作就能完成控制任務。為此采用了Visual C+6.0的MFC單文檔程序框架作為上位機軟件的基本框架。3.4 基本界面的建立3.4.1單文檔一個典型的應用程序應該活動在稱為“框架窗口”中。一個框架窗口是一個全功能的主窗口,用戶可以改變尺寸

16、、最小化、最大化等。本設計方案中主要涉及單文檔窗口,和對話框窗口。整個上位機界面的底層是單文檔,而上層使用的使對話框,并在對話框上添加主要控件,從而構成了完整的界面外觀。圖3. 單文檔結構圖使用MFC的向導即可生成如上所示的單文檔窗口。這是整個界面的基礎框架部分。3.4.1對話框在基礎的單文檔框架上面添加了兩個無(標題欄)對話框將單文檔窗體分為兩部分。上一部Dialog1分為工具條按鈕,下一部分Dialog2為具體功能顯示區。此兩部分窗口均為非模態化對話框。首先在資源里插入新建對話框,修改其屬性;然后添加相應的類,如CUDiskDlg;再使用以下代碼分別創建模態化對話框和非模態化對話框。CUD

17、iskDlg m_CUDiskDlg;/定義對象m_UDHisDlg.Create(IDD_UDISKHIS,this);/創建非模態化對話框m_UDHisDlg.ShowWindow(TRUE);/顯示對話框m_UDHisDlg.DoModal();/創建模態化對話框3.4.1控件介紹Button控件:Button控件是按鈕控件,可以響應單擊(BN_KLICKED)和雙擊(BN_DUBLEKLICKED)事件。其使用方法是:在資源標簽的相應窗體下,從Controls對話框中將Button控件拖至對話框的相應位置,修改屬性及ID號后,在其對應的事件處理函數中添加事件代碼即可。在本設計中使用頗多

18、,如U盤歷史數據查詢按鈕,現場測試按鈕等。Edit控件:Edit控件是文本編輯控件,在本設計中主要用于U盤查詢界面中詳細數據的參數顯示,和現場測試中參數設置部分的數據輸入和測試結果表格中的數據顯示及測試結論、處理意見的輸入。將Edit控件在類向導中與一變量(如m_edit8)以value的形式相關聯。當用于數據顯示時,使用語句m_edit8 =str;將值賦予變量m_edit8,再用語句UpdateData(FALSE);將變量內容顯示。當用于數據輸入時,應用語句UpdateData(TRUE);將控件中的數據讀入賦予相關變量。ListContrl控件:ListContrl控件主要用于顯示列表

19、式的數據顯示。在本設計中,歷史信息,詳細數據,現場測試數據的顯示均使用了ListContrl控件。該控件使用前需進行風格設置。即通過以下語句獲得原有風格:DWORD dwStyle = :GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);dwStyle &= (LVS_TYPEMASK); dwStyle &= (LVS_EDITLABELS);通過以下語句置新風格:SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS

20、); 通過以下語句設置擴展風格DWORD styles =LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES; ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,styles );。進行風格設置后,先插入列頭,后才可以逐行添加數據信息。插入列頭時,應用InsertColum方法,而逐行添加信息時,第一列的信息應該用InsertItem方法,而后幾列則應用SetItem方法。ListContrl控件也可以響應雙擊事件,其函數為OnDblclkListHis(NMH

21、DR* pNMHDR, LRESULT* pResult)。并且能獲得雙擊時鼠標所在的Item號。由此來實現雙擊歷史信息記錄后,顯示對應的詳細數據。Picture控件:Picture控件是一個靜態控件,用于插入圖片等功能。而圖片的插入,有靜態插入和動態插入兩種方法。靜態插入是指,直接在Picture控件屬性中,將將“類型”選項改為Bitmap,然后再在“圖像”選項中選擇合適的位圖即可。動態插入是指,在程序中定義HBITMAP類型變量m_Brown_h1,用語句m_Brown_h1=:LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BR

22、OWN_H1)將變量m_Brown_h1與位圖資源IDB_BROWN_H1關聯起來。然后再將Picture控件與變量m_h1關聯,再通過語句m_h1.SetBitmap(m_Blue_h1);就可以將圖片動態插入。3.5 歷史數據察看功能3.5.1歷史數據察看功能介紹歷史數據察看功能主要是用于察看直接通過下位機,以文件形式存儲在USB可移動存儲設備上的歷史檢測數據紀錄的。該紀錄由歷史信息和歷史信息對應的詳細數據信息兩部分。每條歷史信息包括序號、日期、時間、整定電壓(在放電測試項目中無該紀錄)、整定電流、已放容量(只在放電測試項目中有該紀錄)五項內容;每條歷史信息對應得詳細數據信息有各自不同的幾

23、項內容。各項測試的詳細數據信息如下:放電參數測試包括序號、時、分、端電壓、放電電流五項;電壓穩定精度測試包括輸入電壓、電壓最大值、電壓最小值、穩壓精度、紋波系數五項;電流穩定精度測試包括輸入電壓最大值、電流最大值、電流最小值、穩流精度四項;限流特性測試包括輸入電壓、-10%、100%、+10%、穩流精度五項。在用戶進入該程序后,單擊U盤歷史查詢按鈕就會進入歷史數據察看狀態。按下各測試項目選擇按鈕,則進入不同的測試項目歷史紀錄查詢狀態。對應的歷史信息就立刻顯示在List中。雙擊List條目,則將對應的詳細數據信息顯示在List中,其參數也將顯示在對應位置。 圖4. 歷史數據查詢界面3.5.2歷史

24、數據察看功能實現的方法3.5.2.1盤符的確定由于每臺PC的盤符劃分不同,USB移動存儲設備連接后所在的盤符也將不同。而對文件的操作必須指定明確的文件路徑,方能正確的打開文件,讀取數據。因此,如何確定USB移動存儲設備的盤符是必須解決的問題。在本設計中,我采用了添加配置文件方式來解決該問題。即在可執行程序的根目錄下添加一可讀寫的文件,用于保存指定的盤符。當用戶在某一PC機上第一次使用本軟件時,將提示配置USB可移動存儲設備盤符。當用戶輸入該PC機上USB可移動存儲設備所在盤符,并按配置按鈕后,盤符信息將寫入配置文件,并一直保存至下一次配置前。按下推出按鈕,則向主框架發出消息,要求其重新創建歷史

25、數據察看功能對話框,在對話框的初始化中重新裝載配置文件,讀入正確的盤符。其中配置文件的裝載,采用函數GetCurrentDirectory(dirlen,sDir)獲得可執行文件的根目錄,再用函數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(輸入的參數格式錯誤,無法配置!);配置文件的裝載代碼如下: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(文件不存在,請檢查文件位置并重新配置);return;3.5.2.2歷史數據及對應的詳細數據的讀取和顯示歷史紀錄在USB移動存儲設備中以文件的形式存儲。各項歷史信息和詳細數據信息對應的文件名如下圖:檢測項目歷史信息文件名詳細數據文件名放電測試FHISTVDATA電壓穩定精度測試UHISTUDATA電流穩定精度測試IHISTIDATA效率測試EHISTEDATA限流特性測試XHISTXDATA圖6. 各項歷史信息和詳細數據信息實現歷史信息的讀取,首先從配置文件中讀入盤符,獲取到對應歷史信息的文件路徑,以二進制流形式打開對應文件,讀取歷史

28、信息條數(即第一個二進制數據)到int變量mark中。由于下位是16位操作系統,一個int型占16位,而上位機是32位操作系統,一個int型占32位,一個short int型占16位。由文件存儲格式可知,實際的標志位為16位數,因此需將讀取的二進制數強制轉換為short int 型數據。然后根據各項歷史信息數據的存儲格式,移動指針,依次讀取一條數據到數組data_tmp7中,共讀取mark次。移動指針讀取數據到數組data_tmp7中的代碼如下:fseek(fp,(2+i*7*4),SEEK_SET);/移動指針到相應位置fread(data_tmp,4,7,fp);/詳細數據的讀取是當鼠標雙

29、擊list1控件的某一條歷史信息時,將響應list1控件的雙擊事件,進入的其響應函數。在該函數中,通過switch語句判斷該條歷史信息所屬的測試項目,并由此打開相應的詳細數據文件。當雙擊list1控件的某一條歷史信息時,nItem=m_listctrl.GetNextItem(-1, LVNI_FOCUSED);將獲取該行索引值,即該條歷史信息在全部信息中排列的序號。根據此及對應測試項詳細數據存儲格式,可計算出該條歷史信息所對應得詳細數據的第一個數據的指針。然后移動指針,讀取該詳細數據信息到數組tem。放電測試項詳細數據讀取時移動指針,讀取數據到數組data_tmp7中的代碼如下:fseek(

30、fp,(2+nItem*1240),SEEK_SET);/移動指針到對應日期 的數據存儲位置fread(data,4,310,fp);/讀取數據流到tem,float *data 的指向tem的首地址歷史信息和對應的詳細數據的顯示,主要是edit控件的顯示和listContrl控件的信息插入。以放電測試為例,歷史信息數據顯示的主要代碼如下:for(i=0;imark;i+)/插入數據fseek(fp,(2+i*7*4),SEEK_SET);/移動指針到相應位置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);以放電測試為例,詳細數據顯示的主要代碼如下: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 現場測試功能隨著計算機、電子、通信技術的飛速發展,人們對

36、于車間現場設備的運行管理控制,可視化操作等綜合水平提出了新的要求。本設計中的現場測試功能就是本著“不在現場,遠離現場”的原則,將充電機的現場設備界面通過串口通信技術,與上位機界面有機的結合起來,以實現計算機的遠程監控功能。該功能的使用,可實現在非車間場地,通過簡單、人性的操作界面,對充電機測試數據的進行實時監控以及歷史數據的準確查詢,并且能在實際的生產任務中,最大限度的降低人工成本,提高生產效率,保證生產安全。3.4.1現場測試功能介紹本設計中的現場測試功能主要是指上位機和下位機間通過通信來實現上位機與下位機間的信息交換。將下位機檢測到的數據實時上傳給上位機,并在界面中顯示,保存。由此實現在非

37、車間場地,通過簡單、人性的操作界面,對充電機測試數據的進行實時監控。圖7. 現場測試功能界面(該圖需表出參數設置部分,表格部分)上圖為現場測試功能界面。該界面能實現對五個測試項目的測試數據進行實時監測。要求監測到的數據包括:放電參數測試包括序號、時、分、端電壓、放電電流五項及測試日期、測試時間、開始端電整定放電電流、已放容量等五個參數;電壓穩定精度測試包括輸入電壓、電壓最大值、電壓最小值、穩壓精度、紋波系數五項及測試日期、測試時間、直流電壓、負載電流、整定電壓、交流電壓、紋波峰值等七個參數;電流穩定精度測試包括輸入電壓最大值、電流最大值、電流最小值、穩流精度四項及測試日期、測試時間、直流電流、

38、直流電壓、整定電流、交流電壓、計算整定電流等七個參數;限流特性測試包括輸入電壓、-10%、100%、+10%、穩流精度五項及測試日期、測試時間、直流電壓值、交流電壓、限流整定值等5個參數。當用戶按下現場測試按鈕后,由單文檔試圖創建并顯示一對話框,即現場測試界面。當按下不同的現場測試項目按鈕后,通過標志位flag_Face的置位及判斷,進入到不同的現場測試狀態。如圖所示的參數設置圖位置可進行各項測試的設備信息及參數設置。按下保存設置按鈕,設置被禁用,并且設置的內容將被保存在測試結果表格中如圖所示的表格設置。保存設置后,按準備測試按鈕,則打開串口,進入通信等待狀態。一但下位機向上位機發送數據,就會

39、進入通信狀態,根據預先定義的協議,進行數據通信。若要停止接收數據,則需按下停止接收數據按鈕,即關閉串口。測試結束后,可在Edit1,Edit2中輸入相應的測試論和意見。按保存按鈕,則可以將測試結果導入word中,并保存下來。各按鈕功能及相關變量如下表:按鈕名稱按鈕功能相關變量放電測試進入放電測試功能flag_Face=1電壓穩定精度測試進入電壓穩定精度測試功能flag_Face=2電流穩定精度測試進入電流穩定精度測試功能flag_Face=3充電機效率測試進入充電機效率測試功能flag_Face=4限流特性測試進入限流特性測試功能flag_Face=5保存設置參數設置禁用,將設置內容保存在測試

40、結果表格中flag_IfParSave=1修改設置參數設置可用flag_IfParSave=0準備測試判斷設置是否保存,若已保存則打開串口無停止接收數據若串口打開,則關閉串口無保存結果根據標志位flag_nFormWord的值,將測試結果導入對應word中無返回隱藏現場測試界面,顯示信息輸入界面無圖8. 各按鈕功能及相關變量3.4.2串行通信的建立及基本參數的設定所謂“串行通信”是指外設和計算機間使用一根數據信號線(另外需要地線,可能還需要控制線),數據在一根數據信號線上一位一位地進行傳輸,每一位數據都占據一個固定的時間長度。如圖所示。而串行接口是微機應用系統常用的接口。在串行通信時,要求通信

41、雙方都采用一個標準接口,使不同的設備可以方便地連接起來進行通信。目前RS-232是PC機與通信工業中應用最廣泛的一種串行接口。它被定義為一種在低速率串行通信中增加通信距離的單端標準。RS-232采取不平衡傳輸方式,即所謂單端通信。 收、發端的數據信號是相對于信號地,如從DTE設備發出的數據在使用DB25連接器時是2腳相對7腳(信號地)的電平,DB25各引腳定義參見圖1。典型的RS-232信號在正負電平之間擺動,在發送數據時,發送端驅動器輸出正電平在+5+15V,負電平在-5-15V電平。當無數據傳輸時,線上為TTL,從開始傳送數據到結束,線上電平從TTL電平到RS-232電平再返回TTL電平。

42、接收器典型的工作電平在+3+12V與-3-12V。由于發送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s。RS-232是為點對點(即只用一對收、發設備)通信而設計的,其驅動器負載為37k。所以RS-232適合本地設備之間的通信。圖9. RS232DB25連接器引腳規定RS232RS422R485工作方式單端差分差分節點數1收、1發1發10收1發32收最大傳輸電纜長度50英尺400英尺400英尺最大傳輸速率20Kb/S10Mb/s10Mb/s最大驅動輸出電壓+/-25V-0.25V+6V-7V+12V驅動器輸

43、出信號電平(負載最小值)負載+/-5V+/-15V+/-2.0V+/-1.5V驅動器輸出信號電平(空載最大值)空載+/-25V+/-6V+/-6V驅動器負載阻抗()3K7K10054擺率(最大值)30V/sN/AN/A接收器輸入電壓范圍+/-15V-10V+10V-7V+12V接收器輸入門限+/-3V+/-200mV+/-200mV接收器輸入電阻()3K7K4K(最小)12K驅動器共模電壓-3V+3V-1V+3V接收器共模電壓-7V+7V-7V+12V圖10. RS-232電氣參數表因此考慮到適用,經濟,兼容等原因,在本設計中采用RS-232串行通信標準是較好的選擇。3.4.3使用MSCcom

44、m控件進行串口編程Windows與以往DOS下串行通信程序不同,Windows不提倡應用程序直接控制硬件,而是通過Windows操作系統提供的設備驅動程序來進行數據傳遞。因此串行口在Win 32中是作為文件來進行處理的,而不是直接對端口進行操作。對于串行通信,Win 32 提供了相應的文件I/O函數與通信函數,通過了解這些函數的使用,可以編制出符合不同需要的通信程序。 MSComm(Microsoft Communications Control)控件是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件,通過串行端口傳輸和接收數據,為應用程序提供串行通信功能。選用

45、的事件驅動方式處理通信問題。事件驅動方式是指,當串口發生事件或者錯誤的時候,會產生一個OnComm的事件,通過對這個事件的捕捉,進行相應的處理來完成串口通信任務。而在事件驅動方式中,MSComm有一個重要屬性-CommEvent屬性。當串口發生事件或者錯誤的時候,MSComm就為它賦不同的代碼,同時,產生一個OnComm事件。這時候,我們就可以針對不同的代碼,進行相應的處理。這種方法的優點是程序響應及時,可靠性高。因此,在本設計中選用了MSComm控件來實現串行通信功能。 首先,在對話框中創建通信控件,若Control工具欄中缺少該控件,可通過菜單Project - Add to Projec

46、t - Components and Control插入即可,再將該控件從工具箱中拉到對話框中。然后通過設置和監視MSComm控件的屬性和事件來完成任務。打開所需串口后,使用OnComm的事件來捕捉事件,使用m_Com.GetCommEvent()函數獲得CommEvent 屬性值。并由此來檢查其是否正確接收數據(正確接收數據時,m_Com.GetCommEvent()函數獲得的值為2),否則作拋棄處理。由于該通信的目的是建立上位機和下位機間的數據交換紐帶,使得上位機能夠實時的顯示并處理下位機檢測到的數據。為了保證數據處理時間,進入OnOnCommMscomm1()串口通信中斷函數后,馬上使用

47、使用m_Com.SetRThreshold(0);語句將緩沖區引發接收數據的字符數設置為0,即相當于不接收緩沖區的任何數據。以確保已接收的數據由足夠的處理時間。當已接收的數據處理完畢,則使用m_Com.SetRThreshold(1);語句,繼續接收數據。如此往復。使用MSComm控件實現串口通信的主要代碼如下:void CNTestDlg:OnOnCommMscomm1() /串口通信中斷處理/ TODO: Add your control notification handler code here/原理: 進入中斷后,關閉中斷,逐個處理緩存中的數據,結束后再開啟中斷,緩存中若有新的數據,

48、則進入中斷。往復循環。m_Com.SetRThreshold(0);/關閉串口中斷m_list_FPar.SetFont(&m_Font);/設置字體VARIANT vResponse;char *tem_data;char str;int nEvent,DataCount;nEvent=m_Com.GetCommEvent();/nEvent是一個狀態值switch(nEvent)case 2:/數據正確接收時,nEvent總為2DataCount=m_Com.GetInBufferCount();/獲取緩存中的數據大小vResponse=m_Com.GetInput();/讀緩存區tem_

49、data=(char*)vResponse.parray-pvData;/將讀入的數據放入數組for(int i=0;iDataCount;i+)str=*(tem_data+i);operateData(str);/逐個對數據進行處理m_Com.SetRThreshold(1);void CNTestDlg:PortOpen()/初始化串口/在開始按鈕按下后才初始化串口if(m_Com.GetPortOpen()m_Com.SetPortOpen(FALSE);m_Com.SetCommPort(Com-48); /選擇串口號 Com 讀入的數據為字符型的數字,48對應字符0if( !m_Com.GetPortOpen()m_Com.SetPortOpen(TRUE);/打開串口elseAfxMessageBox(cannot open serial port);m_Com.SetSettings(9600,E,8,2);/波特率9600,無校驗,8個數據位,1個停止位m_Com.SetInputMode(1);/設置串口接收的方式:二進制方式m_Com.SetRThreshold(1); /參數1表

溫馨提示

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

評論

0/150

提交評論