張鵬,顧繼承,王小龍,何萌
(航空工業(yè)北京長城計量測試技術(shù)研究所,北京100095)
溫濕度環(huán)境試驗設(shè)備廣泛應(yīng)用于汽車、電子、生物醫(yī)藥等行業(yè)中。為保證環(huán)境試驗數(shù)據(jù)穩(wěn)定、可靠、可溯源,需要對環(huán)境試驗設(shè)備定期開展計量校準工作。伴隨著中國社會經(jīng)濟的快速發(fā)展,環(huán)境試驗設(shè)備的校準服務(wù)工作業(yè)務(wù)量迅速增加,出現(xiàn)了各式各樣的環(huán)境試驗設(shè)備自動化校準軟件,但是這些軟件普遍存在擴展性差、測量參數(shù)單一、覆蓋規(guī)程有限等問題。針對這些軟件的不足,本文設(shè)計了一款環(huán)境試驗設(shè)備自動化測試軟件。該軟件具有良好的兼容性,支持多規(guī)程覆蓋、多參數(shù)校準功能,能夠有效滿足計量人員的使用需求。
如圖1所示,本文研制的環(huán)境試驗設(shè)備自動化測試軟件包含五個功能模塊:①客戶管理模塊主要用于管理送檢客戶的信息、被測環(huán)境試驗設(shè)備的信息和試驗環(huán)境相關(guān)信息;②標準器管理模塊主要用來管理巡檢儀、傳感器等標準器的信息和其不確定度信息以及傳感器的修正值;③規(guī)程管理模塊主要用來管理使用規(guī)程的名字、發(fā)布時間、所屬部門等信息以及規(guī)程的測試參數(shù);④采集模塊用來管理硬件設(shè)備驅(qū)動程序和采集數(shù)據(jù);⑤試驗操作模塊是確定試驗信息、選定規(guī)程、選定標準器,利用標準參照規(guī)程要求的流程對被測設(shè)備進行測量的模塊,并將結(jié)果按照原始記錄或證書模板進行打印。
通過這五個模塊可以實現(xiàn)環(huán)境試驗設(shè)備的自動化測試,但是由于環(huán)境實驗設(shè)備校準檢測使用的規(guī)程及參數(shù)較多,如表1所示,設(shè)計過程中會遇到多規(guī)程多參數(shù)兼容性問題,如果為了保證程序的兼容性而將不同規(guī)程的運行以及不同參數(shù)的測量過程完全獨立設(shè)計,會導(dǎo)致開發(fā)效率低、使用者的學(xué)習(xí)難度大、校準檢測時使用效率低,再加上客戶信息、被測設(shè)備信息、傳感器信息以及測量結(jié)果查詢功能均是共同使用的,如果完全獨立設(shè)計會造成資源的浪費,且明顯增加了程序運行的復(fù)雜性。因此環(huán)境試驗設(shè)備自動化測試軟件設(shè)計中最大的難點就是實現(xiàn)多規(guī)程多參數(shù)的兼容性程序架構(gòu)。
圖1 軟件結(jié)構(gòu)
為了解決多規(guī)程多參數(shù)兼容性的程序設(shè)計難題,本文將五個功能模塊的調(diào)用關(guān)系調(diào)整為三層:信息層、規(guī)程算法層、硬件采集層,如圖2所示;然后通過一個“測試序號”參數(shù)將這三個層次之間解耦獨立之后進行動態(tài)調(diào)用。
圖2 軟件框架
信息層是通過人機交互完成客戶、被測設(shè)備、試驗條件、選用規(guī)程、選用標準器等信息輸入功能的集合;規(guī)程算法層是按照不同的規(guī)程規(guī)范要求的算法計算完成校準檢測任務(wù)功能的集合;硬件采集層是驅(qū)動采集模塊中硬件采集數(shù)據(jù)功能的集合。
調(diào)整調(diào)用關(guān)系最主要的手段是將規(guī)程算法層中的規(guī)程設(shè)計為獨立的調(diào)用單元,可用解耦規(guī)程單元與外部輸入?yún)?shù)依賴的方法,形成模塊獨立的代碼[14-15]。
環(huán)境試驗設(shè)備自動化測試軟件的基本業(yè)務(wù)流程如圖3所示。程序開始運行后,通過客戶管理模塊和標準器管理模塊輸入客戶信息、被檢設(shè)備信息、測試環(huán)境信息、所選標準器和傳感器信息;然后按照選定項目進入試驗?zāi)K,按規(guī)程要求的步驟開展校準測試并計算結(jié)果,最后生成原始記錄或證書。
梳理業(yè)務(wù)流程之后,可以發(fā)現(xiàn)試驗?zāi)K按照規(guī)程要求開展校準檢測功能時,需要用到客戶管理模塊、標準器管理模塊獲得的信息。如果按照常規(guī)方法進行程序設(shè)計,即在內(nèi)存中開辟變量空間存儲信息內(nèi)容,然后信息內(nèi)容通過內(nèi)存在模塊間傳遞,會導(dǎo)致模塊之間的依賴性非常強,屬于強耦合關(guān)系,任何代碼的變動都將導(dǎo)致程序的連鎖修改,無法滿足多規(guī)程多參數(shù)獨立流程、獨立界面、獨立硬件的設(shè)計要求。
為了解除模塊間的耦合,在設(shè)計過程中調(diào)整了模塊之間的數(shù)據(jù)傳遞邏輯,將原本通過內(nèi)存直接向試驗?zāi)K傳遞客戶數(shù)據(jù)、標準器數(shù)據(jù)、傳感器數(shù)據(jù)的耦合方法,調(diào)整為不利用內(nèi)存空間的間接傳遞的非耦合方法:即在客戶管理模塊和標準器管理模塊中,將客戶信息、標準器信息、傳感器信息等需要傳遞的數(shù)據(jù)存儲在數(shù)據(jù)庫中,試驗?zāi)K使用以上信息時到數(shù)據(jù)庫查詢即可。這種設(shè)計方案雖然增加了數(shù)據(jù)庫編程的代碼量,但可有效實現(xiàn)試驗?zāi)K與其他模塊的解耦。
表1 規(guī)程規(guī)范與對應(yīng)的參數(shù)
圖3 基本業(yè)務(wù)流程
同理,在試驗?zāi)K內(nèi)部驅(qū)動硬件時,認為不同規(guī)程、不同校準測試參數(shù)使用不同的硬件。如果硬件的驅(qū)動設(shè)置和采集的數(shù)據(jù)全部由變量經(jīng)內(nèi)存?zhèn)鬟f,試驗?zāi)K與硬件調(diào)用之間同樣面臨著強耦合的問題,當更換硬件時會面臨程序上的巨大修改。因此,調(diào)整硬件采集時的數(shù)據(jù)存儲邏輯,采用將驅(qū)動配置和采集數(shù)據(jù)存儲在數(shù)據(jù)庫中的非耦合方式,將硬件功能程序從試驗?zāi)K中解耦出來,最終使程序變成三層結(jié)構(gòu)。
通過解耦設(shè)計后的試驗?zāi)K代碼流程如圖4所示。
圖4 解耦設(shè)計后試驗?zāi)K的代碼流程圖
在解耦的同時,還須要配合利用動態(tài)調(diào)用技術(shù)。動態(tài)調(diào)用是對應(yīng)程序的靜態(tài)調(diào)用而言的,靜態(tài)調(diào)用是程序在編譯時直接將靜態(tài)調(diào)用的函數(shù)與數(shù)據(jù)一同編譯鏈接至可執(zhí)行文件中,當可執(zhí)行文件運行時,所有靜態(tài)調(diào)用的函數(shù)全部加載至內(nèi)存,這種方式簡單方便。而采取動態(tài)調(diào)用的函數(shù)在編譯時不鏈接至可執(zhí)行文件內(nèi)部,而是隨著程序運行的過程根據(jù)指令動態(tài)加載到內(nèi)存中[16]。動態(tài)調(diào)用最大的好處是動態(tài)函數(shù)與EXE執(zhí)行文件獨立,只要函數(shù)輸入輸出接口不變(即名稱、參數(shù)、返回值類型和調(diào)用約定不變),更換動態(tài)調(diào)用函數(shù)不會對EXE可執(zhí)行文件造成任何影響,極大地提高了程序的可維護性和可擴展性[17]。
實現(xiàn)動態(tài)調(diào)用的技術(shù)難度比較大,比如編譯器的實現(xiàn)機制、動態(tài)調(diào)用路徑、調(diào)試環(huán)境等,而且不同軟件平臺動態(tài)調(diào)用的實現(xiàn)機制不同,解決方法也不同。本文不分析動態(tài)調(diào)用的實現(xiàn)細節(jié),主要分析利用了動態(tài)調(diào)用技術(shù)的軟件結(jié)構(gòu)。
環(huán)境試驗設(shè)備自動化測試軟件將動態(tài)調(diào)用技術(shù)應(yīng)用于試驗?zāi)K中,將需求中提到的每一本規(guī)程規(guī)范設(shè)計為一個獨立的可動態(tài)調(diào)用的試驗?zāi)K,然后將這些試驗?zāi)K集合命名為規(guī)程庫,由調(diào)度模塊動態(tài)加載,軟件結(jié)構(gòu)如圖5所示。
圖5 動態(tài)調(diào)用軟件框架
以JJF 1270-2010《溫度、濕度、振動綜合環(huán)境試驗系統(tǒng)校準規(guī)范》和JJF 1101-2019《環(huán)境試驗設(shè)備溫度、濕度校準規(guī)范》動態(tài)調(diào)用為例,分析軟件結(jié)構(gòu)的運行流程。
首先,啟動運行,進入信息層獲取相關(guān)信息,然后進入規(guī)程算法層調(diào)用JJF 1270-2010試驗?zāi)K。
JJF 1270-2010中規(guī)定了溫度偏差、溫度波動度、溫度均勻度、溫度指示儀表示值誤差、溫度變化速率、相對濕度偏差、相對濕度指示儀表示值誤差、風(fēng)速、最低露點溫度(正在開發(fā)中)、噪聲校準項目。
選擇JJF 1270-2010規(guī)程,由調(diào)度模塊加載校準參數(shù)選取函數(shù),如圖6所示。
圖6 JJF 1270-2010校準項目選擇界面
依據(jù)選擇的校準項目進入校準測試界面,如圖7所示,開展具體的校準測試。
在規(guī)程算法層調(diào)用JJF 1101-2019則進入1101對應(yīng)的試驗?zāi)K。
JJF 1101-2019中規(guī)定了溫度偏差、溫度波動度、溫度均勻度、濕度偏差、濕度波動度、濕度均勻度校準項目,此時調(diào)度模塊1101的參數(shù)選取函數(shù)動態(tài)加載進入界面,如圖8所示;校準測試界面如圖9所示。
在同樣的“溫濕度”校準項目中,由于JJF 1101-2019與JJF 1270-2010要求不同,各自的校準界面與算法也各不相同,如圖10所示。
綜上,軟件運行的流程圖如圖11所示:啟動可執(zhí)行文件,首先進入信息層的相應(yīng)模塊,獲取客戶、環(huán)境、標準器等相關(guān)信息。然后進入規(guī)程算法層,由調(diào)度模塊加載按規(guī)程內(nèi)容編寫的試驗?zāi)K,即通過指令實現(xiàn)試驗?zāi)K代碼的動態(tài)加載與釋放。調(diào)度機制采用獨占方式,即選中的試驗?zāi)K根據(jù)指令加載至內(nèi)存后,在沒有被命令退出之前,其他內(nèi)容無法加載。試驗?zāi)K測量數(shù)據(jù)時調(diào)用硬件,進入硬件采集層執(zhí)行驅(qū)動代碼進行數(shù)據(jù)測量,最終完成校準測試。
利用解耦和動態(tài)調(diào)用技術(shù)對所需的環(huán)境試驗設(shè)備相關(guān)測試規(guī)程進行編碼,得到所有滿足要求的試驗?zāi)K。這些試驗?zāi)K接收到調(diào)度模塊所發(fā)送的指令后,有目標地動態(tài)加載進入主程序流程中運行,有效解決了多規(guī)程多參數(shù)兼容設(shè)計的軟件難題。
圖7 JJF 1270-2010校準測試界面
圖8 JJF 1101-2019校準項目選擇界面
圖9 JJF 1101-2019校準測試界面
圖10 溫濕度采集計算界面
圖11 規(guī)程庫動態(tài)調(diào)用流程示意圖
設(shè)計了具有良好兼容性、綜合性、可操作性,支持多規(guī)程覆蓋、多參數(shù)校準功能的環(huán)境試驗設(shè)備自動化測試軟件,該軟件包含客戶管理、標準器管理、規(guī)程管理、采集、試驗操作五個功能模塊,并且通過解耦與動態(tài)調(diào)用技術(shù)將五個模塊依賴關(guān)系轉(zhuǎn)化為三個層次:信息層、規(guī)程算法層、硬件采集層。信息層通過人機交互獲取信息;規(guī)程算法層用來動態(tài)調(diào)用規(guī)程要求,開展校準檢測;硬件采集層驅(qū)動硬件采集數(shù)據(jù)。該軟件以規(guī)程為最小單元,可動態(tài)組合、動態(tài)替換,成功解決了環(huán)境試驗設(shè)備自動化測試軟件的兼容性設(shè)計難題,避免了市場上現(xiàn)有環(huán)境試驗設(shè)備軟件功能不全面、規(guī)程單一、操作復(fù)雜的問題,能夠有效滿足計量人員的使用需求,具有技術(shù)推廣價值。