触摸屏租赁
Touch screen rental
广告机租赁
Advertising rental
机器人租赁
Robot leasing
 当前位置:首页 > > VC++中用MSComm控件进行串口编程

用MSComm控件进行串口编程

(一)实验目的
使用MSComm控件读写串行口

(二)实验内容
学会使用MSComm控件,掌握控件的基本属性,学会使用OnComm事件。

(三)要点提示

1、新建工程时确保选中ActiveX Controls选项(Step 2)。

2、在VC项目中加入MSComm控件
选择“Project->Add To Project->Components and Controls”菜单命令,就会弹出Components and Controls Gallery对话框。可以在Regiestered ActiveX文件夹中选中“Microsoft Communications Controls, Version 6.0”选项,单击“Insert”按钮就可以完成添加MSComm控件的操作。这时VC会自动向工程中加入一个CMSComm类(mscomm.cpp和mscomm.h)。

3、设置MSComm控件属性
在Controls工具箱窗口中可以看到MSComm控件,把它拖到你的对话框中,右键点击对话框上MSComm控件图标,选择Properties,将会看到属性页,在这里可以设置控件的大部分属性,例如可以选择Buffers页,把RThreshold的值改为1,以产生OnComm事件。所有这些属性也可以在程序中编写代码设置,例如可以在OnInitDialog加入m_comm1.SetRThreshold(1)。

4、加入成员变量
使用ClassWizard,在Member Variables中双击MSComm控件ID,可以加入CMSComm类型的成员变量。这样程序中就可以使用这个对象操作串口。

5、加入事件
右键点击对话框上MSComm控件图标,选择Events,将会弹出Evnet Handlers对话框,选择OnComm,单击OK即可。

6、VARIANT类型
Variant是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息。一般说来,你可以用Variant变量存储任何数据类型,对它执行各种操作和类型转换。它主要在VB中使用,在VC中为了支持OLE、COM、ActiveX控件而引入。在VC中VARIANT是一个struct,可以用它的不同的域引用其不同类型的值,例如当VARIANT是一个double型时,可以用它的dblVal域得到和设置它的值。VC中还引入了两个类对VARIANT类型加以支持:COleVariant和_variant_t,其中COleVariant需要包含afxdisp.h,_variant_t需要包含comdef.h。此外Windows还提供了VariantInit、VariantClear、VariantChangeType、VariantCopy等函数以方便处理VARIANT类型的变量。

7、SAFEARRAY类型
有时直接使用VARIANT不方便,这时可以考虑把数据转化成CByteArray(任何数据都可以当作字节流处理),再使用COleVariant把它转化成VARIANT。这时数据在VARIANT中被表示为SAFEARRAY类型,可以用它的parray得到指向SAFEARRAY类型的指针,使用SAFEARRAY的pvData域得到指向原始数据的指针。同样Windows也提供了一组函数以方便处理SAFEARRAY类型的变量,详情请参阅MSDN。下面一段程序演示了将一个字符串以字节数组的形式放入VARIANT,再从VARIANT中取出的过程:

//原始数据
CString str="Test.";
//存为CByteArray
CByteArray array;
array.SetSize(str.GetLength()+1);
strcpy((char*)array.GetData(),str);
//转为COleVariant
COleVariant tmp(array);
//转为VARIANT
VARIANT var=tmp;
……
//得到SAFEARRAY
SAFEARRAY* sa=var.parray;
//得到数据长度
int len=sa->rgsabound[0].cElements;
//得到指向原始数据的指针
//也可直接用char* pData=(char*)var.parray->pvData获得
char* pData=(char*)sa->pvData;

使用这种方法可以把MSComm传输的任何数据都以字节流处理。(即把数据转成CByteArray发送,从GetInput().parray->pvData获得)

(四)示例程序
该程序使用两个MSComm控件分别控制COM1和COM2。COM1和COM2已连线的情况下,向COM1写数据(SetOutput),COM2的OnComm事件将会被触发,表示COM2的数据缓冲区已经收到数据,这时程序就可以自动去读COM2(GetInput),并将读到的数据显示出来。

示例程序下载


工作室地址:重庆石桥铺电脑城B座 | 微信:z35544216 | 网址:www.35544216.com