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