首页 > 范文大全 > 正文

在VC++中利用ActiveX控件进行串行通信的方法

开篇:润墨网以专业的文秘视角,为您筛选了一篇在VC++中利用ActiveX控件进行串行通信的方法范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

1 引言

串口通讯是计算机与其他设备进行数据交换时经常使用的方法之一,他具有连接简单、使用灵活方便、数据传递可靠等优点,在工业监控、数据采集和实时控制系统中得到了广泛应用。当前的串口通信编程常用的方法主要有:使用vc++提供的MSComm控件实现串口通信、基于MFC框架实现串口通信、基于某个串口通信C++类、基于API的串口通信。这四种方法相比较,MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。

2 ActiveX控件(MSComm控件)介绍

ActiveX是Windows下进行应用程序开发的崭新技术,它的核心内容是组件对象模型COM(Component Object Model)。Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件。具体地说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

(1) 事件驱动法

在使用事件驱动法设计程序时,每当有新字符到达,或端口状态改变,或发生错误时,MSComm控件将触发OnComm事件,而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。

(2) 查询方法

这种方法适合于较小的应用程序。在这种情况下,每当应用程序执行完某一串行口操作后,将不断检查MSComm控件的CommEvent属性以检查执行结果或者检查某一事件是否发生。

3 在VC++中利用activex控件进行串行通信的步骤

(1) 在当前的Workspace中插入MSComm控件

Project菜单Add to ProjectComponents and ControlsRegistered ActiveX Controls选择Components: Microsoft Communications Control,version 6.0 插入到当前的Workspace中。

(2) 在MainFrm.h中加入MSComm控件

protected:

CMSComm m_ComPort;

在Mainfrm.cpp::OnCreare()中:

DWORDstyle=WS_VISIBLE|WS_CHILD;

if (!m_ComPort.Create(NULL,style,CRe

ct(0,0,0,0),this,ID_COMMCTRL)){

TRACE0("Failed to create OLE Communications Control\n");

return -1;

}

(3) 初始化串口

m_ComPort.SetCommPort(1);

m_ComPort.SetInBufferSize(1024);

m_ComPort.SetOutBufferSize(512);

if(!m_ComPort.GetPortOpen())

m_ComPort.SetPortOpen(TRUE);

m_ComPort.SetInputMode(1);

m_ComPort.SetSettings("9600,n,8,1");

m_ComPort.SetRThreshold(1);

m_ComPort.SetInputLen(0);

(4) 捕捉串口事项

MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。我们介绍比较实用的事件驱动方法:有事件(如接收到数据)时通知程序。在程序中需要捕获并处理这些通讯事件。

(5) 串口读写

完成读写的函数的确很简单,GetInput()和SetOutput()就可。两个函数的原型“VARIANT GetInput();”及“ void SetOutput(const VARIANT& newValue);”都要使用VARIANT类型(所有Idispatch::Invoke的参数和返回值在内部都是作为VARIANT对象处理的)。

无论是在PC机读取上传数据时还是在PC机发送下行命令时,我们都习惯于使用字符串的形式(也可以说是数组形式)。查阅VARIANT文档知道,可以用BSTR表示字符串,但遗憾的是所有的BSTR都包含宽字符,即使我们没有定义_UNICODE_UNICODE也是这样! WinNT支持宽字符, 而Win95并不支持。

4 结论

本文对Win32下VC++ 程序中使用MSComm串行通信ActiveX控件编程的方法做了探讨,显示了ActiveX技术的强大功能、充分的灵活性和易用性,具有一定的实践意义。

参考文献

[1]龚建伟,熊光明.VisualC++/TurboC串口通信编程实践[M].北京:电子工业出版社,2004.

[2]陈细军,谭民.VC编程中的串口通信技术.计算机应用,2001,(9).

[3]张筠,刘书智.VisualC++实践与提高(串口通信与工程应用篇)[M].北京:中国铁道出版社,2006.

[4]张雄飞,方方.Windows平台下数据采集(串口通讯的实现).计算机自动测量与控制,2001.

[5]刘鎏.用VisualC++实现计算机串行通信的几种方法[J].舰船电子工程,2006.