1、前言
之前的博客中有一篇关于MSCOMM使用的文章,里面最然给出了例子,但是对MSCOMM的使用介绍的不够。加之,近来又接触了上位机编程方面的东西,遂详细的做点笔记在这里。
MSCOMM控件应用比较广泛的原因主要还是在于它的操作简便性。特别是不需要做很多的代码编写工作就可以实现一些很基础的功能。但是在实际的开发使用时候还是要了解一些基本的MSCOMM属性,这样在出现问题的时候才不至于找不到原因。
2、MSCOMM的常用属性
这些图片都是从书中截取出来的。该书的pdf版本下载链接附在本文的最下面。
1、 BOOL get_PortOpen()和put_PortOpen(BOOL newValue)属性
BOOL get_PortOpen() 返回当前是否打开串口,TURE为打开,FALSE为关闭;
put_PortOpen(BOOL newValue) 设置串口打开,参数newValue为要打开的串口号。
2、 put_CommPort(short newValue)和short get_CommPort()
put_CommPort() 设置需要打开的串口;
get_CommPort() 获取已经打开的串口号。
Tips:在打开串口之前必须要设置要打开的串口。在关闭串口前也必须保证串被关闭串是处于打开状态的。
3、 put_InBufferSize()和put_OutBufferSize()
put_InBufferSize() 设置输入缓冲区大小(Byte),缺省下为1024字节;
put_OutBufferSize() 设置输出缓冲区大小(Byte),缺省下为1024字节。
4、 put_InputLen()
put_InputLen() 设置当前接收区数据长度为0,表示全部读取。
5、put_InputMode()
put_InputMode() 设置为以二进制或者字符串的方式进行输入。
6、 put_RThreshold()
put_RThreshold() 设置一个阈值,当输如缓冲区的字符数量达到该阈值时,控件就会产生一个onComm事件,并且CommEvent属性设置为ComEvReceive,即为接受事件。
7、 put_Settings()
设置通信的参数,格式为:波特率,奇偶校验类型,数据位,停止位;
例如:
m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600无校验位,8位数据位,1位停止位
更多的属性可以在书(点我下载)上查找到,利用上述的属性可以做基础的串口初始化设置,设置的过程可以如下:
if(m_mscomm.get_PortOpen()) //如果串口是打开的,则关闭串口 { m_mscomm.put_PortOpen(FALSE); } m_mscomm.put_CommPort(4); //选择COM1 m_mscomm.put_InBufferSize(1024); //接收缓冲区 m_mscomm.put_OutBufferSize(1024); //发送缓冲区 m_mscomm.put_InputLen(0); //设置当前接收区数据长度为0,表示全部读取 m_mscomm.put_InputMode(1); //以二进制方式读写数据 m_mscomm.put_RThreshold(16); //接收缓冲区有1个以及1个以上字符时,将引发接收数据的OnComm事件 m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600无校验位,8位数据位,1位停止位 if(!m_mscomm.get_PortOpen()) //如果串口没有打开则打开 { m_mscomm.put_PortOpen(TRUE);//打开串口 AfxMessageBox(_T("串口1打开成功")); } else { m_mscomm.put_OutBufferCount(0); AfxMessageBox(_T("串口1打开失败")); }
3、MFC中插入MSCOMM控件
在资源管理视图的对话框资源下,右键>插入ACTIVEX控件,找到:
选择确定,并为该控件添加关联变量,添加响应的类。这样就可以对其进行操作了,串口的初始化设置如上面代码设置即可。
4、数据类型的处理
输入输出缓冲区的类型都是VARIANT类型,程序中常用的字符处理类型是CString,char*等类型。所以需要将数据类型进行转换。
在需要发送数据时: