引言
可編程控制器PLC(Programmable LogicController)具有可靠性高、通用性強、編程簡單、體積小、安裝維護方便等優(yōu)點,在工業(yè)控制中得到了廣泛應用。
在工業(yè)控制系統(tǒng)中,可能存在不同廠家生產的、多種型號的可編程控制器PLC。為了便于系統(tǒng)集成,一般采用基于OPC(OLE for ProcessContr01)規(guī)范的接口進行數(shù)據(jù)交換,為此,需要設計、開發(fā)面向PLC的OPC服務器。
1 OPC服務器開發(fā)工具
面向PLC的OPC服務器開發(fā)需要完成以下兩個方面工作:一方面,需要根據(jù)PLC的通信協(xié)議實現(xiàn)上位機服務器軟件與PLC的數(shù)據(jù)交換;另一方面,需要合理設計服務器軟件的架構與接口,使之符合OPC技術規(guī)范。
由于OPC服務器是基于COM技術的,這就要求程序設計人員必須非常熟悉COM技術,而精通COM技術是有一定難度的,因此,OPC服務器的源碼級開發(fā)是相當復雜的,一般由專業(yè)的軟件公司進行開發(fā)。
為了便于OPC技術的推廣和應用,國內外許多單位推出了OPC服務器快速開發(fā)工具包。這種工具包將微軟公司的OLE/COM/DCOM技術和OPC的技術細節(jié)進行了隱藏,使用戶開發(fā)工作集中在數(shù)據(jù)采集和處理任務上,從而簡化了OPC服務器的開發(fā)。
基于工具包的OPC服務器開發(fā),主要任務是熟悉工具包的API接口函數(shù),通過調用工具包的API接口函數(shù)實現(xiàn)OPC服務器的功能,為應用軟件提供符合OPC規(guī)范的接口。
2 OPC服務器設計與開發(fā)
2.1軟件設計
基于工具包的面向PLC的OPC服務器開發(fā)的首要任務是設計OPC對象與接口、OPC服務器界面,然后進行OPC服務器與PLC的通信設計,以實現(xiàn)OPC服務器與PLC的數(shù)據(jù)交換,具體的軟件架構如圖1所示。

OPC對象與接口是OPC服務器與客戶端程序進行交互的部分。首先應進行OPC服務器對象設計,即定義服務器名稱ProgID和類標識符CLSID。服務器名稱ProgID可以自由確定;類標識符CLSID是一個128字節(jié)的數(shù)據(jù),是用來標識一個COM對象的,可用微軟自帶的工具GUIDGEN.EXE快速確定。然后根據(jù)OPC項的管理要求設計OPC組對象,如果OPC項較少,可以直接利用工具包默認的一個OPC組對象。最后確定OPC項對象,一個OPC項可以對應于PLC內存中的若干寄存器,一般根據(jù)PLC的具體控制要求進行設計,并確定可讀項與可寫項。
OPC服務器與PLC的通信模塊是面向PLC的OPC服務器的重要組成部分,OPC可讀項的數(shù)據(jù)就是通過該模塊采集PLC中相應寄存器的信息獲得的;OPC可寫項的數(shù)據(jù)就是通過該模塊寫入PLC中相應寄存器的。
服務器程序界面可以為用戶提供友好的交互平臺,便于觀察數(shù)據(jù)項的變化,以及對數(shù)據(jù)項進行管理和設置。
2.2軟件開發(fā)
在采用工具包開發(fā)面向PLC的OPC服務器時,主要是利用工具包提供的API接口函數(shù)進行如下的操作:
1)工具包動態(tài)庫初始化
OPC服務器開始運行時,應進行工具包動態(tài)庫初始化,以及設置OPC服務器的最高刷新頻率,這是OPC服務器得以運行的基礎。
2)OPC服務器信息設置
主要是設置服務器的運行狀態(tài)、版本號、廠商信息等。
3)OPC項的創(chuàng)建與刪除
在OPC服務器開始運行時創(chuàng)建OPC項,在OPC服務器運行結束時刪除OPC項。
4)OPC項數(shù)據(jù)的更新
OPC服務器需要周期地更新OPC項的值、質量和時間戳,即將數(shù)據(jù)存儲區(qū)中的數(shù)據(jù)更新到相應的OPC項。當客戶端程序請求寫數(shù)據(jù)時,OPC運行庫調用寫回調函數(shù),并利用服務器與PLC的通信模塊將數(shù)據(jù)寫入PLC中的相應寄存器中;當客戶請求讀數(shù)據(jù)時,OPC運行庫調用讀回調函數(shù),返回相應的OPC項的數(shù)據(jù)。
服務器與PLC的通信模塊是基于PLC的通信接口方式進行開發(fā)的。例如串口通信,其是根據(jù)PLC的通信協(xié)議采用串口通信控件或API函數(shù)編程來實現(xiàn)數(shù)據(jù)交換的。
5)回調函數(shù)注冊
工具包中有三個回調函數(shù):讀回調函數(shù)、寫回調函數(shù)和斷開回函數(shù)。只有注冊了這三個回調函數(shù)后,OPC服務器才能和客戶端程序按照OPC技術規(guī)范進行正常通信。
6)OPC服務器注冊和注銷
OPC服務器安裝到計算機后,首先應將服務器名稱ProgID和類標識符CLSID等信息進行注冊。在OPC服務器注冊后,OPC客戶端程序才能在本機或局域網上檢索到該OPC服務器,從而與該OPC服務器建立連接與數(shù)據(jù)交換。注銷是將計算機系統(tǒng)中的OPC服務器信息清除。
OPC服務器是一個進程外組件,其在運行過程中對工具包接口函數(shù)的調用流程如圖2所示。

3 設計實例
3.1 PLC控制對象
Denford公司的FMS(Flexible ManufacturingSystem)教學演示系統(tǒng)由一臺數(shù)控車床、一臺數(shù)控銑床、兩臺機器手和一條傳送帶組成,該系統(tǒng)可以通過數(shù)字I/O接口進行控制,各設備的I/O接口數(shù)如表1所示。
由表1可以看出,該蹦S的控制器需要有13個數(shù)字輸入口采集設備的狀態(tài)信息,需要11個數(shù)字輸出口發(fā)送控制命令。
歐姆龍公司生產的CPMlA一30CDR—A—V型PLC有18個數(shù)字輸入口和12數(shù)字輸出口,滿足該FMS控制的接口要求。為了滿足該FMS控制系統(tǒng)快速重構的要求,其控制系統(tǒng)必須是基于OPC規(guī)范接口的,即按照圖3所示的體系結構進行控制。因此,需要為圖3所示的PLC開發(fā)OPC服務器。

3.2 OPC服務器設計
由表1和圖3所示的CPMlA.30CDR.A—V型PLC控翩對象的具體要求可知,該OPC服務器主要與PLC的輸入與輸出口進行數(shù)據(jù)交換.因此,在該OPC服務器中設計定義了6個OPC項,其中4個OPC數(shù)據(jù)項為可讀項:Tagln0CH、TagIn1CH、TagIn10CH、1.agIn11CH,分別用于讀取該PLC的輸入端000通道與001通道、輸出端010通道與011通道的數(shù)值.即采集FMS硬件設備的狀態(tài)信息;另外2個OPC數(shù)據(jù)項為可寫項:TagOut10CH、TagOut11CH,分別用于對該PLC的輸出端010通道與011通道寫數(shù)值,即向FMS硬件設備發(fā)送控制命令。

服務器與PLc的通信功能模塊是采用串口通信控件MSComm實現(xiàn)的,具體的通信協(xié)議是由CPMlA-PLC手冊中的讀出輸入輸出繼電器內容和寫入輸入輸出繼電器區(qū)中的命令格式和響應格式確定的。
開發(fā)的OPC服務器主界面如圖4所示,具有注冊和注銷、OPC項的創(chuàng)建與刪除、OPC項數(shù)據(jù)的更新等功能。在該OPC服務器安裝、注冊后,利用圖4所示的OPC客戶端軟件進行了性能測試,結果表明該OPC服務器符合OPC接口規(guī)范要求,可以在本機或局城網上進行訪問,滿足圖3所示的FMS控制要求。
圖4 CPMIA-30CDR型PLC的OPC服務器界面
4 結束語
本文研究了面向PLC的OPc服務器的快速實現(xiàn)方法,設計了一用于Denford公司FMS控制的PLC的OPC服務器,運行結果表明采用本文研究的方法所開發(fā)的OPC服務器符合OPC技術規(guī)范要求,具有一定的工程應用價值。