課程設(shè)計基于串口通信的高級語言控制程序的設(shè)計_第1頁
課程設(shè)計基于串口通信的高級語言控制程序的設(shè)計_第2頁
課程設(shè)計基于串口通信的高級語言控制程序的設(shè)計_第3頁
課程設(shè)計基于串口通信的高級語言控制程序的設(shè)計_第4頁
課程設(shè)計基于串口通信的高級語言控制程序的設(shè)計_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄 1 1 引言引言.1 1.1 問題的提出.1 1.2 國內(nèi)外研究的現(xiàn)狀.1 1.5 任務(wù)與分析.2 1.5.1 主要任務(wù).2 1.5.2 分析.2 2 程序的主要功能程序的主要功能.2 2.1 參數(shù)設(shè)置功能.2 2.2 參數(shù)顯示功能.2 2.3 打開串口功能.2 2.4 關(guān)閉串口功能.2 2.5 接收數(shù)據(jù)功能.3 2.6 發(fā)送數(shù)據(jù)功能.3 2.7 清空數(shù)據(jù)接收區(qū)和發(fā)送區(qū)功能.3 3 程序運行平臺程序運行平臺.3 4 總體設(shè)計總體設(shè)計.4 5 5 程序變量定義說明程序變量定義說明.4 6 6 模塊分析模塊分析.5 6.1 初始化模塊.5 6.2 參數(shù)設(shè)置和顯示模塊.6 6.3 發(fā)送數(shù)據(jù)模

2、塊.8 6.4 數(shù)據(jù)接收模塊.9 6.5 清空接數(shù)據(jù)模塊.10 6.6 關(guān)閉串口模塊.10 7 7 系統(tǒng)測試系統(tǒng)測試.11 7.1 測試.11 7.2 總結(jié).16 8 8 結(jié)論結(jié)論.16 參考文獻參考文獻.16 摘摘 要要 隨著計算機的普及,計算機網(wǎng)絡(luò)和多微機系統(tǒng)的廣泛應(yīng)用,盡管當今 usb 通信技術(shù)和以太網(wǎng)技術(shù)快速發(fā)展,然而串口通信技術(shù)始終以其連接簡便, 價格低廉,穩(wěn)定可靠等優(yōu)點,在計算機通信領(lǐng)域占有一席之地。mscomm 控 件是微軟公司為了用戶使用方便而提供的一種便捷的控制串口編程的解決方 案,本文主要介紹了如何利用 vc + + 2008 mscomm 控件的串口通信方法, 對程序的類

3、進行了說明,分析了本程序各個模塊怎樣實現(xiàn)起作用。此次設(shè)計 以 mfc 來設(shè)計界面編制程序,同時利用 mscomm 控件通過串口發(fā)送和接收數(shù) 據(jù),實現(xiàn)了串口通信。該串口通信控制程序具有通信參數(shù)設(shè)置、通信參數(shù)顯 示、打開和關(guān)閉串口、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)、清空發(fā)送區(qū)和接收區(qū)數(shù)據(jù)的功 能。 關(guān)鍵詞關(guān)鍵詞:串口通信visual c+ 6.0 mscomm 控件 1 1 引言引言 1.1 問題的提出問題的提出 串行通信(serial communication )在現(xiàn)代工業(yè)控制系統(tǒng)中一直有著及其重要的地 位,作為一種基本而又靈活方便的通信方式,它被廣泛應(yīng)用于 pc 與 pc 或者 pc 與 plc 之 間的

4、數(shù)據(jù)交換以及其他工業(yè)控制與自動控制中,它不僅沒有因為時代的進步而遭淘汰, 反而在規(guī)格上越來越完善,應(yīng)用也越來越廣泛。vc+是新一代面向?qū)ο蟮目梢暬_發(fā)工 具,提供了良好的界面設(shè)計能力,在 pc 機的串口通信方面有很強的功能。對于從事機 械行業(yè)的人來說,熟悉基于 rs232 串口通信的高級語言編程方法顯得十分重要。 1.2 國內(nèi)外研究的現(xiàn)狀國內(nèi)外研究的現(xiàn)狀 目前,計算機的串行通信應(yīng)用十分廣泛,串行接口已成為計算機的必需部件和 接口之一。由于其具有連接簡單、使用靈活方便、數(shù)據(jù)傳遞可靠等優(yōu)點,在工業(yè)監(jiān) 控、數(shù)據(jù)采集和實時控制系統(tǒng)中得到了廣泛應(yīng)用。當今,實現(xiàn)串口通信的方法以及 第三方控件有很多,例如

