串口通信c++課程設(shè)計_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄 </b></p><p><b>  1引言1</b></p><p>  1.1問題的提出1</p><p>  1.2國內(nèi)外研究的現(xiàn)狀1</p><p>  1.5任務(wù)與分析2</p><p>  1.5.1主要任務(wù)2&

2、lt;/p><p><b>  1.5.2分析2</b></p><p>  2程序的主要功能2</p><p>  2.1參數(shù)設(shè)置功能2</p><p>  2.2參數(shù)顯示功能2</p><p>  2.3打開串口功能2</p><p>  2.4關(guān)閉串口功能2&

3、lt;/p><p>  2.5接收數(shù)據(jù)功能3</p><p>  2.6發(fā)送數(shù)據(jù)功能3</p><p>  2.7清空數(shù)據(jù)接收區(qū)和數(shù)據(jù)發(fā)送區(qū)功能3</p><p>  2.8數(shù)據(jù)、漢字或字符等顯示功能3</p><p><b>  3程序運行平臺3</b></p><p&

4、gt;<b>  4總體設(shè)計4</b></p><p><b>  5程序類的說明4</b></p><p><b>  6模塊分析6</b></p><p>  6.1系統(tǒng)初始化模塊2</p><p>  6.2參數(shù)設(shè)置和顯示模塊6</p><p

5、>  6.3發(fā)送數(shù)據(jù)模塊9</p><p>  6.4清空數(shù)據(jù)接收區(qū)和數(shù)據(jù)發(fā)送區(qū)模塊10</p><p>  6.5關(guān)閉主窗口模塊11</p><p><b>  7系統(tǒng)測試13</b></p><p><b>  7.1測試13</b></p><p>&l

6、t;b>  7.2總結(jié)18</b></p><p><b>  8結(jié)論18</b></p><p><b>  參考文獻19</b></p><p><b>  摘 要 </b></p><p>  隨著計算機的普及,計算機網(wǎng)絡(luò)和多微機系統(tǒng)的廣泛應(yīng)用

7、,盡管當今USB通信技術(shù)和以太網(wǎng)技術(shù)快速發(fā)展,然而串口通信技術(shù)始終以其連接簡便,價格低廉,穩(wěn)定可靠等優(yōu)點,在計算機通信領(lǐng)域占有一席之地。MSCOmm控件是微軟公司為了用戶使用方便而提供的一種便捷的控制串口編程的解決方案,本文主要介紹了如何利用Microsoft Visual C++ 6.0 MSComm 控件的串口通信方法,對程序的類進行了說明,分析了本程序各個模塊怎樣實現(xiàn)起作用。此次設(shè)計以MFC 來設(shè)計界面編制程序,同時利用MSCom

8、m 控件通過串口發(fā)送和接收數(shù)據(jù),實現(xiàn)了串口通信。該串口通信控制程序具有通信參數(shù)設(shè)置、通信參數(shù)顯示、打開和關(guān)閉串口、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)、清空發(fā)送區(qū)和接收區(qū)數(shù)據(jù)的功能。</p><p>  關(guān)鍵詞:串口通信Microsoft Visual C++ 6.0 MFC MSComm控件 </p><p><b>  1引言</b></p><

9、;p><b>  1.1問題的提出</b></p><p>  串行通信(Serial Communication )在現(xiàn)代工業(yè)控制系統(tǒng)中一直有著及其重要的地位,作為一種基本而又靈活方便的通信方式,它被廣泛應(yīng)用于PC與PC或者PC與PLC之間的數(shù)據(jù)交換以及其他工業(yè)控制與自動控制中,它不僅沒有因為時代的進步而遭淘汰,反而在規(guī)格上越來越完善,應(yīng)用也越來越廣泛。VC++是新一代面向?qū)ο蟮目梢?/p>

10、化開發(fā)工具,提供了良好的界面設(shè)計能力,在PC機的串口通信方面有很強的功能。對于從事機械行業(yè)的人來說,熟悉基于RS232串口通信的高級語言編程方法顯得十分重要。</p><p>  1.2國內(nèi)外研究的現(xiàn)狀</p><p>  目前,計算機的串行通信應(yīng)用十分廣泛,串行接口已成為計算機的必需部件和接口之一。由于其具有連接簡單、使用靈活方便、數(shù)據(jù)傳遞可靠等優(yōu)點,在工業(yè)監(jiān)控、數(shù)據(jù)采集和實時控制系統(tǒng)中

