一、前言
Qt通讯方式有很多,如Tcp/Ip、串口等,但对Usb通讯支持较弱,此篇主要描述Qt与plc设备通过usb进行通讯的解决方法;
开发环境:Qt5.5、VS2013
优势:支持热插拔usb线
二、实现
1、采用线程,通过hidapi方式读写usb信息
1)hidapi源码下载地址:https://github.com/signal11/hidapi
2)定义usb描述符
hid_device *m_Handle;
3)线程中,m_Handle默认为空,定时1秒检测是否有接入usb
void SerialThread::run()
{
while(m_IsRun)
{
m_Mutex.lock();
if(NULL == m_Handle)
openUsb();
if(m_StartSend)
sendData();
m_Mutex.unlock();
if(NULL == m_Handle)
msleep(1000);
else
exec();
}
}
4)根据指定pid、vid,打开usb口
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
void SerialThread::openUsb()
{
int result = hid_init();
if(0 != result)
emit funcSig(SERIAL_FIND, QVariantList() << 1);
else
{
//打开pid=0x1FC9,vid=0x00A2的usb
m_Handle = hid_open(0x1FC9, 0x00A2, NULL);
if(NULL == m_Handle)
{
//判断是否第一次open,第一次需报错
if(m_IsSendError)
{
m_IsSendError = false;