對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法
【專利摘要】本發(fā)明屬于一種工業(yè)測控領(lǐng)域,尤其涉及對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法,采用DLL的節(jié)省內(nèi)存和硬盤空間以及使軟件模塊化的優(yōu)點(diǎn),尤其是總結(jié)了根據(jù)串口儀表通訊協(xié)議的共同特點(diǎn)后定義了一種特殊的DLL規(guī)范,這個規(guī)范就是XHDLL規(guī)范,其中包括標(biāo)準(zhǔn)的XHDLL規(guī)范通用要求,標(biāo)準(zhǔn)的XHDLL規(guī)范接口函數(shù),XHDLL開發(fā)方法,XHDLL調(diào)試以及XHDLL使用方法。本發(fā)明的有益效果在于:本發(fā)明能夠兼容不同廠家的儀器產(chǎn)品,兼容性好,開發(fā)維護(hù)方便,對硬件平臺的要求比較低,這也減少了開發(fā)、實(shí)施、維護(hù)的成本;對開發(fā)者的知識經(jīng)驗(yàn)要求不高,這也降低了這個規(guī)范的開發(fā)技術(shù)門檻。
【專利說明】對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種工業(yè)測控領(lǐng)域,尤其涉及對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法。
【背景技術(shù)】
[0002]對于環(huán)境監(jiān)控等應(yīng)用領(lǐng)域,一般使用數(shù)據(jù)采集傳輸儀通過串口連接到不同的監(jiān)測儀表,然后采用該儀表專用的通訊協(xié)議采集其數(shù)據(jù),最后匯總上傳給監(jiān)控中心的架構(gòu)模式,如圖1所示,圖上顯示的為遠(yuǎn)程數(shù)據(jù)采集架構(gòu)圖。通常采用資源比較充足的工控機(jī)來做采集數(shù)據(jù)采集傳輸儀的硬件平臺,選擇WINDOWS或LINUX操作系統(tǒng),然后開發(fā)運(yùn)行在該操作系統(tǒng)上的專用軟件來實(shí)現(xiàn)數(shù)據(jù)采集。這個專用軟件,即測控軟件必須能對儀器設(shè)備的數(shù)據(jù)進(jìn)行采集。因?yàn)槭鼙O(jiān)控企業(yè)可以自行選擇采用何種符合環(huán)保要求的儀器,這就要求軟件必須能適應(yīng)這種情況,所以就導(dǎo)致一些問題的產(chǎn)生:(I)不同的人選用不同廠家的監(jiān)測儀表,而現(xiàn)實(shí)中不同廠家的監(jiān)測儀表的通訊協(xié)議大都是自編協(xié)議,幾乎沒有相同的;(2)有些儀表的通訊協(xié)議盡管相同但又各有特殊性。比如對于MODBUS協(xié)議而言,參數(shù)所在的寄存器位置不同或參數(shù)值所占用的寄存器數(shù)目不同或者參數(shù)的解碼方法不同;(3)監(jiān)測儀表輸出的數(shù)據(jù)種類增加或精度提高;(4)使用的監(jiān)測儀表的升級換代情況。因此,設(shè)計(jì)開發(fā)一種對串口儀表進(jìn)行數(shù)據(jù)采集的通用的軟件模塊是非常有必要的。
【發(fā)明內(nèi)容】
[0003]本發(fā)明為克服上述的不足之處,目的在于提供對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法,該方法采用一種專門定義的DLL規(guī)范,能夠節(jié)省內(nèi)存和硬盤空間以及使軟件模塊化和對串口儀表的采集接口通用化。
[0004]本發(fā)明是通過以下技術(shù)方案達(dá)到上述目的:對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法,其特征在于:
[0005]采用DLL作為實(shí)現(xiàn)對串口儀表進(jìn)行數(shù)據(jù)采集的軟件模塊,規(guī)定了該類DLL的特殊要求,這種規(guī)定為XHDLL規(guī)范。
[0006]每一種儀表根據(jù)其通訊協(xié)議及XHDLL規(guī)范要求編寫開發(fā)一個XHDLL ;
[0007]利用測控軟件對XHDLL進(jìn)行調(diào)試;
[0008]將XHDLL通過互聯(lián)網(wǎng)傳遞給用戶操作員,用戶操作員把測控系統(tǒng)使用的儀表對應(yīng)的XHDLL復(fù)制到測控軟件工作目錄中;
[0009]測控軟件采用操作系統(tǒng)的API函數(shù)顯式載入XHDLL ;
[0010]測控軟件調(diào)用XHDLL采集數(shù)據(jù);
[0011 ] 測控軟件卸載XHDLL,釋放空間。
[0012]作為優(yōu)選,XHDLL的開發(fā)方法步驟如下:
[0013]I)使用開發(fā)工具的DLL開發(fā)功能,生成一個以儀表名稱拼音或英文為名字的空DLL項(xiàng)目,并產(chǎn)生相應(yīng)的頭文件與源文件;[0014]2)在空DLL項(xiàng)目的頭文件中添加XHDLL規(guī)范接口函數(shù)原型,并且按照開發(fā)工具的導(dǎo)出函數(shù)聲明句法聲明為導(dǎo)出函數(shù);
[0015]XHDLL規(guī)范接口函數(shù)原型包括:
[0016]儀表米集命令生產(chǎn)函數(shù):intEncode (int Code, BYTE*buf, int bufLength);
[0017]儀表響應(yīng)解析函數(shù):BOOLDecode (int Code, BYTE*buf, intbufLength, float氺pfData);
[0018]儀表啟動命令生成函數(shù):intStartEncode (int Code, BYTE*buf, intbufLength);
[0019]儀表停止命令生成函數(shù):intStopEncode (int Code, BYTE*buf, int bufLength);
[0020]獲得儀表超時值函數(shù):int GetTimeOut (void);
[0021]獲得參數(shù)索引函數(shù):B00LGetParameterIndex (TCHAR*ParaBuf, intbufLength, int*pnlndex);
[0022]3)根據(jù)XHDLL規(guī)范對接口函數(shù)要求,在DLL的源文件中,參考儀表規(guī)格書或使用說明書,以C語言分別實(shí)現(xiàn)接口函數(shù);
[0023]4)編譯連接,生成XHDLL。
[0024]作為優(yōu)選,XHDLL通過測控軟件調(diào)試,具體包括以下步驟:
[0025]I)根據(jù)儀表說明書,選擇一條或幾條真實(shí)的儀表的采集命令、該命令的響應(yīng)以及該響應(yīng)提供的參數(shù)數(shù)值,作為樣例命令、樣例響應(yīng)及樣例參數(shù)值;
[0026]2)啟動測控軟件并以調(diào)試模式運(yùn)行;
[0027]3)添加儀表參數(shù);
[0028]4)測控軟件載入并調(diào)用DLL中的函數(shù)進(jìn)行數(shù)據(jù)采集,在讀取串口數(shù)據(jù)后添加斷點(diǎn),把樣例響應(yīng)寫入臨時緩沖區(qū)當(dāng)做讀到的數(shù)據(jù);
[0029]5)繼續(xù)運(yùn)行測控軟件,得到對樣例響應(yīng)解析后獲得的參數(shù)值;
[0030]6)若獲得的參數(shù)值同樣例參數(shù)值不一致,則修改XHDLL源代碼,重新調(diào)試,直到參數(shù)值與樣例參數(shù)值一致。
[0031]本發(fā)明的有益效果在于:(I)當(dāng)監(jiān)測儀表新增加或改變時,只需要對每一種儀表編寫一個XHDLL,然后通過互聯(lián)網(wǎng)傳遞給用戶操作員,操作員把該XHDLL復(fù)制到測控軟件工作目錄即可,不必要去現(xiàn)場進(jìn)行開發(fā)。(2)方便用戶增購監(jiān)測儀表,適應(yīng)用戶升級儀表,升級后的監(jiān)測儀表的XHDLL取同未升級監(jiān)測儀表XHDLL不同的名字,這樣兩個不同硬件版本的同一廠家的監(jiān)測儀表可以在同一系統(tǒng)和諧地工作。(3)開發(fā)者可使用自己熟悉的開發(fā)工具開發(fā)XHDLL,節(jié)約了好多時間,也為開發(fā)者開發(fā)此DLL提供了方便,對開發(fā)者的知識經(jīng)驗(yàn),計(jì)算機(jī)知識,編程能力要求也比較低;XHDLL只處理協(xié)議編解碼,不涉及硬件,由于與硬件無關(guān),編寫、調(diào)試、測試都簡單容易;開發(fā)者熟悉了儀表的通訊協(xié)議相關(guān)采集的幾個命令,就可以迅速開發(fā)完成并提交用戶符合要求的XHDLL ; (4)細(xì)化對采集參數(shù)的采集控制,增強(qiáng)了軟件的適應(yīng)性。參數(shù)指監(jiān)測儀表測量獲得的一種數(shù)據(jù),監(jiān)測儀表可以測量多種物理量因而獲得多種數(shù)據(jù)。以參數(shù)為最小采集單位,就可以針對每個參數(shù)設(shè)定采集間隔和采集參數(shù);(5)XHDLL與測控軟件或應(yīng)用軟件開發(fā)完全分離,其使用顯式載入的方法。當(dāng)測控軟件開發(fā)成功后,不會因?yàn)閮x表的增減而改變,也不必重新建構(gòu)測控軟件即可使用和測試XHDLL ; (6)占用的用戶存儲空間小、兼容型性好,運(yùn)用的范圍廣。XHDLL采用C標(biāo)準(zhǔn)庫編寫,完全可以被其他測控軟件直接使用,不限于用于監(jiān)測領(lǐng)域,用途廣闊;只需要重新建構(gòu)一下,不需要修改源代碼,就可以把XHDLL用在不同的操作系統(tǒng)上;(7)降低了硬件平臺的資源要求,也使得開發(fā)的應(yīng)用軟件因模塊化而易于維護(hù)。XHDLL本質(zhì)是一種DLL,因此對內(nèi)存和硬盤容量的要求低,模塊化了測控軟件;(8)解決了用戶監(jiān)測系統(tǒng)的變動問題。
【專利附圖】
【附圖說明】
[0032]圖1是遠(yuǎn)程數(shù)據(jù)采集架構(gòu)圖;
[0033]圖2是本發(fā)明方法的步驟流程圖;
[0034]圖3是測控軟件添加XHDLL儀表參數(shù)界面;
[0035]圖4是測控軟件使用XHDLL采集數(shù)據(jù)流程圖。
【具體實(shí)施方式】
[0036]下面結(jié)合具體實(shí)施例對本發(fā)明進(jìn)行進(jìn)一步描述,但本發(fā)明的保護(hù)范圍并不僅限于此:
[0037]實(shí)施例1:本發(fā)明的對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法,如圖2所示包括:
[0038]根據(jù)儀表說明書及通訊協(xié)議確定串口配置參數(shù)、采集相關(guān)命令及響應(yīng)解析方法;
[0039]每一種儀表根據(jù)XHDLL規(guī)范編寫開發(fā)一個XHDLL ;
[0040]利用測控軟件對XHDLL進(jìn)行調(diào)試;
[0041]將XHDLL通過互聯(lián)網(wǎng)傳遞給用戶操作員,用戶操作員把添加儀表對應(yīng)的XHDLL復(fù)制到測控軟件工作目錄中;
[0042]測控軟件調(diào)用XHDLL采集數(shù)據(jù);
[0043]測控軟件卸載XHDLL,釋放空間。
[0044]XHDLL規(guī)范通用要求包括以下幾點(diǎn):
[0045]1、每種不同的監(jiān)測儀表都必須有一個與之對應(yīng)的XHDLL。
[0046]2、調(diào)用XHDLL的測控軟件或應(yīng)用軟件應(yīng)該滿足如下條件:
[0047](2.1)必須提供一個對話框,可參考圖3。該對話框至少需要包括允許用戶輸入或修改XHDLL名字、采集參數(shù)、設(shè)備地址的編輯控件,包括輸入或修改串口及其參數(shù)的控件;
[0048](2.2)測控軟件應(yīng)該能夠允許用戶存儲、刪除、增加、修改、顯示通過上述對話框提供的用戶輸入;
[0049]3、一種監(jiān)測儀表產(chǎn)生多種參數(shù),這些參數(shù)的采集命令是不同的,XHDLL必須支持根據(jù)參數(shù)的不同生成不同的命令。
[0050]4、使用零基整數(shù)索引來對一個監(jiān)測儀表的參數(shù)進(jìn)行編碼,比如一個監(jiān)測儀表有3個參數(shù),則編碼為0,1,2。調(diào)用者使用這個編碼作為索引來生成不同的參數(shù)的采集命令
[0051]5、不同監(jiān)測儀表對命令的處理時間不同,因此必須根據(jù)監(jiān)測儀表規(guī)格提供命令響應(yīng)的最大超時時間。
[0052]6、對于MODBUS協(xié)議的儀表,硬編碼進(jìn)不同監(jiān)測儀表的寄存器地址以及數(shù)目,實(shí)現(xiàn)對獲得寄存器內(nèi)容的解析方法,協(xié)議發(fā)送和響應(yīng)字節(jié)流通過調(diào)用實(shí)現(xiàn)標(biāo)準(zhǔn)MODBUS協(xié)議的DLL或者外部庫的相應(yīng)函數(shù)來完成,XHDLL本身不提供。[0053]7、由于對串口的訪問對于所有的設(shè)備都是相同的,XHDLL不可以涉及訪問串口的代碼(與硬件無關(guān))。
[0054]8、為支持多線程應(yīng)用軟件使用XHDLL,XHDLL編寫時不允許使用全局可寫變量,
[0055]9、所有XHDLL必須采用相同原型的接口函數(shù)。這些接口函數(shù)為對儀表進(jìn)行采集所必不可少的函數(shù),其內(nèi)部實(shí)現(xiàn)根據(jù)儀表的通訊協(xié)議不同而不同,XHDLL不必要提供對儀表通訊協(xié)議的完全支持。
[0056]10、XHDLL必須由測控軟件采用操作系統(tǒng)的API函數(shù)顯式載入,不可以使用隱式載入的方法使用。
[0057]11、XHDLL編寫時只可以使用多線程C標(biāo)準(zhǔn)庫函數(shù)。
[0058]XHDLL的開發(fā)方法步驟如下:
[0059]I)使用開發(fā)工具的DLL開發(fā)功能,生成一個以儀表名稱拼音或英文為名字的空DLL項(xiàng)目,并產(chǎn)生相應(yīng)的頭文件與源文件;
[0060]2)在空DLL項(xiàng)目的頭文件中添加XHDLL規(guī)范接口函數(shù)原型,并且按照開發(fā)工具的導(dǎo)出函數(shù)聲明句法聲明為導(dǎo)出函數(shù);
[0061]3)根據(jù)XHDLL規(guī)范接口函數(shù)要求,DLL的源文件中,參考儀表規(guī)格書或使用說明書,以C語言分別實(shí)現(xiàn)接口函數(shù);
[0062]4)編譯連接,生成XHDLL。
[0063]其中,XHDLL規(guī)范接口函數(shù)原型包括6種,分別為儀表采集命令生產(chǎn)函數(shù):int Encode (int Code, BYTE*buf, int bufLength);儀表響應(yīng)解析函數(shù):BOOLDecode (int Code, BYTE*buf, int bufLength, f loat*pfData);儀表啟動命令生成函數(shù):int StartEncode (int Code, BYTE*buf, int bufLength);儀表停止命令生成函數(shù):int StopEncode (int Code, BYTE*buf, int bufLength);獲得儀表超時值函數(shù):intGetTimeOut (void);獲得參數(shù)索引函數(shù):B00L GetParameterIndex (TCHAR*ParaBuf, intbufLength, int*pnlndex)。
[0064](I)儀表采集命令生成函數(shù):
[0065]采集儀表數(shù)據(jù)必須發(fā)送命令,因此所有XHDLL都有一個函數(shù)用于根據(jù)儀表的通訊協(xié)議生成命令。
[0066]函數(shù)原型為:intEncode (int Code, BYTE*buf, int bufLength)
[0067]說明:Code為參數(shù)索引,buf及bufLength分別為采集線程分配的緩沖區(qū)及其長度。此函數(shù)根據(jù)儀表通訊協(xié)議對對應(yīng)的參數(shù)生成采集命令字節(jié)流,然后返回字節(jié)流的長度。如果無法對參數(shù)生成采集命令(不支持或命令字符串大于緩沖區(qū)長度)則返回長度為O。
[0068](2)儀表響應(yīng)解析函數(shù):
[0069]儀器設(shè)備對命令的響應(yīng)必須解析才能得到數(shù)據(jù),所以必須提供一個響應(yīng)解析函數(shù)。
[0070]函數(shù)原型為:B00LDecode (int Code, BYTE*buf, int bufLength, f loat*pfData)
[0071]說明:Code為參數(shù)索引,buf及bufLength分別為從儀表讀到的數(shù)據(jù)所在緩沖區(qū)指針及數(shù)據(jù)字節(jié)數(shù),PfData為采集線程分配的用于存放采集結(jié)果的4字節(jié)浮點(diǎn)數(shù)緩沖區(qū)指針。此函數(shù)根據(jù)儀表的通訊協(xié)議,對從儀表讀到的字節(jié)流進(jìn)行解析,得到參數(shù)索引對應(yīng)的參數(shù)的測量數(shù)據(jù)并存放到浮點(diǎn)緩沖區(qū)并返回真。如果返回命令格式、校驗(yàn)等出錯,則返回假。[0072](3)儀表啟動命令生成函數(shù):
[0073]有些監(jiān)測儀表在采集數(shù)據(jù)之前要執(zhí)行特定的啟動命令,這個函數(shù)用來生成此命令。這個函數(shù)根據(jù)儀表的規(guī)范來確定是否需要實(shí)現(xiàn),可以簡單的返回0,則調(diào)用者可以安全地忽略對此函數(shù)的調(diào)用;也可以不實(shí)現(xiàn),那么調(diào)用者應(yīng)該因?yàn)榈玫降暮瘮?shù)指針為NULL而不調(diào)用此函數(shù)并且不以為有錯地繼續(xù)執(zhí)行下去。
[0074]函數(shù)原型為:intStartEncode (int Code, BYTE*buf, int bufLength)
[0075]說明:Code為參數(shù)索引,buf及bufLength分別為采集線程分配的緩沖區(qū)及其長度。此函數(shù)根據(jù)儀表通訊協(xié)議對相應(yīng)的參數(shù)生成啟動命令字節(jié)序列,然后返回其長度。如果無法對參數(shù)生成啟動命令(不支持或命令字符串大于緩沖區(qū)長度)則返回長度為O。如果儀表無啟動要求,此函數(shù)可以不實(shí)現(xiàn)。
[0076](4)儀表停止命令生成函數(shù):
[0077]有些監(jiān)測儀表在采集數(shù)據(jù)結(jié)束之后要執(zhí)行特定的停止分析命令,這個函數(shù)用來生成此命令。這個函數(shù)根據(jù)儀表的規(guī)范來確定是否需要實(shí)現(xiàn),可以簡單的返回0,則調(diào)用者可以安全地忽略對此函數(shù)的調(diào)用;也可以不實(shí)現(xiàn),那么調(diào)用者應(yīng)該因得到的函數(shù)指針為NULL而不調(diào)用此函數(shù)并且不以為有錯地繼續(xù)執(zhí)行下去。
[0078]函數(shù)原型為:intStopEncode (int Code, BYTE*buf, int bufLength)
[0079]說明:Code為參數(shù)索引,buf及bufLength分別為采集線程分配的緩沖區(qū)及其長度。此函數(shù)根據(jù)儀表通訊協(xié)議對相應(yīng)的參數(shù)生成停止命令字節(jié)序列,然后返回其長度。如果無法對參數(shù)生成停止命令(不支持或命令字符串大于緩沖區(qū)長度)則返回長度為O。如果儀表無停止要求,此函數(shù)可以不實(shí)現(xiàn)。
[0080](5)獲得儀表超時值函數(shù):
[0081 ] 監(jiān)測儀表對命令的響應(yīng)時間通常是不同的,不同的儀表有不同的響應(yīng)時間,因而應(yīng)該針對不同的儀表設(shè)定不同的超時常數(shù)。XHDLL提供一個函數(shù)以提供最大命令響應(yīng)時間,這個時間應(yīng)該由儀表規(guī)格書或者由儀表開發(fā)者提供,響應(yīng)時間單位為毫秒。
[0082]函數(shù)原型為:intGetTimeOut (void)
[0083]說明:此函數(shù)返回一個預(yù)先設(shè)定的以毫秒為單位的超時值。
[0084](6)獲得參數(shù)索引函數(shù):
[0085]在XHDLL中實(shí)現(xiàn)一個查詢函數(shù),這個函數(shù)可以通過參數(shù)名稱字符串作為參數(shù)獲得該參數(shù)的索引。這樣在配置的時候用戶根據(jù)參數(shù)名稱配置,而開發(fā)人員編寫軟件時內(nèi)部使用索引來調(diào)用函數(shù)。
[0086]函數(shù)原型為:B00LGetParameterIndex (TCHAR*ParaBuf, intbufLength, int*pnlndex)
[0087]說明:ParaBuf為參數(shù)名字字符串緩沖區(qū)指針,參數(shù)名字為UNICODE編碼。bufLength為參數(shù)緩沖區(qū)長度。PfData為采集線程分配的用于存放參數(shù)索引的整數(shù)緩沖區(qū)指針。此函數(shù)把參數(shù)名字同DLL中預(yù)先設(shè)定的參數(shù)名字進(jìn)行字符串比較,如果有一個匹配,就返回其索引,返回真;如果沒有匹配,則返回假。
[0088]完成XHDLL的開發(fā)后,需要對其進(jìn)行測試和調(diào)試,以確保其正確性。調(diào)試時并不需要實(shí)際監(jiān)測儀表,只要已經(jīng)開發(fā)成功的測控軟件即可。具體包括以下步驟:
[0089]I)根據(jù)儀表說明書,選擇一條真實(shí)的儀表的的采集命令、該命令的響應(yīng)以及該響應(yīng)提供的參數(shù)數(shù)值,作為樣例命令、樣例響應(yīng)及樣例參數(shù)值;
[0090]2)啟動測控軟件并以調(diào)試模式運(yùn)行;
[0091]3)添加儀表參數(shù);
[0092]4)測控軟件載入并調(diào)用DLL中的函數(shù)進(jìn)行數(shù)據(jù)采集,在讀取串口數(shù)據(jù)后添加斷點(diǎn),把樣例響應(yīng)寫入臨時緩沖區(qū)當(dāng)做讀到的數(shù)據(jù);
[0093]5)繼續(xù)運(yùn)行測控軟件,得到對樣例響應(yīng)解析后獲得的參數(shù)值;
[0094]6)若獲得的參數(shù)值同樣例參數(shù)值不一致,則修改XHDLL源代碼,重新調(diào)試,直到參數(shù)值與樣例參數(shù)值一致。
[0095]XHDLL開發(fā)完成后,經(jīng)過下述安裝和添加參數(shù)操作后即可被軟件使用來采集數(shù)據(jù):
[0096](I)安裝 XHDLL
[0097]對于已經(jīng)正在運(yùn)行的系統(tǒng),把XHDLL通過互聯(lián)網(wǎng)或其他媒介傳遞給用戶,并由用戶復(fù)制到測控軟件安裝目錄下;對于最新軟件更新,把XHDLL打包到測控軟件安裝包,這樣安裝測控軟件時XHDLL就被復(fù)制到測控軟件安裝目錄下了。每一個測控軟件安裝包制作時應(yīng)該把到那時為止開發(fā)者組織已經(jīng)開發(fā)完成的所有XHDLL都添加到安裝包中。
[0098](2)添加監(jiān)測儀表 [0099]系統(tǒng)維護(hù)人員在測控軟件中執(zhí)行添加儀表參數(shù)操作,測控軟件的相關(guān)界面如圖2所示。輸入XHDLL名字、儀表參數(shù)名字、以及串口配置、儀表地址等并存入數(shù)據(jù)庫。根據(jù)需要把一個采集系統(tǒng)所有監(jiān)測儀表需要的XHDLL都添加到測控系統(tǒng)中。
[0100](3)使用XHDLL采集數(shù)據(jù)
[0101]測控軟件如圖4流程圖所示載入、調(diào)用及卸載某一儀表參數(shù)對應(yīng)的XHDLL,則可采集到該監(jiān)測儀表某參數(shù)的一個數(shù)據(jù)。在軟件中定時執(zhí)行圖4流程,就可實(shí)現(xiàn)對該監(jiān)測儀表某參數(shù)的連續(xù)采集。對所有需要采集的監(jiān)測儀表參數(shù)執(zhí)行相同的流程,則全系統(tǒng)所有監(jiān)測儀表參數(shù)都會得到采集。
[0102]下面是運(yùn)行于WINDOWS XP的用VC2010開發(fā)的、用于采集分析污水中污染物含量的儀器T0C-602C的XHDLL源代碼例子,只列出關(guān)鍵源代碼,DLL架構(gòu)相關(guān)的WINDOWS DLL通用文件省去,T0C-602C分析污水中的TOC (有機(jī)污染物)及COD (化學(xué)需氧量)并通過串口同上位機(jī)通訊。
[0103]一、XHDLL 的名稱為:T0C_602C.DLL。
[0104]二、XHDLL 的頭文件:
[0105]
Il下列ifdef塊是創(chuàng)建使從DLL導(dǎo)出更簡單的
Il宏的標(biāo)準(zhǔn)方法。此DLL中的所有文件都是用命令行上定義的T0C—620C—EXPORTS
//符號編譯的。在使用此DLL的
Il任何其他項(xiàng)目上不應(yīng)定義此符號。這樣,源文件中包含此文件的任何其他項(xiàng)目都會
將
[0106]
【權(quán)利要求】
1.對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法,其特征在于: 采用DLL作為實(shí)現(xiàn)對串口儀表進(jìn)行數(shù)據(jù)采集的軟件模塊,規(guī)定了該類DLL的特殊要求,這種規(guī)定為XHDLL規(guī)范。 每一種儀表根據(jù)XHDLL規(guī)范編寫開發(fā)一個XHDLL ; 利用測控軟件對XHDLL進(jìn)行調(diào)試; 用戶操作員把添加儀表對應(yīng)的XHDLL添加到測控軟件工作目錄中; 測控軟件調(diào)用XHDLL采集數(shù)據(jù); 測控軟件卸載XHDLL,釋放空間。
2.根據(jù)權(quán)利要求1所述的對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法,其特征在于,XHDLL的開發(fā)方法步驟如下: 1)使用開發(fā)工具的DLL開發(fā)功能,生成一個以儀表名稱拼音或英文為名字的空DLL項(xiàng)目,并產(chǎn)生相應(yīng)的頭文件與源文件; 2)在空DLL項(xiàng)目的頭文件中添加XHDLL規(guī)范接口函數(shù)原型,并且按照開發(fā)工具的導(dǎo)出函數(shù)聲明句法聲明為導(dǎo)出函數(shù); XHDLL規(guī)范接口函數(shù)原型包括: 儀表米集命令生產(chǎn)函數(shù):int Encode(int Code, BYTE*buf, int bufLength); 儀表響應(yīng)解析函數(shù):BOOL Decode (int Code, BYTE*buf, intbufLength, float氺pfData); 儀表啟動命令生成函數(shù):int StartEncode (int Code, BYTE*buf, int bufLength); 儀表停止命令生成函數(shù):int StopEncode (int Code, BYTE*buf, int bufLength); 獲得儀表超時值函數(shù):int GetTimeOut (void); 獲得參數(shù)索引函數(shù):BOOL GetParameterIndex (TCHAR*ParaBuf, intbufLength, int*pnlndex); 3)根據(jù)XHDLL規(guī)范接口函數(shù)要求,DLL的源文件中,參考儀表規(guī)格書或使用說明書,以C語言分別實(shí)現(xiàn)接口函數(shù); 4)編譯連接,生成XHDLL。
3.根據(jù)權(quán)利要求1所述的對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法,其特征在于,XHDLL通過測控軟件調(diào)試,具體包括以下步驟: 1)根據(jù)儀表說明書獲得真實(shí)的儀表的采集命令、響應(yīng)以及該響應(yīng)提供的參數(shù)數(shù)值,作為樣例命令、樣例響應(yīng)及樣例參數(shù)值; 2)啟動測控軟件并以調(diào)試模式運(yùn)行; 3)添加儀表參數(shù); 4)測控軟件載入并調(diào)用DLL中的函數(shù)進(jìn)行數(shù)據(jù)采集,在讀取串口數(shù)據(jù)后添加斷點(diǎn),把樣例響應(yīng)寫入臨時緩沖區(qū)當(dāng)做讀到的數(shù)據(jù); 5)繼續(xù)運(yùn)行測控軟件,得到對樣例響應(yīng)解析后獲得的參數(shù)值; 6)若獲得的參數(shù)值同樣例參數(shù)值不一致,則修改XHDLL源代碼,重復(fù)步驟2)—5),直到參數(shù)值與樣例參數(shù)值一致。
4.根據(jù)權(quán)利要求3所述的對串口儀表進(jìn)行數(shù)據(jù)采集的通用軟件模塊的設(shè)計(jì)開發(fā)方法,其特征在于,測控軟件采用操作系統(tǒng)的API函數(shù)顯式載入XHDLL后再調(diào)用其中的函數(shù)。
【文檔編號】G06F9/44GK103955371SQ201410179296
【公開日】2014年7月30日 申請日期:2014年4月29日 優(yōu)先權(quán)日:2014年4月29日
【發(fā)明者】薛宏, 王輝, 張標(biāo)標(biāo), 杜克林 申請人:浙江銀江研究院有限公司