国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Qt5開發(fā)的面向工業(yè)設(shè)備的狀態(tài)監(jiān)視及控制軟件

2023-08-26 04:13劉佳梁
電腦知識(shí)與技術(shù) 2023年20期
關(guān)鍵詞:網(wǎng)絡(luò)通信數(shù)據(jù)庫(kù)

劉佳梁

關(guān)鍵詞:Qt Creator;C++;狀態(tài)監(jiān)視;網(wǎng)絡(luò)通信;數(shù)據(jù)庫(kù)

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1009-3044(2023)20-0070-03

21世紀(jì)以來,我國(guó)工業(yè)化進(jìn)程快速發(fā)展,工業(yè)自動(dòng)化設(shè)備呈現(xiàn)高精度、高集成的發(fā)展趨勢(shì),與此同時(shí),由于電子系統(tǒng)故障引發(fā)的災(zāi)難性事故時(shí)有發(fā)生,也因此造成大量的人力、物力損失,針對(duì)現(xiàn)代設(shè)備故障狀態(tài)監(jiān)控、設(shè)備管理及遠(yuǎn)程控制,研發(fā)一款設(shè)備狀態(tài)監(jiān)視及控制軟件,提供設(shè)備健康監(jiān)視平臺(tái),實(shí)現(xiàn)設(shè)備遠(yuǎn)程管理及控制,符合當(dāng)前設(shè)備管理的發(fā)展方向[1]。因此,提出了一種基于Qt Creator開發(fā)環(huán)境,使用C++編程語(yǔ)言開發(fā)的設(shè)備狀態(tài)監(jiān)視及管理軟件,軟件編寫過程中使用的Qt Creator 版本為5.9.1,MinGw 版本為5.3.0,運(yùn)行平臺(tái)為X86架構(gòu)計(jì)算機(jī),操作系統(tǒng)為Win?dows 10專業(yè)版。

1 軟件工作流程

軟件基于UDP/IP協(xié)議并采用組播的方式與系統(tǒng)內(nèi)各設(shè)備進(jìn)行通信,將接收到的來自各設(shè)備數(shù)據(jù)包解碼后分發(fā)給數(shù)據(jù)管理線程和界面管理線程,數(shù)據(jù)管理線程負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行分類、提取并存儲(chǔ),便于事后數(shù)據(jù)回放及分析[2]。界面管理線程實(shí)時(shí)更新設(shè)備狀態(tài)顯示,對(duì)于異常狀態(tài)進(jìn)行告警提示,同時(shí)響應(yīng)界面用戶操作,實(shí)現(xiàn)對(duì)設(shè)備遠(yuǎn)程控制。軟件工作流程圖如圖1 所示。

2 軟件界面

Qt Designer(界面設(shè)計(jì)師)提供了非常豐富的界面控件,使用鼠標(biāo)簡(jiǎn)單拖拽控件即可創(chuàng)建出程序界面框架,同時(shí)運(yùn)用Qt布局管理系統(tǒng)可以對(duì)程序界面實(shí)現(xiàn)布局、美化。軟件主界面如圖2所示。

Qt提供了信號(hào)與槽的機(jī)制,其中信號(hào)會(huì)在特定情況下被觸發(fā),槽函數(shù)則可以理解為與信號(hào)相對(duì)應(yīng)的響應(yīng)函數(shù),使用connect函數(shù)將信號(hào)與槽函數(shù)進(jìn)行連接,也可以通過disconnect函數(shù)斷開信號(hào)與槽函數(shù)之間的連接關(guān)系,當(dāng)界面中控件狀態(tài)發(fā)生變化時(shí),系統(tǒng)會(huì)自動(dòng)發(fā)射相應(yīng)信號(hào),只需將處理函數(shù)與信號(hào)連接,便可實(shí)現(xiàn)界面操作響應(yīng)。

信號(hào)與槽函數(shù)有三個(gè)特點(diǎn):1) 信號(hào)之間可以互相連接;2) 一個(gè)信號(hào)可以連接多個(gè)槽函數(shù);3) 多個(gè)信號(hào)可以連接同一個(gè)槽函數(shù)。這三個(gè)特點(diǎn)決定了信號(hào)與槽函數(shù)的應(yīng)用非常靈活、便利,同時(shí)能夠極大降低對(duì)象之間的耦合度[3]。

