環境Ubuntu,問題如標題,求助各位大神:
1. 在Qt4中,撰寫一個SerialPort的類繼承于QFile,做一系列操作:打開串口設備、設定波特率、資料位校驗位等;
2. 然后創建一個QSocketNotifier物件系結這個fd,主要監聽它的可讀狀態,目的是當有資料從串口回傳時,進而正常處理,如下:
rn = new QSocketNotifier( QFile::handle(), QSocketNotifier::Read );
connect( rn,SIGNAL( activated(int)),this, SLOT(dataArrived()));
3. 由于這里測驗的是NB模塊,在測驗代碼中通過串口寫入AT指令,例如發送資料到服務器,均是正常的上傳。但有一個奇怪的地方是,上面所寫的槽函式并沒有觸發,即從串口讀取不到資料。導致很多AT指令無法獲取到需要的結果。槽函式如下:
void SerialPort::dataArrived()
{
char buf[ 1024 ];
int len = QFile::readData( buf, sizeof(buf) );
len = m_inBuf.write(buf,len);
{
QMutexLocker locker(&m_lock);
availData = m_inBuf.size();
}
if(availData >= _rthreshold) emit readyRead();
}
補充:
1. 單獨除錯模塊是正常的,模塊沒有損壞;
2. 串口的波特率等設定正常;寫入是沒問題的;
3. 如果只寫入一次指令,是read不到資料的;但是如果建個1秒,連續寫入10次指令,在最后可以獲取到一次read函式的資料,但不是一直成功。
查了一些資料發現其他人也有遇到類似的問題,請路過的大神多多指教,感謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/208720.html
標籤:Qt
上一篇:支付寶網關支付模式詳解