5、pcomm 控件,windows api 函數(shù)等等。但是這幾種方法都過 于復(fù)雜,對程序員要求較高,而且可靠性并不是很好。利用 microsoft 推出的 mscomm 控件,使得串口通信的實現(xiàn)更為簡單、可靠。 隨著當今信息技術(shù)的快速發(fā)展,通信已成為信息技術(shù)中的關(guān)鍵問題。尤其在控 制領(lǐng)域,以何種方式實現(xiàn)計算機與外圍設(shè)備間既簡單又可靠的通信,就顯得特別重 要。由于串行通信具有實現(xiàn)簡單、使用靈活方便、數(shù)據(jù)傳輸可靠等優(yōu)點,因而廣泛 應(yīng)用于工業(yè)控制系統(tǒng)中,是計算機與外部設(shè)備進行數(shù)據(jù)通信時經(jīng)常使用的方式之一。 vc+是新一代面向?qū)ο蟮目梢暬_發(fā)工具,提供了良好的界面設(shè)計能力,在 pc 機 的串口通信方面有

6、很強的功能。它具有功能強大、簡便易用和代碼執(zhí)行速度快等特 點,在通信軟件的開發(fā)中成為越來越多開發(fā)人員的首選工具。無論在工業(yè)控制中 pc 機和單片機之間的通信,還是在 2 臺 pc 機之間的串口通信,都具有相同的原理。 只要掌握其中的通信本質(zhì),就能靈活地實現(xiàn)串口通信,串口控制。 1.5 任務(wù)與分析任務(wù)與分析 1.5.1 主要任務(wù)主要任務(wù) 制定串口通信控制程序的總體構(gòu)架; 熟悉 vc 平臺下的高級語言編程方法; 熟悉基于 rs232 串口通信的高級語言編程方法; 在同一臺 pc 機上調(diào)試通過所編寫的程序; 1.5.2 分析分析 目前 win32 中基于 vc + + 6. 0 的常用串口通信程序一

7、般可以用兩種方法實現(xiàn): 利用 mscomm activex 串行通信控件; 使用 win2dows api 通信函數(shù)。雖然在 windows 下 win32api 提供了使用文件操作方式的函數(shù)進行串口操作的方法,但是在編 程實現(xiàn)上還是比較復(fù)雜。windows 平臺先進的 activex 技術(shù)使得對串口編程不再需要處 理煩瑣的細節(jié)。利用已有的 axtivex 控件,只需要編寫少量的代碼,就可以輕松高效 地完成任務(wù)。因此程序員不需要花時間去了解復(fù)雜的 api 函數(shù),只需要利用 mscomm 控 件就可實現(xiàn)串口編程。 2 程序的主要功能程序的主要功能 2.1 參數(shù)設(shè)置功能參數(shù)設(shè)置功能 設(shè)置和修改串口

8、通信參數(shù),包括端口,波特率,奇偶校驗位,數(shù)據(jù)位,停止位。 2.2 參數(shù)顯示功能參數(shù)顯示功能 顯示當前串口通信參數(shù),包括端口號,波特率,奇偶校驗位,數(shù)據(jù)位,停止位。 2.3 打開串口功能打開串口功能 打開串口,實現(xiàn)通信。 2.4 關(guān)閉串口功能關(guān)閉串口功能 關(guān)閉串口,停止通信。 2.5 接收數(shù)據(jù)功能接收數(shù)據(jù)功能 能夠進行單個或多個數(shù)據(jù)的接收和顯示。 2.6 發(fā)送數(shù)據(jù)功能發(fā)送數(shù)據(jù)功能 能夠進行單個或多個數(shù)據(jù)的發(fā)送。 2.7 清空數(shù)據(jù)接收區(qū)和發(fā)生區(qū)功能清空數(shù)據(jù)接收區(qū)和發(fā)生區(qū)功能 刪除接收區(qū)和發(fā)生區(qū)所有數(shù)據(jù)。 3 程序運行平臺程序運行平臺 visual c+ 6.0 具體操作如下: (1)新建 msco

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

10、串口選擇組合框idc_combo1m_tdccombobox 波特率選擇組合框idc_combo2m_btlccombobox 校檢位組合框idc_combo3m_xjwccombobox 數(shù)據(jù)位組合框idc_combo4m_sjwccombobox 停止位組合框idc_combo5m_tzwccombobox 接收編輯框idc_ebit1m_str_recvcstring 發(fā)送編輯框idc_ebit2m_str_sendcstring 復(fù)選框idc_check1 / / com 控件idc_mscomm1m_msommcmscomm 6 6 模塊分析 6.16.1 初始化模塊初始化模塊 代碼

