串口通信C++課程設(shè)計(共17頁)_第1頁
串口通信C++課程設(shè)計(共17頁)_第2頁
串口通信C++課程設(shè)計(共17頁)_第3頁
串口通信C++課程設(shè)計(共17頁)_第4頁
串口通信C++課程設(shè)計(共17頁)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上目 錄摘 要隨著計算機(jī)的普及,計算機(jī)網(wǎng)絡(luò)和多微機(jī)系統(tǒng)的廣泛應(yīng)用,盡管當(dāng)今USB通信技術(shù)和以太網(wǎng)技術(shù)快速發(fā)展,然而串口通信技術(shù)始終以其連接簡便,價格低廉,穩(wěn)定可靠等優(yōu)點,在計算機(jī)通信領(lǐng)域占有一席之地。MSCOmm控件是微軟公司為了用戶使用方便而提供的一種便捷的控制串口編程的解決方案,本文主要介紹了如何利用VC + + 2008 MSComm 控件的串口通信方法,對程序的類進(jìn)行了說明,分析了本程序各個模塊怎樣實現(xiàn)起作用。此次設(shè)計以MFC 來設(shè)計界面編制程序,同時利用MSComm 控件通過串口發(fā)送和接收數(shù)據(jù),實現(xiàn)了串口通信。該串口通信控制程序具有通信參數(shù)設(shè)置、通信參數(shù)顯示、

2、打開和關(guān)閉串口、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)、清空發(fā)送區(qū)和接收區(qū)數(shù)據(jù)的功能。關(guān)鍵詞:串口通信visual c+ 6.0 MSComm控件專心-專注-專業(yè)1引言1.1問題的提出串行通信(Serial Communication )在現(xiàn)代工業(yè)控制系統(tǒng)中一直有著及其重要的地位,作為一種基本而又靈活方便的通信方式,它被廣泛應(yīng)用于PC與PC或者PC與PLC之間的數(shù)據(jù)交換以及其他工業(yè)控制與自動控制中,它不僅沒有因為時代的進(jìn)步而遭淘汰,反而在規(guī)格上越來越完善,應(yīng)用也越來越廣泛。VC+是新一代面向?qū)ο蟮目梢暬_發(fā)工具,提供了良好的界面設(shè)計能力,在PC機(jī)的串口通信方面有很強(qiáng)的功能。對于從事機(jī)械行業(yè)的人來說,熟悉基于RS2

3、32串口通信的高級語言編程方法顯得十分重要。1.2國內(nèi)外研究的現(xiàn)狀目前,計算機(jī)的串行通信應(yīng)用十分廣泛,串行接口已成為計算機(jī)的必需部件和接口之一。由于其具有連接簡單、使用靈活方便、數(shù)據(jù)傳遞可靠等優(yōu)點,在工業(yè)監(jiān)控、數(shù)據(jù)采集和實時控制系統(tǒng)中得到了廣泛應(yīng)用。當(dāng)今,實現(xiàn)串口通信的方法以及第三方控件有很多,例如PComm控件,Windows API函數(shù)等等。但是這幾種方法都過于復(fù)雜,對程序員要求較高,而且可靠性并不是很好。利用Microsoft推出的MSComm控件,使得串口通信的實現(xiàn)更為簡單、可靠。隨著當(dāng)今信息技術(shù)的快速發(fā)展,通信已成為信息技術(shù)中的關(guān)鍵問題。尤其在控制領(lǐng)域,以何種方式實現(xiàn)計算機(jī)與外圍設(shè)備

4、間既簡單又可靠的通信,就顯得特別重要。由于串行通信具有實現(xiàn)簡單、使用靈活方便、數(shù)據(jù)傳輸可靠等優(yōu)點,因而廣泛應(yīng)用于工業(yè)控制系統(tǒng)中,是計算機(jī)與外部設(shè)備進(jìn)行數(shù)據(jù)通信時經(jīng)常使用的方式之一。VC+是新一代面向?qū)ο蟮目梢暬_發(fā)工具,提供了良好的界面設(shè)計能力,在PC機(jī)的串口通信方面有很強(qiáng)的功能。它具有功能強(qiáng)大、簡便易用和代碼執(zhí)行速度快等特點,在通信軟件的開發(fā)中成為越來越多開發(fā)人員的首選工具。無論在工業(yè)控制中PC機(jī)和單片機(jī)之間的通信,還是在2臺Pc機(jī)之間的串口通信,都具有相同的原理。只要掌握其中的通信本質(zhì),就能靈活地實現(xiàn)串口通信,串口控制。1.5任務(wù)與分析1.5.1主要任務(wù)制定串口通信控制程序的總體構(gòu)架;熟悉

5、VC平臺下的高級語言編程方法;熟悉基于RS232串口通信的高級語言編程方法;在同一臺PC機(jī)上調(diào)試通過所編寫的程序;1.5.2分析目前Win32 中基于VC + + 6. 0 的常用串口通信程序一般可以用兩種方法實現(xiàn): 利用MSComm ActiveX 串行通信控件; 使用Win2dows API 通信函數(shù)。雖然在Windows下Win32API提供了使用文件操作方式的函數(shù)進(jìn)行串口操作的方法,但是在編程實現(xiàn)上還是比較復(fù)雜。Windows平臺先進(jìn)的ActiveX技術(shù)使得對串口編程不再需要處理煩瑣的細(xì)節(jié)。利用已有的AxtiveX控件,只需要編寫少量的代碼,就可以輕松高效地完成任務(wù)。因此程序員不需要花

6、時間去了解復(fù)雜的API函數(shù),只需要利用MSComm控件就可實現(xiàn)串口編程。2程序的主要功能2.1參數(shù)設(shè)置功能設(shè)置和修改串口通信參數(shù),包括端口,波特率,奇偶校驗位,數(shù)據(jù)位,停止位。2.2參數(shù)顯示功能顯示當(dāng)前串口通信參數(shù),包括端口號,波特率,奇偶校驗位,數(shù)據(jù)位,停止位。2.3打開串口功能打開串口,實現(xiàn)通信。2.4關(guān)閉串口功能關(guān)閉串口,停止通信。2.5接收數(shù)據(jù)功能能夠進(jìn)行單個或多個數(shù)據(jù)的接收和顯示。2.6發(fā)送數(shù)據(jù)功能能夠進(jìn)行單個或多個數(shù)據(jù)的發(fā)送。2.7清空數(shù)據(jù)接收區(qū)和發(fā)生區(qū)功能刪除接收區(qū)和發(fā)生區(qū)所有數(shù)據(jù)。3程序運(yùn)行平臺Visual c+ 6.0具體操作如下:(1)新建MSComm項目,選擇MFC應(yīng)用程

7、序,應(yīng)用程序類型選擇“基于對話框”,生成的類中選擇“CMSCommDlg”;(2)為MSComm項目添加新建一個Dialog設(shè)置對話框;(3)加載MSComm控件,添加相應(yīng)的源程序,加載必要的控件;(4)編寫程序代碼,再編譯,鏈接,調(diào)試,執(zhí)行等,生成應(yīng)用程序。主 函 數(shù)參數(shù)設(shè)置和顯示打開和關(guān)閉串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)清空接收區(qū)清空發(fā)送區(qū)4總體設(shè)計圖4.1系統(tǒng)總體框架圖5程序變量定義說明控件名程序中控件名變量名變量類型串口選擇組合框IDC_COMBO1m_tdCComboBox波特率選擇組合框IDC_COMBO2m_btlCComboBox校檢位組合框IDC_COMBO3m_xjwCComboBox

8、數(shù)據(jù)位組合框IDC_COMBO4m_sjwCComboBox停止位組合框IDC_COMBO5m_tzwCComboBox接收編輯框IDC_EBIT1m_str_recvCstring發(fā)送編輯框IDC_EBIT2m_str_sendCstring復(fù)選框IDC_CHECK1 / /COM控件IDC_MSCOMM1m_msommCMSComm6模塊分析6.1初始化模塊代碼如下:BOOL CMyDlg:OnInitDialog() CDialog:OnInitDialog(); m_msomm.SetInBufferSize(1024); /設(shè)置接收緩沖區(qū)的大小 m_msomm.SetOutBuffe

