• 大小: 137KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-12-17
  • 语言: C/C++
  • 标签: VS2010  RS232  C++  MFC  

资源简介

用VS2010创建的MFC完整界面工程,具有完整的串口初始化和收发功能类,界面的初始化按钮和查询按钮功能以及支持,其余功能研究者可以进一步在类上扩展。仅供学习用。本人亲自开发的,请大家多提意见!

资源截图

代码片段和文件信息

#include “StdAfx.h“
#include “LYVRSerial.h“

/*
(1)该程序为串口通讯设备调试的初步测试程序,仅供学习研究C++程序之
范例,未经作者书面同意,不得随意用于商业用途。
(2)如果你在运用于商业用途时明确标识该段程序的代码来源为“成都朗玉测控”
即可免费使用,否则视为侵权。
(3)在用于商业及其它用途时,对任何损失及后果本作者不负任何责任!

成都朗玉测控,版权所有,2018年~2025年
权利人:甘亚东,联系人:甘亚东,13981885178,qq:891219042
*/
//该型模块的实例化数量累计,用于互斥量初始化。
int sc_module_cnt = 0;

CLYVRSerial::CLYVRSerial():
m_bInitOK(false)
{

m_hComm = INVALID_HANDLE_VALUE;

dwInQueue = COMM_INQUEUE_BUFLEN; //输入缓冲区字节数
dwOutQueue = COMM_OUTQUEUE_BUFLEN; //输出缓冲区字节数

m_dcb.BaudRate = 57600;//波特率
    m_dcb.fBinary = TRUE;//是否允许传二进制
    m_dcb.fParity = FALSE;//是否奇偶校验
    m_dcb.ByteSize = 8;//数据位
    m_dcb.Parity = NOPARITY;//ODDPARITY;//奇偶校验方式
    m_dcb.StopBits = ONESTOPBIT;//停止位

m_inLen = 0;
m_outLen = 0;

//只设置读取的间隔超时,不设置读取的总超时,因为其系数只能设定
//最小为1ms,会时间太长,也没有意义。
//设定发送总超时,是为了防止万一有什么故障。
memset(&m_timeOver 0 sizeof(m_timeOver));

//总超时 = constant + multipilier * rcvNumber.
m_timeOver.ReadTotalTimeoutConstant = 1;
m_timeOver.ReadTotalTimeoutMultiplier = 1;

m_timeOver.ReadIntervalTimeout = 1;//1ms,两个字符间的最大延迟。
m_timeOver.WriteTotalTimeoutConstant = 1;
m_timeOver.WriteTotalTimeoutMultiplier = 1;

sc_module_cnt++;
TCHAR temp[16];
wsprintf(temp L“LYVRCONTROL_%02d“ sc_module_cnt);
m_rsMutex = CreateMutex(NULL FALSE temp);
}


CLYVRSerial::~CLYVRSerial(void)
{
Close();
}

// 在指定的串口号上打开SC73调理板。
// 返回0表示无异常,一切操作顺利,否则返回非零的数表示错误号。
int CLYVRSerial::Open(int comPort)
{
if(m_hComm != INVALID_HANDLE_VALUE)
return COMM_ALREADY_OPEN;

m_Port = comPort;
int err = InitCommPort();
if(err != 0)
return err;

return 0;
}

