2022年在VC++中利用ActiveX控件开发串行通信程序 .pdf
-
资源ID:34251337
资源大小:36.11KB
全文页数:3页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
![游客一键下载](/images/hot.gif)
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年在VC++中利用ActiveX控件开发串行通信程序 .pdf
在 VC+ 中利用 ActiveX 控件开发串行通信程序摘要:探讨在使用Visual C+编程时利用Microsoft Communications Control控件编写串行通信程序的方法,并给出了例程,具有一定的实用意义。关键词: Visual C+ 串行通信ActiveX 在开发微机控制系统的过程中,我们经常需要通过RS-232 串行接口与外部设备进行通信。 例如分级控制系统中上位机与下位机的数据交换以及数据采集系统中计算机与数字仪表的通信等。在DOS时代,编写串行通信程序是一件相当复杂的工作,程序员需要具备相当的硬件知识, 对可编程串行通信接口芯片的内部寄存器定义、工作方式、 指令字等相关内容有所了解, 才有可能着手编写程序,大量的时间和精力都花在了如何与硬件打交道上,而不是花在我们的主要目的获取与处理数据上;在Windows下, Win32API 提供了使用CreateFile/WriteFile等文件 I/O 函数进行串行口操作的方法,但是在实现上仍然是相当烦琐的。幸运的是,Windows 平台先进的ActiveX 技术使我们在对串行口编程时不再需要处理烦琐的细节。利用已有的ActiveX 控件,我们只需要编写少量的代码,就可以轻松高效地完成任务。本文以Windows 98 下用 Visual C+6.0开发 PT650C秤重显示器的通信模块为例,探讨了使用Microsoft Communications Control控件进行串行通信的方法。1 ActiveX 控件介绍ActiveX 是 Windows下进行应用程序开发的崭新技术,它的核心内容是组件对象模型COM(Component Object Model) 。ActiveX 控件包括一系列的属性、方法和事件,使用ActiveX控件的应用程序和ActiveX 控件之间的工作方式是客户服务器方式,即应用程序通过ActiveX 控件提供的接口来访问ActiveX 控件的功能。Microsoft Communications Control(以下简称MSComm)是 Microsoft 公司提供的简化Windows 下串行通信编程的ActiveX 控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Eventdriven) 方法,一是查询法。1.1 事件驱动法在使用事件驱动法设计程序时,每当有新字符到达,或端口状态改变,或发生错误时,MSComm 控件将解发OnComm 事件,而应用程序在捕获该事件后,通过检查MSComm 控件的 CommEvent 属性可以获知所发生的事件或错误,从而采取相应的操作。这种方法的优点是程序响应及时,可靠性高。1.2 查询法这种方法适合于较小的应用程序。在这种情况下, 每当应用程序执行完某一串行口操作后,将不断检查MSComm 控件的 CommEvent 属性以检查执行结果或者检查某一事件是否发生。例如, 当程序向串行设备发送了某个命令后,可能只是在等待收到一个特定的响应字符串,而不是对收到的每一个字符都立刻响应并处理。MSComm 控件有许多重要的属性,其中首要的几个如表1 所示。表 1 属性说明CommPort 设置 /获取控件对应的串行口Settings 设置 /获取波特率、校验方式、数据位、停止位PortOpen 打开 /关闭通信口Input 读取数据Output 发送数据名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - 2 编程实现在使用 MSComm 控件开发PT650C秤重显示器通信程序时,采用了事件驱动法,主要是在 comEvReceive(接收到数据 )事件发生时响应并获取缓冲区中的数据。以下具体介绍实现方法。打开 Visual C+6.0集成开发环境,创建一个基于对话框的MFC应用程序项目,命名为MyCOM,记住在设置项目选项时必须选上ActiveX Controls,其他的按照缺省设置。完成这一步后,选择菜单项ProjectAdd to Project Components and Controls ,将弹出一个对话框以选择系统中已有的组件(Components)和控件 (Controls)。 选择 Registered ActiveX Controls文件夹下的Microsoft Communications Control项并按下Insert 按钮,将 MSComm 控件支持加入到本项目中。 这时将生成一个名为CMSComm的 C+类,并且在对话框编辑器里的工具栏将出现 MSComm 控件图标。CMSComm类是由 MSComm 控件导出的一系列接口函数构成的,利用它将可以访问MSComm 控件的属性 (Property) 和方法 (Method) 。假设 PT650C秤重显示器接在计算机COM1 口上,那么打开资源编辑器,在程序主对话框(资源 ID 为 IDD_MYCOM_DIALOG) 上面放置一个MSComm 控件,并用Class Wizard 为该对话框类添加对应该控件的成员变量m_wnd COM。由于PT650C秤重显示器与计算机进行串行通信时采用7 个数据位、 1 个停止位、 偶校验方式, 并且波特率为2400/4800/9600 可选,这里我采用9600 波特率,在对话框编辑器中设置MSComm 控件的属性如下:ID:IDC_COM1(资源 ID) CommPort:1 (COM1) Settings:9600,e,7,1(波特率 9600,偶校验, 7 个数据位, 1个停止位 ) RThreshold:(每接收到1 个字符就触发一个接收数据事件)SThreshold:0(不触发发送缓冲区空事件)InputLen:1 (每次读操作从缓冲区中取一个字符)其他选项按照缺省设置或者根据具体设备的要求进行设置。如果需要通过多个串行口与多台设备通信,那么每一个串行口对应于一个单独的MSComm 控件。串行口的设置参数既可以在对话框编辑器里设定,也可以在程序代码中通过调用CMSComm 类的成员函数设定。例如,我们可以在MyCOMDlg 类的 OnInitDialog 成员函数中初始化MSComm 控件的参数,代码如下:BOOL CMyCOMDlg:OnInitDialog() CDialog:OnInitDialog(); / 以上为 MFC 框架自动生成的代码,在此不列出/TODO:Add extra initialization here m_wndCOM1.SetCommPort(1); m_wndCOM1.SetSettings(9600,e,7,1); m_wndCOM1.SetRThreshold(1); m_wndCOM1.SetSThreshold(0); m_wndCOM1.SetInputLen(1); m_wndCOM1.SetPortOpen(TRUE);/ 打开通信口return TRUE;/return TRUE unless you set the focus to a control 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - 接下来为程序主对话框建立响应MSComm 事件的处理函数, 每当 MSComm 控件触发事件时该函数将被调用。在对话框编辑器中用鼠标左键双击MSComm 控件图标,在弹出的对话框中输入函数名OnCommCOM1,该事件处理函数的原型定义和消息映射入口将自动被添加到 CMyCOMDlg 类中,我们所要做的只是在OnCommCOM1 函数中给出具体的数据处理程序段,代码示例如下:void CMyCOMDlg:OnCommCom1() /TOD O:Add your control notification handler code here CString sInput; switch(m_wndCOM1.GetCommEvent() case 1: /comEvSend 事件/* 如有数据要发送,可采用以下代码:VARIANT varOut; VariantInit(&varOut); varOut.vt=VT_BSTR; USES_CONVERSION; varOut.bstrVal=SysAllocString(T2OLE)(My data); if(varOut.bstrVal) m_wndCOM1.SetOutput(varOut); SysFreeString(varOut.bstrVal); */ break; case 2: /comEvReceiv 事件,有数据到达sInput=m_wndCOM1.GetInput().bstrVal; / 对接收到的数据做必要处理break; case 1009:/comEventRxParity 事件,奇偶校验错误/ 错误处理代码break; default: break; 在这里必须注意的一点是在发送字符数据时,必须向MSComm 控件提供Unicode 格式的字符串,在以上代码中用到了USES_CONVERSION和 T2OLE宏进行 ANSI字符串到Unicode字符串的转换,具体内容可参考Visual C+6.0所带的 MSDN 文档,在此不加赘述。本文对 Windows 98 下 Visual C+ 程序中使用MSComm 串行通信ActiveX 控件编程的方法做了探讨,显示了ActiveX 技术的强大功能、充分的灵活性和易用性,具有一定的实践意义。参考文献1 Microsoft 公司 .Microsoft Development Network. 2 Kate Gregory.Special Edition Using Visual C+5. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -