<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OPC訪問接口方式以及讀寫方式

機器人及PLC自動化應用 ? 來源:機器人及PLC自動化應用 ? 作者:機器人及PLC自動化 ? 2022-09-19 15:10 ? 次閱讀

OPC是Object Linking and Embedding(OLE)for Process Control 的縮寫,它是微軟公司的對象鏈接和嵌入技術在過程控制方面的應用。OPC以OLE/COM/DCOM技術為基礎,采用客戶/服務器模式,為工業自動化軟件面向對象的開發提供了統一的標準,這個標準定義了應用Microsoft操作系統在基于PC的客戶機之間交換自動化實時數據的方法,采用這項標準后,硬件開發商將取代軟件開發商為自己的硬件產品開發統一的OPC接口程序,而軟件開發者可免除開發驅動程序的工作,充分發揮自己的特長,把更多的精力投入到其核心產品的開發上。

SimaticNet是西門子全集成自動化系統中的一個重要組成部分,它為完善的工業自動化控制系統的通訊提供部件和網絡,同時提供多個OPCServer,為數據的外部訪問提供接口,本文主要以OPC.SimaticNET為例說明。

c15326da-3728-11ed-ba43-dac502259ad0.png

采用不同的通信方式,通過OPC.SimaticNET,現場數據可以方便地提供給用戶:

c178e4b0-3728-11ed-ba43-dac502259ad0.png

OPC的讀寫方式

在實際使用中,主要包括對現場數據的讀寫操作。

OPC讀數有三種方式:同步、異步、訂閱。

同步通訊時,OPC客戶程序向OPC服務器進行請求時,OPC客戶程序必須等到OPC服務器對應的響應全部完成以后才能返回,在此期間OPC客戶程序一直處于等待狀態,若進行讀操作,那么必須等待OPC服務器響應后才返回。因此在同步通訊時,如果有大量數據進行操作或者有很多OPC客戶程序對OPC服務器進行讀操作,必然造成OPC客戶程序的阻塞現象。因此同步通訊適用于OPC客戶程序較少,數據量較小時的場合。

c18d00ee-3728-11ed-ba43-dac502259ad0.png

異步通訊時,OPC客戶程序對服務器進行請求時,OPC客戶程序請求后立刻返回,不用等待OPC服務器的響應,可以進行其它操作。OPC服務器完成響應后再通知OPC客戶程序,如進行讀操作,OPC客戶程序通知OPC服務器后離開返回,不等待OPC服務器的讀完成,而OPC服務器完成讀后,會自動的通知OPC客戶程序,把讀結果傳送給OPC客戶程序。因此相對于同步通訊,異步通訊的效率更高。

c1a4bbd0-3728-11ed-ba43-dac502259ad0.png

訂閱方式時,OPC客戶程序對服務器進行請求時,OPC客戶程序操作后立刻返回,不用等待OPC服務器的操作,可以進行其它操作, OPC 服務器的Group組在組內有數據發生改變時,自動根據更新周期刷新相應的客戶端數據,如下圖,客戶端只向OPC服務發送一次請求,之后不再對服務器請求。

c1bdab4a-3728-11ed-ba43-dac502259ad0.png

OPC寫數有兩種方式:同步、異步。區別與上面講的機制一樣,在生產應用中,如果寫數據參與控制,一般采用同步方式。

OPC訪問接口方式:

OPC主要包含兩種接口:CUSTOM標準接口和OLE自動化標準接口,自定義接口是服務商必須提供的,而自動化接口則是可選的。

自定義接口是一組COM接口,主要用于采用C++語言的應用程序開發;

自動化接口是一組OLE接口,主要用于采用VB,DELPHI,Excel等基于腳本編程語言的應用程序開發。

c1d9e4d6-3728-11ed-ba43-dac502259ad0.png

許多OPC服務器,包括OPC.SimaticNet,是在COM平臺開發的,從而對于基于.NET 框架下的C#語言,作為客戶端程序語言訪問OPCServer,需要解決兩個平臺間無縫遷移的問題。OPC基金會對會員提供了OpcRcw動態鏈接庫,OPC NET COM包裝器和OPC NET API,將OPC復雜的規范封狀成簡單易用的C#類,可以比較容易地實現數據訪問。

本文中通過實驗,逐步講解了通過C#編寫客戶端程序,訪問OPC.SimaticNet,對PLC數據進行讀寫的實現過程。自定義接口及自動化接口都進行了測試,但基于C#的語言特性,建議采用自定義接口訪問,同時有很多OPCServer服務商,對外是不提供自動化接口的,西門子的SimaticNet及WinCC的OPCServer都提供自動化接口。

c1ee054c-3728-11ed-ba43-dac502259ad0.png

OPC Server端組態配置:

c205c56a-3728-11ed-ba43-dac502259ad0.png

c2224050-3728-11ed-ba43-dac502259ad0.png

c23af816-3728-11ed-ba43-dac502259ad0.png

如上圖建立連接S7_connection_1,然后在OPC Scout測試連接的正確性。

c25452ca-3728-11ed-ba43-dac502259ad0.png

從上面可以看到數據訪問都是正常的。

C#自動化接口

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Collections;

using OPCSiemensDAAutomation;//引用連接庫

第一步,添加下列命名空間(首先在COM組件中添加相應組件)

using OPCSiemensDAAutomation;

第二步,定義OPC相關變量

OPCServer MyOpcServer; //定義OPCServer

OPCGroup MyOpcGroup; //定義組

OPCItem MyOpcItem1; //Item

OPCItem MyOpcItem2; //值

long[] ServerHandle = new long[2]; //Item的句柄

第三步,建立連接及對象

MyOpcServer = new OPCServer();

MyOpcServer.Connect("OPC.SimaticNet", "192.168.0.102");

MyOpcGroup = MyOpcServer.OPCGroups.Add("MyGroup1");

MyOpcItem1 = MyOpcGroup.OPCItems.AddItem("S7:[S7 connection_1]DB10,INT0",1);

MyOpcItem2 = MyOpcGroup.OPCItems.AddItem("S7:[S7 connection_1]DB10,INT2", 2);

ServerHandle[0] = MyOpcItem1.ServerHandle;

ServerHandle[1] = MyOpcItem2.ServerHandle;

第四步,同步讀數據,

private void Btn_Read_S_Click(object sender,EventArgs e)//同步讀數據

{

……

MyOpcItem1.Read(1,out ItemValues,out Qualities, out TimeStamps);

//ItemValues,Qualities,TimeStamps分別是值,質量碼

//也可以通過調用SyncRead函數,參數可參考異步讀函數

……

}

第四步,同步寫數據

private void Btn_Write_S_Click(object sender,EventArgs e)

{

……

MyOpcItem1.Write(Txt_W1.Text);

//也可以通過調用SyncWrite函數,參數可參考異步寫函數

……

}

第五步,異步事件定義,

在異步操作情況下,需要定義相應的異步事件

MyOpcGroup.DataChange +=new

DIOPCGroupEvent_DataChangeEventHandler(MyOpcGroup_DataChange); //

//訂閱方式下數據改變

iteComplete +=new

DIOPCGroupEvent_AsyncWriteCompleteEventHandler(MyOpcGroup_WriteComplete);

//寫完成事件

MyOpcGroup.AsyncReadComplete += new

DIOPCGroupEvent_AsyncReadCompleteEventHandler(MyOpcGroup_ReadComplete);

//讀完成事件

MyOpcGroup.AsyncCancelComplete += new

DIOPCGroupEvent_AsyncCancelCompleteEventHandler(MyOpcGroup_CancelComplete);

//取消操作事件

在使用中注意,其事件函數要按照特定接口:

void MyOpcGroup_DataChange(int TransactionID, int NumItems,ref Array ClientHandles,

ref Array ItemValues,ref Array Qualities, ref Array TimeStamps)

void MyOpcGroup_WriteComplete(int TransactionID, int NumItems, ref Array ClientHandles,

ref Array Errors)

void MyOpcGroup_ReadComplete(int TransactionID, int NumItems,ref System.Array

ClientHandles,ref System.Array ItemValues,ref System.Array Qualities,

ref System.Array TimeStamps,ref System.Array Errors)

void MyOpcGroup_CancelComplete(int CancelID)

第六步訂閱方式讀

void MyOpcGroup_DataChange(int TransactionID, int NumItems,ref Array ClientHandles,

ref Array ItemValues,ref Array Qualities, ref Array TimeStamps)

{

……

//注意數據改變時,Item數量要通過NumItems得到,也就是說只有數據改變時,才對一

遍,所以降低了服務器負擔。要注意讀語句寫法。

……

}

第七步異步讀

private void Btn_Read_A_Click(object sender,EventArgs e)//異步讀事件

{

int[] handle = new int[3] {ServerHandle[0], ServerHandle[1],0};//注意方式

Array MyServerHandles = (Array)handle;

Array errors;

int cancelID;

……

MyOpcGroup.AsyncRead(2, ref MyServerHandles, out errors, READASYNC_ID, out

cancelID);

……

}

void MyOpcGroup_ReadComplete(int TransactionID, int NumItems,ref System.Array

ClientHandles,ref System.Array ItemValues,ref System.Array Qualities,

ref System.Array TimeStamps,ref System.Array Errors)

{

……

//注意TransactionID的對應

……

}

注意array在函數內部做參數時,數據下標是從1開始的,所以要考慮將第0位空出

來,n個Item,就要定義n+1列數組,添加一個0,但在函數使用時,又是從左開始讀的。

否則會報錯。

第八步異步寫

private void Btn_Write_A_Click(object sender,EventArgs e)

{

……

MyOpcGroup.AsyncWrite(2,ref MyServerHandles, ref Myvalues,out errors,

WRITEASYNC_ID,out cancelID);

……

}

void MyOpcGroup_WriteComplete(int TransactionID, int NumItems, ref Array ClientHandles

ref Array Errors)

{

……

}

同樣要注意Array在函數內部做參數的傳遞。

第九步釋放對象

private void Btn_Disconn_Click(object sender,EventArgs e)

{

……

}

OPCItem的數據類型:

在通過自定義接口訪問時,

ItemArray[1].szAccessPath = "";

ItemArray[1].szItemID = "S7:[S7 connection_1]DB10,Real4";//地址,不同數據類型表示

ItemArray[1].bActive = 1;//是否激活

ItemArray[1].hClient = 2;//表示ID

ItemArray[1].dwBlobSize = 0;

ItemArray[1].pBlob =IntPtr.Zero;

ItemArray[1].vtRequestedDataType = 5;

ItemArray[2].szAccessPath = "";

ItemArray[2].szItemID = "S7:[S7 connection_1]DB10,STRING26.10";//地址,不同數據類型表

示方法不同

ItemArray[2].bActive = 1;//是否激活

ItemArray[2].hClient = 3;//表示ID

ItemArray[2].dwBlobSize = 0;

ItemArray[2].pBlob =IntPtr.Zero;

ItemArray[2].vtRequestedDataType = 8;

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    7653

    瀏覽量

    148586
  • 西門子
    +關注

    關注

    92

    文章

    2853

    瀏覽量

    113832
  • OPC
    OPC
    +關注

    關注

    7

    文章

    263

    瀏覽量

    45744

原文標題:如何在C#中實現OPC數據訪問

文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Labview通過西門子OPC和S7-200 Smart PLC通信的一種方式

    Labview和PLC之間的通信方式有很多種,比如:1、使用Labview DSC模塊的OPC進行通信,通過在項目中添加I/O Server或者直接在VI中設置控件的Data Binding屬性進行
    發表于 09-07 15:45

    OPC讀寫速度問題

    。但是設置較低的時候,感覺讀寫的時間在100ms級別,有點慢了。不知道這個問題有沒有人有深入研究,一般OPC的通訊讀寫上限速度是多少?能否用于高度實時控制的系統?
    發表于 09-08 20:32

    關于C51和ARM讀寫寄存器方式區別?

    請教各位關于C51和ARM讀寫寄存器方式區別的疑惑C51里訪問寄存器的方式是:例如sfr P0 = 0x80;然后對P0的賦值就可以讀寫這個
    發表于 07-15 10:14

    DMA內部寄存器的讀寫方式和應用場合

      DMA內部寄存器的讀寫方式  基于AXI的DMA對內部寄存器的讀寫有著相同的方式。在普通傳輸模式下,DMA內部的寄存器都是由處理器通過AXI-Lite總線進行
    發表于 12-23 17:48

    鋇錸技術的BL102 OPC UA網關的OPC UA配置方式

    OPC UA協議已經越來越多的應用在工業物聯網中。本文介紹鋇錸技術的BL102 OPC UA網關的OPC UA配置方式,與大家共享。運行OPC
    發表于 12-23 08:10

    OPC統一數據訪問技術研究Study on OPC Unif

    本文在分析傳統OPC 數據訪問技術不足的基礎上,提出了Kepware OPC 統一數據訪問技術方案,并結合實際應用驗證了該技術的可行性。關鍵詞:OP
    發表于 05-26 10:29 ?14次下載

    與AB PLC通過opc方式連接的方法

    與AB PLC通過opc方式連接的方法 Rockwell Automation 的A-B PLC是一個著名的可編程控制器產品。其產品體系基本上涵蓋了工業控制產品的各個領域,由于A-B的PLC的種類繁多,且各種類
    發表于 07-04 08:22 ?26次下載

    基于OPC規范的客戶應用程序實現

    介紹了過程控制領域中引進的一種新技術-OPC數據訪問標準,論述了OPC相關概念、基礎及OPC標準接口,并以
    發表于 08-07 08:22 ?17次下載

    OPC數據訪問服務器的研究與實現

    簡單介紹了OPC 技術及其應用,分析了OPC 服務器的對象組成和程序結構。對服務器開發中要注意的幾個關鍵問題:COM 線程,數據存儲方式和數據訪問
    發表于 08-29 10:55 ?23次下載

    單緩沖方式接口與應用

    單緩沖方式接口與應用 1.單緩沖方式連接    所謂單緩沖方式就是使
    發表于 02-27 15:48 ?1585次閱讀
    單緩沖<b class='flag-5'>方式</b>的<b class='flag-5'>接口</b>與應用

    基于OPC的數據訪問服務器開發

    基于OPC的數據訪問服務器開發一文以針對一種PCI總線CAN通信卡設計的 OPC 數據訪問服務器為編程實例,詳細介紹了OPC數據
    發表于 07-18 16:39 ?35次下載
    基于<b class='flag-5'>OPC</b>的數據<b class='flag-5'>訪問</b>服務器開發

    STM8S_010_I2C讀寫EEPROM (硬件方式

    STM8S_010_I2C讀寫EEPROM(硬件方式
    的頭像 發表于 03-14 14:54 ?3680次閱讀

    谷歌將在2021年改變Chrome的訪問數據方式

    在今天舉行的2020年Chrome開發峰會上,谷歌宣布將在2021年改變擴展訪問數據的方式以及擴展權限的運作方式。
    的頭像 發表于 12-10 15:52 ?1685次閱讀

    KEPServer通過OPC UA訪問迅資料講解

    KEPServer通過OPC UA訪問迅資料講解
    發表于 12-10 16:50 ?7次下載

    超全的OPC UA技術解析

    隨著Classic OPC的成功應用, 即成為自動化金字塔結構中不同層級之間的標準接口。但由于OPC對COM的依賴性以及使用DCOM的限制,不能將O
    的頭像 發表于 02-08 15:25 ?3910次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>