• 大小: 31.9MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-30
  • 语言: C/C++
  • 标签: VS2010  C++  MFC  thread  COM  

资源简介

这是本人毕业设计的一部分,可以直接编译使用。在虚拟机下实现两个COM端口的数据传输, 首先开启虚拟机,然后将两个的串口端COM1和COM2连接起来,设置对两个对话框的串口端口分别为COM1和COM2,将波特率,数据位,停止位,校验位设置相同参数。接下里打开串口,如果串口打开失败会有提示设置串口属性失败,本次测试时,打开串口之后虚拟机中可以清楚的看到COM1和COM2发生了变化,后面多了波特率,数据位,校验位和停止位,这也是串口开启成功的标志. 并且打开串口按钮自动变为了关闭串口,表示串口打开成功。随后在发送框中写入要发送的数据,点击发送消息按钮即可将数据从一个对话框发送到另一个对话框。这样就完成了在虚拟机串口虚拟成功的条件下,检测串口通信的测试。

资源截图

代码片段和文件信息

#include “StdAfx.h“
#include “SerialPort.h“   
#include“Thread.h“

CSerialPort::CSerialPort(void)
{
m_hComm = NULL;    //窗口句柄的初始化
}

CSerialPort::~CSerialPort(void)
{
CloseComm();     //释放
}
void CSerialPort::StartComm()   //打开线程
{
m_threadComm.SetThreadData((DWORD)this);  //设计数据开启
m_threadComm.Start();
}

BOOL CSerialPort::OpenComm(CString strComm)   

{
if(NULL ==m_hComm )  //首先判断串口是不是NULL
{
m_hComm =CreateFile((TCHAR*)(LPCTSTR)strCommGENERIC_READ|GENERIC_WRITE
0NULLOPEN_EXISTINGFILE_ATTRIBUTE_NORMAL |FILE_FLAG_OVERLAPPEDNULL);
     //指定哪一个串口   可以读 可以写(访问模式) 共享模式为0(不能共享)  创建方式 文件重叠属性   0
if(INVALID_HANDLE_VALUE == m_hComm)  //判断窗口句柄无效 
{
    int nError = GetLastError();     //若不存在 返回错误类型
m_hComm = NULL;       
    return   FALSE;
}
         return TRUE;  //创建文件  打开成功
 }
 return FALSE;   // 打开失败     ////////////////////////////////////////////////////////////////////////////////
}
BOOL CSerialPort::SetCommState(DWORD dwBaudrateBYTE byParity BYTE byByteSizeBYTE byStopBits)
{
if(m_hComm == NULL) return FALSE;
DCB dcb;           
BOOL bRet = ::GetCommState(m_hComm&dcb);    //返回关于串口的所有属性
if(!bRet)              //返回值是否正确
{   if(m_hComm)         //是否已经打开了
   {
 CloseHandle(m_hComm);
 m_hComm = NULL;      //然后释放掉
    }
    return FALSE;  

dcb.BaudRate = dwBaudrate;    
dcb.ByteSize = byByteSize;
dcb.Parity   =  byParity;
dcb.StopBits = byStopBits;
bRet =::SetCommState(m_hComm&dcb);   //设置串口的dcb块   ////问题可能出在这里  设置了的DCB的块
if(!bRet)                   //属性设置是否失败
{
if(m_hComm)
{
CloseHandle(m_hComm);
m_hComm =NULL;
}
return FALSE;         //返回去执行
}
return TRUE;              //设置串口属性成功的
}

BOOL CSerialPort::SetupComm(DWORD dwInqueueDWORD dwQutQueue)     
{
if(m_hComm == NULL) return FALSE;      //判断串口是否存在
return ::SetupComm(m_hCommdwInqueuedwQutQueue);   
}
BOOL CSerialPort::PurgeComm(DWORD dwFlags)
{
if(m_hComm == NULL) return FALSE;
return ::PurgeComm(m_hCommdwFlags);    //清除函数标志位
}

BOOL CSerialPort::SetCommMask(DWORD dwEvtMask)
{
if(m_hComm == NULL) return FALSE;
return ::SetCommMask(m_hCommdwEvtMask);   //设置事件类型
}



BOOL CSerialPort::WriteFile(IN LPCVOID lpBufferIN DWORD nNumberOfBytesToWriteOUT LPDWORD lpNumberOfBytesWrittenIN LPOVERLAPPED lpOverlapped)
{   
if(m_hComm == NULL) return FALSE;
return::WriteFile(m_hCommlpBuffernNumberOfBytesToWritelpNumberOfBytesWrittenlpOverlapped);
}

BOOL CSerialPort::ReadFile(OUT LPVOID lpBufferIN DWORD nNumberOfBytesToReadOUT LPDWORD lpNumberOfBytesReadIN LPOVERLAPPED lpOverlapped )
{
if(m_hComm == NULL) return FALSE;
return::ReadFile(m_hCommlpBuffernNumberOfBytesToReadlpNumberOfBytesReadlpOverlapped);
}

BOOL CSerialPort::ClearCommError(OUT LPDWORD lpErrorsOUT LPCOMSTAT lpStat)
{
if(m_hComm == NULL) return FALSE;

return ::ClearCommError(m_hCommlpErrorslpStat);
}

BOOL CSerialPort::GetOverlappedResult

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-08-20 17:28  基于VS2010MFC的上位机源程序\
     目录           0  2018-04-22 16:23  基于VS2010MFC的上位机源程序\Debug\
     文件      166912  2018-08-20 17:27  基于VS2010MFC的上位机源程序\Debug\WinDemo.exe
     文件     1079244  2018-08-20 17:27  基于VS2010MFC的上位机源程序\Debug\WinDemo.ilk
     文件     5655552  2018-08-20 17:27  基于VS2010MFC的上位机源程序\Debug\WinDemo.pdb
     目录           0  2018-08-20 17:25  基于VS2010MFC的上位机源程序\ipch\
     目录           0  2018-08-20 17:25  基于VS2010MFC的上位机源程序\ipch\windemo-23b32b7c\
     目录           0  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\
     文件    58609664  2018-08-20 17:28  基于VS2010MFC的上位机源程序\WinDemo.sdf
     文件         888  2018-04-20 14:34  基于VS2010MFC的上位机源程序\WinDemo.sln
     文件       23040  2018-08-20 17:28  基于VS2010MFC的上位机源程序\WinDemo.suo
     目录           0  2018-08-20 17:28  基于VS2010MFC的上位机源程序\WinDemo\Debug\
     文件        8698  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\cl.command.1.tlog
     文件      112824  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\CL.read.1.tlog
     文件        8906  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\CL.write.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link-cvtres.read.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link-cvtres.write.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.23056-cvtres.read.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.23056-cvtres.write.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.23056.read.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.23056.write.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.32032-cvtres.read.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.32032-cvtres.write.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.32032.read.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.32032.write.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.32712-cvtres.read.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.32712-cvtres.write.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.32712.read.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.32712.write.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.46972-cvtres.read.1.tlog
     文件           2  2018-08-20 17:27  基于VS2010MFC的上位机源程序\WinDemo\Debug\link.46972-cvtres.write.1.tlog
............此处省略52个文件信息

评论

共有 条评论