11、得到了廣泛應(yīng)用。當今,實現(xiàn)串口通信的方法以及第三方控件有很多,例如PComm控件,Windows API函數(shù)等等。但是這幾種方法都過于復雜,對程序員要求較高,而且可靠性并不是很好。利用Microsoft推出的MSComm控件,使得串口通信的實現(xiàn)更為簡單、可靠。</p><p>  隨著當今信息技術(shù)的快速發(fā)展,通信已成為信息技術(shù)中的關(guān)鍵問題。尤其在控制領(lǐng)域,以何種方式實現(xiàn)計算機與外圍設(shè)備間既簡單又可靠的通信,就顯得

12、特別重要。由于串行通信具有實現(xiàn)簡單、使用靈活方便、數(shù)據(jù)傳輸可靠等優(yōu)點,因而廣泛應(yīng)用于工業(yè)控制系統(tǒng)中,是計算機與外部設(shè)備進行數(shù)據(jù)通信時經(jīng)常使用的方式之一。VC++是新一代面向?qū)ο蟮目梢暬_發(fā)工具,提供了良好的界面設(shè)計能力,在PC機的串口通信方面有很強的功能。它具有功能強大、簡便易用和代碼執(zhí)行速度快等特點,在通信軟件的開發(fā)中成為越來越多開發(fā)人員的首選工具。無論在工業(yè)控制中PC機和單片機之間的通信,還是在2臺Pc機之間的串口通信,都具有相同的

13、原理。只要掌握其中的通信本質(zhì),就能靈活地實現(xiàn)串口通信,串口控制。</p><p><b>  1.5任務(wù)與分析</b></p><p><b>  1.5.1主要任務(wù)</b></p><p>  ★制定串口通信控制程序的總體構(gòu)架;</p><p>  ★熟悉VC平臺下的高級語言編程方法;</p

14、><p>  ★熟悉基于RS232串口通信的高級語言編程方法;</p><p>  ★在同一臺PC機上調(diào)試通過所編寫的程序;</p><p>  ★編寫設(shè)計說明書1份。</p><p><b>  1.5.2分析</b></p><p>  目前Win32 中基于VC + + 6. 0 的常用串口通信

15、程序一般可以用兩種方法實現(xiàn): ①利用MSComm ActiveX 串行通信控件; ②使用Win2dows API 通信函數(shù)。雖然在Windows下Win32API提供了使用文件操作方式的函數(shù)進行串口操作的方法,但是在編程實現(xiàn)上還是比較復雜。Windows平臺先進的ActiveX技術(shù)使得對串口編程不再需要處理煩瑣的細節(jié)。利用已有的AxtiveX控件,只需要編寫少量的代碼,就可以輕松高效地完成任務(wù)。因此程序員不需要花時間去了解復雜的API函

16、數(shù),只需要利用MSComm控件就可實現(xiàn)串口編程。</p><p><b>  2程序的主要功能</b></p><p><b>  2.1參數(shù)設(shè)置功能</b></p><p>  設(shè)置和修改串口通信參數(shù),包括端口,時間,波特率,奇偶校驗位,數(shù)據(jù)位,停止位。</p><p><b>  2.

17、2參數(shù)顯示功能</b></p><p>  顯示當前串口通信參數(shù),包括端口號,波特率,時間,奇偶校驗位,數(shù)據(jù)位,停止位,點擊參數(shù)設(shè)置按鈕,彈出參數(shù)設(shè)置窗口,當完成設(shè)置后點擊確定,子窗口隱藏,顯示界面是數(shù)據(jù)發(fā)送和接收界面。</p><p><b>  2.3打開串口功能</b></p><p>  參數(shù)設(shè)置后,打開串口,在程序中設(shè)置了

18、一個默認的COM4但是在參數(shù)設(shè)置窗口可以設(shè)置串口,實現(xiàn)通信。</p><p><b>  2.4關(guān)閉串口功能</b></p><p>  關(guān)閉串口,停止通信。</p><p><b>  2.5接收數(shù)據(jù)功能</b></p><p>  能夠進行單個或多個數(shù)據(jù)的接收和顯示。</p>&l

