用vs2010开发基于VC++的MFC串口通信程序2***一台机子的两个串口进行通信****
2013-05-04 17:12
746 查看
此文章参考visual C++数据采集与串口通信测控应用实战
鉴于前天的程序只能在两台电脑之间进行通信,这里给出一个电脑两个不同串口间通信的开发方案
参照上一篇文章进行开发,http://blog.csdn.net/kuangdang178/article/details/88780421、设计好这个程序的框架如下图:
然后参照我的上一篇文章对各个控件进行添加变量,改变属性,添加事件等。
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
相关文章推荐
- 用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信
- 用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信
- (转载)用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信
- 基于VS2010的MFC串口开发
- 基于Nios II和eCos的串口通信程序开发
- 基于API的MFC串口通信程序编写
- cmake编译dcmtk,并利用vs2010 进行开发mfc 程序
- 如何使用VS2010来进行基于MFC4.2的开发
- 基于MFC+VC平台下开发程序问题及技巧综合
- cmake编译dcmtk,并利用vs2010 进行开发mfc 程序
- VS2010基于对话框的MFC串口通信简明例程
- 基于VC 6.0 开发的MFC程序如何在文件资源管理器中浏览并选中操作文件
- 如何使用CnComm开发串口通信程序
- 在VC++中利用ActiveX控件开发串行通信程序
- tcpdump 两个通信进程在同一台机子
- VC++控制台程序使用Mysql,以及和MFC程序的兼容问题,工具VS2010ultimate
- 多线程技术在VC++串口通信程序中的应用研究
- VC控件MSComm编写串口通信程序(转)
- 基于VC6.0 MFC的简单串口通信软件编程
- Linux下两个程序进行socket通信的简单例子