當(dāng)界面中存在較多同類型控件需要響應(yīng)點(diǎn)擊操作時(shí),可以通過findChildren函數(shù)遍歷界面中同類型控件,在for循環(huán)中執(zhí)connect操作,減少重復(fù)代碼并且易于維護(hù)[4],如圖3所示。

findChildren 函數(shù)找到了MainWindow 下的所有QPushButton類型按鈕。然后給每一個(gè)按鈕設(shè)置圖標(biāo)和尺寸,通過connect 函數(shù)連接到buttonClick()槽函數(shù)[5]。槽函數(shù)代碼如圖4所示。

3 網(wǎng)絡(luò)通信

系統(tǒng)采用udp組播的方式進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)收發(fā)。Qt 提供QUdpSocket類用于實(shí)現(xiàn)udp通信,進(jìn)行udp通信前需要通過以下步驟對(duì)套接字進(jìn)行初始化[6]。

3.1 指定網(wǎng)卡

通常計(jì)算機(jī)中存在多塊網(wǎng)卡,QNetworkInterface::allInterfaces()可以獲得計(jì)算機(jī)中所有網(wǎng)卡,通過MAC 地址識(shí)別出指定網(wǎng)卡,使用setMulticastInterface函數(shù)指定用該網(wǎng)卡用于組播通信。

3.2 生存時(shí)間

設(shè)置組播數(shù)據(jù)的生存時(shí)間TTL(Time-To-Live)。TTL指一個(gè)數(shù)據(jù)報(bào)到達(dá)目的地址之前跳過網(wǎng)絡(luò)的最大次數(shù),可以理解為數(shù)據(jù)報(bào)每跨1個(gè)路由生存時(shí)間就會(huì)減1,程序中將生存時(shí)間設(shè)置為1,表示數(shù)據(jù)報(bào)只能在同一路由下的局域網(wǎng)內(nèi)傳播。

3.3 禁止回環(huán)

通過setSocketOption(QAbstractSocket:: Multicast?LoopbackOption,0)函數(shù),設(shè)置禁止回環(huán),表示本機(jī)不能接收自身發(fā)出的數(shù)據(jù)。

3.4 綁定IP地址及端口

通過bind函數(shù)綁定IP地址和端口,從而進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)報(bào)收發(fā)。當(dāng)有數(shù)據(jù)報(bào)傳入時(shí)會(huì)自動(dòng)發(fā)射ready?Read()信號(hào),通過connect()函數(shù)將readyRead()信號(hào)與ReceiveData()槽函數(shù)連接,即可在ReceiveData()函數(shù)中讀取并處理接收到的數(shù)據(jù)報(bào)。

3.5 加入組播組

使用joinMulticastGroup()函數(shù)加入指定組播組地址,便可以接受該組播組中的數(shù)據(jù)報(bào)。網(wǎng)絡(luò)初始化函數(shù)代碼如圖5所示。

網(wǎng)絡(luò)數(shù)據(jù)接收函數(shù)代碼如圖7所示,當(dāng)套接字中存在未讀取數(shù)據(jù)時(shí),hasPendingDatagrams()函數(shù)返回true。pendingDatagramSize()的值表示第一個(gè)數(shù)據(jù)報(bào)的長(zhǎng)度,同時(shí)初始化一個(gè)對(duì)應(yīng)長(zhǎng)度的QbyteArray變量,將readDatagram()讀取的數(shù)據(jù)報(bào)內(nèi)容存入變量中,在processData()函數(shù)中對(duì)讀取的數(shù)據(jù)報(bào)進(jìn)行解碼等處理[7]。網(wǎng)絡(luò)數(shù)據(jù)接收函數(shù)代碼如圖6所示。

網(wǎng)絡(luò)數(shù)據(jù)發(fā)送函數(shù)代碼如圖7所示。

4 數(shù)據(jù)庫(kù)