11、如下: bool cmydlg:oninitdialog() cdialog:oninitdialog(); m_msomm.setinbuffersize(1024); /設(shè)置接收緩沖區(qū)的大小 m_msomm.setoutbuffersize(512); /設(shè)置發(fā)送緩沖區(qū)的大小 if(m_msomm.getportopen() /判斷串口是否打開 m_msomm.setportopen(false); /串口如果打開就關(guān)閉它 m_msomm.setcommport(2); /設(shè)置通道為 com2 if(!m_msomm.getportopen() /判斷串口是否打開 m_msomm.setp

12、ortopen(true); /如果沒有打開就重新開啟 else afxmessagebox(serial port open error); m_msomm.setinputmode(1); /設(shè)置以二進制方式接收 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è)置當前接收區(qū)長度為零 m_msomm.getinput(); /預(yù)讀取緩沖

13、區(qū)以清空殘留數(shù)據(jù) /組合框的初始化 m_td.setcursel(1); m_btl.setcursel(5); m_xjw.setcursel(2); m_sjw.setcursel(0); m_tzw.setcursel(0); / add about. menu item to system menu. / idm_aboutbox must be in the system command range. assert(idm_aboutbox assert(idm_aboutbox appendmenu(mf_separator); psysmenu-appendmenu(mf_str

14、ing, idm_aboutbox, straboutmenu); 6.6.2 2 參數(shù)設(shè)置和顯示模塊參數(shù)設(shè)置和顯示模塊 選擇組合框中相應(yīng)的設(shè)置內(nèi)容即可設(shè)置串口的通信參數(shù),如圖 7.1。該命令的代碼 如下: void cmydlg:onselchangecombo1() / todo: add your control notification handler code here /改變串口通道 if(m_msomm.getportopen() m_msomm.setportopen(false); m_msomm.setcommport(m_td.getcursel()+1); m_msom

15、m.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_msomm.setsettings(600,);break; case 2:m_msomm.setsettings(1200,);break; case 3:m_msomm.setsettings(2

16、400,);break; case 4:m_msomm.setsettings(4800,);break; case 5:m_msomm.setsettings(9600,);break; case 6:m_msomm.setsettings(19200,);break; case 7:m_msomm.setsettings(38400,);break; void cmydlg:onselchangecombo4() / todo: add your control notification handler code here /改變數(shù)據(jù)位 int i=m_sjw.getcursel(); s

17、witch(i) case 0:m_msomm.setsettings(,8,);break; case 1:m_msomm.setsettings(,7,);break; case 2:m_msomm.setsettings(,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

18、:m_msomm.setsettings(,2);break; void cmydlg:onselchangecombo3() / todo: add your 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.36.3 發(fā)送數(shù)據(jù)模塊發(fā)送數(shù)據(jù)模塊 單

19、擊主界面中的【數(shù)據(jù)發(fā)送】按鈕,將把發(fā)送區(qū)的內(nèi)容發(fā)送到串口調(diào)試助手的接 收區(qū),如圖 7.3,該命令的代碼如下: void cmydlg: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ù)接收模塊數(shù)據(jù)接收模塊 如圖 7.2,程序代碼如下: void cmydlg:ononcommmscomm1() / todo: add your control notification han

20、dler code here /定義參數(shù) colesafearray x; variant y; byte rxdata1024; cstring a; long len, k; /判斷是否接受數(shù)據(jù),進行類型轉(zhuǎn)換 if(m_msomm.getcommevent()=2) y=m_msomm.getinput(); /讀取接收緩沖區(qū)的內(nèi)容 x=y; len=x.getonedimsize(); for(k=0;klen;k+) x.getelement( for(k=0;klen;k+) byte bt=*(char*)(rxdata+k); if(!m_16.getcheck() a.form

21、at(%c,bt); m_str_recv+=a; else a.format(%02x,bt); /十六進制轉(zhuǎn)換 m_str_recv+=a+ ; updatedata(0); /顯示數(shù)據(jù) 6.5清空接數(shù)據(jù)模塊清空接數(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)閉串

22、口模塊 單擊主界面中的【關(guān)閉串口】按鈕,將關(guān)閉串口,該命令的代碼如下: void cmydlg:onbutton1() / todo: add your control notification handler code here /串口的開關(guān) int x=m_msomm.getportopen(); m_msomm.setportopen(!x); 7 7 系統(tǒng)測試 7.1 測試測試 首先,直接雙擊 mscomm 文件夾下的 debug 子文件夾下的 mscomm.exe 運行文件; 其次,按以下步驟進行測試: (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ā)送十六進制數(shù)據(jù) 圖 7.3(b)串口工具接收并顯示十六進制數(shù)據(jù) (3)發(fā)送數(shù)據(jù) 圖 7.3(c)串口工具發(fā)送數(shù)據(jù) 圖 7.3(d)調(diào)

溫馨提示

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

評論

0/150

提交評論