19、t;p><b>  2.6發(fā)送數(shù)據(jù)功能</b></p><p>  能夠進行單個或多個數(shù)據(jù)的發(fā)送。</p><p>  2.7清空數(shù)據(jù)接收區(qū)和數(shù)據(jù)發(fā)送區(qū)功能</p><p>  清空發(fā)送區(qū)內(nèi)所有數(shù)據(jù)。</p><p>  清空接收區(qū)內(nèi)所有數(shù)據(jù)。</p><p>  2.8任何數(shù)據(jù)、漢字或字符

20、等顯示功能</p><p>  在接收區(qū)可顯示任何數(shù)據(jù)、漢字或字符等。</p><p><b>  3程序運行平臺</b></p><p>  Microsoft Visual C++ 6.0</p><p><b>  具體操作如下:</b></p><p>  (1) 打

21、開VC++6.0建立基于對話框的MFC應(yīng)用程序class1,如圖3.1.1-圖3.1.4, 新建MSComm項目,選擇MFC應(yīng)用程序,應(yīng)用程序類型選擇“基于對話框”,生成的類中選擇“CMSCommDlg”;</p><p>  圖3.1.1 圖3.1.2</p><p>  圖3.1.3

22、 圖3.1.4</p><p> ?。?)在項目中插入MSComm控件;</p><p><b>  圖3.2 </b></p><p> ?。?)加載MSComm控件,添加相應(yīng)的源程序,加載必要的控件;</p><p>  圖3.3.1

23、 圖3.3.2 </p><p>  (4)編寫程序代碼,再編譯,鏈接,調(diào)試,執(zhí)行等,生成應(yīng)用程序。</p><p><b>  4總體設(shè)計</b></p><p>  圖4.1系統(tǒng)總體框架圖</p><p><b>  5程序類的說明</b></p>&l

24、t;p>  class CClass1Dlg : public CDialog</p><p><b>  {</b></p><p>  // Construction</p><p><b>  public:</b></p><p>  CClass1Dlg(CWnd* pParent

25、= NULL);// standard constructor</p><p>  void OpenPort(); </p><p>  // Dialog Data</p><p>  //{{AFX_DATA(CClass1Dlg)</p><p>  enum { IDD = IDD_CLASS1_DIALOG };</p&g

26、t;<p>  CMSCommm_ctrlComm;</p><p>  CStringm_strEditRXData;</p><p>  CStringm_strEditTXData;</p><p>  //}}AFX_DATA</p><p>  // ClassWizard generated virtual f

27、unction overrides</p><p>  //{{AFX_VIRTUAL(CClass1Dlg)</p><p>  protected:</p><p>  virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support</p><p>  //}}AFX

28、_VIRTUAL</p><p>  // Implementation</p><p>  protected:</p><p>  HICON m_hIcon;</p><p>  // Generated message map functions</p><p>  //{{AFX_MSG(CClass1Dlg

29、)</p><p>  virtual BOOL OnInitDialog();</p><p>  afx_msg void OnSysCommand(UINT nID, LPARAM lParam);</p><p>  afx_msg void OnPaint();</p><p>  afx_msg HCURSOR OnQueryDr

30、agIcon();</p><p>  afx_msg void OnComm();</p><p>  afx_msg void OnButtonManualsend();</p><p>  afx_msg void OnSetting();</p><p>  afx_msg void Oncls();</p><p

31、>  afx_msg void OnEnd();</p><p>  DECLARE_EVENTSINK_MAP()</p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  };</b></p><p>  //

32、{{AFX_INSERT_LOCATION}}</p><p>  // Microsoft Visual C++ will insert additional declarations immediately before the previous line.</p><p>  #endif // !defined(AFX_CLASS1DLG_H__B8BA98C1_5D58_47BE

33、_B664_E97E77EC5076__INCLUDED_)</p><p><b>  6模塊分析</b></p><p>  6.1系統(tǒng)初始化模塊</p><p>  系統(tǒng)的初始化模塊命令代碼如下:</p><p>  BOOL CClass1Dlg::OnInitDialog()</p><p&

34、gt;<b>  {</b></p><p>  CDialog::OnInitDialog();</p><p>  // Add "About..." menu item to system menu.</p><p>  // IDM_ABOUTBOX must be in the system command ran

35、ge.</p><p>  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p><p>  ASSERT(IDM_ABOUTBOX < 0xF000);</p><p>  CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p>  i

36、f (pSysMenu != NULL)</p><p><b>  {</b></p><p>  CString strAboutMenu;</p><p>  strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p>  if (!strAboutMenu.IsEmpty())&

37、lt;/p><p><b>  {</b></p><p>  pSysMenu->AppendMenu(MF_SEPARATOR);</p><p>  pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);</p><p><b> 

38、 }</b></p><p><b>  }</b></p><p>  // Set the icon for this dialog. The framework does this automatically</p><p>  // when the application's main window is no

