当前位置:   article > 正文

C++实现串口的自动识别_c++怎么能自动识别com病切了连接

c++怎么能自动识别com病切了连接

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

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

  1. //得到所有的串口号
  2. vector<string> cnComm::getComPort()
  3. {
  4. HKEY hKey;
  5. char portName[256], commName[256];
  6. //打开串口注册表对应的键值
  7. if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm", NULL, KEY_READ, &hKey))
  8. {
  9. int i = 0;
  10. int mm = 0;
  11. DWORD dwLong, dwSize;
  12. while (TRUE)
  13. {
  14. dwLong = dwSize = sizeof(portName);
  15. //枚举串口
  16. if (ERROR_NO_MORE_ITEMS == ::RegEnumValue(hKey, i, portName, &dwLong, NULL, NULL, (PUCHAR)commName, &dwSize))
  17. {
  18. break;
  19. }
  20. comName.push_back(commName);
  21. i++;
  22. }
  23. //关闭注册表
  24. RegCloseKey(hKey);
  25. }
  26. else
  27. {
  28. MessageBox(NULL,"您的计算机的注册表上没有HKEY_LOCAL_MACHINE:Hardware\\DeviceMap\\SerialComm项","警告",MB_OK);
  29. }
  30. //返回串口号
  31. return comName;
  32. }

2.串口的自动识别

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

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

串口通信的完整源码下载地址:

https://download.csdn.net/download/jacken123456/10408075

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/484003
推荐阅读
相关标签
  

闽ICP备14008679号