基于MSComm控件課程設計_第1頁
基于MSComm控件課程設計_第2頁
基于MSComm控件課程設計_第3頁
基于MSComm控件課程設計_第4頁
基于MSComm控件課程設計_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄1 引 言 11.1 問題的提出 11.2 國內外研究的現(xiàn)狀 11.3任務與分析 12 程序的主要功能 22.1發(fā)送功能 22.2退出程序 22.3清除功能 23 程序運行平臺 33.1建立工程 33.2資源創(chuàng)建 34 總體設計 55 程序類的說明 66 程序流程及代碼實現(xiàn) 66.1 發(fā)送函數(shù) 76.2 接收函數(shù) 86.3 退出函數(shù) 86.4 清空函數(shù) 96.5 其他函數(shù) 97 系統(tǒng)測試 118 結論 14參考文獻 15圖1-1 智能儀器示意圖引 言 目前儀器儀表的智能化程度越來越高,大量的智能儀器都配備了RS-232通信接口,并提供了相應的通信協(xié)議,能夠將測試、采集的數(shù)據(jù)傳輸給計算機等

2、設備,以便進行大量數(shù)據(jù)的儲存、處理、查詢和分析。圖1-1所示為某型號智能儀器示意圖。1.1 問題的提出 在現(xiàn)代化的測控系統(tǒng)中,串口通信有著十分重要的作用,然而,不同測控系統(tǒng)對串口通信的需求也不盡相同,因此會用高級語言設計串口通信的控制程序也變得很重要。與測控相關的專業(yè)就開設了高級語言在測控中的應用課程設計?;诖谕ㄐ诺母呒壵Z言的控制程序的設計就是本次課程設計的題目。1.2 國內外研究的現(xiàn)狀 目前,計算機的串行通信應用十分廣泛,串行接口已成為計算機的必需部件和接口之一。由于其具有連接簡單、使用靈活方便、數(shù)據(jù)傳遞可靠等優(yōu)點,在工業(yè)監(jiān)控、數(shù)據(jù)采集和實時控制系統(tǒng)中得到了廣泛應用。當今,實現(xiàn)串口通信的

3、方法以及第三方控件有很多,例如PComm控件,Windows API函數(shù)等等。但是這幾種方法都過于復雜,對程序員要求較高,而且可靠性并不是很好。利用Microsoft推出的MSComm控件,使得串口通信的實現(xiàn)更為簡單、可靠。隨著當今信息技術的快速發(fā)展,通信已成為信息技術中的關鍵問題。尤其在控制領域,以何種方式實現(xiàn)計算機與外圍設備間既簡單又可靠的通信,就顯得特別重要。由于串行通信具有實現(xiàn)簡單、使用靈活方便、數(shù)據(jù)傳輸可靠等優(yōu)點,因而廣泛應用于工業(yè)控制系統(tǒng)中,是計算機與外部設備進行數(shù)據(jù)通信時經常使用的方式之一。VC+是新一代面向對象的可視化開發(fā)工具,提供了良好的界面設計能力,在PC機的串口通信方面有

4、很強的功能。它具有功能強大、簡便易用和代碼執(zhí)行速度快等特點,在通信軟件的開發(fā)中成為越來越多開發(fā)人員的首選工具。無論在工業(yè)控制中PC機和單片機之間的通信,還是在2臺Pc機之間的串口通信,都具有相同的原理。只要掌握其中的通信本質,就能靈活地實現(xiàn)串口通信,串口控制。1.3任務與分析(1. 任務:本課題是要求設計一個基于VC+平臺下串口通信的控制程序,該程序必須有著良好的用戶界面、能夠設置端口的參數(shù)、能在同一臺計算機上進行調試和可進行單個數(shù)據(jù)或成批數(shù)據(jù)的傳送。主要的目的是通過該課程設計進一步掌握計算機串口通信和高級語言的相關知識,同時,深入學習串口通信知識,掌握實現(xiàn)串口通信編程技巧。(2. 分析:利用

5、Visual C+開發(fā)串口通信程序既可以使用MSComm控件也可以調用Windows API函數(shù)。不過,只要MSComm可以被選用,它幾乎總是這類設計的優(yōu)先選擇。當然,本次設計所涉及到了功能要求,選用MSComm控件是能完成的,所以,該設計也將選用MSComm控件方式來完成。2 程序的主要功能2.1發(fā)送功能發(fā)送字符串時,在發(fā)送框里輸入字符串,按“發(fā)送”按鈕,開始把發(fā)送文本框內的字符發(fā)送到接受文本框內,發(fā)送文件時按“選擇發(fā)送文件”按鈕,選中所要發(fā)送的文件,點擊“發(fā)送”按鈕,則可在接受文本框里顯示所發(fā)送的文件內容。2.2退出程序按“退出”按鈕,程序窗口關閉,結束程序運行。2.3清除功能按接受字符區(qū)

6、的“清空”按鈕,則清空接受文本框內的字符。按發(fā)送字符區(qū)的“清空”按鈕,將發(fā)送文本框內容清空。3 程序運行平臺3.1建立工程(1. 啟動Visual C+6.0,單擊“文件”菜單中的“新建”命令,顯示新建對話框,選擇“MFC AppWizard(exe”工程類型,輸入需要創(chuàng)建工程的名稱“l(fā)zhh”和目錄。(2. 按照彈出的應用向導對話框依次填寫,第1步選擇基于對話框,其他均采用默認。(3. 單擊“完成”按鈕,將會彈出一個關于新工程信息的對話框。單擊“確定”按鈕,這樣MFC向導便自動生成了一個名稱為“l(fā)zhh”的工程。3.2資源創(chuàng)建(1應用程序中添加了一個對話框資源IDD_lzhh_DIALOG,

7、打開屬性對話框,將對話框標題改為“應用程序中添加了一個對話框資源IDD_lzhh_DIALOG”。4 總體設計要滿足這個設計所需要的界面是兩個,通過主界面上的相關控件可以彈出另一界面。當然,另一界面也是單獨的一個類,其只是有些控件有變量沒有功能函數(shù),所以,就沒有給出它框架圖。然而,MScomm控件的相關功能函數(shù)是系統(tǒng)默認的,這里也沒必要給出。如此,就給出了系統(tǒng)總體框架圖,如圖4.1。圖4-1 系統(tǒng)總體框架圖5 程序類的說明本程序涉及到了四個類,其分別是ClzhhApp、CLzhhDlg、CMSComm和CsettingDlg。除CLzhhDlg需要添加一些程序外,其余的都以VC+自動生成的程序

8、為準。CLzhhDlg添加的代碼如下:class CLzhhDlg : public CDialog/ Constructionpublic:CLzhhDlg(CWnd* pParent = NULL; / standard constructorBOOL bRec; /接收按鍵標志BOOL bSend; /自動發(fā)送模式發(fā)送鍵標志BOOL Check1; /自動發(fā)送復選框選中標志BOOL Check2; /十六進制復選框選中標志CString m_strSetting;CString strSetting;int m_nTime;int m_nPort;void OpenPort(; /串口開

9、起函數(shù)/ Dialog Data/自動生成部分6 程序流程及代碼實現(xiàn)圖6-1 設計程序流程圖根據(jù)第4小節(jié)的系統(tǒng)總體框架圖和第5小節(jié)中的給類加的數(shù)據(jù)成員與函數(shù)成員設計了程序流程圖,如圖6-1。在程序流程圖中,雖然每個按鍵控件和復選框都是能單獨動作,但是其每次的動作都可能改變標志,從而影響到其它控件動作結果,甚至改變到程序的運行,這就完成了控件關系。在lzhhDlg.cpp文件中,設置初始化函數(shù)OnInitDialog(,添加代碼實現(xiàn)對話框各控件的初始化工作,如下:BOOL CLzhhDlg:OnInitDialog( /VC自動生成的代碼/ TODO: Add extra initializat

10、ion herebSend=FALSE;bRec=FALSE;Check1=FALSE;Check2=FALSE;m_nPort=1;m_nTime=1000;m_strSetting=_T("9600,n,8,1"OpenPort(;return TRUE; / return TRUE unless you set the focus to a control6.1 發(fā)送函數(shù)實現(xiàn)接收按鈕相應的響應函數(shù)OnSend( 。代碼如下:void CLzhhDlg:OnSend( / TODO: Add your control notification handler code

11、hereif(Check1 /自動發(fā)送模式 bSend=!bSend; if(bSendSetTimer(1,m_nTime,NULL;m_ctrlSend.SetWindowText(_T("停止發(fā)送" elseKillTimer(1;m_ctrlSend.SetWindowText(_T("自動發(fā)送" else /手動發(fā)送模式 UpdateData(TRUE; m_COMM.SetOutput(COleVariant(m_Send; m_ctrlSend.SetWindowText(_T("手動發(fā)送"6.2 接收函數(shù)實現(xiàn)接發(fā)送鈕相

12、應的響應函數(shù)OnRec( 。代碼如下:void CLzhhDlg:OnRec( / TODO: Add your control notification handler code herem_COMM.GetInput(; bRec=!bRec;if(bRecm_ctrlRec.SetWindowText(_T("停止接收"elsem_ctrlRec.SetWindowText(_T("開始接收"6.3 退出函數(shù)實現(xiàn)退出按鈕相應的響應函數(shù)OnEnd( 。代碼如下:void CLzhhDlg:OnEnd( / TODO: Add your control

13、 notification handler code hereCDialog:OnOK(;6.4 清空函數(shù)實現(xiàn)清空按鈕相應的響應函數(shù)OnClsR(和OnClsS(。代碼如下:void CLzhhDlg:OnClsR( / TODO: Add your control notification handler code herebRec=0;m_ctrlRec.SetWindowText(_T("開始接收"m_Rec=_T(""SetDlgItemText(IDC_REC,m_Rec;void CLzhhDlg:OnClsS( / TODO: Add yo

14、ur control notification handler code herebSend=0;m_Send=_T(""SetDlgItemText(IDC_SEND,m_Send;if(Check1 /自動模式m_ctrlSend.SetWindowText(_T("自動發(fā)送"6.5 其他函數(shù)(1. 參數(shù)設置按鈕的響應函數(shù)OnSetting(。代碼如下:void CLzhhDlg:OnSetting( / TODO: Add your control notification handler code here CSettingDlg setDlg;

15、setDlg.m_nPort=m_nPort;setDlg.m_nTime=m_nTime; setDlg.m_strSetting=m_strSetting;if(setDlg.DoModal(=IDOKm_nPort=setDlg.m_nPort;m_nTime=setDlg.m_nTime;m_strSetting=setDlg.m_strSetting;OpenPort(;if(Check1&&bSendSetTimer(1,m_nTime,NULL;(2. 串口控件響應函數(shù)OnOnCommMscomm(。代碼如下:void CLzhhDlg:OnOnCommMscom

16、m( / TODO: Add your control notification handler code hereVARIANT variant_inp;COleSafeArray safearray_inp;LONG len,k;BYTE rxdata2048; /設置BYTE數(shù)組 An 8-bit integerthat is not signed.CString strtemp;CString strtemp_R;if(bRecif(m_COMM.GetCommEvent(=2 /事件值為2表示接收緩沖區(qū)內有字符 variant_inp=m_COMM.GetInput(; /讀緩沖區(qū)s

17、afearray_inp=variant_inp; /VARIANT型變量轉換為ColeSafeArray型變量len=safearray_inp.GetOneDimSize(; /得到有效數(shù)據(jù)長for(k=0;k safearray_inp.GetElement(&k,rxdata+k;/轉換為BYTE型數(shù)組for(k=0;k 將數(shù)組轉換為 Cstring 型變量 BYTE bt=*(char*(rxdata+k; /字符型if(!Check2strtemp.Format("%c",bt; /將字符送入臨時變量strtemp存放if(Check2 /顯示十六進制s

18、trtemp.Format("%02X ",bt; /將字符送入臨時變量strtemp存放m_Rec+=strtemp; /加入接收編輯框對應字符串 else m_Rec=_T("(沒有字符"SetDlgItemText(IDC_REC,m_Rec; /更新接收編輯框對應字符串(3. 周期響應函數(shù)OnTimer(。代碼如下:void CLzhhDlg:OnTimer(UINT nIDEvent / TODO: Add your message handler code here and/or call defaultUpdateData(TRUE; /讀

19、取編輯框內容m_COMM.SetOutput(COleVariant(m_Send;CDialog:OnTimer(nIDEvent;(4. 自動發(fā)送和十六進制復選框動作響應函數(shù)分別是OnCheck1(和OnCheck2(。代碼如下:void CLzhhDlg:OnCheck1( / TODO: Add your control notification handler code hereCheck1=!Check1; /自動發(fā)送標志取反if(Check1 /允許自動發(fā)送 bSend=0;m_ctrlSend.SetWindowText(_T("自動發(fā)送" if(!Chec

20、k1 /手動發(fā)送KillTimer(1;m_ctrlSend.SetWindowText(_T("手動發(fā)送"void CLzhhDlg:OnCheck2( / TODO: Add your control notification handler code hereCheck2=!Check2; /十六進制標志取反(5. 在lzhhDlg.h文件里自定義串口打開函數(shù)OpenPort(。代碼如下:void CLzhhDlg:OpenPort(/打開串口if(m_COMM.GetPortOpen(m_COMM.SetPortOpen(FALSE;m_COMM.SetCommPo

21、rt(m_nPort;if(!m_COMM.GetPortOpen(m_COMM.SetPortOpen(TRUE;elseAfxMessageBox("cannaot open serial port"m_COMM.SetSettings(m_strSetting;m_COMM.SetRThreshold(1;m_COMM.SetInputMode(1; m_COMM.SetInputLen(0;m_COMM.GetInput(;7 系統(tǒng)測試程序的打開方法是:首先進入VC+6.0,打開工程lzhh.dsw,然后進入源程序,接著選擇Build下的Execute lzhh.e

22、xe即可,也可以不打開工程,直接雙擊lzhh文件夾下的debug或release子文件夾下的lzhh.exe文件即可運行程序。圖7-1 參數(shù)設置第一步,打開兩個運行程序,設置端口分別為 3 和 4 其余參數(shù)均為默認,如圖 7-1 。 第二步,按下兩個界面的“開始接收”按鈕。圖7-2 發(fā)送數(shù)據(jù)的結果第三步,分別在兩個界面的“待發(fā)字符”的編輯框內寫入一些任意字符,左邊界面選擇自動發(fā)送模式,右邊界面選擇手動發(fā)送模式,單擊右邊界面的“手動發(fā)送”按鈕,左邊界面的“接收字符”的只讀編輯框內出現(xiàn)左邊所寫入是字符。同樣,按下左邊界面的“自動發(fā)送”按鈕,右邊界面的“接收字符”的只讀編輯框內出現(xiàn)左邊所寫入是字符,

23、而且,每隔 1000ms 接收到相同字符,如圖 7-2 和 7-3 。 圖7-4 接收十六進制的結果圖7-3 接收數(shù)據(jù)的結果第四步,保持端口不變,修改串口參數(shù),且為相同可用參數(shù)。在第三步的方法仍然可以得到相同的結果。 第五步,按右邊界面的“退出程序”窗口關閉。打開串口調試小助手,設置串口為“COM4”其它參數(shù)相同,串口調試小助手自動發(fā)送十六進制數(shù),設計程序界面接收十六進制數(shù),如圖7-4。第六步,按“清空重發(fā)”和“清空重接”本別清空發(fā)送區(qū)和接收區(qū)的字符。按“退出程序”窗口關閉。通過以上測試,本系統(tǒng)實現(xiàn)了數(shù)據(jù)的接收與發(fā)送功能,也滿足參數(shù)能調和同一臺PC機上調試的要求,在新增功能的調試也獲得了通過,

24、總體上完成了設計任務。8 結論本次課程設計是Visual C+ 6.0平臺下,利用MSComm控件編寫的串口通信程序。這次設計的程序完能實現(xiàn)對字符的發(fā)送與接收,特別是還能接收十六進制數(shù),當然,該程序還能選擇特定的串口和通信參數(shù)進行串口通信,也具有一般程序的基本功能那就能刪除相應文本框內字符和實現(xiàn)程序的關閉。通過系統(tǒng)測試,有如下現(xiàn)象:本程序在自動發(fā)送字符時,如果確認改變參數(shù),那么它將會立即按照所確定的參數(shù)進行字符的自動發(fā)送,這能提高其自動發(fā)送的及時性;在使用清除按鍵時,能立即解除自動發(fā)送(或接收)的循環(huán)流程。當然,這些能實現(xiàn)這些功能,也是相應控鍵的響應函數(shù)內編寫對相應模式的標志進行值的改變或賦值程

溫馨提示

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

評論

0/150

提交評論