39、t a dialog</p><p>  SetIcon(m_hIcon, TRUE);// Set big icon</p><p>  SetIcon(m_hIcon, FALSE);// Set small icon</p><p>  // TODO: Add extra initialization here</p><p&g

40、t;  m_ctrlComm.SetCommPort(4); //選擇COM4</p><p>  m_ctrlComm.SetInputMode(1); //輸入方式為二進制方式</p><p>  m_ctrlComm.SetInBufferSize(1024); //設(shè)置輸入緩沖區(qū)大小</p><p>  m_ctrlComm.SetOutBufferSi

41、ze(512); //設(shè)置輸出緩沖區(qū)大小</p><p>  //波特率9600,無校驗,8個數(shù)據(jù)位,1個停止位 </p><p>  m_ctrlComm.SetSettings("9600,n,8,1"); </p><p>  if(!m_ctrlComm.GetPortOpen())</p><p>  m_ctr

42、lComm.SetPortOpen(TRUE);//打開串口</p><p>  m_ctrlComm.SetRThreshold(1); //參數(shù)1表示每當串口接收緩沖區(qū)中有多于</p><p>  //或等于1個字符時將引發(fā)一個接收數(shù)據(jù)的OnComm事件</p><p>  m_ctrlComm.SetInputLen(0); //設(shè)置當前接收區(qū)數(shù)據(jù)長度為0

43、</p><p>  m_ctrlComm.GetInput(); //先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)</p><p>  return TRUE; // return TRUE unless you set the focus to a control</p><p><b>  }</b></p><p> 

44、 6.2參數(shù)設(shè)置和顯示模塊</p><p>  單擊主界面中的【參數(shù)設(shè)置】按鈕,將彈出“參數(shù)設(shè)置”對話框,如圖7.1所示,可以在該對話框中設(shè)置串口的通信參數(shù)。該命令的代碼如下:</p><p>  void CClass1Dlg::OnSetting() </p><p><b>  {</b></p><p>  //

45、 TODO: Add your control notification handler code here</p><p>  CSettingDlg setDlg;</p><p>  setDlg.DoModal();//DoModal()是CSettingDlg類成員函數(shù),通過調(diào)用該</p><p>  //函數(shù)將顯示對話框。</p><

46、p>  m_ctrlComm.GetInput();</p><p><b>  }</b></p><p><b>  6.3發(fā)送數(shù)據(jù)模塊</b></p><p>  單擊主界面中的【發(fā)送數(shù)據(jù)】按鈕,將把發(fā)送區(qū)的內(nèi)容發(fā)送到串口調(diào)試助手的接收區(qū),如圖7.3(a)(b)所示,該命令的代碼如下:</p>

47、<p>  void CClass1Dlg::OnButtonManualsend() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  UpdateData(TRUE); //讀取編輯框內(nèi)

48、容</p><p>  m_ctrlComm.SetOutput(COleVariant(m_strEditTXData));//發(fā)送數(shù)據(jù)</p><p><b>  }</b></p><p>  6.4清空數(shù)據(jù)接收區(qū)和數(shù)據(jù)發(fā)送區(qū)模塊</p><p>  單擊主界面中的【清除】按鈕,將清空數(shù)據(jù)接收區(qū)和數(shù)據(jù)發(fā)送區(qū)內(nèi)容,如

49、圖7.6所示,該命令的代碼如下:</p><p>  void CClass1Dlg::Oncls() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  m_strEditTX

50、Data=_T("");</p><p>  m_strEditRXData=_T("");</p><p>  UpdateData(FALSE);</p><p><b>  }</b></p><p>  6.5關(guān)閉主窗口模塊</p><p>  單擊

51、主界面中的【結(jié)束】按鈕,將關(guān)閉父窗口,如圖7.8所示,該命令的代碼如下:</p><p>  void CClass1Dlg::OnEnd() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p>&l

52、t;p>  CDialog::OnOK();</p><p><b>  }</b></p><p><b>  7系統(tǒng)測試</b></p><p><b>  7.1測試</b></p><p>  首先,直接雙擊class1文件夾下的debug子文件夾下的class1

