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