湯亞玲,郭 健,張學(xué)鋒,儲岳中
(安徽工業(yè)大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,馬鞍山 243032)
OPC 通信技術(shù)一經(jīng)問世,就在自動化生產(chǎn)等相關(guān)行業(yè)掀起了浪潮,其獨特的機制屏蔽了不同種硬件設(shè)備之間的差異,全部使用一個標(biāo)準(zhǔn),使得軟件開發(fā)商不再拘泥于各種紛繁雜亂的驅(qū)動軟件開發(fā)工作,節(jié)省了許多開發(fā)時間,不同廠商的設(shè)備也可以實現(xiàn)互連互訪[1].目前OPC 技術(shù)在編程語言開發(fā)的軟件中實現(xiàn)方式有很多種,文獻[2]使用Qt 開發(fā)OPC 服務(wù)器,并利用Matlab 建立Simulink 工程進行仿真模擬,驗證了其可行性.文獻[3]基于C#語言實現(xiàn)了OPC客戶端,詳細地闡述了客戶端的編寫過程,并有具體的代碼實現(xiàn),為OPC 自動化接口的實現(xiàn)提供了借鑒.如文獻[2,3]等研究基本涵蓋了當(dāng)下常用的開發(fā)環(huán)境,對OPC 組件的開發(fā)具有一定的指導(dǎo)意義,但主要集中在OPC 服務(wù)器或客戶端研究,缺乏對整體過程構(gòu)建的探討,難以在實際生產(chǎn)中指導(dǎo)上位機程序的編寫.在此情況下,本文提出了一種基于“Qt+KEPServerEX”的OPC 開發(fā)方式,以KEPServerEX 作為OPC 服務(wù)器,簡化了服務(wù)器的開發(fā)過程,并使用Qt 將客戶端嵌套進上位機監(jiān)測系統(tǒng)中,加之一些上位機常用功能模塊,構(gòu)成一個完整的生產(chǎn)線監(jiān)測系統(tǒng),并在一條實際的裝配線中投入使用.
用于過程控制的OLE (OLE for Process Control,OPC)是一種基于Windows 系統(tǒng)的工業(yè)自動化標(biāo)準(zhǔn).它采用C/S 模式[4],簡化了軟、硬件間的通信流程,為應(yīng)用程序和現(xiàn)場硬件生產(chǎn)設(shè)備等架起了橋梁.該技術(shù)以微軟的OLE 技術(shù)為基礎(chǔ),跨過TCP 協(xié)議層次,在應(yīng)用層中直接進行數(shù)據(jù)通訊,客戶程序只需簡單配置客戶端程序,即可訪問OPC 接口中的Server 程序[5],實現(xiàn)與設(shè)備之間的交互.
KEPServerEX是一款服務(wù)器軟件,內(nèi)部已集成OPC標(biāo)準(zhǔn)接口.客戶端程序按照OPC 標(biāo)準(zhǔn)編寫,并和服務(wù)器做對應(yīng)的配置,即可連接KEPServerEX 所建立的服務(wù)器.
可編程邏輯控制器(PLC)是一種工業(yè)控制微型計算機,其穩(wěn)定性好、操作靈活,可通過內(nèi)部預(yù)設(shè)的各種運算指令等來控制各種類型的設(shè)備及生產(chǎn)過程,并進行相關(guān)的計算[6].
OPC 服務(wù)器有兩種接口,如圖1所示.一種是自動化接口,這種自動化接口主要用于VB、C#等編程語言,為這一類可使用自動化對象的程序服務(wù)[7].另一種定制接口則為C++等語言服務(wù),定制接口是服務(wù)商必須提供的,具有一定的靈活性.Wincc 之類的軟件可以直接通過其內(nèi)部的OPC Server 接口實現(xiàn)與PLC的通信[8],但是組態(tài)軟件價格昂貴,對于一個項目而言是一筆很大的開支.一般項目為了節(jié)省成本,采用C++等高級編程語言來實現(xiàn)OPC 通信接口.而在Qt 等C++環(huán)境中應(yīng)用OPC 通信技術(shù),必須引入OPC 基金會提供的文件[9].
圖1 OPC 通信結(jié)構(gòu)圖
系統(tǒng)的核心部分為與PLC的交互部分,數(shù)據(jù)接收與處理需嚴(yán)密及準(zhǔn)確,而定制接口可以根據(jù)現(xiàn)場需要來定制開發(fā),所以綜合考慮,決定采用定制接口來構(gòu)建OPC 客戶端.
OPC的數(shù)據(jù)讀取方式有同步、異步、訂閱式3 種訪問方式.
(1)同步訪問可進行讀、寫操作,其特點是在和OPC 服務(wù)器發(fā)生數(shù)據(jù)交互的期間,會阻塞系統(tǒng)線程,直到OPC 數(shù)據(jù)標(biāo)簽的讀取或?qū)懭胪瓿珊蟛趴衫^續(xù)執(zhí)行.適用于標(biāo)簽數(shù)據(jù)較少的情況.
(2)異步訪問是把數(shù)據(jù)交互過程放在服務(wù)器端執(zhí)行,執(zhí)行期間客戶端程序可以去進行其他工作.當(dāng)數(shù)據(jù)交互完成后,服務(wù)器會主動觸發(fā)客戶端的異步訪問完成事件.該方式在數(shù)據(jù)標(biāo)簽量較多和網(wǎng)絡(luò)擁堵的情況下執(zhí)行效率很高.
(3)訂閱式數(shù)據(jù)采集屬于異步訪問的一種特殊類型.服務(wù)器在固定周期內(nèi)檢查過程數(shù)據(jù),如果發(fā)現(xiàn)數(shù)據(jù)變化超過一定范圍,就立刻通知客戶端來接收數(shù)據(jù).這種方式可有效降低客戶程序?qū)Ψ?wù)器的重復(fù)訪問次數(shù).缺點是不能對服務(wù)器進行寫入操作.
一般生產(chǎn)線數(shù)據(jù)總體產(chǎn)生量較大,并且在運行過程中,經(jīng)常需要由客戶端向PLC 發(fā)送一些數(shù)據(jù)指令,以完成一些特殊的控制操作,客戶端對服務(wù)器的讀寫功能是必要的.綜上所述,異步讀取的方式更加適合本系統(tǒng).
利用KEPServerEX 搭建OPC 服務(wù)器,其核心思想與一般構(gòu)建服務(wù)器的思路基本一致,關(guān)鍵點在于創(chuàng)建OPC 服務(wù)器的服務(wù)器對象(Server)、組對象(Group)、項對象(Item).一個服務(wù)器對象可以包含多個組,一個組對象可以包含多個項[10].項是整個通信過程的基本單位,其作用是維護OPC 服務(wù)器中與數(shù)據(jù)有關(guān)的信息.組則作為設(shè)備的基本單位,提供包容和組織OPC 項對象的機制[11],在實際的生產(chǎn)過程中對應(yīng)由一臺PLC 上測量產(chǎn)生的所有數(shù)據(jù)的集合.服務(wù)器對象則作為OPC組對象的包容器,通過列舉本地設(shè)備上的所有可連接的服務(wù)器,對其進行初始化后獲取服務(wù)器名稱和唯一標(biāo)識符.KEPServerEX 在本系統(tǒng)中充當(dāng)服務(wù)器的角色.在KEPServerEX 中,先需要指定設(shè)備對應(yīng)的模型,該模型為設(shè)備所使用的PLC 型號,設(shè)備驅(qū)動選擇當(dāng)前PLC 以太網(wǎng)網(wǎng)卡驅(qū)動,隨后指定一個固定網(wǎng)段(根據(jù)交換機劃分)作為設(shè)備的唯一ID.LinkType 表示要選擇上位機的類型,有OP、PG、PC 三種類型,其中PG是針對生產(chǎn)線上的工控機使用的連接類型.構(gòu)建過程如圖2所示.
Tag 作為一個設(shè)備的基本單位,對應(yīng)需要采集的數(shù)據(jù)信息,由PLC 產(chǎn)生其通訊地址,一個數(shù)據(jù)變量產(chǎn)生一個地址.如地址“DB14,REAL2”,DB是PLC 數(shù)據(jù)塊的簡寫,DB14 代表編號為14的PLC 數(shù)據(jù)塊,而REAL 則是該數(shù)據(jù)的類型,2 代表則是在該段連續(xù)的表示通道結(jié)果的地址上的偏移量,隨后依次為通道2、通道3 等.根據(jù)PLC 數(shù)據(jù)塊中產(chǎn)生的變量信息,組合產(chǎn)生數(shù)據(jù)地址.隨后在KEPServerEX 對應(yīng)的設(shè)備中輸入地址,即可形成與PLC 間的數(shù)據(jù)通道.數(shù)據(jù)地址一般由PLC 內(nèi)部程序的編寫人員以文檔的形式提供,上位機開發(fā)人員只需將數(shù)據(jù)地址與標(biāo)簽數(shù)據(jù)對應(yīng)起來,無需考慮PLC 內(nèi)部如何設(shè)定變量地址.
圖2 KEPServerEX 構(gòu)建服務(wù)器流程圖
OPC 客戶端構(gòu)建工作主要集中在連接服務(wù)器、響應(yīng)接收、關(guān)閉連接3 個部分,具體過程如下:
(1)自定義ConnectedOPC 函數(shù),包含OPCClient.h頭文件,創(chuàng)建了一個客戶端對象,調(diào)用成員函數(shù)Connect函數(shù)進行連接,該函數(shù)原型為:HRESULT Connect(QString s).連接成功后,使用HRESULT AddGroup(QString n,DWORD update_rate,int async=1)創(chuàng)建組信息,n為組信息,包含標(biāo)簽tags,組名的格式一般為“服務(wù)器名+組名+數(shù)據(jù)項”,一個工位的數(shù)據(jù)為一組.update_rate為數(shù)據(jù)刷新率,其設(shè)置時要保證小于服務(wù)器的接收速率.async為訪問方式設(shè)定,其值為0 時表示同步方式,值為1 時表示異步方式,缺省值為1,讀寫函數(shù)會根據(jù)該值來區(qū)分調(diào)用.之后自定義AddItemwin函數(shù),將所有數(shù)據(jù)項預(yù)先裝入列表中,通過AddItems將數(shù)據(jù)項添加進服務(wù)器,與服務(wù)器中添加的tags 對應(yīng)起來,形成一個與服務(wù)器之間進行數(shù)據(jù)交互的通道,建立連接.
(2)利用Qt 中信號與槽機制,設(shè)立信號sg_OnDataChange(OPCHANDLE,DWORD,OPCHANDLE*,VARIANT*,WORD*,FILETIME*,HRESULT*)與接收處理槽函數(shù)sl_OnDataChange(OPCHANDLE hGroup,DWORD dwCount,OPCHANDLE *phClientItems,VARIANT *pvValues,WORD *pwQualities,FILETIME*pftTimeStamps,HRESULT *pErrors),該機制中要求信號和槽的參數(shù)類型必須保持一致.以槽中參數(shù)為例,依次為組、標(biāo)簽個數(shù)、數(shù)據(jù)項、數(shù)據(jù)內(nèi)容、數(shù)據(jù)質(zhì)量、時間戳、錯誤信息,其中數(shù)據(jù)質(zhì)量代表著數(shù)據(jù)的可信度,時間戳代表著數(shù)據(jù)的存取時間,使用VariantString 函數(shù)來輸出項目值字符串,函數(shù)原型為QString VariantString(VARIANT &pValue),以pvValues[i](0
(3)當(dāng)完成數(shù)據(jù)通信后,客戶端資源會隨著程序關(guān)閉而釋放.在工位類析構(gòu)函數(shù)中調(diào)用Disconnect 函數(shù),該函數(shù)會清除通信過程中所有的組、數(shù)據(jù)項等信息,釋放通信過程中的中間對象等,并置為初始狀態(tài).當(dāng)客戶端內(nèi)部對象釋放之后,客戶端對象釋放.
在接收到PLC的數(shù)據(jù)后,需先進行數(shù)據(jù)過濾,否則數(shù)據(jù)表中會混入一些無效數(shù)據(jù).經(jīng)過濾之后得到的數(shù)據(jù)一般有以下4 個流向.
數(shù)據(jù)匯入數(shù)據(jù)轉(zhuǎn)儲模塊中,經(jīng)過客戶端接收過濾后,直接存儲進MySQL 數(shù)據(jù)庫中.每個需要存儲數(shù)據(jù)的工位對應(yīng)一個數(shù)據(jù)模型,各自獨立存儲,隨時等待數(shù)據(jù)到來.而工位類過濾完畢后,將一組數(shù)據(jù)打包,通過信號發(fā)送給對應(yīng)的模型類.保存之后,在每天固定時間生成備份文件,并按月導(dǎo)出生成數(shù)據(jù)報表,以便后續(xù)查看.
該模塊主要包含實時數(shù)據(jù)顯示和CPK 計算兩個子部分.
(1)實時數(shù)據(jù)顯示:采集的數(shù)據(jù)需要實時反饋到界面上,方便現(xiàn)場人員的測試與觀察.顯示的內(nèi)容一般還會包括工位的運行信息,如循環(huán)周期、日生產(chǎn)計數(shù)、累計生產(chǎn)計數(shù),這些數(shù)據(jù)由各工位PLC 獨立統(tǒng)計,既可以作為觀測工位運行情況的重要參考,又可以和程序主界面中的時間模塊統(tǒng)計信息一起作為OEE的計算要素.OEE 又稱為設(shè)備綜合效率,是從運行情況中的各種時間角度來分析設(shè)備運行效率[12],不同的項目根據(jù)實際情況決定是否添加OEE 計算模塊.
(2)CPK 計算:CPK 又稱為過程能力指數(shù),是現(xiàn)代企業(yè)用于表示制程能力的指標(biāo).CPK的標(biāo)準(zhǔn)分為A+至D 五個等級,如表1所示,根據(jù)其等級來指導(dǎo)生產(chǎn)線后續(xù)生產(chǎn)計劃.
表1 CPK 等級分布及對應(yīng)原則
CPK 標(biāo)準(zhǔn)的計算公式為:
其中,Cp,Ca分別為制程精準(zhǔn)度和制程精確度.取樣的數(shù)據(jù)至少在20 組以上,這樣計算的結(jié)果才具有代表性.計算過程如下:
以X1,…,Xn來表示n個樣本數(shù)據(jù),則:
其中,Min函數(shù)意為取兩個參數(shù)中值較小的那一個作為結(jié)果.隨后將計算結(jié)果顯示在界面中,并依據(jù)結(jié)果對生產(chǎn)線進行改進.
圖表分析模塊可采用外部導(dǎo)入的QCustomPlot 完成.一般情況是對采集的數(shù)據(jù)進行均值極差圖(Xbar-R)和正態(tài)分布圖的繪制,均值極差圖可對采集的連續(xù)的數(shù)據(jù)進行分析,觀察生產(chǎn)情況是否處于控制限中.正態(tài)分布圖則可觀察一個階段生產(chǎn)的產(chǎn)品的概率分布,根據(jù)分布是否明顯來判斷生產(chǎn)過程的穩(wěn)定性.
每個工位采集的數(shù)據(jù)中有一部分是工位報警信息.在工位類中預(yù)設(shè)報警的內(nèi)容,并與PLC 發(fā)送來的報警標(biāo)簽進行對應(yīng).主界面中應(yīng)設(shè)立相應(yīng)的報警模塊,每當(dāng)某個工位的某個預(yù)警項收到警告數(shù)據(jù)時,即顯示該工位為報警狀態(tài),并將警告數(shù)據(jù)對應(yīng)的報警信息顯示在該模塊中,統(tǒng)計已發(fā)送的警告信息的數(shù)量,每天導(dǎo)出文本文檔用作報警日志文件.
本系統(tǒng)部署在某輪轂裝配線的工控機上,同時監(jiān)控上料、清洗、孔徑檢測、壓裝等11 臺工位,每一臺工位由一個PLC 控制,由兩臺交換機構(gòu)成生產(chǎn)線網(wǎng)絡(luò).由AGV 小車對輪轂進行運送,機械手臂進行輪轂的上料,完成一圈裝配檢測后,機械手臂將輪轂取下并區(qū)分放置,統(tǒng)計合格數(shù)與NG 數(shù),發(fā)送至本系統(tǒng)用以記錄生產(chǎn)信息,并將質(zhì)量情況和檢測結(jié)束時間導(dǎo)入另一張數(shù)據(jù)表.KEPServerEX的配置情況如圖3所示,系統(tǒng)的類結(jié)構(gòu)如圖4所示.
圖3 服務(wù)器配置情況
圖4 系統(tǒng)類結(jié)構(gòu)圖
PLC 采用SIMATIC S7-1200 型號.S7-1200 設(shè)計緊湊、功能強大,市場應(yīng)用十分廣泛,并且逐漸取代S7-200 等產(chǎn)品[13],其通信能力極強,以太網(wǎng)接口可以實現(xiàn)與S7-200、Wincc,以及一些計算機或顯控面板的OPC 通信.
設(shè)備驅(qū)動設(shè)置為Siemens TCP/IP Ethemet,服務(wù)器名預(yù)設(shè)為“Kepware.KEPServerEX.V5”.系統(tǒng)整體結(jié)構(gòu)如圖5所示.
圖5 系統(tǒng)結(jié)構(gòu)圖
依據(jù)現(xiàn)場提供的裝配線信息和布局情況,在程序中大致建立裝配線的二維模型,每個工位根據(jù)實際位置布局分布在模型的對應(yīng)位置上,可操作區(qū)域用特殊顏色標(biāo)記.整體界面如圖6所示.
圖6 人機交互界面示意圖
系統(tǒng)核心分析模塊主要是針對CPK 值、XBar-R圖、正態(tài)分布情況的分析,具體過程如下:
(1)CPK 分析:在系統(tǒng)中通過指定日期間隔來選擇計算區(qū)間的數(shù)據(jù),從而進行CPK 計算.根據(jù)實際的生產(chǎn)情況,初始化孔徑、測筆(位移傳感器)、錐度的USL與LSL:USL(孔徑)=159.915,LSL(孔徑)=159.845,USL(測筆)=37.00,LSL(測筆)=36.85,USL(錐度)=0.1,LSL(錐度)=?0.1.這里主要是對OP103 進行計算,部分參與計算的數(shù)據(jù)如表2所示,這里總共計算7 個CPK值,由表3的計算結(jié)果可以看出,當(dāng)前103 工位處于A 級,狀態(tài)良好.
(2)Xbar-R 圖及正態(tài)分布分析:Xbar-R 控制圖是取所有測量數(shù)據(jù)中心的部分數(shù)據(jù)來繪制,可以每小時連續(xù)取5 個數(shù)據(jù),隨著數(shù)據(jù)的不斷增加,坐標(biāo)軸會自動進行橫向擴展,動態(tài)地展示數(shù)據(jù)情況.這里圖表分析采用的是實時采集的數(shù)據(jù),如圖7所示,可以看出當(dāng)前測量的數(shù)據(jù)皆處于控制限中,分布于中心線(CL)兩側(cè).
表2 OP103 部分實際測量數(shù)據(jù)表
表3 OP103的CPK 計算結(jié)果
圖7 OP103的Xbar-R 控制圖
正態(tài)分布則是基于公式:
其中,μ為期望值,σ為標(biāo)準(zhǔn)差,對于各個標(biāo)簽數(shù)據(jù)進行正態(tài)分布分析,觀測其概率分布情況.取當(dāng)前數(shù)據(jù)庫中保存的單個標(biāo)簽的所有數(shù)據(jù),代入公式,根據(jù)計算結(jié)果繪制正態(tài)分布圖.103 工位通道1~2(孔徑)正態(tài)分布圖如圖8、圖9所示,可以觀察出孔徑1、2 概率分布多數(shù)集中于[159.87,159.885]區(qū)間之中,生產(chǎn)情況穩(wěn)定.
本系統(tǒng)在卡車輪轂裝配線中部署,成功地與生產(chǎn)線上的11 臺工位通信并交互,部分設(shè)備采集數(shù)據(jù)如圖10、圖11所示,測試過程中發(fā)現(xiàn)傳輸延時小于800 ms,可滿足一般生產(chǎn)線的需求.采集之后實時計算數(shù)據(jù),并進行相應(yīng)的分析,結(jié)果以文本和數(shù)據(jù)庫的方式保存下來,或?qū)С鰹閿?shù)據(jù)報表.該系統(tǒng)經(jīng)過多次實驗測試、現(xiàn)場對接和修改后,最終形成了穩(wěn)定版本.目前該系統(tǒng)已經(jīng)在現(xiàn)場運行了10 個月,在此期間除一些界面設(shè)計的問題需要修改,系統(tǒng)主體和功能模塊均無問題.
圖8 孔徑1 正態(tài)分布圖
圖9 孔徑2 正態(tài)分布圖
圖10 OP103 部分采集數(shù)據(jù)
圖11 OP107 部分采集數(shù)據(jù)
本文針對當(dāng)下OPC 技術(shù)在自動化生產(chǎn)線的運用,提出了一種構(gòu)建完整OPC 通信機制的思路,簡化了通信機制的構(gòu)建過程,在此基礎(chǔ)上又融合一些在實際生產(chǎn)過程中常用的數(shù)據(jù)轉(zhuǎn)儲、分析計算等功能,構(gòu)成了一個能滿足一般生產(chǎn)線需求的上位機系統(tǒng),并在實際過程中部署及使用,驗證了該系統(tǒng)通信延時低、穩(wěn)定性高等特點,為今后上位機監(jiān)控軟件的編寫提供了一定的借鑒與參考.
下一階段我們的工作主要是以下兩個方面:(1)對系統(tǒng)的性能等問題進行優(yōu)化;(2)對現(xiàn)有功能模塊進行改進,使其更加方便直觀地反饋信息.