1.概述
因為專案需要,對qt的串列埠通訊進行了一些學習,這個專案的乙個需求是將乙個測溫儀器的資料讀取到電腦進行處理,根據這個儀器的通訊協議,每次讀取前都需要對它寫入命令。這裡用到了qt進行了讀寫操作,其中遇到了關於十六進製制write問題並得以解決。使用到的qt庫:qtserialport
2.詳細
首先需要在mainwindow.h中新增標頭檔案和串列埠類的宣告,並寫乙個槽函式用來讀取資料:
#include#include
....
private slots:
void readdata();
....
qserialport *serial;
然後在建構函式中進行初始化:
mainwindow::mainwindow(qwidget *parent) :qmainwindow(parent),
ui(newui::mainwindow)
然後在槽函式中進行讀取資料:
qbytearray buf;buf = serial->readall(); //
serial->readall().tohex() 轉換成16進製制形式
qdebug()
《根據裝置的通訊協議,我進行寫資料的時候總是得不到應答資料,根據協議我應該傳送 "00em"加回車來獲取資料,但是直接傳送字串得不到結果。後來我在串列埠助手上使用16進製制傳送,得到了資料,也就是需要傳送的內容是"30 30 65 6d 0d",由於這個傳送內容是從輸入框中獲得的,所以需要將其轉換成十六進製制傳送,下面是轉換的函式:
char converthexchar(char ch) //
中間函式
void stringtohex(qstring str, qbytearray &senddata) //
轉換函式
i++;
if(i >=len)
break
; lstr =str[i].tolatin1();
hexdata =converthexchar(hstr);
lowhexdata =converthexchar(lstr);
if((hexdata == 16) || (lowhexdata == 16
))
break
;
else
hexdata = hexdata*16+lowhexdata;
i++;
senddata[hexdatalen] = (char
)hexdata;
hexdatalen++;
}senddata.resize(hexdatalen);
}
接下來就是傳送資料了,在乙個按鈕的槽函式中:
qbytearray buf;qstring buf_;
buf_ = ui->lineedit->text();
stringtohex(buf_,buf);
serial->write(buf); //
寫資料
Qt串列埠通訊
1.在早期的qt版本中,主要是採用第三方類作為qt對串列埠通訊的支援,具體可參考 2.在進入qt5的時代後,串列埠通訊已經作為qt的乙個附件部分,但沒有作為qt的正式模組。使用這樣的串列埠模組時,需要自行編譯串列埠部分,具體可參考 鑑於以上兩種做法都比較複雜,本人一直沒有除錯串列埠通訊部分,直到最近...
Qt 串列埠通訊
開發環境 qt5.5.1 qt creator 3.5.1 1 建立專案 qtserialdemo 2 新增元件 修改 專案名.pro qtserialdemo.pro 新增 qt serialport 3 新增如下使用 qt串列埠 所需的標頭檔案 include include 4 主要串列埠通訊...
QT 串列埠通訊2
自動識別com口 通過讀登錄檔實現 當然linux下不可用 class mainwindow public qmainwindow,public ui mainwindowclass public qstring getcomm int index,qstring keyorvalue 讀取鍵名 p...