通信网络设计课程设计利用MSCOMM串口通信控件进行异步串行通信的VC程序设计

上传人:大米 文档编号:473469243 上传时间:2024-01-03 格式:DOC 页数:25 大小:151.50KB
返回 下载 相关 举报
通信网络设计课程设计利用MSCOMM串口通信控件进行异步串行通信的VC程序设计_第1页
第1页 / 共25页
通信网络设计课程设计利用MSCOMM串口通信控件进行异步串行通信的VC程序设计_第2页
第2页 / 共25页
通信网络设计课程设计利用MSCOMM串口通信控件进行异步串行通信的VC程序设计_第3页
第3页 / 共25页
通信网络设计课程设计利用MSCOMM串口通信控件进行异步串行通信的VC程序设计_第4页
第4页 / 共25页
通信网络设计课程设计利用MSCOMM串口通信控件进行异步串行通信的VC程序设计_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《通信网络设计课程设计利用MSCOMM串口通信控件进行异步串行通信的VC程序设计》由会员分享,可在线阅读,更多相关《通信网络设计课程设计利用MSCOMM串口通信控件进行异步串行通信的VC程序设计(25页珍藏版)》请在金锄头文库上搜索。

1、通信网络设计课程设计(w7): 利用MSCOMM串口通信控件进行异步串行通信的VC程序设计设计日期20081229 -20090110 利用MSCOMM串口通信控件进行异步串行通信的VC程序设计一 课程设计题目 利用MSCOMM串口通信控件进行异步串行通信的VC程序设计二 课程设计要求 环境要求:Windows95/98/2000/XP功能要求:能将键盘上输入的数据发送到另一台计算机上; 能将接收到的数据显示到屏幕窗口内;了解常用通信网络设备的操作和应用,掌握常用的通信协议的工作原理,能利用Visual C+、开发工具完成相应的通信程序的设计工作。学习简明地介绍自己的设计工作。三 课程设计目的

2、 用Visual C+编程工具主机提供的接口,解决网络用户之间的交互式对话问题。进一步深入掌握网络设计和通信程序的设计原理。使学生对计算机通信网络的设计实现有较深的了解,培养较高的通信网络设计能力。四 程序思路硬件连接方面:数据的发送和接收由软件控制,不进行硬件握手,其连接方法如图真正需要互相连接的是RXD、TXD和GND;软件方面:串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从 CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分

3、。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。VC+ 6.0提供的MSComm控件通过串行端口发送和接收数据,为应用程序提供串行通信功能。使用非常方便。在当前的Workspace中插入MSComm控件。 Project菜单-Add to Project-Components and Controls-Registered ActiveX Controls-选择Components: Microsoft Communications Control, version 6.0 插入到当前的Workspace中。 结果添加了类

4、CMSComm(及相应文件:mscomm.h和mscomm.cpp )。在mscomm.h中加入MSComm控件。protected: 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.打开并初始化串口voi

