Qt 串列埠通訊

2021-08-06 01:25:05 字數 1660 閱讀 8603

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...