衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OPC訪問(wèn)接口方式以及讀寫方式

機(jī)器人及PLC自動(dòng)化應(yīng)用 ? 來(lái)源:機(jī)器人及PLC自動(dòng)化應(yīng)用 ? 作者:機(jī)器人及PLC自動(dòng)化 ? 2022-09-19 15:10 ? 次閱讀

OPC是Object Linking and Embedding(OLE)for Process Control 的縮寫,它是微軟公司的對(duì)象鏈接和嵌入技術(shù)在過(guò)程控制方面的應(yīng)用。OPC以O(shè)LE/COM/DCOM技術(shù)為基礎(chǔ),采用客戶/服務(wù)器模式,為工業(yè)自動(dòng)化軟件面向?qū)ο蟮拈_(kāi)發(fā)提供了統(tǒng)一的標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)定義了應(yīng)用Microsoft操作系統(tǒng)在基于PC的客戶機(jī)之間交換自動(dòng)化實(shí)時(shí)數(shù)據(jù)的方法,采用這項(xiàng)標(biāo)準(zhǔn)后,硬件開(kāi)發(fā)商將取代軟件開(kāi)發(fā)商為自己的硬件產(chǎn)品開(kāi)發(fā)統(tǒng)一的OPC接口程序,而軟件開(kāi)發(fā)者可免除開(kāi)發(fā)驅(qū)動(dòng)程序的工作,充分發(fā)揮自己的特長(zhǎng),把更多的精力投入到其核心產(chǎn)品的開(kāi)發(fā)上。

SimaticNet是西門子全集成自動(dòng)化系統(tǒng)中的一個(gè)重要組成部分,它為完善的工業(yè)自動(dòng)化控制系統(tǒng)的通訊提供部件和網(wǎng)絡(luò),同時(shí)提供多個(gè)OPCServer,為數(shù)據(jù)的外部訪問(wèn)提供接口,本文主要以O(shè)PC.SimaticNET為例說(shuō)明。

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

采用不同的通信方式,通過(guò)OPC.SimaticNET,現(xiàn)場(chǎng)數(shù)據(jù)可以方便地提供給用戶:

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

OPC的讀寫方式

在實(shí)際使用中,主要包括對(duì)現(xiàn)場(chǎng)數(shù)據(jù)的讀寫操作。

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

同步通訊時(shí),OPC客戶程序向OPC服務(wù)器進(jìn)行請(qǐng)求時(shí),OPC客戶程序必須等到OPC服務(wù)器對(duì)應(yīng)的響應(yīng)全部完成以后才能返回,在此期間OPC客戶程序一直處于等待狀態(tài),若進(jìn)行讀操作,那么必須等待OPC服務(wù)器響應(yīng)后才返回。因此在同步通訊時(shí),如果有大量數(shù)據(jù)進(jìn)行操作或者有很多OPC客戶程序?qū)PC服務(wù)器進(jìn)行讀操作,必然造成OPC客戶程序的阻塞現(xiàn)象。因此同步通訊適用于OPC客戶程序較少,數(shù)據(jù)量較小時(shí)的場(chǎng)合。

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

異步通訊時(shí),OPC客戶程序?qū)Ψ?wù)器進(jìn)行請(qǐng)求時(shí),OPC客戶程序請(qǐng)求后立刻返回,不用等待OPC服務(wù)器的響應(yīng),可以進(jìn)行其它操作。OPC服務(wù)器完成響應(yīng)后再通知OPC客戶程序,如進(jìn)行讀操作,OPC客戶程序通知OPC服務(wù)器后離開(kāi)返回,不等待OPC服務(wù)器的讀完成,而OPC服務(wù)器完成讀后,會(huì)自動(dòng)的通知OPC客戶程序,把讀結(jié)果傳送給OPC客戶程序。因此相對(duì)于同步通訊,異步通訊的效率更高。

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

訂閱方式時(shí),OPC客戶程序?qū)Ψ?wù)器進(jìn)行請(qǐng)求時(shí),OPC客戶程序操作后立刻返回,不用等待OPC服務(wù)器的操作,可以進(jìn)行其它操作, OPC 服務(wù)器的Group組在組內(nèi)有數(shù)據(jù)發(fā)生改變時(shí),自動(dòng)根據(jù)更新周期刷新相應(yīng)的客戶端數(shù)據(jù),如下圖,客戶端只向OPC服務(wù)發(fā)送一次請(qǐng)求,之后不再對(duì)服務(wù)器請(qǐng)求。

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

OPC寫數(shù)有兩種方式:同步、異步。區(qū)別與上面講的機(jī)制一樣,在生產(chǎn)應(yīng)用中,如果寫數(shù)據(jù)參與控制,一般采用同步方式。

OPC訪問(wèn)接口方式:

OPC主要包含兩種接口:CUSTOM標(biāo)準(zhǔn)接口和OLE自動(dòng)化標(biāo)準(zhǔn)接口,自定義接口是服務(wù)商必須提供的,而自動(dòng)化接口則是可選的。

自定義接口是一組COM接口,主要用于采用C++語(yǔ)言的應(yīng)用程序開(kāi)發(fā);

自動(dòng)化接口是一組OLE接口,主要用于采用VB,DELPHI,Excel等基于腳本編程語(yǔ)言的應(yīng)用程序開(kāi)發(fā)。

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

許多OPC服務(wù)器,包括OPC.SimaticNet,是在COM平臺(tái)開(kāi)發(fā)的,從而對(duì)于基于.NET 框架下的C#語(yǔ)言,作為客戶端程序語(yǔ)言訪問(wèn)OPCServer,需要解決兩個(gè)平臺(tái)間無(wú)縫遷移的問(wèn)題。OPC基金會(huì)對(duì)會(huì)員提供了OpcRcw動(dòng)態(tài)鏈接庫(kù),OPC NET COM包裝器和OPC NET API,將OPC復(fù)雜的規(guī)范封狀成簡(jiǎn)單易用的C#類,可以比較容易地實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)。

本文中通過(guò)實(shí)驗(yàn),逐步講解了通過(guò)C#編寫客戶端程序,訪問(wèn)OPC.SimaticNet,對(duì)PLC數(shù)據(jù)進(jìn)行讀寫的實(shí)現(xiàn)過(guò)程。自定義接口及自動(dòng)化接口都進(jìn)行了測(cè)試,但基于C#的語(yǔ)言特性,建議采用自定義接口訪問(wèn),同時(shí)有很多OPCServer服務(wù)商,對(duì)外是不提供自動(dòng)化接口的,西門子的SimaticNet及WinCC的OPCServer都提供自動(dòng)化接口。

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

OPC Server端組態(tài)配置:

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

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

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

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

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

從上面可以看到數(shù)據(jù)訪問(wèn)都是正常的。

C#自動(dòng)化接口

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;//引用連接庫(kù)

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

using OPCSiemensDAAutomation;

第二步,定義OPC相關(guān)變量

OPCServer MyOpcServer; //定義OPCServer

OPCGroup MyOpcGroup; //定義組

OPCItem MyOpcItem1; //Item

OPCItem MyOpcItem2; //值

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

第三步,建立連接及對(duì)象

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;

第四步,同步讀數(shù)據(jù),

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

{

……

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

//ItemValues,Qualities,TimeStamps分別是值,質(zhì)量碼

//也可以通過(guò)調(diào)用SyncRead函數(shù),參數(shù)可參考異步讀函數(shù)

……

}

第四步,同步寫數(shù)據(jù)

private void Btn_Write_S_Click(object sender,EventArgs e)

{

……

MyOpcItem1.Write(Txt_W1.Text);

//也可以通過(guò)調(diào)用SyncWrite函數(shù),參數(shù)可參考異步寫函數(shù)

……

}

第五步,異步事件定義,

在異步操作情況下,需要定義相應(yīng)的異步事件

MyOpcGroup.DataChange +=new

DIOPCGroupEvent_DataChangeEventHandler(MyOpcGroup_DataChange); //

//訂閱方式下數(shù)據(jù)改變

iteComplete +=new

DIOPCGroupEvent_AsyncWriteCompleteEventHandler(MyOpcGroup_WriteComplete);

//寫完成事件

MyOpcGroup.AsyncReadComplete += new

DIOPCGroupEvent_AsyncReadCompleteEventHandler(MyOpcGroup_ReadComplete);

//讀完成事件

MyOpcGroup.AsyncCancelComplete += new

DIOPCGroupEvent_AsyncCancelCompleteEventHandler(MyOpcGroup_CancelComplete);

//取消操作事件

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

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)

{

……

//注意數(shù)據(jù)改變時(shí),Item數(shù)量要通過(guò)NumItems得到,也就是說(shuō)只有數(shù)據(jù)改變時(shí),才對(duì)一

遍,所以降低了服務(wù)器負(fù)擔(dān)。要注意讀語(yǔ)句寫法。

……

}

第七步異步讀

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的對(duì)應(yīng)

……

}

注意array在函數(shù)內(nèi)部做參數(shù)時(shí),數(shù)據(jù)下標(biāo)是從1開(kāi)始的,所以要考慮將第0位空出

來(lái),n個(gè)Item,就要定義n+1列數(shù)組,添加一個(gè)0,但在函數(shù)使用時(shí),又是從左開(kāi)始讀的。

否則會(huì)報(bào)錯(cuò)。

第八步異步寫

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在函數(shù)內(nèi)部做參數(shù)的傳遞。

第九步釋放對(duì)象

private void Btn_Disconn_Click(object sender,EventArgs e)

{

……

}

OPCItem的數(shù)據(jù)類型:

在通過(guò)自定義接口訪問(wèn)時(shí),

ItemArray[1].szAccessPath = "";

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

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";//地址,不同數(shù)據(jù)類型表

示方法不同

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

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

ItemArray[2].dwBlobSize = 0;

ItemArray[2].pBlob =IntPtr.Zero;

ItemArray[2].vtRequestedDataType = 8;

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8692

    瀏覽量

    151921
  • 西門子
    +關(guān)注

    關(guān)注

    95

    文章

    3062

    瀏覽量

    116448
  • OPC
    OPC
    +關(guān)注

    關(guān)注

    7

    文章

    350

    瀏覽量

    46326

原文標(biāo)題:如何在C#中實(shí)現(xiàn)OPC數(shù)據(jù)訪問(wèn)

文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    OPC讀寫速度問(wèn)題

    。但是設(shè)置較低的時(shí)候,感覺(jué)讀寫的時(shí)間在100ms級(jí)別,有點(diǎn)慢了。不知道這個(gè)問(wèn)題有沒(méi)有人有深入研究,一般OPC的通訊讀寫上限速度是多少?能否用于高度實(shí)時(shí)控制的系統(tǒng)?
    發(fā)表于 09-08 20:32

    關(guān)于C51和ARM讀寫寄存器方式區(qū)別?

    請(qǐng)教各位關(guān)于C51和ARM讀寫寄存器方式區(qū)別的疑惑C51里訪問(wèn)寄存器的方式是:例如sfr P0 = 0x80;然后對(duì)P0的賦值就可以讀寫這個(gè)
    發(fā)表于 07-15 10:14

    DMA內(nèi)部寄存器的讀寫方式和應(yīng)用場(chǎng)合

      DMA內(nèi)部寄存器的讀寫方式  基于AXI的DMA對(duì)內(nèi)部寄存器的讀寫有著相同的方式。在普通傳輸模式下,DMA內(nèi)部的寄存器都是由處理器通過(guò)AXI-Lite總線進(jìn)行
    發(fā)表于 12-23 17:48

    鋇錸技術(shù)的BL102 OPC UA網(wǎng)關(guān)的OPC UA配置方式

    OPC UA協(xié)議已經(jīng)越來(lái)越多的應(yīng)用在工業(yè)物聯(lián)網(wǎng)中。本文介紹鋇錸技術(shù)的BL102 OPC UA網(wǎng)關(guān)的OPC UA配置方式,與大家共享。運(yùn)行OPC
    發(fā)表于 12-23 08:10

    OPC統(tǒng)一數(shù)據(jù)訪問(wèn)技術(shù)研究Study on OPC Unif

    本文在分析傳統(tǒng)OPC 數(shù)據(jù)訪問(wèn)技術(shù)不足的基礎(chǔ)上,提出了Kepware OPC 統(tǒng)一數(shù)據(jù)訪問(wèn)技術(shù)方案,并結(jié)合實(shí)際應(yīng)用驗(yàn)證了該技術(shù)的可行性。關(guān)鍵詞:OP
    發(fā)表于 05-26 10:29 ?14次下載

    與AB PLC通過(guò)opc方式連接的方法

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

    OPC數(shù)據(jù)訪問(wèn)服務(wù)器的研究與實(shí)現(xiàn)

    簡(jiǎn)單介紹了OPC 技術(shù)及其應(yīng)用,分析了OPC 服務(wù)器的對(duì)象組成和程序結(jié)構(gòu)。對(duì)服務(wù)器開(kāi)發(fā)中要注意的幾個(gè)關(guān)鍵問(wèn)題:COM 線程,數(shù)據(jù)存儲(chǔ)方式和數(shù)據(jù)訪問(wèn)
    發(fā)表于 08-29 10:55 ?23次下載

    OPC接口技術(shù)

      •概述   •OPC基本原理   •OPC自定義接口
    發(fā)表于 10-22 16:44 ?25次下載

    單緩沖方式接口與應(yīng)用

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

    基于OPC的數(shù)據(jù)訪問(wèn)服務(wù)器開(kāi)發(fā)

    基于OPC的數(shù)據(jù)訪問(wèn)服務(wù)器開(kāi)發(fā)一文以針對(duì)一種PCI總線CAN通信卡設(shè)計(jì)的 OPC 數(shù)據(jù)訪問(wèn)服務(wù)器為編程實(shí)例,詳細(xì)介紹了OPC數(shù)據(jù)
    發(fā)表于 07-18 16:39 ?35次下載
    基于<b class='flag-5'>OPC</b>的數(shù)據(jù)<b class='flag-5'>訪問(wèn)</b>服務(wù)器開(kāi)發(fā)

    ARM指令尋址方式之內(nèi)存訪問(wèn)指令尋址

    4.2 內(nèi)存訪問(wèn)指令尋址 根據(jù)內(nèi)存訪問(wèn)指令的分類,內(nèi)存訪問(wèn)指令的尋址方式可以分為以下幾種。 ① 字及無(wú)符號(hào)字節(jié)的Load/Store指令的尋址方式
    發(fā)表于 10-18 16:32 ?1次下載
    ARM指令尋址<b class='flag-5'>方式</b>之內(nèi)存<b class='flag-5'>訪問(wèn)</b>指令尋址

    HPI接口的工作模式以及與上位主機(jī)的連接方式解析

    主機(jī)(Host)的訪問(wèn),只能被主機(jī)讀寫。兩個(gè)DSP 的HPI 接口之間不能通訊。兩個(gè)DSP 之間互連,可以將一個(gè)DSP(從)的HPI 接到另一個(gè)DSP(主)的擴(kuò)展內(nèi)存接口(EMIF)上
    發(fā)表于 07-01 09:14 ?8060次閱讀
    HPI<b class='flag-5'>接口</b>的工作模式<b class='flag-5'>以及</b>與上位主機(jī)的連接<b class='flag-5'>方式</b>解析

    谷歌將在2021年改變Chrome的訪問(wèn)數(shù)據(jù)方式

    在今天舉行的2020年Chrome開(kāi)發(fā)峰會(huì)上,谷歌宣布將在2021年改變擴(kuò)展訪問(wèn)數(shù)據(jù)的方式以及擴(kuò)展權(quán)限的運(yùn)作方式
    的頭像 發(fā)表于 12-10 15:52 ?1875次閱讀

    KEPServer通過(guò)OPC UA訪問(wèn)迅資料講解

    KEPServer通過(guò)OPC UA訪問(wèn)迅資料講解
    發(fā)表于 12-10 16:50 ?8次下載
    百家乐网上真钱娱乐场| 沈阳盛京棋牌下载| 百家乐官网庄闲规则| 黄金城百家乐官网手机版| 威尼斯人娱乐城游戏| 百家乐官网棋牌公式| 百家乐桌颜色可定制| 真人斗地主| 百家乐官网娱乐城体验金| 香港六合彩大全| 段风水24宿| 凱旋門娱乐城| 赌百家乐的体会| 大发888官网吧| 网络百家乐官网的玩法技巧和规则 | 真人百家乐官网轮盘| 澳门百家乐网络游戏信誉怎么样| 百家乐官网游戏平台排名| 嘉禾百家乐的玩法技巧和规则| 百家乐官网现金网平台排名 | 大发888论坛| 百家乐官网娱乐场开户注册| 大发888官网免费下载| 现场百家乐官网的玩法技巧和规则 | 澳门百家乐赢钱秘诀| 军事| 嘉禾百家乐的玩法技巧和规则| 百家乐官网赌博公司| 大发888娱乐亚洲| 百家乐怎样概率大| 长春市| 百家乐作弊内幕| 百家乐官网投注心得| 联众百家乐的玩法技巧和规则| 娱乐网百家乐官网补丁| 尊龙国际网上娱乐| 澳门百家乐会出老千吗| 百家乐官网取胜秘笈| 威尼斯人娱乐场注册| 做生意发财招财图像| 百家乐官网娱乐分析软|