5、d CComDlg:OnOpencom() if(m_Com.GetPortOpen() /打开通信端口m_Com.SetPortOpen(FALSE);m_Com.SetCommPort(1); /选择com1if( !m_Com.GetPortOpen()m_Com.SetPortOpen(TRUE);/打开串口MessageBox(串口已经打开);elseMessageBox(不能打开串口!);m_Com.SetSettings(9600,n,8,1); /波特率9600,无校验,8个数据位,1个停止位 /以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位m_Com.SetInpu

6、tMode(1); / 定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。m_Com.SetRThreshold(1); /为1表示有一个字符引发一个事件m_Com.SetInputLen(0); /设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲区中的全部内容m_Com.GetInput();m_opened=TRUE;捕捉串口事项。MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。我们介绍比较使用的事件驱动方法:有事件(如接收到数据)时通知程序。在程序中需要捕获并处理这些通讯事件。在MainFrm.h中:protected:afx_msg voi

7、d OnCommMscomm();DECLARE_EVENTSINK_MAP()在ComDlg.cpp中:BEGIN_EVENTSINK_MAP(CComDlg, CDialog) /AFX_EVENTSINK_MAP(CComDlg)ON_EVENT(CComDlg, IDC_MSCOMM2, 1 /* OnComm */, OnComm, VTS_NONE)/AFX_EVENTSINK_MAPEND_EVENTSINK_MAP() / 映射ActiveX控件串口读写.完成读写的函数的确很简单,GetInput()和SetOutput()就可。两个函数的原型是:VARIANT GetInpu

8、t();及 void SetOutput(const VARIANT& newValue);都要使用VARIANT类型(所有Idispatch:Invoke的参数和返回值在内部都是作为VARIANT对象处理的)。无论是在PC机读取上传数据时还是在PC机发送下行命令时,我们都习惯于使用字符串的形式(也可以说是数组形式)。查阅VARIANT文档知道,可以用BSTR表示字符串,但遗憾的是所有的BSTR都是包含宽字符,即使我们没有定义_UNICODE_UNICODE也是这样! WinNT支持宽字符, 而Win95并不支持。为解决上述问题,我们在实际工作中使用CbyteArray,给出相应的部分程序如下

9、:void CComDlg:OnComm() / TODO: Add your control notification handler 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

10、;klen;k+) safearray_inp.GetElement(&k,rxdata+k); for(k=0;klen;k+) BYTE bt=*(char*)(rxdata+k); strtemp.Format(%c,bt); m_recv+=strtemp; UpdateData(FALSE);五 程序调试运行程序后显示用户交互界面:打开串口:在一台终端上的输入情况:在另一台终端上的输出情况:六 心得体会 对于这次课程设计,对于自己来说是个比较大的挑战,因为以前从没有做过这样的课程设计,即双机通信。心理没底,但是要提高自己,就要做自己不敢做的事情。由于不懂,所以开始找了很多资料,对于双

11、机通信,理论知识我很快就掌握了,主要是串口的开启与关闭,串口初始化以及串口的选择,数据基本就可以传输了,经过思考,发现理论知识比较简单,但是我原来接触的语言是C和java,从来没有接触过C+,感觉无从下手,而且熟悉visual C+环境也需要一段时间。万事开头难,刚刚开始的两天思路很乱。后来仔细看了一下题目,是用mscomm控件来实现,在网上查询了相关资料后,发现mscomm的学习还是很简单的,通过控件操作,竟然可以自动生成VC框架,这样我自己就只要考虑串口的初始化和数据传输就可以了。VC具有强大的功能,能够节约程序员的时间,使程序员在编程时能很快地构造出程序的框架,而专注于数据传输。数据传输

12、实现就较为简单了,不像文件传输,需要封装文件。我参考网上实现串口的资料,然后就实现了程序的传输。这样相当于单工通信。在程序传输实现之后,我还有一周的时间,我就在此基础上进行改进,在程序中设置mscomm控制两个串口,这样就需要两个mscomm控件,而硬件要求是,电脑中必须有两个串口,但是一般电脑中只有一个串口,好在同学那里有一个扩展串口,我在一台电脑上编实现了两个串口的数据传输,相当于半双工通信。七 附件程序Com.cpp #include stdafx.h#include Com.h#include ComDlg.h#ifdef _DEBUG#define new DEBUG_NEW#und

13、ef THIS_FILEstatic char THIS_FILE = _FILE_;#endifCComAppBEGIN_MESSAGE_MAP(CComApp, CWinApp)ON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CComApp constructionCComApp:CComApp() / The one and only CComApp objectCComApp theApp;/ CComApp initializationBOOL CComApp:InitInstance()AfxEnableControlCo

14、ntainer();#ifdef _AFXDLLEnable3dControls();#elseEnable3dControlsStatic();#endifCComDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK) else if (nResponse = IDCANCEL) return FALSE;/ ComDlg.cpp : implementation file#include stdafx.h#include Com.h#include ComDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclas

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号