C++实现串口的自动识别
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++实现串口的自动识别的更多相关文章
- 用VISA工具驱动继电器外设
1.驱动方式:TCP 2.开发过程 第一步:外设识别 TCP方式将继电器插上网线后,并不能像串口一样自动识别到这个外设,需要手动连接.打开NI MAX后,右击设备与接口,然后点击新建,双击VISA T ...
- 通过编写串口助手工具学习MFC过程——(九)自动识别串口的方法
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- linux下USB串口,minicom
[一].驱动相关说明: 如果直接使用串口线,而没有用到USB转串口设备,就不需要安装驱动. 如果使用了USB转串口,一般情况下也不需要安装驱动了,目前linux系统已经包含了该驱动,可以自动识别,亦可 ...
- Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件!
源:Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件! 2014年02月06日发布控件的重要更新版本: Victor 串口控件 1.5.0.2 版本 (包 ...
- RS232串口的Windows编程纪要
再次是一篇入门文,各路神仙退散. 直接进入主题,又不是历史课,关于RS232那些前世今生的故事就不摆了. 硬件链接 首先以9针小口为例(大口应当只能去博物馆看了吧)看一下管脚排布,其实RS232本身没 ...
- 东芝 B-EV4 打印机 串口打印命令
最近在做项目时候使用了东芝的B-EV4打印机,在打印Excel时候由于字体太小,导致打印非常模糊.只能通过串口名称发送打印指令进行打印.在做项目的时候查了很多关于B-EV4打印机的资料,和打印命令.资 ...
- 推荐使用集串口,SSH远程登录和FTP传输三合一工具MobaXterm
在以前的资料里,串口和SSH远程登使用SecureCRT,window与ubuntu数据传输使用filezilla,窗口切换来切换去,麻烦也眼花缭乱.有没有一个工具搞定串口.SSH和FTP?有!它就是 ...
- qt 操作串口 QSerialPort
准备工作 *.pro中加入 QT += serialport 初始化 void MainWindow::initPort() { //读取串口信息 foreach (const QSerialPort ...
- SIM900A 通过RS232串口进行短信的发送。
一.基本数据 1.SIM900A模块支持RS232串口和LVTTL串口.保留了232口,在学习或者开发时可以监听51低端单片机和模块指令执行情况,能更快的找出原因,节省开发和学习的时间. 2.此模块供 ...
随机推荐
- ROS使用小知识点
输入 rosrun rqt_graph rqt_graph 可以打开一个界面观察节点与话题的关系 绿色和蓝色的是节点 红色的是话题 查看ros中额的tf转换信息 rosrun rqt_tf_tree ...
- appscan使用教程(全)
链接图文来源:https://www.cnblogs.com/ZoeLiang/p/10198361.html 一.下载与破解 1.下载Appscan:http://download2.boulder ...
- javascript获取某个月份的天数
function DayNumOfMonth(Year,Month) //例DayNumOfMonth(2017,05);{ Month--; //月份是0~11.month=4 var ...
- Flask开发遇到的问题:BuildError: Could not build url for endpoint 'main.followers' with values ['username']. Did you mean 'main.user' instead?
@(Flask Web Development 12th chapter) 描述 Flask开发中遇到BuildError: Could not build url for endpoint 'mai ...
- Navicat 连接MySQL时出现1251错误的解决方案
我用的MySQL版本是8.0.11,比较新的MySQL版本中采用的加密方式与旧的不同,从而导致1251错误. 解决方案:打开终端连接上数据库,执行以下语句,问题解决.(自己遇到过的坑,亲测有效) US ...
- tornado--初识tornado
tornado的第一个程序 import tornado.ioloop import tornado.web class Index(tornado.web.RequestHandler): def ...
- eclipse的基本使用和配置
在workspace中src目录下的文件是java文件,bin目录下是class文件 1:基本使用 A:创建Java项目: 点击File或者在最左侧空白处,选择Java项目,在界面中写一个项目名称,然 ...
- JavaScript调用上下文(第九天)
call与apply用法 使用哪个对象去调用相应的方法: var name="window"; var obj={ name:"obj" } function ...
- 学习笔记DL008:概率论,随机变量,概率分布,边缘概率,条件概率,期望、方差、协方差
概率和信息论. 概率论,表示不确定性声明数学框架.提供量化不确定性方法,提供导出新不确定性声明(statement)公理.人工智能领域,概率法则,AI系统推理,设计算法计算概率论导出表达式.概率和统计 ...
- Linux第八节课学习笔记
su命令可以切换用户身份,一般不用,而是用sudo. visudo命令中可执行命令列表不用ALL,我们可以先使用whereis命令找出命令所对应的保存路径,然后把配置文件第99行的用户权限参数修改成对 ...