3.2 Qt
信號通信機制
作為一款上位機控制軟件,與通過指令收發(fā)的形式與下位機進行通信是其主要職能。
使用
Qt
開發(fā),首先要考慮通信問題。信號與槽(
Signal & Slot
)機制是
Qt
軟件獨創(chuàng)的
一種通信方式
[16]
。信號類似與一個開關(guān),而槽函數(shù)類似于一個燈泡。當(dāng)開關(guān)觸發(fā)后,燈
泡開始工作。信號與槽也是如此
[17]
。當(dāng)表示信號函數(shù)的事件觸發(fā)后,比如點擊一個按鈕,
就會發(fā)出一個信號,需要實現(xiàn)的目的就是槽函數(shù)要表達的信息。它隱藏了復(fù)雜的底層實
現(xiàn),完成信號和槽的關(guān)聯(lián)后,發(fā)射信號并不需要知道
Qt
是如何找到槽函數(shù)的
[18]
。與某
些開發(fā)框架的回調(diào)函數(shù)(
callbacl
)相比,信號與槽這種機制更加靈活多變,也讓
Qt
在
界面設(shè)計時,對各個組件的編程目標(biāo)更加明確。
信號和槽函數(shù)是用
QObject::connect()
函數(shù)進行連接的的。一般寫成:
QObject::connect(sender,SIGNAL(signal()),recevier,SLOT(slot()));
或者
connect(sender,SIGNAL(signal()),recevier,SLOT(slot()));//QObject
可省略
在上面的函數(shù)中,
sender
表示發(fā)出信號的控件名,
signal()
是該信號的名稱。比如按
鈕的點擊,文本框的輸入等。同理,
recevier
表示接收信號的類名稱,可以是窗體,或
者對話框等。
slot()
函數(shù)為相對應(yīng)的槽函數(shù),表明接收信號的類要執(zhí)行的操作
[19]
??梢允?
窗體的彈出,或者顯示一段文本。在使用信號和槽函數(shù)機制進行編程時,需要明確以下
內(nèi)容:
4.
一個信號允許與數(shù)個槽函數(shù)進行配對,數(shù)個信號也能夠關(guān)聯(lián)相同的槽函數(shù)
[20]
。信
號與槽函數(shù)之間并沒有固定的數(shù)目匹配。需要注意的是,當(dāng)一個信號與幾個槽函數(shù)連接
時,槽函數(shù)的實現(xiàn)需要參照具體程序,根據(jù)程序中關(guān)系的先后依次進行。這種一對多,
多對一的對應(yīng)關(guān)系可以用圖
3.2
表示。
5.
不同信號之間也能夠互相建立關(guān)系。并不是信號必須對應(yīng)槽函數(shù)。信號也可以觸
發(fā)另一個信號,再去響應(yīng)一個或幾個槽函數(shù),可以根據(jù)具體的情況靈活運用
[21]
。
6.
信號與槽函數(shù)的關(guān)聯(lián)方式是很迅速的、即時的。類似于中斷,當(dāng)觸發(fā)了一個信號
槽函數(shù)時,會立刻執(zhí)行。只有這個槽函數(shù)執(zhí)行完畢,主程序才會繼續(xù)運行
[22]
。
信號與槽函數(shù)的通信機制是
Qt
編程的根本原則。除此之外,還有一些函數(shù)需要事件
去觸發(fā)。比如鼠標(biāo)操作和鍵盤的鍵入。這些操作在
Qt
中都有對應(yīng)的函數(shù)來響應(yīng)。圖
3.3
為常見的幾種事件處理函數(shù)
[23]
。
3.3
軟件程序界面的設(shè)計和實現(xiàn)
根據(jù)
Qt
的通信機制,結(jié)合項目需求,軟件除開機界面外,設(shè)計為三個功能窗口。分
別是模擬源窗口、數(shù)據(jù)回讀窗口、數(shù)據(jù)分離窗口。
3.3.1
開機界面
開機界面顯示軟件名稱和版本號以及軟件功能入口。包括模擬源窗口、數(shù)據(jù)回讀窗
口、數(shù)據(jù)分離窗口三個功能窗口。每個窗口都是功能獨立,互不干擾。使用時,可以根
據(jù)具體需求選擇對應(yīng)的的功能按鈕。開機界面如圖
3.4
所示。
3.3.2
地面數(shù)據(jù)模擬窗口
地面數(shù)據(jù)模擬是整個系統(tǒng)的必要一環(huán)。在飛行試驗前,有必要用模擬數(shù)據(jù)來檢測記
錄儀的工作情況。模擬源分為手動和自動兩種模式。模擬源窗口界面如圖
3.5
所示。
點擊系統(tǒng)上電后,軟件發(fā)指令給
CPU
,控制繼電器工作,系統(tǒng)上電。手動模式下可
以自由選擇任意開關(guān)量和模擬量進行測試,方便檢查系統(tǒng)某一路是否故障。自動模式下,
軟件只發(fā)送一條指令。
CPU
收到指令后,會自動上電,依次啟動各路開關(guān)量和模擬量數(shù)
據(jù),并記錄在存儲器中,實現(xiàn)操作自動化。測試臺上都有相應(yīng)的信號燈顯示某一路開關(guān)
是否打開。右邊窗口顯示即時操作信息和反饋信息。
模擬源模式的工作時間可以自行控制,通常試驗時間為
3-5
分鐘。其中,每一路開
關(guān)量數(shù)據(jù)的開關(guān)時間均以數(shù)據(jù)的形式存存儲器中,回讀后可以通過數(shù)據(jù)直觀的看到每個
開關(guān)的啟動時間和順序。圖
3.4
中
<
系統(tǒng)上電
>
和
<
自動模式
>
按鈕均為為復(fù)用按鈕,點擊
一次就會變
<
系統(tǒng)斷電
>
和
<
停止測試
>
。測試臺中的主控
CPU
負(fù)責(zé)對收到的數(shù)據(jù)進行總
體的編幀存儲。
3.3.3
數(shù)據(jù)回讀窗口
數(shù)據(jù)回讀是整個軟件功能的核心部分。負(fù)責(zé)將已經(jīng)編幀并存儲到
Flash
中的數(shù)據(jù)回
讀到上位機。硬件接口為百兆以太網(wǎng)接口芯片
W5300
,采用
UDP
協(xié)議進行回讀。回讀
后的數(shù)據(jù)存儲到桌面上,數(shù)據(jù)格式為
.hex
文件。窗口界面如圖
3.6
所示。
首先點擊
<
系統(tǒng)上電
>
按鈕,然后配置網(wǎng)絡(luò)
IP
和端口號。點擊
<
連接
>
按鈕,界面顯
示當(dāng)前網(wǎng)絡(luò)連接狀態(tài)。接著選擇存儲器。系統(tǒng)裝配有兩個存儲器芯片,且均有備份,確
保數(shù)據(jù)保存完整。點擊
<
讀取記錄器信息
>
按鈕,會在界面顯示當(dāng)前存儲器的存儲狀態(tài),
包括上電次數(shù),數(shù)據(jù)大小等信息,用戶可根據(jù)顯示的信息選擇讀取次數(shù)和讀取量,點擊
<
讀主存儲器
>
或者
<
讀備存儲器
>
開始讀數(shù)。數(shù)據(jù)會保存到桌面,以讀取時間命名。讀取
結(jié)束后,文本框內(nèi)會有提示。最后點擊
<
停止讀數(shù)
>
按鈕,使
FPGA
端空閑。用戶也可以
根據(jù)情況選擇擦除存儲器。界面右側(cè)文本框內(nèi)容為操作步驟。每一步操作和反饋均在下
方文本框內(nèi)即時顯示。每個按鈕在上一步操作未完成之前,都是灰色不可用的,這樣做
的目的是為了防止用戶誤操作。讀取結(jié)束后點擊
<
退出
>
按鈕,退出當(dāng)前界面,返回主界
面,執(zhí)行下一步操作。
3.3.4
數(shù)據(jù)分離窗口
數(shù)據(jù)分離窗口的主要功能是對已經(jīng)回讀的原始數(shù)據(jù)文件進行分離。數(shù)據(jù)分離窗口界
面如圖
3.7
所示。
圖中每一個按鈕都代表分離一路數(shù)據(jù)。點擊每個按鈕,自動彈出文件索引窗口,選
擇分離已經(jīng)回讀的任意一次原始數(shù)據(jù)。分離結(jié)束后,彈出信息提示框表明分離結(jié)束。輸
出的子數(shù)據(jù)文件存放到桌面上。通過分離數(shù)據(jù),進一步觀察分析每一路數(shù)據(jù),與預(yù)先設(shè)
定好的模擬數(shù)據(jù)作對比,進而對整個系統(tǒng)的運行情況作出結(jié)論。
數(shù)據(jù)分離基本思路是按照不同通道數(shù)據(jù)的幀頭進行分離。由于每個通道的數(shù)據(jù)都是
獨立互不影響的,且數(shù)據(jù)格式固定,即幀頭
+
幀計數(shù)
+
數(shù)據(jù)
+
校驗和。所以按照幀頭判斷
可以很準(zhǔn)確的將原始數(shù)據(jù)分離開來。分離過程程序設(shè)計流程圖如圖
3.8
所示。
?深圳信邁提供RK3399+FPGA的軟硬件方案。
5.1
軟件功能測試
將開發(fā)板與測試臺連接,包括開發(fā)板電源
12V
由測試臺提供。串口、網(wǎng)口與測試臺
連接。接通測試臺電源,可以看到測試臺電壓顯示窗口數(shù)值穩(wěn)定為
27.7V
,表明電源、
串口、網(wǎng)口接通狀態(tài)的指示燈都為綠色。系統(tǒng)硬件連接如圖
5.1
所示。
打開軟件,首先選擇進入模擬源工作模式。點選
<
手動模式
>
。依次點擊各個開關(guān)量
模擬量按鈕,工作時間設(shè)為
5
分鐘。軟件工作界面如圖
5.2
。窗口即時顯示操作信息。
系統(tǒng)工作結(jié)束,開始回讀數(shù)據(jù)。在軟件數(shù)據(jù)回讀界面,按照提示框內(nèi)的操作流程進
行讀數(shù)配置。工作界面如圖
5.3
所示。
數(shù)據(jù)回讀后自動存到桌面上,生成以存儲時間命名的數(shù)據(jù)源文件。文章來源:http://www.zghlxwxcb.cn/news/detail-482546.html
5.2
測試結(jié)果
將回讀成功的數(shù)據(jù)從
rk3399
提供的
USB
口傳輸?shù)?
PC
端。通過數(shù)據(jù)解析軟件處理,
按各通道數(shù)據(jù)幀頭將原始數(shù)據(jù)分離,最終輸出
7
路數(shù)據(jù)。用
Hexedit
和
Matlab
軟件進行
查看和處理,得到對應(yīng)的數(shù)據(jù)源碼和波形圖。每一路數(shù)據(jù)前
8
個字節(jié)中,
4
個字節(jié)為數(shù)
據(jù)幀頭,
4
個字節(jié)為幀計數(shù),在原始數(shù)據(jù)中都可以直觀的看出。
7.
開關(guān)量和模擬量測試結(jié)果如圖
5.4
所示。數(shù)據(jù)幀頭
F1F20000
,頻率
100Hz
,幀計
數(shù)間隔為
2
。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-482546.html