程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 運用C#編程通過OPC方式實現PC機與西門子PLC通訊-同步通訊篇

運用C#編程通過OPC方式實現PC機與西門子PLC通訊-同步通訊篇

編輯:C#入門知識

1、 OPC服務介紹

  西門子提供的最新軟件:Simatic Net PC-Software CD 2005為各種組態軟件的開發提供了一個統一的平台,它建立的PC站既為一些組態軟件,如:WinCC、Protol等提供了與PLC的通訊平台,也提供了一套編程接口,可使用高級語言編程通過Simatic Net訪問PLC數據。本文討論的主要就是這個編程接口,最新版的Simatic NET支持五種編程方式:

<1>、ActiveX控件

  提供了一系列數據訪問控件,以便於向VB6這種語言使用控件的方式與PLC通訊。

<2>、OPC自動化

為VB6、Dephi等語言運用OLE 自動化的方式進行編程。

<3>、OPC用戶接口

  這是專門為VC++提供的一種高效編程方式,其靈活程度與執行效率比前面的兩種方式均要高得多。

<4>、針對微軟的.NET平台的OPC用戶接口

  這也是一種非常靈活的編程接口,不過它針對的是.NET平台,其提供了大量的.NET類庫,以便於像VC#、VB.NET等高級語言編程。本文將詳細的介紹該接口。

<5>、OPL XML接口

  顧名思義,主要是針對XML編程的。

  對於<2>、<3>、<4>編程方式,他們各自又可以分為同步訪問方式和異步訪問方式。按西門子的文檔解釋:同步通訊指的是當一個客戶在訪問服務器時,其他客戶的訪問必須等待,直到服務器處理完該客戶的請求,才能繼續進行下一個服務,異步訪問與之正好相反,本文主要講的是同步編程篇,異步篇以後再提供。

2、 配置OPC服務器

  要進行編程,必須先配置服務器。本文以Prfibus DP網絡為例,介紹PC站的配置。其內容主要來自西門子文檔。

需要的軟件:

Step7 V5.3
Simatic Net PC-Software CD 2005

需要的硬件:

  至少為CP5611或以上級別,筆記本可以為CP5511,帶DP口的S7-300 PLC(若使用Simatic NET的仿真功能可以不需要這些硬件,後面會介紹到)

  <1>、組態一個S7站,配置Profibus DP網絡,其DP地址設為3,並下載到PLC,然後把網線由MPI口轉到DP口。S7站的配置這裡就不介紹了。

  <2>、在 Step7 V5.3中建立一個新工程,插入一個PC站,並把該PC站的名字改成與你的計算機名字相同。打開該PC站的硬件組態界面。插入OPC服務器和連接卡CP5611(或者CP5511),他們在PC槽中處的位置可以任意,如下圖:

 

\



  注:在插入CP5611時,應該選擇與組態S7站一樣的Profibus網絡,並將網絡地址設為2,一定不要與PLC的地址沖突。

  然後點擊下面工具條標為紅色的按鈕:

 

\



  選中”OPC Server”,然後插入一個新的連接,如下圖:

 

\



  在彈出的對話框中選擇連接類型為S7 Connection,如下圖:

 

\



  在OK後,然後在新對話框的紅色標志位置輸入3,表示PLC的地址,如下圖:

 

\



  並選擇Address Details…,設置CPU的槽號為2,如下圖:

 

\



  OK後,然後編譯並保存。

  <3>、然後建立OPC服務器,有兩種方式,本文介紹較簡單的一種。

  打開,Simatic Net中的Station Configurator,一般安裝後,他會自動啟動,並點擊Import Station…按鈕,找到你剛才在Step 7中建立PC站時創建的

  XDBs文件夾下的XDB文件,然後導入成功。

  <4>、可以使用Simatic Net中的OPC Scout,並選擇Simatic NET服務,然後在它下面創建組,然後在組下創建變量,這樣可以監控PLC數據,VC#編程不需要使用該程序,但熟悉使用OPC Scout有利於了解Simatic Net中的編程結構。

  說明:打開Simatic Net中的Configuration Console,選中S7進行如下的配置後,可以不需要PLC、CP5611等並可以模擬,如下圖:

 

\



  上面的所有步驟,均可在Configuration Console下,PC Station的根樹下,選擇相應的幫助文檔得到。

3、 OPC編程

<1>、西門子的變量結構如下:

----------------------服務器------------------------------
/ OPC.SimaticNet OPCServer.Wincc .... (一系列類型的服務器)
/ Group1 Group2 Group3 ...(把更新時間一致的變量統一為一個組)
/ Item1 Item2 ... (變量:I、Q、M、DB等,指向網絡中某個PC站OPC Server服務的某個連接)
-----------------------------------------------------------------------------------------------------------------
  第一層是不同種類的服務器,如:OPC.SimaticNET類型,OPC.SimaticNET.DP類型,OPCServer.WinCC等一系列類型,這裡選擇OPC.SimaticNET類型。

第二層是Group,一個服務器下可以有多個組,可以把組理解為掃描周期相同的一系列變量的集合。在開發組態界面時,可以把一個界面中的所有變量統一到一個組中。

第三層是Item,項是指向網絡中某個PC站OPC Server服務的某個連接的一系列變量,如:I、Q、M、DB等

<2>、項的命名

  項即Item,在S7連接中針對的直接是PLC中的變量,因此它的命名很重要:

  格式: :[]
其中的protocolID表示連接類型,在上面的組態PC站時可以選擇,這裡應該與它一致,類型有9種,最常用的為S7,即S7連接,其他類型請參看文檔。

  Connectionname:顧名思義,即在上面的組態PC站時產生的連接名,如果使用仿真功能,連接名為DEMO Variablename:變量名有一系列規則,這裡舉例說明,讀者也可以使用OPC Scout創建變量,學習程序是如何生成變量名的。

S7:[DEMO]MB1 :表示連接類型為S7,連接名為DEMO(這裡為仿真),變量為MB1
S7:[DEMO]QB0,3: 表示為從QB0開始的三個連續變量。
S7:[DEMO]DB10,X4.6 :表示DB10的DBX4.6。

<3>、添加引用

  在VC#開發環境中添加對OpcRcw.Da庫的引用引用,該庫屬於.NET庫,不屬於COM庫,西門子雖然編寫了類庫,以提供對.NET平台的支持,但這些類庫仍然難於編程,

  裡面包含了大量的在托管和非托管區傳輸數據,因此我們需要在它的基礎上再開發一個類庫,以簡化以後的編程,首先在類的開頭使用命名空間:
using System.Runtime.InteropServices;
using OpcRcw.Da;
using System.Collections;

<4>、編程

1、 在類的開頭部分生名變量

private string serverType="";
private IOPCServer pIOPCServer; // OPC server接口
private Object pobjGroup1; // Pointer to group object
private int nSvrGroupID; // server group handle for the added group
private System.Collections.Hashtable groupsID=new Hashtable(11); //用於記錄組名和組ID號
private System.Collections.Hashtable hitemsID=new Hashtable(17); //用於記錄項名和項ID號
private Guid iidRequiredInterface;
private int hClientGroup = 0; //客戶組號
private int hClientItem=0; //Item號

2、 創建服務器,編寫Open()方法
///


/// 創建一個OPC Server接口
///
///
/// 若為true,創建成功,否則創建失敗
public bool Open(out string error)
{
error="";bool success=true;
Type svrComponenttyp ;
//獲取 OPC Server COM 接口
iidRequiredInterface = typeof(IOPCItemMgt).GUID;
svrComponenttyp = System.Type.GetTypeFromProgID(serverType);
t

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved