1.首先需要遍历注册表得到所有可用的串口

将得到的每一个串口保存到向量vector中,代码如下:

// 得到所有的串口号
vector<string> cnComm::getComPort()
{
HKEY hKey;
char portName[], commName[];
// 打开串口注册表对应的键值
if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm", NULL, KEY_READ, &hKey))
{
int i = ;
int mm = ;
DWORD dwLong, dwSize;
while (TRUE)
{
dwLong = dwSize = sizeof(portName);
// 枚举串口
if (ERROR_NO_MORE_ITEMS == ::RegEnumValue(hKey, i, portName, &dwLong, NULL, NULL, (PUCHAR)commName, &dwSize))
{
break;
}
comName.push_back(commName);
i++;
}
// 关闭注册表
RegCloseKey(hKey);
}
else
{
MessageBox(NULL,"您的计算机的注册表上没有HKEY_LOCAL_MACHINE:Hardware\\DeviceMap\\SerialComm项","警告",MB_OK);
}
// 返回串口号
return comName;
}

2.串口的自动识别

硬件开发时,就事先规定通信的协议,然后再依次将得到的串口号打开,向串口中写入事先规定好的字符,这里是“CHECKCONNECT”,如果没有得到事先规定的返回值,则通信失败,关闭串口,并打开下一个串口,如果得到规定的“OK”就代表通信成功,识别串口成功。详细的代码如下所示:

// 自动识别串口
bool cnComm::OnCommunicate()
{
int port_index;
// 遍历当前可用的串口号
for (int i = ; i < comName.size(); ++i)
{
cnComm();
// 初始化通信标志
IsCommflag = false;
// 得到串口号的ID,因为得到的是ASCII码,要将其转化到十进制
port_index = comName[i][comName[i].size() - ] - '';
// 依次打开可用的串口号
Open(port_index, "115200,n,8,1");
// 写入连接检查的数据
char* Data = "CHECKCONNECT";
Write((const char *)Data); // 开辟20个字节的地址,初始化为0
char p[] = { };
// 从缓冲区当中得到数据,首先要考虑延时的问题,所以这里睡眠100毫秒
Sleep();
char* aa = ReadString(p, , );
// 如果返回的数据中的前两个字节是“OK”,则表示通信成功
if (strncmp("OK", aa, ) == )
{
IsCommflag = true;
//MessageBox(NULL, "通信成功", "提示", MB_OK);
return true;
}
else // 否则通信不成功
{
IsCommflag = false;
// 关闭串口,同时也关闭关联线程
Close();
}
}
return IsCommflag;
}

C++实现串口的自动识别的更多相关文章

  1. 用VISA工具驱动继电器外设

    1.驱动方式:TCP 2.开发过程 第一步:外设识别 TCP方式将继电器插上网线后,并不能像串口一样自动识别到这个外设,需要手动连接.打开NI MAX后,右击设备与接口,然后点击新建,双击VISA T ...

  2. 通过编写串口助手工具学习MFC过程——(九)自动识别串口的方法

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  3. linux下USB串口,minicom

    [一].驱动相关说明: 如果直接使用串口线,而没有用到USB转串口设备,就不需要安装驱动. 如果使用了USB转串口,一般情况下也不需要安装驱动了,目前linux系统已经包含了该驱动,可以自动识别,亦可 ...

  4. Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件!

    源:Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件! 2014年02月06日发布控件的重要更新版本: Victor 串口控件 1.5.0.2 版本 (包 ...

  5. RS232串口的Windows编程纪要

    再次是一篇入门文,各路神仙退散. 直接进入主题,又不是历史课,关于RS232那些前世今生的故事就不摆了. 硬件链接 首先以9针小口为例(大口应当只能去博物馆看了吧)看一下管脚排布,其实RS232本身没 ...

  6. 东芝 B-EV4 打印机 串口打印命令

    最近在做项目时候使用了东芝的B-EV4打印机,在打印Excel时候由于字体太小,导致打印非常模糊.只能通过串口名称发送打印指令进行打印.在做项目的时候查了很多关于B-EV4打印机的资料,和打印命令.资 ...

  7. 推荐使用集串口,SSH远程登录和FTP传输三合一工具MobaXterm

    在以前的资料里,串口和SSH远程登使用SecureCRT,window与ubuntu数据传输使用filezilla,窗口切换来切换去,麻烦也眼花缭乱.有没有一个工具搞定串口.SSH和FTP?有!它就是 ...

  8. qt 操作串口 QSerialPort

    准备工作 *.pro中加入 QT += serialport 初始化 void MainWindow::initPort() { //读取串口信息 foreach (const QSerialPort ...

  9. SIM900A 通过RS232串口进行短信的发送。

    一.基本数据 1.SIM900A模块支持RS232串口和LVTTL串口.保留了232口,在学习或者开发时可以监听51低端单片机和模块指令执行情况,能更快的找出原因,节省开发和学习的时间. 2.此模块供 ...

随机推荐

  1. idea 启动 springBoot debug很慢,正常启动很快是什么原因

    说实话,从我开始使用springboot框架以来,就一直遇到这个问题,我刚把项目从SSM框架转成 spring boot 框架时,就发现有时候启动项目特别慢,有时候特别快,当时觉得特别奇怪,但也一直没 ...

  2. Linux命令行下载工具

    目录 wget aria2 cURL Youtube-dl https://zh.wikipedia.org/wiki/下载管理程序比较 https://wiki.archlinux.org/inde ...

  3. bootstrap实现列的拖动

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...

  4. 学习笔记CB010:递归神经网络、LSTM、自动抓取字幕

    递归神经网络可存储记忆神经网络,LSTM是其中一种,在NLP领域应用效果不错. 递归神经网络(RNN),时间递归神经网络(recurrent neural network),结构递归神经网络(recu ...

  5. c++输出小数

    #include <stdio.h> printf("%.4lf",value); #include <iomanip> cout.setf(ios::sh ...

  6. sql注入-推断是否存在SQL注入-加法和减法

    这里我们需要区分一下数字型和字符串型: 数字型:不需要使用单引号来表示 其他类型:使用单引号来表示 综合上述,我们可以发现我们的例子是数字型的,这样我们就可以使用加法和减法来判断了. 加法,我们在参数 ...

  7. [R] Lexical & Dynamic Scoping / Execution & Calling environments / Closures

    Lexical Scoping :有Java繼承中呼叫子類時先生成父類的概念,呼叫函數後,系統會轉至其定義處,將其 environment 中所具有的東西(有些可能定義在外層)形成 Closure [ ...

  8. obs源码uml

  9. flutter 容器 几种写法

    1.Stack: 取代线性布局 (译者语:和Android中的LinearLayout相似),Stack允许子 widget 堆叠, 你可以使用 Positioned 来定位他们相对于Stack的上下 ...

  10. 压力测试:系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式

    PS:下面是性能测试的主要概念和计算公式,记录下: 一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高, ...