用vs2010开发基于VC++的MFC串口通信程序2***一台机子的两个串口进行通信****

此文章参考visual C++数据采集与串口通信测控应用实战

鉴于前天的程序只能在两台电脑之间进行通信,这里给出一个电脑两个不同串口间通信的开发方案

参照上一篇文章进行开发,http://blog.csdn.net/kuangdang178/article/details/8878042
1、设计好这个程序的框架如下图:
用vs2010开发基于VC++的MFC串口通信程序2***一台机子的两个串口进行通信****_第1张图片
然后参照我的上一篇文章对各个控件进行添加变量,改变属性,添加事件等。
2、添加串口初始化程序,添加在oninitdialog函数中
if(m_ctrlcomm2.get_PortOpen())
m_ctrlcomm2.put_PortOpen(0);//如果串口是打开的则关闭
if(m_ctrlcomm3.get_PortOpen())
m_ctrlcomm3.put_PortOpen(0);//如果串口是打开的则关闭
//初始化串口com2
m_ctrlcomm2.put_CommPort(1);//选择com
m_ctrlcomm2.put_InputMode(1);//以二进制方式输入
m_ctrlcomm2.put_InBufferSize(1024);//输入缓冲区大小
m_ctrlcomm2.put_OutBufferSize(1024);//输出缓冲区大小
m_ctrlcomm2.put_Settings(_T("9600,n,8,1"));//设置串口参数
if(!m_ctrlcomm2.get_PortOpen())
m_ctrlcomm2.put_PortOpen(1);//打开串口
m_ctrlcomm2.put_RThreshold(1);//每当串口接收缓冲区有一个字符就会引发一个接收数据的oncomm事件
m_ctrlcomm2.put_InputLen(0);//设置当前接收区长度为0
m_ctrlcomm2.get_Input();//先预读缓冲区以清除残留数据
//初始化串口com3
m_ctrlcomm3.put_CommPort(4);//选择com
m_ctrlcomm3.put_InputMode(1);//以二进制方式输入
m_ctrlcomm3.put_InBufferSize(1024);//输入缓冲区大小
m_ctrlcomm3.put_OutBufferSize(1024);//输出缓冲区大小
m_ctrlcomm3.put_Settings(_T("9600,n,8,1"));//设置串口参数
if(!m_ctrlcomm3.get_PortOpen())
m_ctrlcomm3.put_PortOpen(1);//打开串口
m_ctrlcomm3.put_RThreshold(1);//每当串口接收缓冲区有一个字符就会引发一个接收数据的oncomm事件
m_ctrlcomm3.put_InputLen(0);//设置当前接收区长度为0
m_ctrlcomm3.get_Input();//先预读缓冲区以清除残留数据
3、对各个按钮添加处理事件
void Cpc_pccommDlg::OnBnClickedSend1()
{
// TODO: Add your control notification handler code here
UpdateData(1);//读取编辑框内容
m_ctrlcomm2.put_Output(COleVariant(m_strcom2));//发送数据
}




void Cpc_pccommDlg::OnBnClickedCancel1()
{
// TODO: Add your control notification handler code here
m_strcom2="";
UpdateData(0);//更新编辑框内容
}




void Cpc_pccommDlg::OnBnClickedSend2()
{
// TODO: Add your control notification handler code here
UpdateData(1);//读取编辑框内容
m_ctrlcomm3.put_Output(COleVariant(m_strcom3));//发送数据
}




void Cpc_pccommDlg::OnBnClickedCancel2()
{
// TODO: Add your control notification handler code here
m_strcom3="";
UpdateData(0);//更新编辑框
}
3、给两个comm控件添加函数
void Cpc_pccommDlg::OnCommMscomm1()
{
// TODO: Add your message handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[1024];
CString strtemp;
if(m_ctrlcomm2.get_CommEvent()==2)
{
variant_inp=m_ctrlcomm2.get_Input();
safearray_inp=variant_inp;//Variant数据转换成colesafearray型数据
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for(k=0;k safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k {
BYTE bt=*(char *)(rxdata+k);//字符型
strtemp.Format(_T("%c"),bt);//将字符送入临时变量strtemp存放
m_strcom2+=strtemp;//加入接收编辑框对应的字符串
}
}
UpdateData(0);//更新编辑框内容
}




void Cpc_pccommDlg::OnCommMscomm2()
{
// TODO: Add your message handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[1024];
CString strtemp;
if(m_ctrlcomm3.get_CommEvent()==2)
{
variant_inp=m_ctrlcomm3.get_Input();
safearray_inp=variant_inp;//Variant数据转换成colesafearray型数据
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for(k=0;k safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k {
BYTE bt=*(char *)(rxdata+k);//字符型
strtemp.Format(_T("%c"),bt);//将字符送入临时变量strtemp存放
m_strcom3+=strtemp;//加入接收编辑框对应的字符串
//AfxMessageBox(m_strcom3);
}
}
UpdateData(0);//更新编辑框内容
}
5、程序调试运行及打包
用vs2010开发基于VC++的MFC串口通信程序2***一台机子的两个串口进行通信****_第2张图片
用vs2010开发基于VC++的MFC串口通信程序2***一台机子的两个串口进行通信****_第3张图片
打包过程参考http://blog.csdn.net/kuangdang178/article/details/8880447
最后得到安装程序
用vs2010开发基于VC++的MFC串口通信程序2***一台机子的两个串口进行通信****_第4张图片
用vs2010开发基于VC++的MFC串口通信程序2***一台机子的两个串口进行通信****_第5张图片
可以尝试一下http://download.csdn.net/detail/kuangdang178/5330273

你可能感兴趣的:(串口通信)