Qt5串口 通信——控制zolix位移平臺

因手機殼測量工作需要多個小市場多次測量拼接,擬采用位移平臺+標致點的方法,現記錄一些通過Qt5(C++)控制位移平臺的代碼。


源碼下載

鏈接: https://pan.baidu.com/s/1qY7egMS 密碼: 1fxj


Qt5串口通信類

新建Qt工程的時候要勾選Serial Port模塊,如果忘記勾選可以在QT VS TOOL——Qt Project Settings中進行設置。

勾選這個

QSerialPort模塊提供的兩個類:QSerialPort類和QSerialPortInfo類,QSerialPort類提供了對串口的操作,QSerialPortInfo類提供了對串口信息的獲取。

讀取串口信息

//讀取串口信息

foreach?(constQSerialPortInfo?&info,?QSerialPortInfo::availablePorts())

{

qDebug()<<"Name:"<<info.portName();

qDebug()<<"Description:"<<info.description();

qDebug()<<"Manufacturer:"<<info.manufacturer();

}

依據串口信息打開串口

按照zolix說明書中,SC300-2B位移平臺的串口名稱為USB Serial Port,搜索字符串contains("USB Serial Port")的串口,將其打開。

//保存串口

if (t_info.description().contains("USB Serial Port"))

{

m_info = t_info; // 找到需要通信的串口

}

打開串口

//打開串口

m_serial.setPort(m_info);

m_serial.close();//先關閉串口,再打開,可以保證串口不被其他函數占用

if (m_serial.open(QIODevice::ReadWrite))

{

//////////////////////////////////////////////////////////////////////////

//先打開串口才能進行設置

//////////////////////////////////////////////////////////////////////////

//設置波特率

m_serial.setBaudRate(19200);

//設置數據位

m_serial.setDataBits(QSerialPort::Data8);

//設置校驗位

m_serial.setParity(QSerialPort::NoParity);

//設置停止位

m_serial.setStopBits(QSerialPort::OneStop);

測試通信正常

m_serial.write("\r");//發送回車測試是否連通

m_serial.waitForReadyRead(3000);

QByteArray readComData = m_serial.readAll();

if(!readComData.isEmpty())

{

readComDataWhole += readComData;//使用類里的一個變量readComDataWhole來存儲返回的數據

if(readComDataWhole.contains("\r"))//如果返回的數據中含有\r,即回車符,則做解析操作

{

qDebug() << readComDataWhole;//對回傳的數據做操作

if(readComDataWhole.contains("OK"))

{

qDebug() << QStringLiteral("設備連接正常!");

}

}

}


發送數據

使用m_serial.write()方法,傳入參數為QByteArray。

回傳數據

使用m_serial.readAll()方法獲得串口數據。

將讀取數據建立一個slots,與m_serial的readyRead()信號相關聯。

connect(&m_serial, SIGNAL(readyRead()), this, SLOT(readComDataSlot()));


回傳數據中出現分段現象:

使用一個readComDataWhole全局變量保存整體的data,如果接受到的數據沒有結束符(在這里使用的是\r),則將數據加到readComDataWhole的尾部,直到有結束符時,認為是一次完整數據接收,做相應的處理。處理完后將readComDataWhole.clear();

//讀取串口數據

QByteArray readComData = m_serial.readAll();

if(!readComData.isEmpty())

{

readComDataWhole += readComData;//使用類里的一個變量readComDataWhole來存儲返回的數據

if (readComDataWhole.contains("\r"))//如果返回的數據中含有\r,即回車符,則做解析操作

{

qDebug() << readComDataWhole;//對回傳的數據做操作


readComDataWhole.clear();//清空緩存

readComData.clear();

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 串口操作 串口操作需要的頭文件 #include /*標準輸入輸出定義*/ #include /*標準函數庫定...
    旅行家John閱讀 1,398評論 0 3
  • 在不久前,接觸到了物聯網的開發,當時一臉懵逼了,后來問了度娘和有幸遇到大神的指導,最終實現了功能。 首先先弄懂跟硬...
    Orz013閱讀 4,523評論 0 2
  • 前言: 最近在總是看見有人在群里面問一些串口通信相關的問題,特別是對于我們這些做APP出生的程序員來說,初次接觸串...
    Roy88閱讀 37,644評論 30 37
  • 朋友,你好 我是說話改變世界的創始人Tom,我創建這個組織的初衷不是為了盈利。因此,我在荔枝電臺或者做的分享都是免...
    Tom教練閱讀 825評論 0 3