用微软的MSComm 控件编程

一、MSComm控件简介: 

         关于MSComm控件的资料请参考:http://msdn.microsoft.com/en-us/library/aa259393(v=VS.60).aspx 

         MSComm(Microsoft Communications Control)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串口收发数据的简便方法。MSComm控件提供了以下两种用于通信的方法:

        1.事件驱动(Event-driven )方法:

         事件驱动方法是用于串口交互的一种非常有效的方法。许多情况下,事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或 Carrier Detect (CD)或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。 OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。 在编程过程中,可在 OnComm 事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。

        2.查询方法:

        查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“ 确定 ”响应。
        每个 MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。我们可以从Windows的控制面板来修改这些串口地址和中断地址。

        虽然MSComm控件有许多重要属性,但首先需要熟悉下面几个:

       

        (1)CommPort属性 (Integer)
                  void CMSComm::SetCommPort(short nNewValue);
                  short CMSComm::GetCommPort(); 
         这一属性设置并返回连接的串行端口号,Windows将会利用该串口和外界通信。在设计时,nNewValue可以设置成从1~16的任何数(默认值为1)。但是如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。
        注意:必须在打开端口之前设置CommPort属性。

        (2)Settings属性
                   void CMSComm::Settings(LPCTSTR lpszNewValue);
                   String CMSComm::GetSettings();
         该属性用于设置并返回数据传输速率、奇偶校验、数据比特、停止比特参数。当端口打开时,如果value非法,则MSComm控件产生错误380(非法属性值)。其中lpszNewValue用字符串表示,由四个设置值组成,有如下的组成格式:“BBBB,P,D,S”,BBBB为数据传输速率,P为奇偶校验,D为数据比特,S为停止比特。Value的默认值是:“9600,N,8,1”.

          传输速率可以是:110、300、600、1200、2400、4800、9600、14400、19200、28800、38400、56000、57600、115200、12800、25600
          奇偶校验可以是:E偶校验(EVEN) ,M标号校验(MARK) ,N无校验(NONE) ,O奇校验(ODD) ,S空格校验(SPACE)  
          数据比特数可以是:4、5、6、7、8
          停止比特数可以是:1、1.5、2。
注意:只有当通信的双方的Settings属性值都一样时,通信连接才能生效。

         (3)PortOpen属性
                    void CMSComm::SetPortOpen(BOOL bNewValue);
                    BOOL CMSComm::GetPortOpen();
         用于打开或者关闭串口。bNewValue设为TRUE,打开串口;设为FALSE关闭串口。 
         一般情况下在程序开始时打开端口,在程序结束时关闭端口。当应用程序终止时,MSComm控件将自动关闭串口。在打开串口前,确定CommPort属性调协为正确的串口号。而且,用户的串口设备必须支持Settings属性中的设置。如果硬件设备不支持Settings属性中的一些设置,则硬件工作或许不正确。        

         (4)Input属性
                    VARIANT CMSComm::GetInput();
         表示从接收缓冲区移走一串字符,将缓冲区中收到的数据读入变量。属性值为VARIAN型变量。该属性在端口未打开时不可用,在运行时是只读的。
         注意:当InputMode属性值为0时(文本模式),变量中含String型数据。当InputMode属性值为1(二进制模式),变量中含Byte型数组数据。

(5)Output属性 

           void CMSComm::SetOutput(const VARIANT & newValue); 

Output属性用于向发送缓冲区写数据流。属性为VARIANT变量。该属性在端口未打开时不可用,在运行时只是写的。 

注意:Output属性可以发送文本数据或二进制数据。传输文本数据时,应该将字符型 数据放入VARIANT变量中;传输二进制数据(即按字节传送)时,应将字节型数据放入VARIANT型变量中。如果通常给应用程序发送ANSI字符串,可以以文本方式发送。如果数据包含了内嵌控制字符、NULL字符等,必须将其作为二进制传递过去。

 

二、MSComm控件应用的例子(VS2005):

1、新建一个基于对话框的项目,在资源管理器中做出下面的对话框,对话框内右键选“插入ActiveX控件”,对话框内出现个像电话的控件,这就是MSComm控件了!

 

左图是添加到对话框的MSComm控件的属性值

2.具体源代码

http://download.csdn.net/detail/sailor_kenny_xiong/4017796
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值