您的位置:首页 > 编程语言 > C语言/C++

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

2013-05-04 17:12 746 查看

此文章参考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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: