在vs2010中实现串口通信(基于MSComm控件)
网上关于vc串口通信的教程都是关于vc6的,现在都vs2010了,vc6真的有点老了。 找了很久大部分都是编译通不过的,通过了也出不了数据。哎,慢慢改吧,谁叫咱是初学者呢。
首先添加mscomm控件,方法有两种,这个网上说了很多我就不讲了。 添加之后对话框(基于对话框程序)会出现一个电话机的图标,双击后在右侧可以看到控件的属性。
根据自己的需要修改相应的参数。 然后是最重要的串口响应函数:
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
}
UpdateData(FALSE); //更新编辑框内容
代码中有一行是 strtemp.Format(“%c”,bt); //将字符送入临时变量strtemp存放 其中的%C是一个字符型变量,我们要的是显示16进制的数据,所以改为 strtemp.Format(“02X “,bt); //将字符送入临时变量strtemp存放 其他的就不用改动了。
然后是串口发送函数:
CByteArray hexdata;
String2Hex(m_send,hexdata); //此处返回的len可以用于计算发送了多少个十六进制数
m_com.put_Output(COleVariant(hexdata)); //发送十六进制数据
这个就相对简单多了。m_send是文本框的数据。
关于调试的话,如果没有硬件条件,可以使用虚拟串口。
在xp上虚拟串口有很多软件都行,但我自己的电脑是win7的系统,xp可以的在我电脑上就不兼容了。
哎,没办法,继续找。最后找到一个很不错的虚拟串口软件,我放在另一篇文章中,欢迎使用。
下载地址:http://115.com/file/bel5vqxp#
github地址:https://github.com/wuyuans/COMM
作者:wuyuan
本文来自Wuyuan's Blog 转载请注明,谢谢!
文章地址: https://www.wuyuans.com/blog/detail/27