陳 浩,吳裕斌,吳 鑫,曹丹華
(華中科技大學(xué)光學(xué)與電子信息學(xué)院,湖北武漢 430074)
在現(xiàn)代自動化生產(chǎn)過程中,工業(yè)視覺檢測系統(tǒng)被廣泛應(yīng)用于成品檢驗、質(zhì)量控制等領(lǐng)域[1]。典型的視覺檢測系統(tǒng)主要由智能相機、控制終端、光源3部分組成[2-3],控制終端作為系統(tǒng)的重要組成單元,具有以下2個特點:作為系統(tǒng)的控制核心與眾多設(shè)備進行高頻度的數(shù)據(jù)交互;功能需求可能會動態(tài)變化。這就要求控制終端軟件應(yīng)具備低耦合、易擴展、強實時的特性[4],常規(guī)模塊化的軟件設(shè)計思路無法滿足上述要求。
本文介紹了一種面向工業(yè)視覺檢測系統(tǒng)的控制終端軟件設(shè)計方案,該方案以改進MVC模式為核心,按照軟件功能邏輯劃分層次,并引入抽象數(shù)據(jù)接口類和中間件技術(shù)用于降低軟件內(nèi)部耦合,提高擴展能力。針對實時性,實現(xiàn)了一種基于優(yōu)先級調(diào)度策略的線程池,并在抑制超時方面與傳統(tǒng)線程池進行了比較。
工業(yè)視覺檢測系統(tǒng)控制終端軟件運行的硬件平臺是Cortex-A8內(nèi)核的AM3358型微處理器,主頻為1 GHz,內(nèi)存為512 M字節(jié),液晶屏分辨率為1 024 ×768,通過以太網(wǎng)與CAN總線分別與智能相機和光源控制器連接。操作系統(tǒng)選用嵌入式Linux,內(nèi)核版本為3.12,UI界面開發(fā)采用Qt5框架。相比于基于x86平臺的大型控制終端設(shè)備,嵌入式平臺方案具有高性能、低功耗、易部署的優(yōu)點。
控制終端軟件設(shè)計以傳統(tǒng)MVC模式[5]架構(gòu)為基礎(chǔ),采用分層模型思想以及中間件技術(shù)對傳統(tǒng)MVC模式進行改進,整體框架分為視圖層、控制器層、邏輯處理層、數(shù)據(jù)對象層和數(shù)據(jù)訪問層,通過抽象數(shù)據(jù)接口類和中間件進行數(shù)據(jù)交互,整體軟件框架如圖1所示。
圖1 工業(yè)視覺檢測系統(tǒng)控制終端軟件整體框架
視圖層負責控制終端軟件功能模塊UI界面的繪制,可以根據(jù)實際需求采用不同方式進行開發(fā),在Qt框架下,通常采用拖拽控件的方式設(shè)計界面。
控制器層作為視圖層和邏輯控制層之間信息交互的橋梁,一方面接收視圖層傳入的交互數(shù)據(jù)并將其序列化為二進制字節(jié)流,完成后傳遞給邏輯控制層。另一方面將邏輯控制層返回的數(shù)據(jù)分發(fā)給視圖層用于顯示。
邏輯控制層負責具體業(yè)務(wù)邏輯的處理,如接收檢測圖像任務(wù)、發(fā)送配置文件任務(wù)、監(jiān)控系統(tǒng)運行狀態(tài)任務(wù)等。為提高控制終端響應(yīng)的實時性,邏輯控制層采用多線程和線程池方案處理不同任務(wù)。
數(shù)據(jù)對象層負責不同類型協(xié)議幀的構(gòu)造與解析。控制終端與其他設(shè)備之間需要通過特定類型的數(shù)據(jù)進行信息交換,一般把這些特定類型的數(shù)據(jù)稱之為協(xié)議幀,其按不同的功能可以分為請求幀、應(yīng)答幀、控制幀等。為實現(xiàn)數(shù)據(jù)和邏輯的分離,與協(xié)議幀有關(guān)的操作都經(jīng)由數(shù)據(jù)對象層處理。
數(shù)據(jù)訪問層負責協(xié)議幀的發(fā)送與接收,針對不同的總線格式,通過預(yù)設(shè)代碼屏蔽差異,對外提供統(tǒng)一的數(shù)據(jù)傳輸接口,減小與數(shù)據(jù)對象層之間的數(shù)據(jù)耦合。
為進一步降低控制終端軟件的耦合性,提高擴展能力,層與層之間僅通過抽象數(shù)據(jù)接口類(以下簡稱接口類)進行數(shù)據(jù)交互,最大程度地降低了層與層之間的耦合性。接口類對外提供統(tǒng)一調(diào)用的方法,功能核心是能夠表示不同類型、不同長度的數(shù)據(jù),在C++語言中通過虛函數(shù)與類模板來實現(xiàn)。接口類的核心變量與方法如圖2所示。接口類采用類模板的形式進行定義,在實例化時根據(jù)不同的T參數(shù)可以表示任意類型數(shù)據(jù),同時定義map類型的變量用于存儲具體數(shù)據(jù),并將讀寫數(shù)據(jù)的方法定義為虛函數(shù),在默認函數(shù)無法滿足需求的情況下可以通過重載擴充功能。
層與層之間可以通過接口類簡化調(diào)用關(guān)系,但在軟件運行過程中,視圖層、控制器層、邏輯處理層業(yè)務(wù)代碼可能會處于不同的線程當中,為實現(xiàn)安全的跨線程消息傳遞,控制終端軟件將層與層之間的信息交互請求當做獨立事件,通過Qt5中的事件循環(huán)機制和信號槽機制建立事件分發(fā)中間件,專職于跨線程的消息傳遞。
圖2 抽象數(shù)據(jù)接口類核心變量與方法UML圖
控制終端啟動后,會自動與智能相機建立網(wǎng)絡(luò)連接,并等待用戶指令。當用戶通過視圖層界面觸發(fā)某項功能后,視圖層首先判斷功能類型,然后構(gòu)造抽象數(shù)據(jù)接口類,最后通過事件分發(fā)中間件傳遞給控制器層。控制器層收到接口類后進行序列化操作,然后通過中間件分發(fā)給邏輯控制層進行業(yè)務(wù)邏輯處理,進而完成與智能相機的交互任務(wù)。
當控制終端收到智能相機發(fā)送的協(xié)議幀后,首先通過數(shù)據(jù)訪問層和數(shù)據(jù)對象層進行解析,然后交由邏輯控制層進行業(yè)務(wù)處理,最后通過控制器層和中間件將數(shù)據(jù)分發(fā)給視圖層,進而反饋給用戶。整個處理流程時序如圖3所示。
圖3 控制終端軟件處理流程
控制終端軟件中的邏輯控制層采用線程池技術(shù)處理外部設(shè)備的交互請求。目前對線程池的研究主要集中在如何提高性能的層面上,但對于實時控制系統(tǒng)而言,保證在規(guī)定時間內(nèi)完成對設(shè)備交互請求的響應(yīng)才是控制終端軟件線程池設(shè)計的關(guān)鍵。
根據(jù)交互請求的緊急程度創(chuàng)建不同優(yōu)先級的線程是提高控制終端軟件響應(yīng)實時性的有效方案,但由于交互請求發(fā)生的時刻不統(tǒng)一,靜態(tài)設(shè)置線程優(yōu)先級的方案無法滿足實際應(yīng)用場景,需要通過某種策略動態(tài)確定線程的優(yōu)先級。
支持向量回歸機(support vector regression,SVR)具備容易實現(xiàn)、學(xué)習(xí)速度快的優(yōu)點,廣泛應(yīng)用于各類數(shù)據(jù)的估計和擬合[6]。利用SVR能夠?qū)€程處理交互請求所用時間進行估計,為動態(tài)確定線程優(yōu)先級提供數(shù)據(jù)支持,避免請求超時現(xiàn)象的發(fā)生。
半同步/半異步(half-sync/half-async)型線程池(簡稱為HSHA線程池)是一種典型的線程池方案,具有簡單易實現(xiàn)的優(yōu)點[7]。基于優(yōu)先級調(diào)度策略的線程池(簡稱為SVR線程池)以HSHA線程池為原型,添加了請求事件監(jiān)測模塊,整體架構(gòu)如圖4所示,由同步層和異步層2部分組成。其中同步層包括監(jiān)聽接口模塊,異步層包括請求列表模塊、請求緩沖區(qū)模塊和線程隊列模塊。當有交互請求輸入時,監(jiān)聽接口模塊被激活,將請求的標識、發(fā)出時間、門限時間等信息添加入請求列表模塊中,然后線程池根據(jù)SVR算法進行完成時間估計,進而確定線程優(yōu)先級,完成后將交互請求時間存入緩沖區(qū),并分配線程進行邏輯處理。
圖4 基于優(yōu)先級調(diào)度策略的線程池整體架構(gòu)
對于某個固定交互請求,需要在一定時間范圍內(nèi)得到應(yīng)答,一般稱這段時間為門限時間。令Tm為交互請求的門限時間,Tw為交互請求的延遲時間,Tr為交互請求的實際完成時間,To為請求的緊急程度,則它們之間的關(guān)系如下:
To=Tm-Tw-Tr
(1)
由于門限時間Tm是固定的,請求延遲時間Tw在正常環(huán)境下可以認為是相同的。從式(1)可以看出,交互請求的實際完成時間Tr直接影響緊急程度To,To越小說明交互請求越緊急,若To為負數(shù)則說明交互請求將超時完成,利用SVR對Tr進行估計可以確定To。根據(jù)上述分析,To可以反映出交互請求的優(yōu)先級別,To越小說明交互請求的優(yōu)先級越高,將優(yōu)先獲得線程池處理。
根據(jù)式(1)中的參數(shù),基于優(yōu)先級調(diào)度策略線程池架構(gòu)中的請求列表需要記錄交互請求的類型編號、延遲時間、門限時間和完成時間,這些參數(shù)為動態(tài)計算交互請求的優(yōu)先級提供了參數(shù)依據(jù)。
SVR算法的本質(zhì)是求解二次規(guī)劃問題,求解過程復(fù)雜,不適合嵌入式系統(tǒng)。基于最小二乘原理的SVR算法采用解線性方程組來替代解二次規(guī)劃問題,降低了運算難度,在保證學(xué)習(xí)精度的情況下降低了對處理器資源的消耗,適用于嵌入式系統(tǒng)。
為完成控制終端軟件對交互請求實際完成時間 的估計,需要確定最小二乘SVR算法的輸入樣本。根據(jù)線程池的特點,Tr與線程池運行線程的總數(shù)量M、請求對應(yīng)線程執(zhí)行完畢的平均響應(yīng)時間Ta、請求對應(yīng)線程運行前的平均等待時間Tw、線程池當前線程處于阻塞態(tài)的總次數(shù)N以及總時間Tb等因素有關(guān),前3個參數(shù)用于估測新線程的運行時間,最后2個參數(shù)用于估測新線程的阻塞時間。據(jù)此可以確定最小二乘SVR算法的輸入向量xi和預(yù)測輸出量yi,如表1所示。
表1 最小二乘SVR算法的輸入向量與預(yù)測輸出量
控制終端軟件每處理完一次交互請求都會產(chǎn)生新的樣本,為避免樣本數(shù)膨脹引起估算量增加,規(guī)定估算樣本的數(shù)量為n,每產(chǎn)生一個新的樣本,就把最舊的樣本丟棄。
控制終端實際用于缺陷鈕扣的識別與分揀,實驗系統(tǒng)如圖5所示,控制終端通過以太網(wǎng)與3臺智能相機相連,通過CAN總線與光源控制器、上料機、皮帶機等外部設(shè)備相連。智能相機通過機器視覺方法對鈕扣樣本進行檢測,并將樣本圖像與檢測結(jié)果以協(xié)議幀的形式發(fā)送給控制終端,控制終端解析后將圖像與結(jié)果顯示在液晶屏上,實際界面效果如圖6所示。
圖5 缺陷鈕扣自動分選系統(tǒng)拓撲結(jié)構(gòu)
圖6 控制終端軟件實際界面效果
耦合性是影響軟件可擴展能力的關(guān)鍵因素之一,可以通過類間耦合CBO值、類的響應(yīng)RFC值、消息傳遞耦合MPC值等度量指標對軟件架構(gòu)的耦合性進行定量分析[8],測試方法如下:
采用改進MVC模式對控制終端軟件的核心模塊進行設(shè)計,計算出所有有效類的耦合性度量指標,并與傳統(tǒng)MVC模式進行比較。根據(jù)文獻[8]推薦的典型值,統(tǒng)計CBO≤5的類個數(shù)、RFC≤100的類個數(shù)、MPC≤100的類個數(shù),計算出各自占類總數(shù)的比例,高占比說明軟件模塊代碼之間耦合性低,整體擴展性較好,測試結(jié)果如表2所示。
表2 控制終端軟件代碼耦合性測試結(jié)果
從表2可以看出,在基于改進MVC模式設(shè)計的控制終端軟件核心代碼中,滿足低耦合特性的類所占比例均高于傳統(tǒng)MVC模式,軟件耦合性更低,類模塊劃分合理,具有良好的可擴展性。
工業(yè)視覺檢測系統(tǒng)中的3臺智能相機會根據(jù)實際檢測情況向控制終端發(fā)送圖像幀,圖像長寬均為128個像素,格式為RGB888。為測定控制終端的響應(yīng)情況,調(diào)節(jié)3臺相機使其分別以1、5、10、15幀/s的速度發(fā)送圖像幀,測定控制終端實際顯示圖像的幀率,測試結(jié)果如表3所示。
表3 丟幀率測試結(jié)果
通過表3可以分析出,當3臺智能相機同時以1、5、10、15 幀/s的速度發(fā)送圖像幀時,控制終端實際顯示圖像的丟幀率均在1%以下,界面流暢,滿足實際應(yīng)用需求。
請求超時發(fā)生率受線程池調(diào)度策略的影響,是衡量控制終端軟件實時性的重要指標。為評估控制終端軟件對外部設(shè)備交互請求的響應(yīng)能力,本文分別實現(xiàn)了基于SVR線程池架構(gòu)和普通HSHA線程池架構(gòu)的多線程管理模塊,并調(diào)節(jié)3臺智能相機使其分別以7、10、15 幀/s的速度各自發(fā)出1 000個圖像幀傳輸請求。根據(jù)發(fā)送幀率計算,3臺相機圖像幀傳輸請求對應(yīng)的門限時間Tm分別為142.86、100.00、66.67 ms。任意一臺相機發(fā)出圖像幀后開啟獨立計時,控制終端軟件完成圖像幀處理后發(fā)出應(yīng)答信號,相機收到應(yīng)答信號后停止計時,計時值即為控制終端軟件對圖像幀傳輸請求的實際響應(yīng)時間Tr。如果Tr大于Tm,則記錄一次超時,通過測定超時次數(shù)以及超時發(fā)生率進而對線程池性能做出評價。
根據(jù)線程池設(shè)計原理,請求超時發(fā)生率受線程池線程數(shù)量的影響,可以通過試探法確定最佳數(shù)量。具體做法如下:設(shè)定控制終端軟件線程池中線程數(shù)量分別為1、2、4、8、16,SVR估算樣本數(shù)量固定為30,核函數(shù)采用徑向基函數(shù)。在控制終端收到3 000個圖像幀傳輸請求的條件下,SVR和HAHS線程池的請求超時發(fā)生率結(jié)果如表4所示。
表4 不同線程池下圖像幀傳輸請求超時發(fā)生率
從表4可以看出:
(1)當線程池線程數(shù)量過少時,SVR線程池和HAHS線程池的請求超時發(fā)生率都比較高,這是由于過少的線程數(shù)量導(dǎo)致請求隊列堆積,控制終端無法及時響應(yīng)圖像幀傳輸請求。又因為SVR線程池需要通過計算確定線程優(yōu)先級,耗費了更多的時間,所以在線程池線程數(shù)量最低時,SVR線程池的請求超時發(fā)生率高于HAHS線程池。
(2)當線程池線程數(shù)量過多時,雖然圖像幀傳輸請求得到了控制終端軟件的及時響應(yīng),但過多的線程增加了切換的時間開銷,系統(tǒng)性能降低,SVR線程池的請求超時發(fā)生率有所上升。
[7] 張海瑞,彭旭鋒,梁庭,等.LC諧振傳感器的信號檢測系統(tǒng)研究[J].傳感技術(shù)學(xué)報,2015(4):503-509.
[8] XIONG J,LI Y,HONG Y,et al.Wireless LTCC-based capacitive pressure sensor for harsh environment[J].Sensors & Actuators A Physical,2013,197(8):30-37.
[9] 邱關(guān)源.電路[M].北京:高等教育出版社,1999:252-256.
[10] 康昊,秦麗,譚秋林,等.無線無源壓力傳感器前端特征參數(shù)提取方法研究[J].傳感器與微系統(tǒng),2013,32(10):13-15.
[11] 張林,陳大欽.模擬電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,2014.
[12] Texas instrument.LMX2571 Data sheet[R/OL].http://www.ti.com.cn/cn/lit/ds/symlink/lmx2571.pdf.2015.
[13] Analog Devices Inc.AD9858 Data sheet[R/OL].http://www.analog.com/media/en/technical-documentation/data-sheets/AD9858.pdf.2003.
[14] Analog Devices Inc.ADL5511 Data Sheet[R/OL].http://www.analog.com/media/en/technical-documentation/data-sheets/ADL5511.pdf.2011.
[15] Analog Devices Inc.AD8009 Data sheet[R/OL].http://www.analog.com/media/cn/technical-documentation/data-sheets/AD8009_cn.pdf.2000.
[16] Analog Devices Inc.AD7667 Data sheet[R/OL].http://www.analog.com/media/en/technical-documentation/data-sheets/AD7667.pdf.2013.
[17] 張海瑞,梁庭,洪應(yīng)平,等.無線無源壓力讀取系統(tǒng)中線性掃頻源的設(shè)計[J].儀表技術(shù)與傳感器,2015(9):23-27.