1 MSComm介绍
在WINDOWS环境下,用户不能直接对PC的串行端口进行操作。Visual C++.NET中,通过使用微软公司提供的Microsoft Comm Control控件(简称MSComm),可以方便地实现PC与外部设备之间的串行通信,编程工作量相对较少。
2.Visual C++.NET中控件MSComm的函数与Visual C++6.0中的控件函数有所不同。
MSComm有二十多个属性,其中主要的属性有:
CommPort:设置和返回通信端口号,CommPort=1即使用串行端口Com1。
PortOpen:打开或关闭通信端口。
InBufferSize:设置接收缓冲区大小。
OutBufferSize:设置发送缓冲区大小。
Input:读取并删除缓存区中的数据。
Output:将数据写入发送缓存区。
Settings:设置波特率、奇偶校验、数据位和停止位参数,默认值为“9600,N,8,1”,即波特率9600b/s、不进行奇偶校验、8个数据位、1个停止位。
InputLen:设置每次从缓存区读取的字节数。
InputMode:设置和返回数据类型,设置为0时读取的数据为文本形式,设置为1时读取的数据为二进制数据。PC与单片机通信时,InputMode属性常设置为二进制数据形式。
Rthreshold:设置OnComm事件发生前,接收缓存区可以接收的字符数。若设置为0,则不产生OnComm事件。
串行通信控件MSComm有二种处理通信的工作方式:事件驱动方式和查询工作方式。事件驱动方式是指:当串行端口接收或发送完指定数量数据以及发生通信错误等情况时,MSComm控件触发OnComm事件,作出相应处理。查询工作方式是指:通过查询控件的某些属性值(如InBufferCount属性)来作出进一步的处理。以下的程序实例采用事件驱动方式来接收数据。
3.NET下添加步骤
按照已有的步骤注册串口控件MScomm32.ocx,注册完成后,新建一个MFC应用程序,选 工具—添加/移除工具箱项—COM组件—添加Microsoft Communication Control, version 6.0, 就会出现一个电话图标哦!!!
添加控件,右击添加变量m_com4,这个时候会生成2个重要的文件mscomm1.cpp和mscomm1.h(这是与6.0下不同点,mscomm.cpp mscomm1.h)
控件的函数不一样的啊,Set变为put_, Get变为get_ 就搞定。
///////VC.NET 的代码
void CRobotDlg::InitCom(void)
{ m_com4.put_CommPort(4);//1=表示是COM1,若要使用COM2,则将此参数改成2、以此类推
m_com4.put_InputMode(1);//设置输入方式为二进制
m_com4.put_InBufferSize(1024);//设置输入缓冲区大小
m_com4.put_OutBufferSize(1024);//设置输出缓冲区大小
m_com4.put_Settings("9600,n,8,1");//设置参数
if(!m_com4.get_PortOpen())//打开串口
m_com4.put_PortOpen(true);
m_com4.put_RThreshold(2);//2表示有2个字节引发一个事件
m_com4.put_InputLen(0);//清除输入缓冲
}
void CRobotDlg::ComSend(BYTE data)
{
CByteArray array1; //定义字节流
array1.RemoveAll(); //清空
array1.SetSize(1); //设置字节的长度
array1.SetAt(0,data); //以2进制方式发送0xAA
m_com4.put_Output(COleVariant(array1)); //发送
}
void CRobotDlg::OnBnClickedButton1()
{ // TODO: 在此添加控件通知处理程序代码
InitCom();
ComSend(0x00);
}
/////6.0的代码
void CrobotDlg::InitCom4(void)
{
m_com4.SetCommPort(4);//1=表示是COM1,若要使用COM2,则将此参数改成
//2、以此类推
m_com4.SetInputMode(1);//设置输入方式为二进制
m_com4.SetInBufferSize(1024);//设置输入缓冲区大小
m_com4.SetOutBufferSize(1024);//设置输出缓冲区大小
m_com4.SetSettings("9600,n,8,1");//设置参数
if(!m_com4.GetPortOpen())//打开串口
m_com4.SetPortOpen(true);
m_com4.SetRThreshold(2);//2表示有2个字节引发一个事件
m_com4.SetInputLen(0);//清除输入缓冲
}
void CrobotDlg::OnBnClickedComsendButton()
{// TODO: 在此添加控件通知处理程序代码
InitCom4();
ComSend(0x00);
}
void CrobotDlg::ComSend(BYTE mydata)
{
CByteArray array1; //定义字节流
array1.RemoveAll(); //清空
array1.SetSize(1); //设置字节的长度
array1.SetAt(0,mydata); //以2进制方式发送0xAA
m_com4.SetOutput(COleVariant(array1)); //发送
}
4.请看源代码的区别,详见mscomm1.h, mscomm.cpp
如mscomm1.h下的一段串口定义函数代码
void put__CommPort(short newValue)
{
static BYTE parms[] = VTS_I2 ;
InvokeHelper(0x0, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
如mscomm.cpp下的一段串口定义函数的代码
void CMSComm::SetCommPort(short nNewValue)
{ static BYTE parms[] = VTS_I2;
InvokeHelper(0x4, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, nNewValue);
}
分享到:
相关推荐
介绍vc++.net与vc++6.0使用之差别.
把VC++.NET转换成VC++6.0 把VC++.NET转换成VC++6.0
扫雷源代码,vc++.net版 扫雷源代码,vc++.net版 扫雷源代码,vc++.net版
VC++6.0写ActiveX控件,和WEB通信的一些心得
修改VC++6.0配色,下载后双击运行。
精简版VC++6.0精简版VC++6.0精简版VC++6.0精简版VC++6.0精简版VC++6.0
Win32环境下基于VC++6.0串口通信编程方法
VC++6.0常用控件使用方法简单介绍
[005]vc++6.0使用串口控件例程.zip上位机开发VC串口学习资料源码下载[005]vc++6.0使用串口控件例程.zip上位机开发VC串口学习资料源码下载[005]vc++6.0使用串口控件例程.zip上位机开发VC串口学习资料源码下载[005]...
VC++6.0简体中文版本,支持win7提示兼容问题忽略就行。 此前装过别的版本,但win...vC++6.0精简中文版版,Win7兼容,安全无毒,适合学习使用。 注册csdn就有积分送,简单快捷,安全放心,快来下载吧!下载后评论返积分!
vc++6.0使用串口控件例程知识.pdf
VC++ 6.0 音乐播放器VC++ 6.0 音乐播放器VC++ 6.0 音乐播放器VC++ 6.0 音乐播放器VC++ 6.0 音乐播放器
图解VC++6.0中使用mscomm串口控件,可以实现单片机和计算机之间进行通讯
vc++6.0基于MsComm控件的串口通讯方法非常适合于初学者
VC++ 6.0常用控件使用方法介绍 叫你如何使用MFC下的基本控件,对于一般编程有用
install shield for vc++6.0 从光盘拷下来的,因为太大所以分成两个,只要解压后放在一个文件夹就可以安装了,不收分。保证可安装。
VC++6.0 MFC 详细使用教程
VC++6.0编写的MSCOMM控件串口通信
介绍了西门子S7-200系列PLC的自由口通信模式及在Windows环境下应用VC++6.0实现PC机与PLC串行通信的编程方法,开发了玻璃器皿冲压机上位机监控系统。实际运行证明,该监控系统界面友好,实时性强,运行稳定。
VC++6.0 开发宝典 VC++6.0 开发宝典 VC++6.0 开发宝典