// 关闭SC73调理板,释放全部资源。
// 返回0表示无异常,一切操作顺利,否则返回非零的数表示错误号。
int CLYVRSerial::Close(void)
{
//丢弃通信资源的输出或输入缓冲区字符并终止在通信资源上挂起的读、写操操作
if(m_hComm != INVALID_HANDLE_VALUE)
{
PurgeComm( m_hComm PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
CloseHandle( m_hComm );
}
m_hComm = INVALID_HANDLE_VALUE;

return 0;
}

// 查询SC73调理板,其应返回一个确认报文,表明其存在且正常。
// 返回1表示正常,0表示异常。其它数值表示执行函数过程中发生错误。
int CLYVRSerial::Touch(void)
{
if(m_hComm == INVALID_HANDLE_VALUE)
return COMM_INVALID_HANDLE;
DWORD dwWaitResult = WaitForSingleobject( 
m_rsMutex    // handle to mutex
2000);  //1秒等待// INFINITE:no time-out interval

if (dwWaitResult == WAIT_object_0) 
{
//在接收/发送数据前缓冲区中可能有垃圾数据或者中途想清空缓冲区数据.
PurgeComm(m_hComm PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );

//组装报文
int i=0;
m_outBuf[i++] = 0xA5;//主机命令标识头为固定值
m_outBuf[i++] = 0x01;//数据的个数,字节数
m_outBuf[i++] = 0x00;//地址/分页 两个字节
m_outBuf[i++] = 0x00;
m_outBuf[i++] = 0x00;//命令:查询
m_outBuf[i++] = 0x01;//数据:反射式询问
m_outBuf[i] = CalcCheckSum(m_outBuf i);
m_outLen = i+1;

//发送报文
int nErr = 0;
BYTE nresult = 0;
if((nErr = SendBuf()) != 0)
{
nErr = COMM_SENDBUF_FAIL;
}
else
{

//接收报文
int num = 7;//期望收到的字符数。
if((nErr = RecvBuf(num)) != 0)
nErr = COMM_RECVBUF_FAIL;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       9787  2018-04-24 12:15  VRControlRS232\VRControlRS232\LYVRSerial.cpp

     文件       2139  2018-04-24 12:15  VRControlRS232\VRControlRS232\LYVRSerial.h

     文件       3146  2018-04-24 11:07  VRControlRS232\VRControlRS232\ReadMe.txt

     文件      67777  2018-04-24 12:19  VRControlRS232\VRControlRS232\res\VRControlRS232.ico

     文件        684  2018-04-24 11:07  VRControlRS232\VRControlRS232\res\VRControlRS232.rc2

     文件       2570  2018-04-24 11:33  VRControlRS232\VRControlRS232\resource.h

     文件        147  2018-04-24 11:07  VRControlRS232\VRControlRS232\stdafx.cpp

     文件       1632  2018-04-24 11:07  VRControlRS232\VRControlRS232\stdafx.h

     文件        234  2018-04-24 11:07  VRControlRS232\VRControlRS232\targetver.h

     文件     106904  2018-04-24 11:33  VRControlRS232\VRControlRS232\VRControlRS232.aps

     文件       2097  2018-04-24 11:07  VRControlRS232\VRControlRS232\VRControlRS232.cpp

     文件        879  2018-04-24 12:15  VRControlRS232\VRControlRS232\VRControlRS232.h

     文件      12336  2018-04-24 11:33  VRControlRS232\VRControlRS232\VRControlRS232.rc

     文件       6066  2018-04-24 11:19  VRControlRS232\VRControlRS232\VRControlRS232.vcxproj

     文件       2223  2018-04-24 11:19  VRControlRS232\VRControlRS232\VRControlRS232.vcxproj.filters

     文件        143  2018-04-24 11:07  VRControlRS232\VRControlRS232\VRControlRS232.vcxproj.user

     文件       6538  2018-04-24 12:15  VRControlRS232\VRControlRS232\VRControlRS232Dlg.cpp

     文件       1525  2018-04-24 12:15  VRControlRS232\VRControlRS232\VRControlRS232Dlg.h

     文件        909  2018-04-24 11:07  VRControlRS232\VRControlRS232.sln

    ..A..H.     14336  2018-04-24 12:22  VRControlRS232\VRControlRS232.suo

     目录          0  2018-04-24 12:23  VRControlRS232\VRControlRS232\Debug

     目录          0  2018-04-24 12:19  VRControlRS232\VRControlRS232\res

     目录          0  2018-04-24 12:24  VRControlRS232\Debug

     目录          0  2018-04-24 12:23  VRControlRS232\ipch

     目录          0  2018-04-24 11:33  VRControlRS232\VRControlRS232

     目录          0  2018-04-24 12:23  VRControlRS232

----------- ---------  ---------- -----  ----

               242072                    26


评论

共有 条评论