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

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

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

参照上一篇文章进行开发,http://blog.csdn.net/kuangdang178/article/details/8878042
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<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;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<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++)
{
BYTE bt=*(char *)(rxdata+k);//字符型
strtemp.Format(_T("%c"),bt);//将字符送入临时变量strtemp存放
m_strcom3+=strtemp;//加入接收编辑框对应的字符串
//AfxMessageBox(m_strcom3);
}
}
UpdateData(0);//更新编辑框内容
}
5、程序调试运行及打包


打包过程参考http://blog.csdn.net/kuangdang178/article/details/8880447
最后得到安装程序


可以尝试一下http://download.csdn.net/detail/kuangdang178/5330273
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值