9、rSize(512); /設(shè)置發(fā)送緩沖區(qū)的大小if(m_msomm.GetPortOpen() /判斷串口是否打開 m_msomm.SetPortOpen(FALSE); /串口如果打開就關(guān)閉它 m_msomm.SetCommPort(2); /設(shè)置通道為COM2if(!m_msomm.GetPortOpen() /判斷串口是否打開 m_msomm.SetPortOpen(TRUE); /如果沒有打開就重新開啟 else AfxMessageBox("serial port open error"); m_msomm.SetInputMode(1); /設(shè)置以二進(jìn)制方式接收

10、 m_msomm.SetSettings("9600,n,8,1"); /設(shè)置波特率9600,無校檢位,8位數(shù)據(jù)位,1位停止位 m_msomm.SetRThreshold(1); /串口接收緩沖區(qū)有多于或等于一個字符是產(chǎn)生接收數(shù)據(jù)的OnOnComm m_msomm.SetInputLen(0); /設(shè)置當(dāng)前接收區(qū)長度為零 m_msomm.GetInput(); /預(yù)讀取緩沖區(qū)以清空殘留數(shù)據(jù) /組合框的初始化 m_td.SetCurSel(1); m_btl.SetCurSel(5); m_xjw.SetCurSel(2); m_sjw.SetCurSel(0); m_tzw

11、.SetCurSel(0);/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadStri

12、ng(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);6.2參數(shù)設(shè)置和顯示模塊選擇組合框中相應(yīng)的設(shè)置內(nèi)容即可設(shè)置串口的通信參數(shù),如圖7.1。該命令的代碼如下:void CMyDlg:OnSelchangeCombo1() / TODO: Add your control notification handler code here/改變串口通道if(m_msom

13、m.GetPortOpen()m_msomm.SetPortOpen(FALSE);m_msomm.SetCommPort(m_td.GetCurSel()+1); m_msomm.SetPortOpen(TRUE);void CMyDlg:OnSelchangeCombo2() / TODO: Add your control notification handler code here/改變波特率 int i=m_btl.GetCurSel();switch(i)case 0:m_msomm.SetSettings("300,");break;case 1:m_msom

14、m.SetSettings("600,");break;case 2:m_msomm.SetSettings("1200,");break;case 3:m_msomm.SetSettings("2400,");break;case 4:m_msomm.SetSettings("4800,");break;case 5:m_msomm.SetSettings("9600,");break;case 6:m_msomm.SetSettings("19200,");break;c

15、ase 7:m_msomm.SetSettings("38400,");break;void CMyDlg:OnSelchangeCombo4() / TODO: Add your control notification handler code here/改變數(shù)據(jù)位 int i=m_sjw.GetCurSel();switch(i)case 0:m_msomm.SetSettings(",8,");break;case 1:m_msomm.SetSettings(",7,");break;case 2:m_msomm.SetSet

16、tings(",6,");break;void CMyDlg:OnSelchangeCombo5() / TODO: Add your control notification handler code here/改變停止位 int i=m_tzw.GetCurSel();switch(i)case 0:m_msomm.SetSettings(",1");break;case 1:m_msomm.SetSettings(",2");break;void CMyDlg:OnSelchangeCombo3() / TODO: Add yo

17、ur control notification handler code here/改變校檢位 int i=m_xjw.GetCurSel();switch(i)case 0:m_msomm.SetSettings(",N,");break;case 1:m_msomm.SetSettings(",O,");break;case 2:m_msomm.SetSettings(",E,");break;6.3發(fā)送數(shù)據(jù)模塊單擊主界面中的【數(shù)據(jù)發(fā)送】按鈕,將把發(fā)送區(qū)的內(nèi)容發(fā)送到串口調(diào)試助手的接收區(qū),如圖7.3,該命令的代碼如下:void CM

18、yDlg:OnOsend() / TODO: Add your control notification handler code here/發(fā)送數(shù)據(jù)UpdateData(1);m_msomm.SetOutput(COleVariant(m_str_send);6.4數(shù)據(jù)接收模塊如圖7.2,程序代碼如下:void CMyDlg:OnOnCommMscomm1() / TODO: Add your control notification handler code here/定義參數(shù)COleSafeArray x; VARIANT y;BYTE rxdata1024;CString a;LONG

19、 len, k;/判斷是否接受數(shù)據(jù),進(jìn)行類型轉(zhuǎn)換if(m_msomm.GetCommEvent()=2)y=m_msomm.GetInput(); /讀取接收緩沖區(qū)的內(nèi)容x=y;len=x.GetOneDimSize();for(k=0;k<len;k+)x.GetElement(&k,rxdata+k);for(k=0;k<len;k+) BYTE bt=*(char*)(rxdata+k);if(!m_16.GetCheck()a.Format("%c",bt); m_str_recv+=a; elsea.Format("%02X"

20、;,bt); /十六進(jìn)制轉(zhuǎn)換m_str_recv+=a+" "UpdateData(0); /顯示數(shù)據(jù)6.5清空接數(shù)據(jù)模塊單擊主界面中的【清空】按鈕,將清空所有數(shù)據(jù),如圖7.4,該命令的代碼如下:void CMyDlg:OnButton4() / TODO: Add your control notification handler code here/清空接收,發(fā)送框的內(nèi)容m_str_send=""m_str_recv=""UpdateData(0);6.6關(guān)閉串口模塊單擊主界面中的【關(guān)閉串口】按鈕,將關(guān)閉串口,該命令的代碼如下:v

21、oid CMyDlg:OnButton1() / TODO: Add your control notification handler code here/串口的開關(guān)int x=m_msomm.GetPortOpen(); m_msomm.SetPortOpen(!x);7系統(tǒng)測試7.1測試首先,直接雙擊MSComm文件夾下的debug子文件夾下的MSComm.exe運(yùn)行文件;其次,按以下步驟進(jìn)行測試:(1)參數(shù)設(shè)置:圖7.1 參數(shù)設(shè)置 (2)接收數(shù)據(jù):圖7.2(a)串口調(diào)試助手發(fā)送數(shù)據(jù)圖7.2(b)串口通信工具接收數(shù)據(jù)圖7.3(a)串口助手發(fā)送十六進(jìn)制數(shù)據(jù)圖7.3(b)串口工具接收并顯示十六進(jìn)制數(shù)據(jù)(3)發(fā)送數(shù)據(jù)圖7.3(c)串口工具發(fā)送數(shù)據(jù)圖7

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論