黃希敏
(陜西教育學(xué)院,陜西 西安 710100)
OPC(OLE for Process Control)是一種用于工業(yè)數(shù)據(jù)通訊的標(biāo)準(zhǔn)協(xié)議,使開發(fā)人員能夠方便的按照OPC協(xié)議編程實現(xiàn)OPC客戶端程序與OPC服務(wù)器之間的通訊。為了實現(xiàn)工業(yè)計算機(jī)與S7-300的實時數(shù)據(jù)通訊,本文以西門子公司的SIMATIC NET作為OPC服務(wù)器,使用C#語言編程實現(xiàn)OPC客戶端程序與SIMATIC NET OPC服務(wù)器之間的數(shù)據(jù)通訊。
SIMATIC NET是西門子在工業(yè)控制系統(tǒng)提供的一個開放的、多元的通訊系統(tǒng),可以實現(xiàn)工業(yè)現(xiàn)場的PLC、主機(jī)、工作站和個人電腦聯(lián)網(wǎng)通訊。通訊的網(wǎng)絡(luò)包括了工業(yè)以太網(wǎng)、PROFIBUS、PROFIBUS-PA等。SIMATIC NET OPC服務(wù)器不但提供了數(shù)據(jù)訪問的接口,同時還提供了報警和事件的接口等多種功能。
為了能夠讓SIMATIC NET系統(tǒng)正常的工作,必須安裝SIMATIC NET軟件。網(wǎng)絡(luò)通訊方式為工業(yè)以太網(wǎng)。按照OPC接口的規(guī)定,C或C++語言編寫的客戶機(jī)應(yīng)用程序可以使用自定義接口和自動化接口。其他的編程語言(如VB,Delphi,C#等)編寫的客戶機(jī)應(yīng)用程序只能使用自動化接口。
工業(yè)計算機(jī)的操作系統(tǒng)為XP系統(tǒng),SIMATIC NET軟件的版本為SIMATIC.NET 2006,編程環(huán)境為Microsoft Visual Studio 2008。當(dāng)SIMATIC NET軟件安裝成功后,在桌面上可以看到Station Configuration、SIMATIC Manager等的快捷圖標(biāo)。
首先,打開 SIMATIC NET軟件的 Station Configuration Editor窗口進(jìn)行PC硬件機(jī)架的配置,在打開的窗口中依次在第一行和第三行插入OPC Server和IE General,同時還需要對工業(yè)計算機(jī)的網(wǎng)絡(luò)進(jìn)行配置,以保證PC站的IP地址與S7-300的IP地址屬于同一IP段。以上操作完成后,點擊“Station Name”按鈕來給PC指定一個名稱,例如:“ethernetOPC”。圖1為PC硬件機(jī)架的配置界面截圖。
圖1 PC硬件機(jī)架的配置Fig.1 configuration of PC hardware chassis
其次,打開Configuration Console窗口對控制臺進(jìn)行配置。在打開的窗口中首先可以查看到以太網(wǎng)的模式已經(jīng)從PG mode切換到Configuration mode,然后單擊“Access Points”把S7ONLINE的指向選項選為“PC internal(local)”。
最后,打開 SIMATIC Manager窗口,通過“File→New”創(chuàng)建一個新項目,如:“S7300OPC”。通過“Insert→Station→Simatic PC Station”插入一個PC站,并且命名與上述命名的PC站名稱相同,本文中即“ethernetOPC”。創(chuàng)建成功后,雙擊Configuration進(jìn)入PC Station組態(tài),從硬件目錄串口選擇與已安裝的SIMATIC NET軟件版本相符的硬件插入到與上述PC硬件機(jī)架對應(yīng)的位置。雙擊“Configure Network”進(jìn)行NetPro配置,選擇OPC Server連接表的第一行,通過“Insert→New Connection”來建立一個新的連接,在彈出的連接屬性畫面中,選擇“S7 connection”屬性。然后在“S7 connection”屬性窗口中按照提示輸入S7-300與工業(yè)計算機(jī)的IP地址,雙擊“Address Details”設(shè)置符合S7-300的機(jī)架號0和插槽號2。上述操作完成后,編譯無誤后保存。
上述步驟完成后,就實現(xiàn)了S7-300與SIMATIC NET OPC服務(wù)器的數(shù)據(jù)通訊,可以通過OPC Scout來檢查連接是否正常。圖2為OPC Scout的運行界面截圖。
圖2 OPC Scout的運行界面截圖Fig.2 Screenshot of running interface of OPC Scout
圖2 中,Item Names項為S7 PLC站的變量地址。例如:S7:[S7 connection_1]DB400,INT44中,S7為協(xié)議ID,這是S7協(xié)議規(guī)定的;[S7 connection_1]為連接名,這是用戶定義的OPC連接字符串標(biāo)識名;DB400為數(shù)據(jù)塊,INT44為變量的類型和地址。OPC Scout要能夠正常的訪問S7 PLC站的變量地址,必須嚴(yán)格按照上述的變量編址方式。
本文研究的OPC客戶端與SIMATIC NET OPC服務(wù)器的數(shù)據(jù)通訊,實際是為了實現(xiàn)S7-300與工業(yè)計算機(jī)的數(shù)據(jù)通訊。在已經(jīng)配置好的SIMA-TIC NET OPC服務(wù)器的基礎(chǔ)上,確定了OPC Server名“OPC.SIMATICNET”和采用自動化接口,并且嚴(yán)格按照S7 PLC站的變量編址方式,可以編程實現(xiàn)基于C#編程語言的OPC客戶端程序與SIMATIC NET OPC服務(wù)器通訊。圖3為實現(xiàn)OPC客戶端與OPC服務(wù)器連接通訊的程序流程圖。
(1)添加引用。OpcRcw.DA和OpcRcw.Comn是西門子提供的關(guān)于OPC通訊的兩個動態(tài)鏈接庫文件。在C#編程環(huán)境中引用這兩個文件,調(diào)用這兩個動態(tài)連接庫中的接口函數(shù)。
圖3 OPC客戶端與OPC服務(wù)器通訊程序流程圖Fig.3 Flow chart of communication between OPC client and OPC server
using OpcRcw.Comn;
using OpcRcw.Da;
(2)定義OPC相關(guān)變量。在進(jìn)行與OPC服務(wù)器的連接之前,首先要定義OPC相關(guān)的變量,其中包括:OPC的服務(wù)器名,OPC服務(wù)器的對象名等。
internal const string SERVER_ NAME =“OPC.SIMATICNET“;//OPC服務(wù)器名
private IOPCServer pIOPCServer;//定義OPCServer對象
…
(3)實現(xiàn)與OPC服務(wù)器的連接。public bool ConnectServer(string node_name,out string error),其中node_name為OPC服務(wù)器的計算機(jī)名稱,連接過程中的錯誤信息捕捉給error輸出。函數(shù)返回true和false,分別代表成功和失敗。具體的步驟:創(chuàng)建服務(wù)器對象創(chuàng)建OPC組對象-向組對象中添加多項OPC客戶端讀寫操作。
(4)創(chuàng)建服務(wù)器對象。pIOPCServer=(IOPCServer)System.Activator.CreateInstance(svr-Componenttyp)
(5)創(chuàng)建OPC組對象。public bool AddGroup(string groupName,int bActive,int updateRate,out string error),其中g(shù)roupName為創(chuàng)建組對象的組名,bActive為組的激活狀態(tài),updateRate為組的刷新頻率,創(chuàng)建組對象過程中的錯誤信息捕捉給error輸出。函數(shù)返回true和false,分別代表成功和失敗。
(6)向組對象中添加多項。public bool AddItems(string[]itemsName,int[]itemsID,out string error),其中itemsName為要添加的項的名稱,是一個字符串?dāng)?shù)組,itemsID為與字符串?dāng)?shù)組相對應(yīng)的序號數(shù)組。添加項對象過程中的錯誤信息捕捉給error輸出。函數(shù)返回true和false,分別代表成功和失敗。
(7)OPC客戶端讀寫操作。OPC客戶端進(jìn)行讀寫操作之前,首先要根據(jù)通訊方式是同步還是異步,從而實例化指針I(yè)OPCSyncIO/IOPCAsyncIO接口。本文的OPC客戶端通訊采用同步方式。
實際應(yīng)用過程中,IOPCSyncIO接口分別提供了讀、寫的方法,即 IOPCSyncIO.READ和IOPCSyncIO.WRITE。
(8)斷開與OPC服務(wù)器的連接。public bool Close(out string error),其中,斷開連接過程中的錯誤信息捕捉給error輸出。函數(shù)返回true和false,分別代表成功和失敗。在程序斷開與OPC服務(wù)器的連接之前,必須先刪除已經(jīng)創(chuàng)建的OPC對象并且釋放內(nèi)存。
上述利用C#編程語言實現(xiàn)OPC客戶端程序與SIMATIC NET OPC服務(wù)器的數(shù)據(jù)通訊,在OPC通訊客戶端系統(tǒng)界面上實時顯示了數(shù)據(jù)的讀寫情況。圖4為OPC通訊客戶端運行界面截圖。
圖4 OPC通訊客戶端程序運行界面Fig.4 program running interface for client of OPC communication
以SIMATIC NET OPC為服務(wù)器,S7-300與SIMATIC NET OPC服務(wù)器連接配置,采用C#計算機(jī)編程語言實現(xiàn)了OPC客戶端程序與OPC服務(wù)器的數(shù)據(jù)讀寫操作。通過多次的應(yīng)用測試證明,OPC客戶端程序運行可靠,操作簡單,符合現(xiàn)場對實時監(jiān)控的要求。
[1] Christian Nagel Bill Evjen Jay Glynn著,李銘譯.C#高級編程(6版)[M].北京:清華大學(xué)出版社,2008,11.
[2] 羅斌,羅順文.Visual C#2005編程技巧大全[M].北京:中國水利水電出版,2007.
[3] 蔣秀鳳,何鳳英.Oracle 9i數(shù)據(jù)庫管理教程[M].北京:清華大學(xué)出版社,2005.
[4] 滕永昌.Oracle 9i數(shù)據(jù)庫管理員使用大全[M].北京:清華大學(xué)出版社,2004.
[5] 陽憲惠.工業(yè)數(shù)據(jù)通訊與控制網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,2003.