53、.exe運行文件;</p><p>  其次,按以下步驟進行測試:</p><p><b>  參數(shù)設(shè)置:</b></p><p><b>  圖</b></p><p><b>  7.1 參數(shù)設(shè)置</b></p><p><b>  (2)

54、打開串口:</b></p><p><b>  圖7.2 打開串口</b></p><p>  (3) 發(fā)送數(shù)據(jù)和接收數(shù)據(jù)界面:</p><p>  圖7.3.1發(fā)送和接收數(shù)據(jù)</p><p>  圖7.3.2串口調(diào)試助手顯示</p><p>  (4) 發(fā)送數(shù)據(jù)和接收數(shù)據(jù):</

55、p><p>  圖7.4.1串口調(diào)試助手發(fā)送和接收數(shù)據(jù)</p><p>  圖7.4.2接收和發(fā)送數(shù)據(jù)</p><p>  (5)清空接收區(qū)和發(fā)送區(qū):</p><p>  圖7.5 清空接收區(qū)和發(fā)送區(qū)</p><p><b> ?。?)關(guān)閉主窗口:</b></p><p>  

56、點擊結(jié)束,運行窗口關(guān)閉,返回到編輯窗口,如圖7.6所示:</p><p><b>  圖7.6編輯窗口</b></p><p><b>  7.2總結(jié)</b></p><p>  通過上述測試,本系統(tǒng)有良好的用戶界面,在同一計算機上進行調(diào)試,實現(xiàn)了參數(shù)設(shè)置與顯示(通訊波特率,端口等可設(shè)置)、接收和發(fā)送數(shù)據(jù)、發(fā)送與顯示、清

57、空數(shù)據(jù)接收區(qū)和發(fā)送區(qū)內(nèi)容的功能,可進行單個數(shù)據(jù)或成批數(shù)據(jù)傳輸。</p><p><b>  8結(jié)論</b></p><p>  本次課程設(shè)計,利用Microsoft Visual C++ 6.0平臺,利用MSComm控件編寫串口通信程序,具有良好的用戶界面,能在同一計算機上進行調(diào)試,實現(xiàn)了串口通信參數(shù)設(shè)置與顯示、接收和發(fā)送數(shù)據(jù)、清空接收區(qū)和發(fā)送區(qū)內(nèi)容、可進行單個數(shù)據(jù)或

58、成批數(shù)據(jù)傳輸?shù)墓δ?。但是,本程序也存在一些不足,如:用串口調(diào)試助手V2.1接收的漢字過多時可能會沒有顯示。</p><p>  本次課程設(shè)計,利用VC++下的MSComm控件編程方法,通過MSComm控件可以十分便捷地寫出靈活性高,移植性強的串口通信程序,避免了去了解一些復雜的windowsAPI函數(shù)。這種方法具有很強的實用性,可以廣泛地用于工業(yè)數(shù)據(jù)采集等領(lǐng)域。</p><p><b

59、>  參考文獻</b></p><p>  [1] 曹衛(wèi)彬編著. C/C++串口通信典型應(yīng)用實例編程實踐. 北京:電子工業(yè)出版社,2009</p><p>  [2]黃維通. VC++面向?qū)ο笈c可視化程序設(shè)計. 清華大學出版社</p><p>  [3]張榮梅. Visual C++程序設(shè)計案例教程. 北京大學出版社</p><

60、;p>  [4]王華,岳麗全,岳志高. MSComm 控件在VC + + 6. 0串口通信中的應(yīng)用.長春工程學院學報:自然科學版,2009 ,10 (1)</p><p>  [5] 黃春梅,徐宇清主編. C/C++程序設(shè)計. 中國鐵道出版社 2007,02</p><p>  [6] 吳國鳳, 宣善立主編. C/C++程序設(shè)計. 高等教育出版社 2006</p>&l

61、t;p>  [7]李強,賈云霞編著.VisualC++項目開發(fā)實踐.北京:中國鐵道出版社,2003</p><p>  [8]王莉,陽春華.基于VC++的串口通信設(shè)計及其應(yīng)用[J].控制工程,2004,11 (S1) :89292.</p><p>  [9]郭克新編著. Visual C++代碼參考與技巧大全. 電子工業(yè)出版社 2008</p><p>&l

溫馨提示

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

評論

0/150

提交評論