丁鵬飛
摘要:為觀察和分析壓力計在測量時間段溫度和壓力的變化情況,需要將測量的數(shù)據(jù)以圖形方式進行顯示。針對以往的壓力計顯示系統(tǒng)不具備報表生成功能的缺點,設(shè)計了基于C++ Builder的具有生成word報表功能的壓力計測量數(shù)據(jù)顯示系統(tǒng)。該數(shù)據(jù)顯示系統(tǒng)通過串口讀取壓力計的溫度、壓力數(shù)據(jù),以圖形的方式顯示溫度、壓力的變化曲線,并生成生成便于保存和瀏覽的測量報告。
關(guān)鍵詞:溫度;壓力;word報表;圖形方式;顯示
中圖分類號:TP317 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)19-0060-02
Design and Implementation of Pressure Gauge Measured Data Display System
DING Peng-fei
(School of Electronic Engineering, Xian University of Posts and Telecommunications, Xian 710121, China)
Abstract: In order to observe and analyze the temperature and pressure changes of pressure gauge in the measurement periods, the measure data must be displayed by graph mode. According to the others pressure gauge display system does not have the report function, design the pressure gauge data display system with the function of generating Word reports based on C++ Builder. This display system read temperature data and pressure data by serial port, and display the changed cure of temperature and pressure, and generate the measure report for convenient to save and browse.
Key words:temperature;pressure;word report;graph mode; display
在智能儀器儀表中,測量數(shù)據(jù)的顯示是儀器的重要功能之一。文獻[1]對液晶屏實現(xiàn)數(shù)據(jù)的動態(tài)顯示進行了探討;文獻[2-4]對Lab view實現(xiàn)數(shù)據(jù)的動態(tài)顯示進行了研究。智能儀器儀表以何種方式呈現(xiàn)其測量的數(shù)據(jù),將影響儀器儀表的靈活性和方便性。在工業(yè)控制領(lǐng)域,對于即時顯示的數(shù)據(jù)信息通常以數(shù)碼管、液晶屏等方式進行顯示。然而,像井下壓力計這樣的儀器需要長時間工作記錄井下的壓力和溫度,在儀器結(jié)束工作時需要讀取并顯示測量的溫度和壓力信息。對于這種大數(shù)據(jù)量的儀器,數(shù)碼管、液晶屏等顯示方式很難滿足測量波形的顯示要求,而基于PC機軟件的處理、顯示模式無疑是最佳的選擇?;趬毫τ嫈?shù)據(jù)量大的特點,設(shè)計了壓力計數(shù)據(jù)顯示系統(tǒng),滿足了壓力計測量數(shù)據(jù)的圖形化顯示和生成測量數(shù)據(jù)報告的要求。
1 通信的設(shè)計與實現(xiàn)
在很多工業(yè)控制中都會用到串口通信,無論是RS232還是RS485都是通過串口來進行數(shù)據(jù)傳輸?shù)摹4谕ㄐ欧绞皆诠I(yè)控制中具有廣泛的應(yīng)用[5-6],因此,系統(tǒng)的通信方式采用串口模式。串口的操作通常采用Windows API或串口控件實現(xiàn)。Windows API實現(xiàn)串口的方法較為復(fù)雜,故采用串口控件的實現(xiàn)串口通信。微軟提供的串口控件Mscomm具有文件驅(qū)動與查詢方式兩種通信方法[7],操作過程相對簡單。由于Victor串口VCL控件[8]針對C++Builder設(shè)計,因此,采用該控件實現(xiàn)串口功能。在c++ Builder開發(fā)平臺下使用Victor串口控件,必須先安裝該控件,其安 裝方式是:在Project->Options->Packages->Add下,選擇VCL控件文件夾的 yb_base_c6.bpl 和 yb_comm_c6.bpl, 然后按“打開”按鈕,實現(xiàn)控件的安裝。為編譯時能正確連接VCL控件,必須將VCL控件的目錄加入到C++ Builder,其添加方式為:在Project->Options->Directories/Conditionals下,點擊Include Path右面的“…”按鈕,添加包含*.h 文件的文件夾,點擊Library Path 右面的“…”按鈕,添加包含 *.lib 文件的文件夾。經(jīng)過上述步驟后,添加到C++ Builder下的Victor串口控件就可以正常使用了。使用該控件向串口寫數(shù)據(jù)的格式為Comm1->Write(WaitBufLook,nBytes),WaitBufLook為寫入出口的數(shù)據(jù)數(shù)組,nBytes為寫入串口的數(shù)據(jù)長度;讀取串口數(shù)據(jù)為:int n = Comm1->Read(Buf,8192),n為讀取數(shù)據(jù)的實際長度,Buf用于存儲讀取的數(shù)據(jù),8192為讀取的最大長度。
2 測量數(shù)據(jù)的顯示
測量人員通常希望將采集的數(shù)據(jù)以圖表的方式直觀并實時地顯示出來,以便直接觀察出測量結(jié)果[9]。為便于觀察測量數(shù)據(jù),本系統(tǒng)以表格形式顯示溫度、壓力、時間等信息,通過圖形化的方式顯示溫度、壓力的變化曲線。
在較多數(shù)據(jù)需要查看時,表格進行數(shù)據(jù)的顯示方式具有瀏覽方便的特點。在多數(shù)編程軟件中,將數(shù)據(jù)以表格方式顯示難以實現(xiàn)。C++ Builder在工具欄的Additional標(biāo)簽頁提供了StringGrid控件用于表格
形式的數(shù)據(jù)顯示。StringGrid控件通過ColCount和RowCount屬性設(shè)置表格的列數(shù)及行數(shù)。通過向StringGrid1->Cells[i][j]賦值實現(xiàn)溫度、壓力、時間等信息寫入數(shù)據(jù)表格,測量數(shù)據(jù)顯示如圖1所示。
通過數(shù)據(jù)表格的形式能方便查看不同時間點的溫度、壓力、時間等信息,然而,通過測量數(shù)據(jù)無法瀏覽溫度、壓力的變化趨勢,無法直觀查找溫度或壓力的異常點。因此,實現(xiàn)測量數(shù)據(jù)的圖形化顯示對于數(shù)據(jù)的快速分析具有非常重要的意義和價值。
C++ Builder在工具欄的Additional標(biāo)簽頁提供的Image控件對于曲線的顯示具有較好的靈活性。繪圖區(qū)域的長寬分別通過Image控件的Width、Height屬性設(shè)置,而繪制曲線的顏色、線寬、線條類型通過Image->Canvase->Pen的Color、Width和Style屬性進行設(shè)置。繪圖區(qū)域的文字顯示通過Image1->Canvas的TextOutA()函數(shù)實現(xiàn),如Image1->Canvas->TextOutA(740,142+10,AnsiString("溫度"))。通過Image控件Image1->Canvas的MoveTo()函數(shù)和LineTo()函數(shù)實現(xiàn)繪圖起始點的移動和連線。本數(shù)據(jù)顯示系統(tǒng)利用紅色曲線繪制溫度,藍色曲線繪制壓力,繪制的一次測量曲線圖如圖2所示。
3 word數(shù)據(jù)報表生成
對于測量的數(shù)據(jù)結(jié)果,往往需要測試人員將測試結(jié)果生成word文檔,以便于測試報告的生成、存儲和共享。C++ Builder提供了word報告生成的快捷方式,通過WordApplication控件和WordDocument控件可快速實現(xiàn)word報表的生成。利用VarApp=CreateOleObject("Word.Application")函數(shù)實現(xiàn)word軟件對象的創(chuàng)建;CreateOleObject("Word.Basic")函數(shù)實現(xiàn)word實例;文檔的添加則通過VarApp.OlePropertyGet("Documents").OleFunction("Add")語句實現(xiàn)。 Word文檔的字體、字體大小則通過Font的相關(guān)屬性設(shè)置,如設(shè)置字體為黑體,實現(xiàn)語句為:
Vselect.OlePropertyGet("Font").OlePropertySet("Name","黑體"),字體大小的設(shè)置為Vselect.OlePropertyGet("Font").OlePropertySet("Size",28);輸出文字通過TypeText設(shè)置,如Vselect.OleFunction("TypeText","壓力測試報告")。
為便于測量人員直觀了解測量數(shù)據(jù)的整體變化情況,在測試報告插入測量數(shù)據(jù)的曲線圖顯得尤為必要。為實現(xiàn)測試報告中加入測量數(shù)據(jù)的曲線圖,采用將繪制的曲線圖保存為圖片,然后將圖片插入word文檔。實現(xiàn)顯示曲線圖存儲的方法是利用Image1->Picture的存儲文件方法,即Image1->Picture->SaveToFile(CurrentFile),CurrentFile為存儲圖片的文件名。將生成的圖片插入word文檔方法是獲取插入對象后添加圖片,即
Vshape=Vselect.OlePropertyGet("InlineShapes")和Vshape.OleFunction("AddPicture",CurrentFile)函數(shù)實現(xiàn)。word文檔插入到測量曲線的效果圖如圖3所示。
4 結(jié)束語
本文所設(shè)計的壓力計測量數(shù)據(jù)顯示系統(tǒng)以C++ Builder為開發(fā)平臺,采用C++作為開發(fā)語言,實現(xiàn)了壓力計溫度、壓力及時間信息的讀??;利用C++Builder的StringGrid、Image、WordApplication和WordDocument等控件,實現(xiàn)了測量數(shù)據(jù)的表格化顯示及測量數(shù)據(jù)的圖形化顯示;實現(xiàn)了測試數(shù)據(jù)及測量波形的word報表生成。經(jīng)壓力計測量數(shù)據(jù)的多次驗證,壓力計測量數(shù)據(jù)顯示系統(tǒng)操作簡單,顯示方式直觀,測量數(shù)據(jù)報告的生成功能大大減輕了測量人員工作量,提高了工作效率,滿足了用戶的需求。
壓力計測量數(shù)據(jù)顯示系統(tǒng)實現(xiàn)儀器數(shù)據(jù)的讀取、顯示及報告生成的方法簡單,滿足了壓力計對測量數(shù)據(jù)表格化顯示、數(shù)據(jù)波形生成及測量報告生成的要求,具有較高的實用價值和廣泛的應(yīng)用前景。該系統(tǒng)的數(shù)據(jù)顯示法及報告生成方法,對其他智能儀器顯示系統(tǒng)的開發(fā)具有重要的參考價值。
參考文獻:
[1] 曾政菻, 劉學(xué)滿. 基于FPGA圖形字符加速的液晶顯示模塊[J]. 液晶與顯示, 2012, 27(3):352-358.
[2] 劉闖. 基于LabVIEW的報表生成[J]. 測控技術(shù), 2010,29(5):102-103.
[3] 閆群民. 基于LabVIEW的超文本報表生成方法[J]. 自動化儀表, 2010, 31(7): 29-31.
[4] 張佩, 江穎, 許偉明,等. LabVIEW中綜合報表生成技術(shù)的開發(fā)[J]. 微計算機信息, 2007, 23(2-1): 161-163.
[5] 唐普英, 謝啟. 基于LabVIEW的多串口通信及數(shù)據(jù)存儲的研究與實現(xiàn)[J]. 實驗室研究與探索, 2015, 34(8): 93-97.
[6] 崔牧凡. 基于LabVIEW和FPGA的串口通信系統(tǒng)設(shè)計與實現(xiàn)[J]. 計算機應(yīng)用, 2012, 32(s2): 82-84
[7] 張瑞卿, 胡愛軍, 張超. 基于VC++的PC機與PLC串口通訊的實現(xiàn)[J]. 制造技術(shù)與機床, 2010(9): 58-61.
[8] Victor串口VCL控件[EB/OL].http://www.cppfans.com/.
[9] 唐磊, 孟祥印, 唐波. 氣動量儀自動數(shù)據(jù)采集及處理系統(tǒng)的設(shè)計與實現(xiàn)[J]. 機床與液壓, 2014, 42(14): 107-109.