余燕娟 高 翔
1(漳州職業(yè)技術(shù)學院 福建 漳州 363099) 2(廈門大學第一附屬醫(yī)院 福建 廈門 361003)
甲醛(HCHO),又名蟻醛,是一種帶有刺激性氣味的氣體[1]。甲醛一直被用于木材、塑料、醫(yī)藥、紡織、機械等行業(yè)生產(chǎn)過程中,同時甲醛會與生物細胞產(chǎn)生反應(yīng),如人體接觸高濃度甲醛,甲醛便會與人體蛋白質(zhì)結(jié)合,會使得細胞受損,引發(fā)水腫、頭疼等一系列癥狀,對低濃度的甲醛人體會由代謝系統(tǒng)排除。我國國家標準規(guī)定居室空氣中甲醛的最高允許濃度為0.08 mg/m3,公共場所甲醛的最高允許濃度為0.10 mg/m3[2]。甲醛對人體的傷害因濃度的高低而不同,其中人體處于高濃度甲醛環(huán)境中會使得身體組織產(chǎn)生不可逆性的傷害[3]。因此為了保障人員的身體健康,在生產(chǎn)過程中會產(chǎn)生甲醛的工廠實現(xiàn)對甲醛的實時監(jiān)測十分重要。
工廠應(yīng)該對產(chǎn)生中易產(chǎn)生甲醛的過程進行監(jiān)測,以保證員工作業(yè)安全,但目前針對甲醛的連續(xù)監(jiān)測仍處于空白[4]。針對社會需求團隊設(shè)計了適合于工廠環(huán)境的多點甲醛監(jiān)測儀。該監(jiān)測裝置基于RS485總線分布式總線控制結(jié)構(gòu),實現(xiàn)了多個甲醛采集板的與中心控制板的通信方式,完成了多個數(shù)據(jù)采集板的級聯(lián)。采集器采用MSP430單片機為核心工作部件,采用納米材料的甲醛傳感器檢測甲醛計量。選取臺灣工研院資深研發(fā)的高精度泓格AD和DA模塊,用于加強數(shù)據(jù)的采集和處理。對甲醛出現(xiàn)超標狀況下設(shè)置開啟排氣系統(tǒng)及報警提醒等兩種保護措施命令的下發(fā),利用低電壓、低功耗無線網(wǎng)絡(luò)通信模塊實現(xiàn)與PC機的對接。甲醛檢測系統(tǒng)的結(jié)構(gòu)如圖1所示。
圖1 甲醛監(jiān)測系統(tǒng)的結(jié)構(gòu)框圖
與常規(guī)單點檢測的甲醛測試儀[5]不同,該甲醛監(jiān)測儀可對工廠5個生產(chǎn)點進行甲醛計量的實時監(jiān)測,實現(xiàn)了低功耗、網(wǎng)絡(luò)化、智能化的設(shè)計。選取高精度的傳感器和AD元件,保證精準性和靈敏度。為了實現(xiàn)對甲醛監(jiān)測數(shù)據(jù)和對甲醛報警信息的匯總,設(shè)計利用網(wǎng)絡(luò)通信模塊將數(shù)據(jù)上傳PC機。本文基于此硬件平臺進行軟件設(shè)計,實現(xiàn)智能甲醛監(jiān)測軟件,完成工廠中多點甲醛的實時顯示、報警、數(shù)據(jù)存儲、查看等多種功能。
智能甲醛監(jiān)測軟件在VC++的開發(fā)平臺完成設(shè)計,利用窗口化的設(shè)計模式,采用面向?qū)ο蟮脑O(shè)計語言C++[6],選擇數(shù)據(jù)可視化開發(fā)模塊PlotLab,利用自主開發(fā)的儀表類,結(jié)合SQLite嵌入式關(guān)系型數(shù)據(jù)庫完成了軟件開發(fā)。
數(shù)據(jù)可視化設(shè)計是智能甲醛測試軟件設(shè)計的重要部分,幫助用戶快速獲取數(shù)據(jù)信息、捕抓信息特點。本文設(shè)計嵌入了數(shù)據(jù)可視化的PlotLab_VCL控件,控件以類的方式提供了用戶快速信號繪制接口函數(shù),可以實現(xiàn)柱行、波浪行、星點行等多種模式圖形的繪制及數(shù)據(jù)的分析[7],其形狀如圖2所示。PlotLab具備模塊化的設(shè)計方式讓程序的設(shè)計和數(shù)據(jù)顯示更輕松、簡易,同時PlotLab以多線程編程方式完成開發(fā),因此運行速度快。PlotLab可以嵌入到多種應(yīng)用程序開發(fā)中,VC++程序的開發(fā)選擇的是PlotLab_VC版本。安裝PlotLab_VC軟件,設(shè)置安裝環(huán)境及鏈接庫,即可在工程中調(diào)用PlotLab的函數(shù)庫。通過頭文件的調(diào)用打開程序接口:“#include
圖2 PlotLab中數(shù)據(jù)顯示模式
以柱狀圖為例,Scope可以利用其接口函數(shù)為完成顯示樣式的選擇:
Scope.Channels[0].ChannelMode=cmBar;
//cmBar為柱狀圖
……
Scope.Channels[0].Data.Clear();
……
//開啟定時器用于接收數(shù)據(jù)并顯示
Scope.Channels[0].Data.AddXYPoint(m_Date);
……
PlotLab通過定時器的AddXYPoint()函數(shù)完成數(shù)據(jù)的添加,完成數(shù)據(jù)圖形可視化的設(shè)計。
為了更加形象地顯示甲醛環(huán)境中溫濕度的監(jiān)測,軟件設(shè)計適合溫濕度顯示的CStThermometer儀表類。CStThermometer利用Visual C++提供了CDC繪圖類,調(diào)用基礎(chǔ)繪圖函數(shù)完成圖形的繪制,程序中主要使用LineTo()直線/折線、Rectangle()矩形函數(shù)完成圖形繪制[8]。
CStThermometer圖形如圖3所示,圖形利用從背景、基本元件、刻度、數(shù)據(jù)等幾個步驟層層疊加的方式完成繪制。
圖3 CStThermometer圖形類繪制
主要程序如下所示:
pDC->FillSolidRect(&m_rectCtrl,m_clrBackGround);
//繪制填充背景顏色
//繪制溫度計的刻度
ScaleFont.CreateFont(……)
//創(chuàng)建刻度筆
for(int i=0;i<=m_nTicks;i++)
//繪制大刻度
{
pDC->MoveTo(……);
pDC->LineTo(……);
if(i //繪制子刻度 { for(int j=1;j { pDC->MoveTo(……); pDC->LineTo(……); } } …… } OnDrawData(……) //繪制數(shù)據(jù) 在繪制背景、刻度等變量時,為了體現(xiàn)溫度控件立體效果,提高用戶感官體驗,CStThermometer類對儀表進行三種顏色畫筆交錯繪制,利用位置及顏色的差異為視覺呈現(xiàn)立體效果[9],使得儀表呈現(xiàn)更真實。 使用CStThermometer類需調(diào)用#include “CStThermometer.h”頭文件,同時在資源中增加畫布STATIC變量,利用畫布與CStThermometer關(guān)聯(lián),利用接口函數(shù)完成數(shù)據(jù)設(shè)置: SetMaxValue(maxvalue); //設(shè)置量程最大值 SetLimit() //設(shè)置限值函數(shù) SetData() //設(shè)置數(shù)值函數(shù) 智能甲醛監(jiān)測系統(tǒng)中數(shù)據(jù)與數(shù)據(jù)之間不存在復(fù)雜的關(guān)系,為了方便用戶可以快速使用軟件,不必安裝數(shù)據(jù)庫軟件及架設(shè)服務(wù)器[10],本文設(shè)計選擇嵌入式關(guān)系型數(shù)據(jù)庫SQLite完成嵌入數(shù)據(jù)存儲、調(diào)用管理。SQLite數(shù)據(jù)庫可以免安裝直接嵌入到智能甲醛監(jiān)測系統(tǒng)中,其僅有一個.db文件,用戶在使用時可以直接拷貝,其最大的特點是小巧、簡單、代碼精簡,方便用戶移植智能甲醛監(jiān)測系統(tǒng)程序。SQLite數(shù)據(jù)庫在這種零狀態(tài)配置模式下與應(yīng)用系統(tǒng)有效結(jié)合,效率高、穩(wěn)定性強。 SQLite數(shù)據(jù)庫與應(yīng)用程序建立的聯(lián)系方式有很多,如SQLite3命令行程序、SQLite共享庫、TCL擴展方式等[11]。智能甲醛監(jiān)測系統(tǒng)選擇了SQLite共享庫的方式打開數(shù)據(jù)庫與程序的接口,程序通過添加sqlite3.dll及頭文件sqlite3.h連接文件,并利用sqlite3_open()函數(shù)開啟了與數(shù)據(jù)庫通信的通道,如圖4所示。 圖4 SQLite數(shù)據(jù)庫共享鏈接庫鏈接模式 智能甲醛監(jiān)測軟件在訪問數(shù)據(jù)庫操作主要包括甲醛計量的存儲、查看、篩查等,SQLite采用SQL語言完成上述數(shù)據(jù)操作需求。區(qū)別于直接使用SQL語言,SQLite數(shù)據(jù)庫使用數(shù)據(jù)庫執(zhí)行函數(shù)嵌套SQL語言的方式執(zhí)行,其部分程序如下: char*sql="CREATE TABLE table1(……);"; //SQL語言創(chuàng)建表格 sqlite3_exec(db,sql……); //SQLite語言執(zhí)行SQL建表命令 sql="SELECT*FROM table1"; //SQL查詢 sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg); //SQLite語言執(zhí)行SQL查詢數(shù)據(jù)命令 SQLite3存儲中文數(shù)據(jù)會出現(xiàn)亂碼現(xiàn)象,因為SQLite3數(shù)據(jù)庫默認的編碼格式為ASCII碼,而VC++程序默認使用的是Unicode編碼。因此在存儲中文數(shù)據(jù)時候需要對中文數(shù)據(jù)由Unicode轉(zhuǎn)換成ASCII碼,同時在讀取數(shù)據(jù)庫表格時需將ASCII碼進行編碼模式的轉(zhuǎn)換,否則讀到的數(shù)據(jù)也將是亂碼。程序結(jié)束需利用sqlite3_close(db)函數(shù)關(guān)閉創(chuàng)建的數(shù)據(jù)庫文件,斷開程序與數(shù)據(jù)庫的握手通道。 硬件設(shè)備利用無線通信模塊與PC機進行通信,其中無線通信模塊采用網(wǎng)絡(luò)方式完成通信,因此程序設(shè)計了網(wǎng)絡(luò)通信類CSoketConnect。CSoketConnect是以Windows提供的WinSock套接字為基礎(chǔ),編程中需要先調(diào)用套接字,程序如下所示,WinSock只支持一個通信域,即網(wǎng)際域(AF_INET)[12]。 #include "winsock2.h" #include #pragma comment(lib,"ws2_32") //導(dǎo)入Socket的動態(tài)鏈接庫 程序設(shè)計的網(wǎng)絡(luò)套接字具有兩種模式,分別為MODE_ASYN異步接收模式和MODE_SYN同步接收模式。在同步模式的網(wǎng)絡(luò)套接字在調(diào)用發(fā)送/接收數(shù)據(jù)時,函數(shù)結(jié)束時相應(yīng)的發(fā)送/接收處理操作也同時結(jié)束,如果函數(shù)未結(jié)束,那么網(wǎng)絡(luò)套接字的程序進行等待狀態(tài)。而使用異步模式下,發(fā)送/接收函數(shù)被調(diào)用結(jié)束時,數(shù)據(jù)發(fā)送到消息機制中處理,并不知道網(wǎng)絡(luò)套接字對是否結(jié)束,處理結(jié)果會通過事件結(jié)果反饋。網(wǎng)絡(luò)通信類CSoketConnect網(wǎng)絡(luò)編程中結(jié)合了事件驅(qū)動方式[13],實現(xiàn)了在單個程序設(shè)計中多個網(wǎng)絡(luò)的連接,事件驅(qū)動方式是將網(wǎng)絡(luò)通信的權(quán)限下放給事件,不斷輪詢所負責的WinSock,當有WinSock數(shù)據(jù)到達時,再通知程序。 設(shè)置程序變量SOCKET m_Socket,并可以利用InitSocket()函數(shù)實現(xiàn)異步模式連接到對應(yīng)網(wǎng)絡(luò)。網(wǎng)絡(luò)就自動進入事件驅(qū)動的多線程模式,利用監(jiān)視線程時刻監(jiān)督網(wǎng)絡(luò)的通信狀態(tài),保證數(shù)據(jù)可靠和穩(wěn)定。 event=WaitForMultipleObjects(……); //等待網(wǎng)絡(luò)事件 switch(event) //對事件進行判定 { case 0: //要求停止網(wǎng)絡(luò),結(jié)束監(jiān)視線程 AfxEndThread(100);…… case 1: //人工操作連接無反應(yīng),重啟事件 time=0; ResetEvent(psocket->m_HandleOperate); break; case 2: //超時連接,進行多次同步模式網(wǎng)絡(luò)重連 ResetEvent(psocket->m_HandleTime); if(time>=0) {…… psocket->ConnectSyn() //利用同步模式重連網(wǎng)絡(luò)判斷是否成功 }} 在出現(xiàn)網(wǎng)絡(luò)中斷將進行重連,此時采用同步模式連接網(wǎng)絡(luò),等到超時仍未連接上,接收到報錯信息才停止。利用監(jiān)視線程對網(wǎng)絡(luò)的通信狀態(tài)及錯誤進行跟蹤,保障了系統(tǒng)運行的實時準確性。 設(shè)計軟件要實現(xiàn)現(xiàn)場對甲醛的計量監(jiān)測需要滿足如下功能: (1) 對多個甲醛計量、環(huán)境PM2.5的值、溫度濕度數(shù)據(jù)的監(jiān)測,對獲取的原始數(shù)據(jù)進行解碼,獲得對應(yīng)計量值,并顯示在對應(yīng)界面上;(2) 通過計算并顯示每個數(shù)據(jù)監(jiān)測點中甲醛最高計量、最低計量和平均計量;(3) 可控制監(jiān)測點的開啟狀態(tài),開啟或者關(guān)閉甲醛計量監(jiān)測功能;(4) 對出現(xiàn)甲醛超標情況的實時報警,同時下發(fā)命令,單片機驅(qū)動通風排氣系統(tǒng),改善空氣質(zhì)量,保證人員的安全;(5) 對甲醛實時數(shù)據(jù)進行存儲,并設(shè)置篩查功能,方便管理人員查看、導(dǎo)出數(shù)據(jù)。 軟件架構(gòu)是設(shè)計者從現(xiàn)實世界通向計算機領(lǐng)域工程項目的橋梁[14]。根據(jù)軟件邏輯框架結(jié)構(gòu)設(shè)計流程,對甲醛監(jiān)測系統(tǒng)用戶需求進行分析,對程序中服務(wù)的元件之間的關(guān)系進行梳理,將程序按照邏輯功能的不同將劃分成三部分,如圖5所示。 圖5 程序設(shè)計結(jié)構(gòu)框圖 智能甲醛監(jiān)測軟件是面向甲醛測試儀和軟件操作員的軟件,通過網(wǎng)絡(luò)方式建立了PC機與甲醛測試儀設(shè)備之間的連接,以窗口化圖形界面顯示的方式向軟件操作員提供數(shù)據(jù)信息及操作。數(shù)據(jù)的分析、轉(zhuǎn)換、存儲、調(diào)用都是在軟件內(nèi)部完成,因此業(yè)務(wù)邏輯操作層是程序核心。根據(jù)每個邏輯層的功能不同,將軟件框架細分,如圖6所示。 圖6 智能甲醛監(jiān)測軟件軟件框架 智能甲醛監(jiān)測系統(tǒng)要完成多路甲醛監(jiān)測、控制、報警、數(shù)據(jù)存儲等功能,因此針對軟件操作層需要設(shè)置甲醛計量的顯示、數(shù)據(jù)圖形化、報警提醒、數(shù)據(jù)查詢等界面顯示模塊。設(shè)備交互層包括程序與PC機工作的Windows的I/O接口[15],與測試儀通信的網(wǎng)絡(luò)通信程序,以及CSoketConnect類。業(yè)務(wù)邏輯層中與數(shù)據(jù)為中心的處理包括數(shù)據(jù)的轉(zhuǎn)換、存儲、調(diào)度的實際程序,以及用戶操作的動作對應(yīng)的程序。 基于VS2010開發(fā)軟件中的VC++開發(fā)平臺,利用MFC窗口框架設(shè)計模式、面向?qū)ο蟮脑O(shè)計方法完成軟件開發(fā)[16],軟件主要功能分為甲醛監(jiān)測、環(huán)境變量監(jiān)測、監(jiān)測狀態(tài)設(shè)置、數(shù)據(jù)存儲設(shè)置、報警和數(shù)據(jù)篩查等幾個模塊。甲醛監(jiān)測同時顯示每個測試點甲醛的最大、最小測試值及平均值,同時利用PlotLab_VC動態(tài)顯示甲醛波形數(shù)據(jù)。系統(tǒng)同時監(jiān)測了PM2.5、溫度、濕度參量,監(jiān)測軟件界面如圖7所示。 軟件與甲醛測試裝置進行無線通信,獲取數(shù)據(jù)進行處理,軟件內(nèi)部數(shù)據(jù)處理流程如圖8所示。 圖8 智能甲醛監(jiān)測軟件流程 選擇了家具廠作為系統(tǒng)的測試點,家具生產(chǎn)過程中要大量使用粘合劑、涂料等,這些材料均會釋放甲醛。選取工廠中的五個地點進行監(jiān)測,根據(jù)監(jiān)測點工作特性將其分為材料區(qū)、切割區(qū)、組立區(qū)、包裝區(qū)、成品區(qū)五個區(qū)域,利用甲醛檢測儀對監(jiān)測點的甲醛進行實時監(jiān)測,并通過無線網(wǎng)絡(luò)上傳控制室的控制軟件。通過監(jiān)測發(fā)現(xiàn)不同區(qū)域的甲醛監(jiān)測計量不同,如材料區(qū)常在0.16 mg/m3左右,管理人員設(shè)置報警界限值為0.15 mg/m3,軟件報警并下發(fā)信號,開啟材料區(qū)的通風系統(tǒng),通風系統(tǒng)的作用使甲醛計量下降。監(jiān)測發(fā)現(xiàn)不同的溫濕度值對于甲醛計量有影響,溫度和濕度增加五個區(qū)域的甲醛監(jiān)測值均有上升。 通過測試,該智能甲醛監(jiān)測軟件性能穩(wěn)定、數(shù)據(jù)準確、可視化強、操作性可靠,且獲取的數(shù)據(jù)可以提供對甲醛進行研究。 智能甲醛監(jiān)測軟件采用面向?qū)ο蟮腃++為開發(fā)語言,在VS2010的開發(fā)軟件下,利用嵌入式關(guān)系型數(shù)據(jù)庫SQLite完成設(shè)計。軟件的可拓展性強、用戶體驗良好。環(huán)保是目前我國社會關(guān)注的重要問題之一,中國很多企業(yè)對甲醛檢測仍純在空缺,因此該軟件與硬件配合完成的智能甲醛監(jiān)測系統(tǒng)具有良好的應(yīng)用前景,為工廠甲醛監(jiān)測的軟件設(shè)計提供了借鑒。1.3 嵌入式數(shù)據(jù)管理
1.4 多線程網(wǎng)絡(luò)通信類
2 軟件功能、框架和實現(xiàn)
2.1 軟件功能分析
2.2 軟件框架結(jié)構(gòu)
2.3 軟件實現(xiàn)與應(yīng)用
2.4 軟件測試與應(yīng)用
3 結(jié) 語