资源简介
用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
- 上一篇:走迷宫问题栈实现.cpp
- 下一篇:C++课程设计教务管理系统.zip
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- (学习)VS2010之MFC入门到精通教程
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
评论
共有 条评论