通信網(wǎng)絡設計課程設計-利用MSCOMM串口通信控件進行異步串行通信的VC程序設計_第1頁
通信網(wǎng)絡設計課程設計-利用MSCOMM串口通信控件進行異步串行通信的VC程序設計_第2頁
通信網(wǎng)絡設計課程設計-利用MSCOMM串口通信控件進行異步串行通信的VC程序設計_第3頁
通信網(wǎng)絡設計課程設計-利用MSCOMM串口通信控件進行異步串行通信的VC程序設計_第4頁
通信網(wǎng)絡設計課程設計-利用MSCOMM串口通信控件進行異步串行通信的VC程序設計_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、利用MSCOMM串口通信控件進行異步串行通信的VC程序設計一 課程設計題目 利用MSCOMM串口通信控件進行異步串行通信的VC程序設計二 課程設計要求 環(huán)境要求:Windows95/98/2000/XP功能要求:能將鍵盤上輸入的數(shù)據(jù)發(fā)送到另一臺計算機上; 能將接收到的數(shù)據(jù)顯示到屏幕窗口內(nèi);了解常用通信網(wǎng)絡設備的操作和應用,掌握常用的通信協(xié)議的工作原理,能利用Visual C+、開發(fā)工具完成相應的通信程序的設計工作。學習簡明地介紹自己的設計工作。三 課程設計目的 用Visual C+編程工具主機提供的接口,解決網(wǎng)絡用戶之間的交互式對話問題。進一步深入掌握網(wǎng)絡設計和通信程序的設計原理。使學生對計算

2、機通信網(wǎng)絡的設計實現(xiàn)有較深的了解,培養(yǎng)較高的通信網(wǎng)絡設計能力。四 程序思路硬件連接方面:數(shù)據(jù)的發(fā)送和接收由軟件控制,不進行硬件握手,其連接方法如圖真正需要互相連接的是RXD、TXD和GND;軟件方面:串行端口的本質(zhì)功能是作為CPU和串行設備間的編碼轉(zhuǎn)換器。當數(shù)據(jù)從 CPU經(jīng)過串行端口發(fā)送出去時,字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位。在接收數(shù)據(jù)時,串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)在Windows環(huán)境(Windows NT、Win98、Windows2000)下,串口是系統(tǒng)資源的一部分。應用程序要使用串口進行通信,必須在使用之前向操作系統(tǒng)提出資源申請要求(打開串口),通信完成后必須釋放資源(關閉串口)。VC+ 6.0提

3、供的MSComm控件通過串行端口發(fā)送和接收數(shù)據(jù),為應用程序提供串行通信功能。使用非常方便。在當前的Workspace中插入MSComm控件。 Project菜單-Add to Project-Components and Controls-Registered ActiveX Controls-選擇Components: Microsoft Communications Control, version 6.0 插入到當前的Workspace中。 結(jié)果添加了類CMSComm(及相應文件:mscomm.h和mscomm.cpp )。在mscomm.h中加入MSComm控件。protected:

4、CMSComm m_ComPort;在mscomm.cpp:OnCreare()中:DWORD style=WS_VISIBLE|WS_CHILD; if (!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL)TRACE0(Failed to create OLE Communications Controln);return -1; / fail to create.打開并初始化串口void CComDlg:OnOpencom() if(m_Com.GetPortOpen() /打開通信端口m_Com.SetPortOpe

5、n(FALSE);m_Com.SetCommPort(1); /選擇com1if( !m_Com.GetPortOpen()m_Com.SetPortOpen(TRUE);/打開串口MessageBox(串口已經(jīng)打開);elseMessageBox(不能打開串口!);m_Com.SetSettings(9600,n,8,1); /波特率9600,無校驗,8個數(shù)據(jù)位,1個停止位 /以字符串的形式設置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位m_Com.SetInputMode(1); / 定義Input屬性獲取數(shù)據(jù)的方式(為0:文本方式;為1:二進制方式)。m_Com.SetRThreshold(1

6、); /為1表示有一個字符引發(fā)一個事件m_Com.SetInputLen(0); /設置每次Input讀入的字符個數(shù),缺省值為0,表明讀取接收緩沖區(qū)中的全部內(nèi)容m_Com.GetInput();m_opened=TRUE;捕捉串口事項。MSComm控件可以采用輪詢或事件驅(qū)動的方法從端口獲取數(shù)據(jù)。我們介紹比較使用的事件驅(qū)動方法:有事件(如接收到數(shù)據(jù))時通知程序。在程序中需要捕獲并處理這些通訊事件。在MainFrm.h中:protected:afx_msg void OnCommMscomm();DECLARE_EVENTSINK_MAP()在ComDlg.cpp中:BEGIN_EVENTSINK

7、_MAP(CComDlg, CDialog) /AFX_EVENTSINK_MAP(CComDlg)ON_EVENT(CComDlg, IDC_MSCOMM2, 1 /* OnComm */, OnComm, VTS_NONE)/AFX_EVENTSINK_MAPEND_EVENTSINK_MAP() / 映射ActiveX控件串口讀寫.完成讀寫的函數(shù)的確很簡單,GetInput()和SetOutput()就可。兩個函數(shù)的原型是:VARIANT GetInput();及 void SetOutput(const VARIANT& newValue);都要使用VARIANT類型(所有Idispa

8、tch:Invoke的參數(shù)和返回值在內(nèi)部都是作為VARIANT對象處理的)。無論是在PC機讀取上傳數(shù)據(jù)時還是在PC機發(fā)送下行命令時,我們都習慣于使用字符串的形式(也可以說是數(shù)組形式)。查閱VARIANT文檔知道,可以用BSTR表示字符串,但遺憾的是所有的BSTR都是包含寬字符,即使我們沒有定義_UNICODE_UNICODE也是這樣! WinNT支持寬字符, 而Win95并不支持。為解決上述問題,我們在實際工作中使用CbyteArray,給出相應的部分程序如下:void CComDlg:OnComm() / TODO: Add your control notification handler

9、 code hereVARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata2048; CString strtemp; if(m_Com.GetCommEvent()=2) variant_inp=m_Com.GetInput(); safearray_inp=variant_inp; len=safearray_inp.GetOneDimSize(); for(k=0;klen;k+) safearray_inp.GetElement(&k,rxdata+k); for(k=0;kLoadIcon(I

10、DR_MAINFRAME);void CComDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Control(pDX, IDC_MSCOMM2, m_Com);DDX_Text(pDX, IDC_RECV, m_recv);DDX_Text(pDX, IDC_SEND, m_send);BEGIN_MESSAGE_MAP(CComDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_OPENC

11、OM, OnOpencom)ON_BN_CLICKED(IDC_ONSEND, OnOnsend)END_MESSAGE_MAP()/ CComDlg message handlersBOOL CComDlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);SetIcon(

12、m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);return TRUE; void CComDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CComDlg:OnPaint() if (IsIconic()CPaintDC dc(this);SendMessage(WM_ICONERASEBKGND, (WP

13、ARAM) dc.GetSafeHdc(), 0)int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();HCURSOR CComDlg:OnQueryDragIcon

14、()return (HCURSOR) m_hIcon;void CComDlg:OnOpencom() if(m_Com.GetPortOpen() /打開通信端口m_Com.SetPortOpen(FALSE);m_Com.SetCommPort(1); /選擇com1if( !m_Com.GetPortOpen()m_Com.SetPortOpen(TRUE);/打開串口MessageBox(串口已經(jīng)打開);elseMessageBox(不能打開串口!);m_Com.SetSettings(9600,n,8,1);m_Com.SetInputMode(1); m_Com.SetRThres

15、hold(1); m_Com.SetInputLen(0); m_Com.GetInput();m_opened=TRUE;BEGIN_EVENTSINK_MAP(CComDlg, CDialog)ON_EVENT(CComDlg, IDC_MSCOMM2, 1 /* OnComm */, OnComm, VTS_NONE)END_EVENTSINK_MAP()void CComDlg:OnComm() VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata2048; CString strtemp;

16、if(m_Com.GetCommEvent()=2) variant_inp=m_Com.GetInput(); safearray_inp=variant_inp; len=safearray_inp.GetOneDimSize(); for(k=0;klen;k+) safearray_inp.GetElement(&k,rxdata+k); for(k=0;kGetWindowText(m_send);if(m_send!=) UpdateData(TRUE);m_Com.SetOutput(COleVariant(m_send);m_send= ;UpdateData(FALSE);e

17、lseMessageBox(不能發(fā)空數(shù)據(jù));elseMessageBox(請打開串口);M#include stdafx.h#include mscomm.h/ CMSCommIMPLEMENT_DYNCREATE(CMSComm, CWnd)/ CMSComm properties/ CMSComm operationsvoid CMSComm:SetCDHolding(BOOL bNewValue)static BYTE parms =VTS_BOOL;InvokeHelper(0x1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, bNewVa

18、lue);BOOL CMSComm:GetCDHolding()BOOL result;InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);return result;void CMSComm:SetCommID(long nNewValue)static BYTE parms =VTS_I4;InvokeHelper(0x3, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);long CMSComm:GetCommID()long resu

19、lt;InvokeHelper(0x3, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);return result;void CMSComm:SetCommPort(short nNewValue)static BYTE parms =VTS_I2;InvokeHelper(0x4, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);short CMSComm:GetCommPort()short result;InvokeHelper(0x4, DISPATCH_PROPER

20、TYGET, VT_I2, (void*)&result, NULL);return result;void CMSComm:SetCTSHolding(BOOL bNewValue)static BYTE parms =VTS_BOOL;InvokeHelper(0x5, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,bNewValue);BOOL CMSComm:GetCTSHolding()BOOL result;InvokeHelper(0x5, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NU

21、LL);return result;void CMSComm:SetDSRHolding(BOOL bNewValue)static BYTE parms =VTS_BOOL;InvokeHelper(0x7, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, bNewValue);BOOL CMSComm:GetDSRHolding()BOOL result;InvokeHelper(0x7, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);return result;void CMSComm:

22、SetDTREnable(BOOL bNewValue)static BYTE parms =VTS_BOOL;InvokeHelper(0x9, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,bNewValue);BOOL CMSComm:GetDTREnable()BOOL result;InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);return result;void CMSComm:SetHandshaking(long nNewValue)stat

23、ic BYTE parms =VTS_I4;InvokeHelper(0xa, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);long CMSComm:GetHandshaking()long result;InvokeHelper(0xa, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);return result;void CMSComm:SetInBufferSize(short nNewValue)static BYTE parms =VTS_I2;InvokeHel

24、per(0xb, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);short CMSComm:GetInBufferSize()short result;InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);return result;void CMSComm:SetInBufferCount(short nNewValue)static BYTE parms =VTS_I2;InvokeHelper(0xc, DISPATCH_PROPERTYP

25、UT, VT_EMPTY, NULL, parms, nNewValue);short CMSComm:GetInBufferCount()short result;InvokeHelper(0xc, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);return result;void CMSComm:SetBreak(BOOL bNewValue)static BYTE parms =VTS_BOOL;InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, bNewVa

26、lue);BOOL CMSComm:GetBreak()BOOL result;InvokeHelper(0xd, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);return result;void CMSComm:SetInputLen(short nNewValue)static BYTE parms =VTS_I2;InvokeHelper(0xe, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);short CMSComm:GetInputLen()short r

27、esult;InvokeHelper(0xe, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);return result;void CMSComm:SetNullDiscard(BOOL bNewValue)static BYTE parms =VTS_BOOL;InvokeHelper(0x10, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, bNewValue);BOOL CMSComm:GetNullDiscard()BOOL result;InvokeHelper(0x10, DISPA

28、TCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);return result;void CMSComm:SetOutBufferSize(short nNewValue)static BYTE parms =VTS_I2;InvokeHelper(0x11, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);short CMSComm:GetOutBufferSize()short result;InvokeHelper(0x11, DISPATCH_PROPERTYGET, VT_I2

29、, (void*)&result, NULL);return result;void CMSComm:SetOutBufferCount(short nNewValue)static BYTE parms =VTS_I2;InvokeHelper(0x12, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);short CMSComm:GetOutBufferCount()short result;InvokeHelper(0x12, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL

30、);return result;void CMSComm:SetParityReplace(LPCTSTR lpszNewValue)static BYTE parms =VTS_BSTR;InvokeHelper(0x13, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, lpszNewValue);CString CMSComm:GetParityReplace()CString result;InvokeHelper(0x13, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);return

31、 result;void CMSComm:SetPortOpen(BOOL bNewValue)static BYTE parms =VTS_BOOL;InvokeHelper(0x14, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, bNewValue);BOOL CMSComm:GetPortOpen()BOOL result;InvokeHelper(0x14, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);return result;void CMSComm:SetRThreshol

32、d(short nNewValue)static BYTE parms =VTS_I2;InvokeHelper(0x15, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);short CMSComm:GetRThreshold()short result;InvokeHelper(0x15, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);return result;void CMSComm:SetRTSEnable(BOOL bNewValue)static BYTE pa

33、rms =VTS_BOOL;InvokeHelper(0x16, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, bNewValue);BOOL CMSComm:GetRTSEnable()BOOL result;InvokeHelper(0x16, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);return result;void CMSComm:SetSettings(LPCTSTR lpszNewValue)static BYTE parms =VTS_BSTR;InvokeHelper

34、(0x17, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, lpszNewValue);CString CMSComm:GetSettings()CString result;InvokeHelper(0x17, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);return result;void CMSComm:SetSThreshold(short nNewValue)static BYTE parms =VTS_I2;InvokeHelper(0x18, DISPATCH_PROPERT

35、YPUT, VT_EMPTY, NULL, parms, nNewValue);short CMSComm:GetSThreshold()short result;InvokeHelper(0x18, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);return result;void CMSComm:SetOutput(const VARIANT& newValue)static BYTE parms =VTS_VARIANT;InvokeHelper(0x19, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL,

36、 parms, &newValue);VARIANT CMSComm:GetOutput()VARIANT result;InvokeHelper(0x19, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);return result;void CMSComm:SetInput(const VARIANT& newValue)static BYTE parms =VTS_VARIANT;InvokeHelper(0x1a, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, &newValue

37、);VARIANT CMSComm:GetInput()VARIANT result;InvokeHelper(0x1a, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL);return result;void CMSComm:SetCommEvent(short nNewValue)static BYTE parms =VTS_I2;InvokeHelper(0x1b, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);short CMSComm:GetCommEven

38、t()short result;InvokeHelper(0x1b, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);return result;void CMSComm:SetEOFEnable(BOOL bNewValue)static BYTE parms =VTS_BOOL;InvokeHelper(0x1c, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms,bNewValue);BOOL CMSComm:GetEOFEnable()BOOL result;InvokeHelper(0x1c,

39、 DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);return result;void CMSComm:SetInputMode(long nNewValue)static BYTE parms =VTS_I4;InvokeHelper(0x1d, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);long CMSComm:GetInputMode()long result;InvokeHelper(0x1d, DISPATCH_PROPERTYGET, VT_I4, (vo

40、id*)&result, NULL);return result;/ stdafx.cpp :#include stdafx.h#if !defined(AFX_COM_H_CC3DE67A_A6D3_4E95_B3A1_21B971A17C64_INCLUDED_)#define AFX_COM_H_CC3DE67A_A6D3_4E95_B3A1_21B971A17C64_INCLUDED_#if _MSC_VER 1000#pragma once#endif#ifndef _AFXWIN_H_#error include stdafx.h before including this fil

41、e for PCH#endif#include resource.h/ CComApp:class CComApp : public CWinApppublic:CComApp();public:virtual BOOL InitInstance();DECLARE_MESSAGE_MAP();#endif#if !defined(AFX_COMDLG_H_2C5D9F44_AB0A_4501_A2B7_7BCA6EAB1B92_INCLUDED_)#define AFX_COMDLG_H_2C5D9F44_AB0A_4501_A2B7_7BCA6EAB1B92_INCLUDED_#if _M

42、SC_VER 1000#pragma once#endif / _MSC_VER 1000/ CComDlg dialogclass CComDlg : public CDialogpublic:BOOL m_opened;CComDlg(CWnd* pParent = NULL); enum IDD = IDD_COM_DIALOG ;CMSCommm_Com;CStringm_recv;CStringm_send;protected:virtual void DoDataExchange(CDataExchange* pDX);protected:HICON m_hIcon;virtual

43、 BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnOpencom();afx_msg void OnComm();afx_msg void OnOnsend();DECLARE_EVENTSINK_MAP()DECLARE_MESSAGE_MAP();#endif#if _MSC_VER 1000#pragma once#endifclass CMSComm

44、: public CWndprotected:DECLARE_DYNCREATE(CMSComm)public:CLSID const& GetClsid()static CLSID const clsid= 0x648a5600, 0x2c6e, 0x101b, 0x82, 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14 ;return clsid;virtual BOOL Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect,CWnd* pParentW

45、nd, UINT nID,CCreateContext* pContext = NULL) return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect, CWnd* pParentWnd, UINT nID,CFile* pPersist = NULL, BOOL bStorage = FALSE,BSTR bstrLicKey = NULL) return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,pPersist, bStor

溫馨提示

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

評論

0/150

提交評論