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