本軟件包含歷史狀態(tài)信息查詢及事后分析功能,選擇使用數(shù)據(jù)庫(kù)實(shí)現(xiàn)歷史信息存儲(chǔ)及查詢操作。Qt 為數(shù)據(jù)庫(kù)操作提供了QtSql模塊,其中包含一套無關(guān)于開發(fā)平臺(tái)和數(shù)據(jù)庫(kù)類型的調(diào)用接口,通過運(yùn)用該模塊,實(shí)現(xiàn)數(shù)據(jù)庫(kù)和應(yīng)用程序的無縫銜接。開發(fā)人員只需掌握基本的SQL語(yǔ)句,即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)。結(jié)合本軟件對(duì)數(shù)據(jù)庫(kù)的性能需求,最終選擇使用QSQLite數(shù)據(jù)庫(kù)[8]。

qt_sql_default_connection為數(shù)據(jù)庫(kù)的默認(rèn)連接名稱,實(shí)際應(yīng)用中,可以通過QSqlDatabase::addDatabase()函數(shù)的第二個(gè)參數(shù)指定連接名稱。第一個(gè)參數(shù)QSQLite表示使用SQLite數(shù)據(jù)庫(kù)。如果默認(rèn)連接不存在,則創(chuàng)建連接并添加數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)打開函數(shù)代碼如圖8所示。

SQLite的創(chuàng)建表語(yǔ)句為CREATE TABLE,同時(shí)還可以判斷表是否已經(jīng)存在。創(chuàng)建表函數(shù)代碼如圖9所示,創(chuàng)建了一個(gè)名為temp_data的數(shù)據(jù)表,包含7列,第一列是id,類型是整型,設(shè)置為主鍵且自增長(zhǎng)。第二列是TIME,類型是可變字符串,最長(zhǎng)20個(gè)字符,五至六列為info,數(shù)據(jù)類型是浮點(diǎn)值。第七列為STATUS,數(shù)據(jù)類型是帶符號(hào)的整數(shù)[9]。

SQLite的插入語(yǔ)句是INSERT INTO,插入函數(shù)代碼如圖10所示。

QSqlQueryModel 類為SQL 結(jié)果集提供了一個(gè)只讀數(shù)據(jù)模型,是用于執(zhí)行 SQL 語(yǔ)句和遍歷結(jié)果集的高級(jí)接口,可用于為 QTableView 等視圖類提供數(shù)據(jù)。從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)操作如圖11 所示,通過can?FetchMore()、fetchMore()函數(shù),提取數(shù)據(jù)庫(kù)中整個(gè)結(jié)果集[10]。數(shù)據(jù)庫(kù)數(shù)據(jù)獲取函數(shù)代碼如圖11所示。

5 結(jié)束語(yǔ)

Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,提供給應(yīng)用程序開發(fā)者建立圖形用戶界面所需的所用功能,同時(shí),Qt還具有優(yōu)良的跨平臺(tái)特性,并提供豐富的API。在工程項(xiàng)目開發(fā)中,使用Qt進(jìn)行程序開發(fā)極大降低了使用者的學(xué)習(xí)成本。

主要介紹了使用Qt軟件進(jìn)行界面搭建、網(wǎng)絡(luò)數(shù)據(jù)通信模塊以及數(shù)據(jù)庫(kù)的建立和使用,在實(shí)際應(yīng)用過程中,軟件同時(shí)接收20余個(gè)分系統(tǒng)的實(shí)時(shí)狀態(tài)信息,對(duì)故障狀態(tài)進(jìn)行提示告警,同時(shí)將關(guān)鍵信息納入數(shù)據(jù)庫(kù),并對(duì)設(shè)備關(guān)鍵節(jié)點(diǎn)進(jìn)行控制?;谖闹薪榻B的程序模型,可快速開發(fā)出適用于類似場(chǎng)景的狀態(tài)監(jiān)視及控制軟件。

猜你喜歡
網(wǎng)絡(luò)通信數(shù)據(jù)庫(kù)
基于網(wǎng)絡(luò)通信的智能照明系統(tǒng)設(shè)計(jì)
基于CAN總線的網(wǎng)絡(luò)通信信道的建模與研究
計(jì)算機(jī)網(wǎng)絡(luò)通信常見問題與技術(shù)發(fā)展研究
網(wǎng)絡(luò)通信中信息隱藏技術(shù)的應(yīng)用
基于網(wǎng)絡(luò)通信的校園智能音箱設(shè)計(jì)
談?dòng)?jì)算機(jī)網(wǎng)絡(luò)通信常見問題及技術(shù)發(fā)展