馮 方, 王紹杰, 金偉偉
(合肥工業(yè)大學(xué) 儀器科學(xué)與光電工程學(xué)院, 合肥230009)
近年來隨著科學(xué)技術(shù)的飛速發(fā)展,平板顯示技術(shù)也日新月異,顯示屏的應(yīng)用范圍也越來越廣泛。小到智能手表、手機,大到筆記本電腦、液晶電視,平板顯示屏的尺寸越來越大,分辨率也越來越高,因此對平板檢測系統(tǒng)的分辨率、掃描定位精度和穩(wěn)定性都提出了更高的要求。 自動光學(xué)檢測(Automatic Optic Inspection,AOI)是指采用光學(xué)成像技術(shù)獲取被測目標(biāo)的圖像,再通過圖像處理和識別算法讀取被測目標(biāo)的缺陷信息[1]。 而在平板檢測系統(tǒng)中,除了與圖像處理識別算法單元通信,還要與AOI 系統(tǒng)的控制器端通信。
在顯控軟件開發(fā)時,一般包含以下幾種功能:界面顯示,通信數(shù)據(jù)收發(fā),數(shù)據(jù)處理與轉(zhuǎn)換以及數(shù)據(jù)提交與分發(fā)。 而實現(xiàn)這些功能就需要多線程與通信機制相結(jié)合。 多線程可使編程任務(wù)簡化和模塊化,可以提高處理器的效率,提高數(shù)據(jù)吞吐量[2]。 在現(xiàn)代計算機體系中,應(yīng)用程序通常都是多線程運行。
傾斜式平板顯示屏自動光學(xué)檢測系統(tǒng)(簡稱傾斜式平板檢測系統(tǒng))是集運動控制、在線檢測和工業(yè)計算機為一體的自動化精密儀器。 系統(tǒng)簡圖如圖1 所示。 首先玻璃基板在上料區(qū)就位,檢測到玻璃基板到來后,由電機帶動傳動輪拖動玻璃基板勻速經(jīng)過掃描區(qū)域,圖像處理單元經(jīng)過處理分析后向,系統(tǒng)發(fā)送要進行復(fù)檢位置的指令,而后控制玻璃基板到達(dá)指定位置進行復(fù)檢后下料。
圖1 傾斜式平板檢測系統(tǒng)Fig. 1 Inclined flat panel inspection system
上位機部分是工業(yè)平板電腦,負(fù)責(zé)人機交互,信息轉(zhuǎn)換和整機控制。 軟件主界面如圖2 所示。 人機交互界面HMI 需要實時顯示系統(tǒng)的運行狀態(tài),提供設(shè)備的運行接口。 人機界面要與下位機、圖像處理單元和遠(yuǎn)程監(jiān)視端3 個單元進行通信。 實現(xiàn)人機界面與PLC 運動控制系統(tǒng)實時交互,圖像處理單元(IMP)反饋控制以及遠(yuǎn)程監(jiān)視(RMT)功能。 圖3 為以人機界面為基礎(chǔ)的軟件架構(gòu)。 通過以太網(wǎng)人機界面與運動控制器連接。 人機界面讀取運動控制器MP2300S 內(nèi)的數(shù)據(jù),經(jīng)解析和轉(zhuǎn)換后,顯示在人機界面上;人機界面同時還要接收用戶輸入的一些指令,并將這些指令解析為運動控制器可以識別的命令。
圖2 人機界面Fig. 2 Interactive interface
傾斜式平板檢測系統(tǒng)根據(jù)圖像處理單元的處理結(jié)果控制系統(tǒng)進行復(fù)檢動作。 圖像處理單元不是直接控制運動控制器,而是通過上位機即人機界面作為控制接口。 圖像處理單元與人機界面使用一套自定義的通信協(xié)議,人機界面作為控制指令的中轉(zhuǎn)站,將圖像處理單元發(fā)來的指令轉(zhuǎn)換為運動控制命令,并且將結(jié)果信息反饋給圖像處理單元。
人機界面作為儀器設(shè)備的一部分,安裝在工業(yè)現(xiàn)場。 為了能夠遠(yuǎn)程監(jiān)視設(shè)備的運行狀態(tài),人機界面還要提供數(shù)據(jù)轉(zhuǎn)發(fā)功能,為遠(yuǎn)程用戶提供監(jiān)視服務(wù)。
圖3 軟件架構(gòu)Fig. 3 Software Architecture
進程和線程是理解程序運行的基礎(chǔ),進程是系統(tǒng)資源分配的基本單位,而線程是CPU 調(diào)度的基本單位,它以某種規(guī)則輪流享用進程資源完成自身任務(wù)[3]。 單核時對CPU 的時間進行切片輪換執(zhí)行多個任務(wù),當(dāng)時間足夠小的時候,可以認(rèn)為是多個任務(wù)在同時執(zhí)行。 采用多線程技術(shù)可以將程序劃分成多個獨立的任務(wù),顯著提高其性能。 在傾斜式平板檢測系統(tǒng)中使用多線程技術(shù),可以防止阻塞,保證數(shù)據(jù)的收發(fā)互不干擾,還不會影響到界面的正常使用。
在傾斜式平板檢測系統(tǒng)中,人機界面要與下位機、圖像處理單元以及遠(yuǎn)程監(jiān)視單元通信。 由于系統(tǒng)狀態(tài)指示等數(shù)據(jù)繁多,所以由人機交互界面作為主線程創(chuàng)建3 個子線程IMP,PLC 和RMT 子線程分別負(fù)責(zé)各個子線程與對應(yīng)單元的通信。 主線程負(fù)責(zé)界面交互,3 個子線程則分別負(fù)責(zé)不同的數(shù)據(jù)通信。
本系統(tǒng)是基于MFC 對話框模式開發(fā)的人機界面應(yīng)用程序,主窗口由MFC 類向?qū)ё詣由伞?主線程由CWinThread 的派生類創(chuàng)建,CWinThread 支持用戶界面線程和工作者線程兩種類型。 由于本系統(tǒng)需要接收,發(fā)送和處理消息,所以開辟的子線程都是用戶界面線程。 使用CWin Thread 類派生PLC、IMP、 RMT 子 線 程 類 CThreadforPLC、CThreadforImage、CThreadforRemote,并為每個類增添成員變量和成員函數(shù)。 當(dāng)程序啟動開始運行時,初始化人機界面,通過調(diào)用全局函數(shù)AfxBeginThread創(chuàng)建PLC、IMP、RMT 3 個子線程。
通信是創(chuàng)建子線程最主要的目標(biāo),包括初始化通信端口、組織數(shù)據(jù)、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)和解析數(shù)據(jù)。 子線程使用MFC 封裝的Socket 類通信,因此子線程需要定義通信Socket 成員變量,同時開辟發(fā)送緩沖區(qū)和接收緩沖區(qū)。
子線程采用異步通信的方式,須重寫標(biāo)準(zhǔn)通知函數(shù)。 在客戶端(PLC 子線程)重寫OnConnect、OnReceive、OnClose,在服務(wù)器端(IMP、RMT 子線程)重寫OnAccept、OnReceive、OnClose,在重寫的函數(shù)內(nèi)設(shè)置通信狀態(tài)、建立連接和收發(fā)數(shù)據(jù)。
TCP/IP 協(xié)議的應(yīng)用開發(fā)接口的事實標(biāo)準(zhǔn)是Socket(套接口)。 使用Socket 可以隱藏網(wǎng)絡(luò)底層復(fù)雜的結(jié)構(gòu)與協(xié)議,能夠抽象地對網(wǎng)絡(luò)進行操作[4]。本系統(tǒng)使用的是MFC 對Windows Socket 的封裝類,是對Socket API 的又一次封裝。 傾斜式平板檢測系統(tǒng)創(chuàng)建的3 個子線程都擁有它們自己的通信Socket,Socket 管理數(shù)據(jù)收發(fā),各個線程負(fù)責(zé)數(shù)據(jù)處理。 套接字有流式套接字、數(shù)據(jù)報式套接字和原始套接字三種,是通信雙方的一種約定。 數(shù)據(jù)報套接字使用的是UDP 協(xié)議,流式套接字采用的是TCP協(xié)議[5]。 使用CAsyncSocket 類在MFC 應(yīng)用程序中可以輕松處理多個網(wǎng)絡(luò)協(xié)議,針對本系統(tǒng)的通信協(xié)議采用流式套接字編程。 流式套接字通信如圖4 所示。
圖4 流式套接字通信Fig. 4 Streaming socket communication
傾斜式平板檢測系統(tǒng)采用運動控制器MP2300S 來實現(xiàn)系統(tǒng)的底層運動控制功能。MP2300S 內(nèi)置的218IFA 模塊是10Base-T/100Base-TX 的Ethernet 接口,也是MP2300S 標(biāo)準(zhǔn)配備的通信接口[6]。 本系統(tǒng)采用的是218IF-01 中TCP/IP應(yīng)用層五個協(xié)議中的MEMMOBUS/TCP 來構(gòu)建通信網(wǎng)絡(luò)。 數(shù)據(jù)由標(biāo)題、218 標(biāo)題和應(yīng)用數(shù)據(jù)三部分構(gòu)成,如圖5 所示。
圖5 協(xié)議數(shù)據(jù)格式Fig. 5 Protocol data format
當(dāng)人機界面與下位機PLC 通信時,人機界面為客戶端,下位機PLC 為服務(wù)器端,使用CAsyncSocket異步通信類派生 PLC 子線程通信類CPLCClientSocket。 在這個類的構(gòu)造函數(shù)中指定socket 服務(wù)的線程,并在這個類中重寫OnConnect、OnReceive、OnClose 用于通信服務(wù),調(diào)用子線程CThreadforPLC 中的同名函數(shù)完成相應(yīng)的功能。
將PLC 的動作通過兩個參數(shù)定義區(qū)別可以作為人機界面程序與PLC 控制程序的接口協(xié)議。 PLC子線程接收讀命令響應(yīng)數(shù)據(jù)、寫命令響應(yīng)數(shù)據(jù)和錯誤響應(yīng)數(shù)據(jù)三種類型數(shù)據(jù)。 讀命令將接收到的響應(yīng)數(shù)據(jù)拷貝到主界面輸入緩存區(qū),主界面根據(jù)接收到的這些數(shù)據(jù)顯示系統(tǒng)運行狀態(tài)。 寫命令由人機界面或者圖像處理單元發(fā)送,寫命令響應(yīng)數(shù)據(jù)的功能查看這個命令有沒有成功寫入。 錯誤響應(yīng)數(shù)據(jù)指下位機PLC 反饋回來的錯誤代碼。
圖像處理單元和遠(yuǎn)程監(jiān)視端不直接與下位機運動控制器通信。 在和人機界面通信的時候,人機界面作為服務(wù)器端,IMP 和RMT 作為客戶端,創(chuàng)建服務(wù)器端通信Socket,在IMP 子線程通信類的構(gòu)造函數(shù)中指定socket 服務(wù)的線程, 這個類重寫了OnAccept、OnReceive、OnClose 用 于 通 信 服 務(wù)。 以CAsyncSocket 類作為通信接口,在IMP 子線程的同名函數(shù)中發(fā)送和接收數(shù)據(jù)。
圖像處理單元需要給運動控制器發(fā)送復(fù)檢指令,則要保證成功建立圖像處理單元到下位機PLC的通信信道,IMP 不直接與下位機PLC 通信,那么就需要保證圖像處理單元到人機界面以及人機界面到下位機PLC 的通信連接成功;而后對人機界面至下位機PLC 的通信信道是否被占用進行檢測,假如人機界面正在占用信道發(fā)送命令,圖像處理單元不能發(fā)送指令到下位機PLC 的;最后還需要檢測下位機PLC 是否正在執(zhí)行命令,如果下位機PLC 還沒有結(jié)束上一條命令的動作,則不會執(zhí)行當(dāng)前命令的動作。 如圖6 所示。
圖6 IMP 指令流程Fig. 6 IMP instruction flow
檢測通信信道是否建立:使用Socket 通信的基礎(chǔ)是保證各個Socket 已初始化并成功連接。 在主界面類中定義一個m_iSocketok 成員變量,標(biāo)志PLC、IMP、RMT 子線程通信Socket 有沒有順利初始化,這個變量的第0 位表示PLC 通信狀態(tài)、第1 位表示IMP 通信狀態(tài)、第2 位表示RMT 通信狀態(tài)。 當(dāng)每個通信Socket 初始化,連接成功時置為1,當(dāng)關(guān)閉連接狀態(tài)或者是通信中斷時置為0。 通過檢測這個變量的值,可知通信信道是否成功建立。
檢測通信信道是否空閑:在3 種情況下人機界面會向下位機PLC 發(fā)送數(shù)據(jù):定時查詢狀態(tài)、用戶界面操作和圖像處理單元發(fā)來指令,由于有可能會存在時間上的并發(fā)沖突,因此需要考慮同步它們的發(fā)送動作。 在主界面類中定義一個bool 型成員變量m_bPLCsend 記錄PLC 的通信狀態(tài),當(dāng)它的值為true 時表示正在發(fā)送數(shù)據(jù),當(dāng)它的值為false 時表示此時沒有發(fā)送數(shù)據(jù)。 每次向下位機PLC 發(fā)送命令之前,先查詢m_bPLCsend 的值,這個變量的值在人機界面向下位機發(fā)送命令的過程中會發(fā)生改變,在準(zhǔn)備發(fā)送命令前將其值置true,在發(fā)送完命令后將其值置false。
檢測下位機PLC:在進行復(fù)檢動作時,由人機界面向下位機PLC 發(fā)送命令,首先檢測下位機有沒有完成上一個指令的動作。 在人機界面主窗口類中定義一個成員變量m_byteCMDOrder 表示PLC 發(fā)送命令序號,這個序號的范圍為1 ~64,當(dāng)人機界面向下位機PLC 發(fā)送寫命令時,這個成員變量的值會賦到寫命令的數(shù)據(jù)中,之后該成員變量自增,當(dāng)人機界面接收到下位機的響應(yīng)命令時,這個值作為PLC 數(shù)據(jù)結(jié)構(gòu)成員taskfinl 返回,通過查看taskfinl 和成員變量m_byte CMDOrder 的值是否相等,就可以判斷下位機PLC 有沒有完成上一個指令動作。
遠(yuǎn)程監(jiān)視端要顯示傾斜式平板檢測系統(tǒng)的狀態(tài),則要向人機界面發(fā)送查詢命令,RMT 子線程定義了一個臨時的接收緩沖區(qū),將主界面線程中記錄系統(tǒng)狀態(tài)的成員變量復(fù)制到臨時緩沖區(qū),經(jīng)過整理后發(fā)送給遠(yuǎn)程端。
通過采用多線程多緩沖區(qū)結(jié)構(gòu)來設(shè)計傾斜式平板檢測系統(tǒng)的軟件架構(gòu),保證了上位機人機界面與下位機、圖像處理單元和遠(yuǎn)程監(jiān)視端的高效通信,極大提高了實時性,完成了其基本功能要求。