孫潔茹,陳曉寧,王 健,潘瑞娟
(安徽大學(xué) 電氣工程與自動化學(xué)院,安徽 合肥 230601)
隨著科技的發(fā)展,遠程監(jiān)控在各行各業(yè)均有廣泛應(yīng)用[1].通過上位機軟件使探測器實現(xiàn)數(shù)據(jù)采集和工作模式控制,具有重要意義[2].Qt是 Qt Company開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架[3-5].文獻[6]基于Qt設(shè)計了上位機軟件,實現(xiàn)了與下位機的數(shù)據(jù)傳輸,但不能滿足大量數(shù)據(jù)的存儲及分類管理.文獻[7]基于Qt和WiFi設(shè)計了一種室內(nèi)環(huán)境監(jiān)測系統(tǒng),但未實現(xiàn)下位機的控制.以上研究結(jié)果表明,目前探測器設(shè)備存在數(shù)據(jù)存儲不便、控制距離不遠、數(shù)據(jù)顯示不直觀等問題.鑒于此,筆者擬設(shè)計基于Qt的探測器溫控上位機軟件,利用RS232串口采集探測器溫度、電流等數(shù)據(jù),通過數(shù)據(jù)庫對數(shù)據(jù)進行分類存儲及管理,且將這些數(shù)據(jù)直觀顯示于終端設(shè)備.
探測器溫控系統(tǒng)由探測器和上位機組成.探測器通過上位機軟件獲得相關(guān)設(shè)備數(shù)據(jù)并控制其工作模式.通過RS-232串口將數(shù)據(jù)傳至上位機軟件,上位機軟件實現(xiàn)數(shù)據(jù)的存儲、顯示.探測器溫控系統(tǒng)的工作原理如圖1所示.
圖1 探測器溫控系統(tǒng)的工作原理
為實現(xiàn)數(shù)據(jù)的實時監(jiān)測和設(shè)備的自動控制,需設(shè)計上位機軟件,以實現(xiàn)上位機與下位機間的通信[8].上位機軟件的設(shè)計要求如下:
(1)通過串口實現(xiàn)數(shù)據(jù)的接收、發(fā)送.
(2)通過采集到的數(shù)據(jù)計算得到電壓、電流及溫度值.
(3)根據(jù)采集的數(shù)據(jù)實現(xiàn)反饋控制.
(4)定義相關(guān)計數(shù),記錄串口通信過程.
(5)繪制電壓、電流實時動態(tài)曲線,且在界面顯示探測器及熱沉的實際溫度.
(6)存儲遙測數(shù)據(jù)、通訊指令數(shù)據(jù)、通訊日志數(shù)據(jù).
筆者以Qt為開發(fā)平臺設(shè)計上位機軟件.通過XML的Qt Designer能拖拽控件,隨時查看界面效果,減小代碼量,縮短開發(fā)周期[9].上位機軟件結(jié)構(gòu)如圖2所示.
圖2 上位機軟件結(jié)構(gòu)
上位機軟件通過RS-232串口與探測器通信,以保證數(shù)據(jù)穩(wěn)定傳輸[10].通過串口接收工控機采集的探測器數(shù)據(jù).上位機根據(jù)通信協(xié)議解析接收的數(shù)據(jù)后,再進行相應(yīng)的處理得到實際數(shù)據(jù).
4.1.1 串口參數(shù)設(shè)置
使用Qt自帶的QSerialPort類實現(xiàn)與下位機的通信,通過該類可訪問串口[11].在pro文件中添加Qt+=serialport語句,創(chuàng)建QSerialPort 類對象,查找可用串口,添加串口名稱,然后對波特率、數(shù)據(jù)位、檢驗位、停止位等參數(shù)進行設(shè)置.
4.1.2 數(shù)據(jù)處理
從緩存區(qū)獲取數(shù)據(jù)幀,轉(zhuǎn)化為16進制源碼并顯示于主界面.為了保證不同數(shù)據(jù)通信協(xié)議的一致性,在通信協(xié)議中添加命令碼作為數(shù)據(jù)判斷位.當(dāng)命令碼為50H時,有效數(shù)據(jù)位為2路探測器電壓.當(dāng)命令碼為51H時,有效數(shù)據(jù)位為4路探測器熱沉電壓.當(dāng)命令碼為52H時,有效數(shù)據(jù)位為2路探測器電流.通信協(xié)議如表1所示.
表1 通信協(xié)議
將16進制源數(shù)據(jù)代入下式計算模擬輸入電壓
(1)
其中:DOUT為16進制源數(shù)據(jù),VREF為參考電壓,N為分辨率.
對溫度進行采樣的電路如圖3所示.熱敏電阻R0串聯(lián)精密電阻R1是為了對基準(zhǔn)電壓分壓.
圖3 對溫度進行采樣的電路
將計算出的模擬輸入電壓代入下式計算熱敏電阻
(2)
將R0代入下式計算探測器的溫度
(3)
其中:a=-4.148,b=3 770.615,c=-118 278.184.
將R0代入下式,計算得到兩個值,其中較大的值為探測器熱沉溫度
(4)
其中:a=-0.000 000 653,b=0.003 862 314,c=1-R0/1 000.
每條指令發(fā)送前彈出確認窗口,避免誤操作.下位機接收指令后執(zhí)行相應(yīng)控制,控制成功則返回信號至上位機.若10 s內(nèi)未收到返回信號則重新下發(fā)指令,直到收到返回信號.發(fā)送指令后,在發(fā)送文本框內(nèi)顯示當(dāng)前發(fā)出的指令.
(1)手動控制.用戶根據(jù)系統(tǒng)運行狀態(tài)手動選擇指令,控制數(shù)據(jù)內(nèi)容的采集.手動控制流程如圖4(a)所示.
(2)自動控制.無人值守狀況下,選擇自動控制模式.設(shè)置時間間隔,發(fā)送采集指令.根據(jù)采集到的電壓電流值判斷系統(tǒng)運行狀態(tài).當(dāng)檢測到溫度或驅(qū)動電流異常時發(fā)送控制指令,實現(xiàn)制冷器開關(guān)及驅(qū)動保護的自動控制.自動控制流程如圖4(b)所示.
圖4 控制流程圖
上位機通過串口將控制指令發(fā)給探測器實現(xiàn)控制.采用主從結(jié)構(gòu),主機發(fā)送一幀,從機應(yīng)答一幀.在界面中放入combox控件,按協(xié)議在下拉列表中添加對應(yīng)的指令.工控機收到指令后,根據(jù)命令碼解析對應(yīng)的信息字符,根據(jù)信息字符執(zhí)行相應(yīng)動作,應(yīng)答上位機.命令碼對應(yīng)的操作如表2所示.
表2 命令碼對應(yīng)的操作
通過相關(guān)計數(shù)可對通信狀態(tài)進行顯示.若出現(xiàn)異常計數(shù)導(dǎo)致通信中斷,則觸發(fā)復(fù)位信號實現(xiàn)系統(tǒng)復(fù)位.通信計數(shù)模塊中的計數(shù)操作如下:
(1)數(shù)據(jù)接收.從總線上收到字符,無論正確與否,該計數(shù)均加1.
(2)數(shù)據(jù)發(fā)送.接收正確時,下位機根據(jù)協(xié)議完成應(yīng)答,每發(fā)送1幀,該計數(shù)加1.
(3)幀頭錯.接收幀第1個字節(jié)不是72H時,則該計數(shù)加1.
(4)接收超時.接收時,幀中的兩個字節(jié)的間隔大于1 ms時,則該計數(shù)加1.
(5)接收校驗位錯誤.當(dāng)奇偶校驗不是奇校驗時,則該計數(shù)加1.
(6)累加和錯誤.當(dāng)實際累加和與顯示的累加和不一致時,則該計數(shù)加1.
(7)命令碼錯誤.當(dāng)實際命令碼與定義的命令碼不一致時,則該計數(shù)加1.
數(shù)據(jù)顯示模塊是上位機的重要組成部分,能實現(xiàn)溫度、電流實時動態(tài)曲線繪制及顯示.
(1)數(shù)據(jù)動態(tài)曲線繪制.使用QCustomPlot控件[12],記錄文檔.為避免占據(jù)大量空間,將動態(tài)圖放在子窗口顯示.以時間為橫軸、電流或溫度為縱軸,使用addGraph()函數(shù)添加圖層,使用addData()函數(shù)添加數(shù)據(jù)曲線.
(2)溫度及電流實時顯示.使用Lcd Number控件,將計算出的溫度及電流實時顯示在主窗口.通過直觀顯示的圖像及數(shù)字,用戶可隨時查看探測器工作狀態(tài)、掌握探測器運行情況,若有異常能及時處理.
數(shù)據(jù)存儲與導(dǎo)出模塊能實現(xiàn)遙測數(shù)據(jù)、通訊指令、通訊日志的存儲與導(dǎo)出.數(shù)據(jù)使用體積小、效率高、簡單易用的Mysql數(shù)據(jù)庫[13]進行管理.首先創(chuàng)建一個QsqlDatabase對象,通過該對象的setHostName,setPort,setDatabaseName,setUserName,setPassword設(shè)置與數(shù)據(jù)庫連接有關(guān)的參數(shù),然后調(diào)用open連接數(shù)據(jù)庫.
4.5.1 數(shù)據(jù)存儲
(1)遙測數(shù)據(jù)存儲.遙測數(shù)據(jù)為探測器傳至上位機的數(shù)據(jù),包括通道電流、溫度參數(shù).
(2)通訊指令存儲.通訊指令為上位機發(fā)給探測器的控制指令,包括通道開關(guān)的狀態(tài)、驅(qū)動輸出開關(guān)的狀態(tài)、恒流輸出等信息.
(3)通訊日志存儲.通訊日志為通信過程中異常的相關(guān)計數(shù)信息,用于分析系統(tǒng)的運行.通訊日志表中的字段默認值為0.
數(shù)據(jù)存儲流程如圖5所示.
圖5 數(shù)據(jù)存儲流程圖
4.5.2 數(shù)據(jù)導(dǎo)出
為保證上位機軟件界面的簡潔、美觀,將數(shù)據(jù)導(dǎo)出設(shè)置在二級界面.通過combox下拉串口選擇數(shù)據(jù)內(nèi)容、時間及導(dǎo)出路徑[14].通過TableView控件實現(xiàn)導(dǎo)出數(shù)據(jù)的預(yù)覽功能.對查詢數(shù)據(jù)進行緩存處理,查詢該數(shù)據(jù)時只要直接從緩存中讀取,不需查詢數(shù)據(jù)庫,提高了上位機軟件性能[15].數(shù)據(jù)導(dǎo)出流程如圖6所示.
圖6 數(shù)據(jù)導(dǎo)出流程圖
上位機主界面如圖7所示.打開界面,設(shè)置串口參數(shù),與下位機建立通信連接,顯示采集的數(shù)據(jù).在指令選擇框選擇待發(fā)送指令.計數(shù)顯示窗口實時顯示數(shù)據(jù)信息.數(shù)據(jù)接收及發(fā)送的源碼在文本框顯示.
圖7 上位機主界面
上位機記錄的數(shù)據(jù)及設(shè)備實際測量的數(shù)據(jù)分別如表3~4所示.
表3 上位機記錄的數(shù)據(jù)
表4 設(shè)備實際測量的數(shù)據(jù)
根據(jù)表3~4的數(shù)據(jù),計算得到VTsink1,VTsink2,VTsink3,VTsink4,VT1,VT2的記錄數(shù)據(jù)誤差范圍為[-1%,+1%],I1,I2的記錄數(shù)據(jù)誤差范圍為[-3%,+3%].上述結(jié)果表明,通過上位機軟件上位機能與下位機穩(wěn)定地傳輸數(shù)據(jù),探測器能正常運行.
筆者以Qt為開發(fā)平臺,設(shè)計了探測器溫控上位機軟件.實現(xiàn)了探測器溫度、熱沉溫度、驅(qū)動電流等數(shù)據(jù)采集、處理、存儲、顯示的遠程控制.測試結(jié)果表明:上位機軟件運行穩(wěn)定、操作簡單、界面友好,能滿足測、記、分析及無人值守一體化要求.使用該上位機軟件的探測器溫控系統(tǒng)既能保障探測器正常運行又能降低人工成本,具有應(yīng)用推廣價值.