当前位置:文档之家› OPC客户端搭建

OPC客户端搭建

OPC客户端搭建
OPC客户端搭建

1.OPC对象的分层结构

OPC数据访问提供从数据源读取和写入特定数据的手段。 OPC数据访问对象是由下图所示的分层结构构成。即一个 OPC服务器对象( OPCServer)具有一个作为子对象的 OPC组集合对象

( OPCGroups)。在这个 OPC组集合对象里可以添加多个的 OPC组对象( OPCGroup)。各个OPC组对象具有一个作为子对象的 OPC标签集合对象( OPCItems)。在这个 OPC标签集合对象

里可以添加多个的 OPC 标签对象( OPCItem)。此外,作为选用功能, OPC 服务器

对象还可以包含一个OPC浏览器对象(OPCBrowser)。

服务器

(O PCServer)

组集合( OPCGroups)浏览器

(OPCBrowser)

组(OPCGroup)

项集合 (OPCItems)

项(OPCItem)

OPC对象中的最上层的对象是OPC服务器。一个 OPC服务器里可以设置一个以上的OPC 组。 OPC服务器经常对应于某种特定的控制设备。例如,某种DCS控制系统,或者某种PLC 控制装置。 OPC 组是可以进行某种目的数据访问的多个的OPC 标签的集合,例如某监视画

面里所有需要更新的位号变量。正因为有了OPC 组, OPC 应用程序就可以以同时需要的数

据为一批的进行数据访问,也可以以OPC组为单位启动或停止数据访问。此外OPC组还提供组内任何OPC标签的数值变化时向OPC应用程序通知的数据变化事件(表1-4)。

2.OPC客户端搭建过程(部分代码)

1)连接服务器

a)查询服务器端主机的名字。

string hostname = Dns.GetHostName();

b) 初始化服务器对象,搜索主机上的服务器ID,并枚举出来。

public void searchlocalsvr(string hostName)//寻找本地服务器

{

try

{

OPCSvr = new OPCServer();

object serverList = OPCSvr.GetOPCServers(hostName);

foreach (string server in (Array)serverList)

{

Console.WriteLine(" 本地 OPC服务器: {0}", server);

}

}

catch (Exception err)

{

Console.WriteLine(" 枚举本地OPC服务器出错:{0}", err.Message);

}

}

c)连接服务器。

public void ctOPCSever(string HostName)// 连接 OPC服务器

{

string OPCSvrName;

searchlocalsvr(HostName);

Console.WriteLine(" 请输入要连接的服务器名字:");

OPCSvrName = Console.ReadLine();

try

{

OPCSvr.Connect(OPCSvrName, "");

Console.WriteLine(" 连接服务器成功!");

}

catch (Exception err)

{

Console.WriteLine(" 连接本地OPC服务器出错 :{0}", err.Message);

}

}

2)创建组( OPCGroups)对象和添加数据项对象( OPCItems)

public void CreateGrp()// 创建组对象

{

try

{

OPCGrps = OPCSvr.OPCGroups;

OPCGrp = new OPCAutomation.OPCGroup[2];

OPCGrp[0] = OPCGrps.Add("G1");

OPCGrp[1] = OPCGrps.Add("G2");

SetGroupProperty();

//OPCGrp[0].DataChange += new

DIOPCGroupEvent_DataChangeEventHandler(GroupDataChange);

//OPCGrp[0].AsyncWriteComplete += new

DIOPCGroupEvent_AsyncWriteCompleteEventHandler(GroupAsyncWriteComplete);

OPCGrp[0].AsyncReadComplete += new

DIOPCGroupEvent_AsyncReadCompleteEventHandler(GroupAsyncReadComplete);

Console.WriteLine(" 创建组成功 !");

}

catch (Exception err)

{

Console.WriteLine(" 错误信息: {0}", err);

}

}

public void SetGroupProperty()

{

OPCSvr.OPCGroups.DefaultGroupIsActive = true;// 激活组。

OPCSvr.OPCGroups.DefaultGroupDeadband = 0;// 死区值,设为 0 时,服务器端该组内任何数据变化都通知组。

OPCSvr.OPCGroups.DefaultGroupUpdateRate = 200;// 默认组群的刷新频率为200ms

OPCGrp[0].UpdateRate = 100;// 刷新频率为 1 秒。

OPCGrp[0].IsSubscribed = true;// 使用订阅功能,即可以异步,默认false }

public void addItems()// 添加数据项

{

OPCIts = OPCGrp[0].OPCItems;

OPCIt = new OPCItem[4];

OPCIt[0] = OPCIts.AddItem("Integer.TAG_I0", 1);

OPCIt[1] = OPCIts.AddItem("Integer.TAG_I1", 2);

//OPCIt[1] = OPCIts.AddItem("Item2", 0);

//OPCIt[2] = OPCIts.AddItem("Item3", 0);

//OPCIt[3] = OPCIts.AddItem("Item4", 0);

Console.WriteLine(" 添加数据项成功!");

}

3)创建浏览器对象

由于服务器端的菜单是树形结构,可以通过创建浏览器对象,一步步浏览菜单,寻找需要浏览的Item 。

public void CrteBrowser()

{

string branch;

OPCBrowser OPCBrsr = OPCSvr.CreateBrowser();

OPCBrsr.ShowBranches();

OPCBrsr.ShowLeafs(true);

foreach (object turn in OPCBrsr)

{

Console.WriteLine(" 服务端浏览——————:" + turn.ToString());

}

Console.WriteLine(" 请需要浏览的分支:");

branch = Console.ReadLine();

OPCBrsr.MoveDown(branch);

OPCBrsr.ShowBranches();

OPCBrsr.ShowLeafs(true);

foreach (object turn in OPCBrsr)

{

Console.WriteLine(" 服务端: " + turn.ToString());

}

}

4)读取服务器端数据信息

读取服务端数据信息包括同步读取和异步读取两种方式

异步读取与同步读取的区别:

同步读取适合用来读取少量数据,而异步读取可以读取大量数据而对运行不影响。因为

程序运行过程中,调用同步读取函数,直到数据访问结果返回到客户程序之前,客户程序都处于等待之中。异步读取在被调用后,方法几乎立即返回。OPC应用程序随后可以进行其他处理。当OPC 服务器完成数据访问时,触发OPC应用程序的异步访问完成事件,将数据访

问结果传送给OPC应用程序。

但是可以看出同步数据访问相比起来更加容易实现,异步数据访问比较麻烦。

A. 同步读取(可以直接调用Item 对象的 read 方法,或者调用组对象的syncread 方法)public void SRead(string itemid)// 同步读取

{

object ItemValues; object Qualities; object TimeStamps;

OPCIt[0] = OPCIts.AddItem(itemid, 0);

OPCIt[0].Read(1, out ItemValues, out Qualities, out TimeStamps);

Console.WriteLine(" 同步读取数据结果如下:");

Console.WriteLine("ID:{0}Vaule :{1}Quality:{2}Timestamp:{3}", OPCIt[0].ItemID,Convert.ToString(ItemValues),Convert.ToString(Qualities),Convert.ToString(TimeSt amps));

}

B.异步读取

public void AsRead(string itemid)// 异步读取

{

{

OPCIt[0] = OPCIts.AddItem(itemid, 0);

int[] temp = new int[] { 0, OPCIt[0].ServerHandle };

Array serverHandles = (Array)temp;

Array Errors;

int cancelID;

OPCGrp[0].AsyncRead(1, ref serverHandles, out Errors, 1, out cancelID);

}

}

异步读取并不直接输出读取结果

而是调用下面的函数

void GroupAsyncReadComplete(int TransactionID, int NumItems, ref System.Array ClientHandles, ref System.Array ItemValues, ref System.Array Qualities, ref System.Array TimeStamps, ref System.Array Errors)

{

Console.WriteLine(" 异步读取数据结果如下:");

for (int i = 1; i <= NumItems; i++)

{

Console.WriteLine("ID:{0} Vaule : {1}Quality:{2} Timestamp:{3}",OPCIt[i-1].ItemID,Convert.ToString(ItemValues.GetValue(i)), Convert.ToString(Qualities.GetValue(i)), Convert.ToString(TimeStamps.GetValue(i)));

}

}

在异步读取函数完成之后调用本函数,输出数据读取结果。

5)断开与服务器连接

断开服务器得先清除所有组对象及其下的数据项对象。

public void disconnectSvr()// 与断开服务器

{

try

{

OPCSvr.OPCGroups.RemoveAll();

OPCSvr.Disconnect();

Console.WriteLine("OPC 服务器已断开 !");

}

catch (Exception err)

{

Console.WriteLine(err.Message);

}

}

3.程序运行样例

运行结果如下所示:

OPC客户端编程汇编

OPC编程汇编 OPC客户端的自动化实现 OPC是建立在COM,DCOM的基础商的,因此绝大多数语言都可以很好的进行开发。在Net中开发客户端有以下几种方式: (1)使用OPCNetAPI,需要用到OPCNetAPI.dll,https://www.doczj.com/doc/6312267030.html,.dll (2)使用自动化接口,需要用到OPCDAAuto.dll (3)使用自定义接口,需要用到多个Wrapper:OpcRcw.Ae.dll,OpcRcw.Batch.dll,https://www.doczj.com/doc/6312267030.html,n.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda.dll,OpcRcw.Sec.dll 以上开发方式所需的动态链接库可以从OPC基金会(https://www.doczj.com/doc/6312267030.html,/)的网站上下载,一些下载项目可能需要注册,或成为基金会的成员。 不同的方式有各自的有缺点,请参见… 本文使用自动化接口,https://www.doczj.com/doc/6312267030.html,语言进行开发,开发项目是无线射频(RFID)卡方面的应用,典型的如公交车,或公司考勤使用的刷卡机。需要注意的是自动化接口存在一个“不是问题”的问题,数组下标是以1开始的,而不是传统计算机开发上的以0开始。不知道设计者头脑是怎么想(有人知道吗?);这可能会给一些语言的开发造成问题(有人碰到吗,没有你就是幸运的) 需求:OPCDAAuto.dll或该Dll的Interop (一):客户端开发流程 OPC客户端的开发主要遵循下图所示的开发流程,下面就从以下几个开发步骤进行说明 (二):枚举OPC服务器列表 枚举服务器主要是通过OPCServer接口的GetOPCServers方法来实现的,该方法会返回OPC服务器数组(以1为下界,上面已有说明),以下是代码段 '枚举OPC服务器列表

VB开发OPC客户端程序的步骤与实现.

VB开发OPC客户端程序的步骤与实现(1)建立新工程或项目,在“工程”菜单下选择“引用”,如图5-3所示。只有引用OPCDAAuoto.DLL后,在程序中才能创建服务器对象,然后进行一系列的操作。 (2)在弹出的引用窗口里单击“浏览(B)…”按钮,弹出添加引用窗口,选择OPCDAAuoto.DLL文件。 (3)在引用窗口里的OPC Automation2.0前面打钩,按“确定”按钮。 (4)定义全局变量,这样可以在窗体的任何方法的代码内应用。变量类型应该指定为对象型。这些对象最好在窗体的通用部分声明加上“Option Explicit”语句,表示模块里的所有变量都需要显式声明。由于OPC自动化接口的数组的索引要求必须从1开始,而系统默认是从0开始,为了避免错误最好在代码的最初加上“Option Base1”语句。为了使对象可以处理事件,必须将objTestGrp和objServer 的声明中加上“WithEvents”语句,表示声明的对象可以响应事件。Option Explicit Option Base1 Dim WithEvents objServer As OPCServer Dim objGroups As OPCGroups Dim WithEvents objTestGrp As OPCGroup Dim objItems As OPCItems (5)连接OPC服务器和建立OPC?br>考虑到代码的可反复使用性,

采用子程序进行编程。 Sub Connect(strProgID As String,Optional strNode As String) If objServer Is Nothing Then '建立一个OPC服务器对象 Set objServer=New OPCServer End If 服务器状态ServerState属性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六个值,分别表示正在运行、失败、没有配置、暂停、测试和没有连接六种OPC服务器当前的状态。如果OPC服务器没有连接,我们才执行objServer.Connect strProgID,strNode语句。strProgID就是ProgID,strNode就是用于远程通信的IP地址。 If objServer.ServerState=OPCDisconnected Then '连接OPC服务器 objServer.Connect strProgID,strNode End If 在Visual Basic中,通过执行一个Set操作实现调用其它接口的方法。 If objGroups Is Nothing Then '建立一个OPC组集合 Set objGroups=objServer.OPCGroups End If

c#opc客户端开发

using System; using System.Collections.Generic; using https://www.doczj.com/doc/6312267030.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OPCAutomation; using https://www.doczj.com/doc/6312267030.html,; namespace Opc_Client { public partial class Form1 : Form { public Form1() { InitializeComponent(); } #region私?有?D变à?量¢? OPCServer SyServer; OPCGroups SyGroups; OPCGroup SyGroup; OPCItems SyItems; OPCItem SyItem; string strHostIP = string.Empty;

string strHostName = string.Empty; bool opc_connected = false; //连¢?接¨?状á??态?? int itmHandleClient = 0; //客¨a户?ì端?句?柄à¨2 int itmHandleServer = 0; //服¤t务?端?句?柄à¨2 #endregion #region方¤?法¤?§ private void GetLocalServer() { IPHostEntry IPHost = Dns.GetHostEntry(Dns.GetHostName()); if (IPHost.AddressList.Length > 0) { strHostIP = IPHost.AddressList[4].ToString(); this.tboxServerIP.Text = strHostIP.ToString(); } else { return; } IPHostEntry ipHostEntry = Dns.GetHostByAddress(strHostIP); strHostName = ipHostEntry.HostName.ToString(); try { SyServer = new OPCServer(); object serverList = SyServer.GetOPCServers(strHostName); foreach (string turn in (Array)serverList) { this.cmbServerName.Items.Add(turn); cmbServerName.SelectedIndex = 0; btnConnServer.Enabled = true; } } catch (Exception err) { MessageBox.Show("枚?举¨′本à?地ì?OPC服¤t务?器??出?错?¨a:êo"+err.Message,"提?¨¢示o?信?息?é",MessageBoxButtons.OK,MessageBoxIcon.Warning); } }

维力控opc客户端设置

当力控作为客户端访问其它服务器时,是将OPC服务器当作一个I/O设备,并专门提供了一个OPC Client驱动程序实现与OPC服务器的数据交换。通过OPC Client驱动程序,可以同时访问任意多个OPC服务器,每个OPC服务器都被视作一个单独的I/O设备,并由工程人员进行定义、增加或删除,如同使用PLC 或仪表设备一样。下面具体说明OPC Client驱动程序的使用过程: 1. 定义OPC设备 在力控开发系统导航器窗口中双击“IO设备组态”,启动IoManager。选则“OPC”类中的“MICROSOFT OPC CLIENT”并展开,然后选择“OPC CLIENT ”并双击弹出“设备配置”对话框: 图3-27 在“设备名称”中输入逻辑设备的名称(可以随意定义),在“数据更新周期”中指定采集周期,原理见I/O驱动相关章节。然后单击按钮“继续”,出现OPC 设备定义对话框: 图3-28 1) 服务器节点:当OPC服务器运行在网络上其它计算机时,需要在此处指定网络计算机的名称或IP地址。如果OPC服务器运行在本机,该参数设置为空。 2) 服务器名称:指定OPC服务器的名称。可以单击“刷新”按钮,自动搜索计算机系统中已经安装的所有OPC服务器。 3) OPC服务器版本:指定OPC服务器的DA规范版本。目前可选择和。 4) 重连时间:跟OPC服务器建立连接后,在设定的时间内如果没有数据变化,则重新连接OPC 服务器。该参数单位为秒。 5) OPC组名称:在OPC服务器创建的组名称。创建的所有项均加载到这个组中。 6) 刷新时间:指定OPC服务器的刷新周期。对于大多数OPC服务器,这个参数用于控制对设备的扫描周期,并以该时间周期向OPC客户端发送数据。对某些通信性能较低的OPC服务器,该参数不宜设置过小。 7) 数据读写方式:可选择同步方式或异步方式。关于同步和异步的概念请参阅上一节。由于异步方式在有大量客户和大量数据交互时能提供高效的性能,因此建议在通常情况下尽量选用异步方式。 2. 数据连接

三维力控opc客户端设置

3.2.5 力控OPC客户端 当力控作为客户端访问其它OPC服务器时,是将OPC服务器当作一个I/O设备,并专门提供了一个OPC Client驱动程序实现与OPC服务器的数据交换。通过OPC Client驱动程序,可以同时访问任意多个OPC服务器,每个OPC服务器都被视 作一个单独的I/O设备,并由工程人员进行定义、增加或删除,如同使用PLC 或仪表设备一样。下面具体说明OPC Client驱动程序的使用过程: 1. 定义OPC设备 在力控开发系统导航器窗口中双击“IO设备组态”,启动IoManager。选则“OPC”类中的“MICROSOFT OPC CLIENT”并展开,然后选择“OPC CLIENT 3.6”并双击弹出“设备配置”对话框: 图3-27 在“设备名称”中输入逻辑设备的名称(可以随意定义),在“数据更新周期”中指定采集周期,原理见I/O驱动相关章节。然后单击按钮“继续”,出现OPC 设备定义对话框:

图3-28 1) 服务器节点:当OPC服务器运行在网络上其它计算机时,需要在此处指定网络计算机的名称或IP地址。如果OPC服务器运行在本机,该参数设置为空。 2) 服务器名称:指定OPC服务器的名称。可以单击“刷新”按钮,自动搜索计算机系统中已经安装的所有OPC服务器。 3) OPC服务器版本:指定OPC服务器的DA规范版本。目前可选择1.0和2.0。 4) 重连时间:跟OPC服务器建立连接后,在设定的时间内如果没有数据变化,则重新连接OPC 服务器。该参数单位为秒。 5) OPC组名称:在OPC服务器创建的组名称。创建的所有项均加载到这个组中。 6) 刷新时间:指定OPC服务器的刷新周期。对于大多数OPC服务器,这个参数用于控制对设备的扫描周期,并以该时间周期向OPC客户端发送数据。对某些通信性能较低的OPC服务器,该参数不宜设置过小。 7) 数据读写方式:可选择同步方式或异步方式。关于同步和异步的概念请参阅上一节。由于异步方式在有大量客户和大量数据交互时能提供高效的性能,因此建议在通常情况下尽量选用异步方式。 2. 数据连接 对OPC数据项进行数据连接与其它设备类似。

Delphi7.0开发OPC客户端程序(Siemens_Opc_client)

OPC是OLE for Process Control的缩写,即把OLE应用于工业控制领域,OPC是建立在O LE规范之上,它为工业控制领域提供了一种标准的数据访问机制。OPC服务器由三类对象组成:服务器(Server)、组(Group)、数据项(Item)。服务器对象(Server)拥有服务器的所有信息,同时也是组对象(Group)的容器。组对象(Group)拥有本组的所有信息,同时包容并逻辑组织OPC数据项(Item)。在这里数据项(Item)就是指所有的PLC信号的输入与输出。OPC组对象(Group)提供了客户组织数据的一种方法。客户可对之进行读写,还可以设置客户端的数据更新速率。当服务器缓冲区内的数据发生改变时,OPC将向客户发出通知,客户得到通知后再进行必要的处理。而无须浪费大量的时间进行查询。OPC规范定义了两种组对象:公共组和局部组(私有组)。公共组由多个客户共有,局部组只隶属于一个OPC客户。一般来说,客户和服务器的一对连接只需要定义一个组对象。在每个组对象中,客户可以加入多个OPC数据项(Item)。OPC数据项(Item)是服务器端定义的对象,通常指向设备的一个寄存器单元。OPC客户对设备寄存器的操作都是通过其数据项来完成的,通过OPC数据项(Ite m),OPC规范尽可能地隐藏了设备的特殊信息,也使OPC服务器的通用性大大增强。OPC 数据项(Item)并不提供对外接口,客户不能直接对之进行操作,所有的操作都是通过组对象进行的。每个OPC数据项(Item)的数据结构包括三个成员变量:即数据值、数据质量和时间 戳。数据值是以Variant形式表示的。 Delphi7.0加载Siemens动态库: 1.打开Delphi7.0,点击Project->Import Type Library 2.在Import Type Library里面找到Siemens OPC DAAutomation 2.0 (Version 1.0),在Clas s Nams里面可以看三个类方法(TOPCGroups,TOPCGroup,TOPCServer),默认的Palette Pag e为ActiveX,单击Install… Delphi7.0中编写客户端程序: 1.连接OPC服务器 在Form上面添加三个OPC控件: OPCGroup1: TOPCGroup; OPCGroups1: TOPCGroups; OPCServer1: TOPCServer;

excel作为opc服务器pc+access的opc客户端

EXCEL OPC PC Access OPC EXCEL PLC https://www.doczj.com/doc/6312267030.html,

? Microsoft Excel ? STEP 7 Micro/WIN PCAccess.mwp PCAccess.mwp STEP 7 Micro/WIN PCAccess.mwp PCAccess.mwp S7-200 PC Access C:C:\\Pro Programs grams grams\\Siemens Siemens\\S7S7--200 PC Access 200 PC Access\\Samples Samples ? S7-200 PC Access PCAccessDiags.pca PCAccessDiags.pca S7-200 PC Access PCAccessDiags.pca PCAccessDiags.pca S7-200 PC Access C:C:\\Programs Programs\\Siemens Siemens\\S7S7--200 PC Access 200 PC Access\\Samples Samples 2. S7 S7--200 PC Access 200 PC Access ? STEP 7 Micro/WIN project PC Access.mwp PC Access.mwp PC Access.mwp S7-200 CPU ? S7-200 PLC ? S7-200 PC Access ? PCAccessDiags.pca ? OPC ? S7-200 PC Access 3. S7 S7--200 MS Excel OPC ? MS Excel ? Options > Add Options > Add--Ins... ? Browse Browse

(C#)OPC客户端源码

【转】(C#)OPC客户端源码 转载申明 申明:本文为转载,如需转载本文,请获取原文作者大尾巴狼啊的同意,谢谢合作! 转自:大尾巴狼啊 原文出处:https://www.doczj.com/doc/6312267030.html,/xiaosacao/archive/2009/01/13/1374895.html 前几天我就发布过这篇文章,可惜的是,发布后代码有的却看不到,后来我就删了,至今不明白什么原因- -! 关于C++、VB来开发OPC客户端的资料网上有很多,但C#的至今没发现有多少。 由于近期项目的需要,就开发了OPC客户端的一个模块。在我想来,程序员挺累的,原因我很累。所以我想大家也很累~~~嘿嘿。特别是刚接手OPC客户端开发的前几天,天天盯住显示器,百度、GOOGLE不停的搜索。每天早上醒来,眼睛都瑟瑟的。 从事3年以上软件开发的朋友们,估计都会腰酸背痛吧!反正我是这样的。 不说那么多废话了,贴上源码,让需要的同行看看吧,代码的质量并不高,就当做抛砖引玉吧! 1、枚举本地服务器 2、获取服务器信息 3、列出了服务器上Tag 4、可以设置组的属性 5、读\写功能 6、可进行远程连接(DCOM需配置) 先看图:

引用类库: OPC服务器: 开发工具: 当前环境:

源码: ///程式使用C#.NET 2005 编写 ///引用类库OPCDAAuto.dll ///OPCServer采用KEPWare ///在windows xp sp2、sp3、windows 2003上测试通过///完成于:2008年12月31日 ///测试于:2009年01月05日 ///

///作者:潇洒草 ///Email:zhkai868@https://www.doczj.com/doc/6312267030.html, ///QQ:44649029 /// ///如分发,请保留此摘要。 ///鄙视那些拿代码当宝贝的人,鄙视那些你不拿源码换就不稀罕你的人,鄙视那些自私的人。///别人看到你的代码,你能死啊?对你有多大威胁啊?强烈鄙视~~~ ///如果你是这样的人,赶紧关了。。偶不欢迎。。 using System; using System.Collections.Generic; using https://www.doczj.com/doc/6312267030.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using https://www.doczj.com/doc/6312267030.html,; using System.Collections; using OPCAutomation; namespace OPC测试通过 { public partial class MainFrom : Form { public MainFrom() {

VC环境下的OPC客户端程序开发

VC环境下的OPC客户端程序开发 来源:中国论文下载中心 [ 08-07-30 15:41:00 ] 作者:赵健师奕兵编辑: studa0714 Ads by Google 曙光刀片服务器TC2600支持Intel? Xeon? 5000系列处理器高密度高能效易管理低成本https://www.doczj.com/doc/6312267030.html, OPC Grape Seed Extract Save 70% on our Premium Blend: Worldwide Shipping Quoted Upfront https://www.doczj.com/doc/6312267030.html, SapphireTrend Premier OPC Trending solution for realtime process control & analysis https://www.doczj.com/doc/6312267030.html, 摘要本文通过分析OPC 数据访问规范,介绍了有关OPC技术的基本概念、数据访问方式以及编写OPC客户端接口程序的一般方法。同时给出了一个具体实例,用Visual C++编写了一个OPC客户端接口程序,并利用OPC服务器KEPServer对其进行测试,实现了OPC客户端与OPC服务器之间的数据交换。 关键词OPC服务器;OPC客户端;COM技术 1 引言 随着通信技术、计算机技术和自动化技术的快速发展,大范围信息共享的需求在自动化系统中显得越来越来越重要,现代工业控制系统已逐渐发展成为以现场设备层、过程控制层和中央管理层三个层次组成的系统,因而对其开放性也提出了更高的要求。在传统的控制系统中,现场设备之间以及现场设备与控制软件之间的信息共享主要是通过驱动程序来实现的,不同厂家的设备使用不同的驱动程序,使得软件开发商不得不开发大量驱动程序来连接这些设备,即使设备厂家在硬件上做小小的改动,应用程序就可能重写,这也势必造成工业控制软硬件的升级与维护不便,给用户和软件开发商带来巨大的工作负担。同时,由于不同设备的驱动程序也有所不同,使得不同的应用程序也不能同时访问同一设备的数据,因此,需要制定一种统一开放的接口标准,使应用程序能够方便的存取一台或多台现场设备的数据,为不同厂商的软硬件提供一种系统集成和数据交换的途径。正是在自动化系统开放性要求的驱使下,促使了OPC技术的产生。 2 OPC技术简介 OPC(OLE for Process Control)是基于微软公司的DNA(Distributed InterNet Application)构架和COM (Component Object Model)/DCOM(Distributed COM)技术,根据易扩展性而设计的,OPC规范定义了一个工业标准接口,这个标准使得COM技术适用于过程控制和制造自动化等应用领域。OLE最初意思为对象链接与嵌入,是微软的复合文档技术。随着后续版本OLE2中导入了COM技术之后,现在的OLE在原版的基础上增加了更多新的功能,包括结构化存储、统一数据传输和自动化等,它已经成为独立于计算机语言、操作系统甚至硬件平台的

OPC客户端的实现

1引言 OPC(OLE for Process Control)是一个工业标准,他是许多世界领先的自动化和软、硬件公司与微软公司合作的结晶。管理该标准的组织是OPC基金会。该基金会的会员单位在世界范围内超过150个,包括了世界上几乎全部的控制系统、仪器仪表和过程控制系统的主要供应商。OPC 技术建立了一组符合工业控制要求的接口规范,将现场信号按照统一的标准与SCADA、HMI等软件无缝连接起来,同时将硬件和应用软件有效地分离开。只要硬件开发商提供带有OPC接口的服务器,任何支持OPC接口的客户程序均可采用统一的方式对不同硬件厂商的设备进行存取,无须重复开发驱动程序。如果希望将数据引入数据库进行统计分析,就要进行客户端开发。 2客户程序的设计方法与比较 客户程序的设计主要是指客户程序中OPC接口部分的设计。客户程序本身可以完成很多复杂的数据处理与显示功能,但需要通过OPC接口部分访问OPC服务器,对现场数据进行存取。 开发OPC、Data、Access、Client之前,要弄清服务器的大体情况,比如需要访问的服务器是否提供自动化接口、服务器的OPC的版本等,到目前为止,OPC有1.0和2.0两个版本,两个版本的接口定义不同,2.0版是对1.0的改进,但不兼容。 OPC客户端的主要任务: ①创建服务器对象。 ②建立与服务器的连接。 ③浏览OPC服务器的功能。客户程序需要创建OPC基金会提供的OPC服务器浏览器对象(OPCServerList)再通过该对象的IOPCServerList接口获得OPC服务器名称的列表;可以通过枚举注册表中包含“OPC”子键的程序名来浏览符合OPC数据存取规范的服务器,但效率较低。 ④通过OPC接口读写数据。 ⑤断开连接。

OPC客户端的自动化

OPC客户端的自动化实现 OPC是建立在COM,DCOM的基础商的,因此绝大多数语言都可以很好的进行开发。在Net中开发客户端有以下几种方式: (1)使用OPCNetAPI,需要用到OPCNetAPI.dll,https://www.doczj.com/doc/6312267030.html,.dll (2)使用自动化接口,需要用到OPCDAAuto.dll (3)使用自定义接口,需要用到多个Wrapper:OpcRcw.Ae.dll,OpcRcw.Batc h.dll,https://www.doczj.com/doc/6312267030.html,n.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda. dll,OpcRcw.Sec.dll 以上开发方式所需的动态链接库可以从OPC基金会(http://www.opcfoundati https://www.doczj.com/doc/6312267030.html,/)的网站上下载,一些下载项目可能需要注册,或成为基金会的成员。 不同的方式有各自的有缺点,请参见… 本文使用自动化接口,https://www.doczj.com/doc/6312267030.html,语言进行开发,开发项目是无线射频(RFID)卡方面的应用,典型的如公交车,或公司考勤使用的刷卡机。需要注意的是自动化接口存在一个“不是问题”的问题,数组下标是以1开始的,而不是传统计算机开发上的以0开始。不知道设计者头脑是怎么想(有人知道吗?);这可能会给一些语言的开发造成问题(有人碰到吗,没有你就是幸运的) 需求:OPCDAAuto.dll或该Dll的Interop (一):客户端开发流程 OPC客户端的开发主要遵循下图所示的开发流程,下面就从以下几个开发步骤进行说明 (二):枚举OPC服务器列表 枚举服务器主要是通过OPCServer接口的GetOPCServers方法来实现的,该方法会返回OPC服务器数组(以1为下界,上面已有说明),以下是代码段'枚举OPC服务器列表 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try GlobalOPCServer = New OPCAutomation.OPCServerClass() Dim ServerList As Object = GlobalOPCServer.GetOPCServers For index As Short = LBound(ServerList) To UBound(ServerList) '加入控件列 表中,注意这里使用LBound和UBound cbbServerList.Items.Add(ServerList(index)) Next If cbbServerList.Items.Count > 0 Then

OPC Server 及 Client系统

第五章:Modbus通信最新发展 1 OPC Server 及Client系统 1.1何谓OPC OPC为OLE for Process Control的缩写。是工业界最先进的资料交换标准。回顾自动控制系统的发展,无论是DCS、PLC、监控套装或控制器等系统,都会面临系统整合的瓶颈。各系统无法有效共享资料,对于相同的控制设备,每个厂牌的监控系统都要设计一套自有的通信Driver。当MIS 系统需要现场实时信息时,也需要一连串复杂的信息接口才能达到所要的功能。面对以上种种状况,由一群工业自动化领导厂商,诸如 Fisher-Rosemount、Rockwell Software、Opto32、Intellution、Intuitive Technology 及Microsoft等,于1996年共同成OPC Foundation,希望建立一个业界标准接口规格。由目前信息使用的发展方向来看,大多数的client端使用的系统为MS Windows,故使用OLE的架构有利与大多数的使用者整合,且利用现有的COM、DCOM、ActiveX等技术,可快速将系统建立完成,现有系统所要变动的项目最少等优点。故当OPC架构提出后,不到数年间已成为业界的标准,且成为自控系统都必须具备的通信功能。 1.2OPC基本架构 对于工厂自动化信息架构可分为三个主要层面: z Plant Floor:仪表信号、现场控制器、各种资料收集设备等。此层次有各种的现场运转信息,设定系数、各种command等信息,需要与上层 系统作资料交换。 z Process Floor:此为DCS、SCADA等统合控制及操作系统,此控制结果要下传至现场设备,也要将执行结果上传至MIS系统。 z Business Floor:全公司或全厂的管理系统,需要现场实时信息做回馈,也要将生产排程计划等资料下载至下层系统。系统会使用Database、 Spreadsheet、MES套装等工具或系统。 OPC就是一套介于以上三层系统间的通信标准接口规格。只要依据此接口规格所开发的软件系统,就可以做到系统间或设备间的资料交换,而不会受到不同系统或设备的限制。 应用系统架构图: 图(5-1):OPC接口基本架构图

OPC客户端搭建

1.OPC对象的分层结构 OPC数据访问提供从数据源读取和写入特定数据的手段。OPC数据访问对象是由下图所示的分层结构构成。即一个OPC服务器对象(OPCServer)具有一个作为子对象的OPC组集合对象(OPCGroups)。在这个OPC组集合对象里可以添加多个的OPC组对象(OPCGroup)。各个OPC组对象具有一个作为子对象的OPC标签集合对象(OPCItems)。在这个OPC标签集合对象里可以添加多个的OPC标签对象(OPCItem)。此外,作为选用功能,OPC服务器对象还可以包含一个OPC浏览器对象(OPCBrowser)。 OPC对象中的最上层的对象是OPC服务器。一个OPC服务器里可以设置一个以上的OPC 组。OPC服务器经常对应于某种特定的控制设备。例如,某种DCS控制系统,或者某种PLC 控制装置。OPC组是可以进行某种目的数据访问的多个的OPC标签的集合,例如某监视画面里所有需要更新的位号变量。正因为有了OPC组,OPC应用程序就可以以同时需要的数据为一批的进行数据访问,也可以以OPC组为单位启动或停止数据访问。此外OPC组还提供组内任何OPC标签的数值变化时向OPC应用程序通知的数据变化事件(表1-4)。

2.OPC客户端搭建过程(部分代码) 1)连接服务器 a)查询服务器端主机的名字。 string hostname = Dns.GetHostName(); b)初始化服务器对象,搜索主机上的服务器ID,并枚举出来。 public void searchlocalsvr(string hostName)//寻找本地服务器 { try { OPCSvr = new OPCServer(); object serverList = OPCSvr.GetOPCServers(hostName); foreach (string server in (Array)serverList) { Console.WriteLine("本地OPC服务器:{0}", server); } } catch (Exception err) { Console.WriteLine("枚举本地OPC服务器出错:{0}", err.Message); } } c)连接服务器。 public void ctOPCSever(string HostName)//连接OPC服务器 { string OPCSvrName; searchlocalsvr(HostName); Console.WriteLine("请输入要连接的服务器名字:"); OPCSvrName = Console.ReadLine(); try { OPCSvr.Connect(OPCSvrName, ""); Console.WriteLine("连接服务器成功!"); } catch (Exception err) { Console.WriteLine("连接本地OPC服务器出错:{0}", err.Message); } } 2)创建组(OPCGroups)对象和添加数据项对象(OPCItems) public void CreateGrp()//创建组对象 { try

VB编写OPC客户端程序

如何用VB编写OPC客户端程序 一、引言 在工业自动化领域,计算机早已成为必不可少的工具,计算机技术的不断发展,大大加速了工业自动化技术的进步,而各种各样的工业控制应用软件正是具体实现这一进程的最重要的工具。 以往,应用软件开发商要为每一种硬件开发驱动程序,由于硬件的种类繁多,特征各异,软件开发商的负担异常繁重,尤其是如果硬件特征发生了变化,整个应用软件相应的驱动程序也要相应地修改,这对软件开发商,对整个工程都是很不利的。而且由于驱动程序的不统一,不同应用程序访问同一硬件设备时常常发生冲突。OPC(OLE for Process Control)技术标准正是在这种情况下产生的。OPC 基于微软的OLE、COM和DCOM技术,而且它本身就是一种特殊的COM,也正因为有微软的参与,以及以已经成熟的技术为基础,它比一般的工业标准制定的效率更高,它从开始制定到第一个可运行的规范开始运行,只用了不到一年的时间。 二、OPC原理及应用 OPC技术为工业自动化软件面向对象的开发提供了统一的标准。它大大减轻了软件开发商的负担,软件开发商不必再为每一硬件单独编写驱动程序,只要硬件的特征符合统一的OPC接口程序标准,或者硬件生产商提供OPC服务器,如图一所示,不同的应用软件开发商都可以采用OPC标准设计工控软件,以标准规定的统一接口通过OPC服务器存取现场数据。 这样,当现场设备发生变化或系统中加入新设备时,OPC服务器的提供商需要重新实现服务器接口,以适应硬件的变化,但由于服务器所提供的接口的一致性,工控软件不作更改即可继续使用,只是某些情况下可能需要重新组态(如添加新的PLC站点等),这样,软件开发商可以节省大量的时间致力于工控软件的性能方面的提高,不必再考虑硬件变化带来的影响,大大减小了软件维护的工作量。这正如OPC规范里所说,OPC将应用软件和硬件设备划清了界限。 2.1 OPC基本结构 OPC服务器有两类接口:定制接口(Custom Interface) 、自动化接口(Automation Interface),定制接口比较低级,它提供更多的功能,效率也比后者高,可以用C++语言调用此类接口,自动化接口主要用于VB、DELPHI等开发工具。按照OPC规范,定制接口是服务商必须提供的,而自动化接口则是可选的,不过,OPC基金会(管理OPC标准的国际组织)提供了一个叫做“自动化包装器”的动态连接库,用于在两者间转换。如图二所示: 在OPC的早期规范里主要包括OPC数据存取规范、OPC报警和事件、OPC 历史数据存取规范。OPC数据存取规范详细规定了客户程序和服务器程序进行数据通信的机制,其它类型的OPC服务器往往是在数据存取服务器的基础上通过增加对象、扩展接口而来的,所以该规范也是其它OPC规范的基础。OPC数据存取规范规定的基本对象有三类:OPC Server、OPC Group和OPC Item,OPC Server包含服务器的所有信息,也是OPC Group的容器,OPC Group除了包含它自身信息外,还负责管理OPC Item。它们的结构如图三所示。每一个OPC Item代表到数据源的一个连接,但它没有提供外部接口,客户端程序无法

OPC客户端源码

申明:本文为转载,如需转载本文,请获取原文作者大尾巴狼啊的同意,谢谢合作! 转自:大尾巴狼啊 原文出处: 前几天我就发布过这篇文章,可惜的是,发布后代码有的却看不到,后来我就删了,至今不明白什么原因- -! 关于C++、VB来开发OPC客户端的资料网上有很多,但C#的至今没发现有多少。 由于近期项目的需要,就开发了OPC客户端的一个模块。在我想来,程序员挺累的,原因我很累。所以我想大家也很累~~~嘿嘿。特别是刚接手OPC客户端开发的前几天,天天盯住显示器,百度、GOOGLE不停的搜索。每天早上醒来,眼睛都瑟瑟的。 从事3年以上软件开发的朋友们,估计都会腰酸背痛吧!反正我是这样的。 不说那么多废话了,贴上源码,让需要的同行看看吧,代码的质量并不高,就当做抛砖引玉吧! 1、枚举本地服务器 2、获取服务器信息 3、列出了服务器上Tag 4、可以设置组的属性 5、读\写功能 6、可进行远程连接(DCOM需配置) 先看图: 引用类库: OPC服务器:

当前环境: 源码: ET 2005 编写 oString(); } else { return; } + "."+ } oString() + " Error:"+ (i).ToString(); } } oString(); = (i).ToString(); = (i).ToString(); } } mail 2009-03-31 15:01 | 李默[未注册用户]

能给我份源码吗? 2009-04-04 19:01 | 滕大鹏[未注册用户] #30楼回复引用 我想要文档,能给份吗?谢谢 2009-04-04 19:03 | 滕大鹏[未注册用户] #31楼回复引用 谢谢楼主,我的邮箱是,能给我发一份全部的资料吗? 2009-04-07 14:02 | TJC #32楼回复引用 谢谢,传份给我,要全部资源(文档+源码),万分感谢!2009-04-08 22:02 | hxf[未注册用户] #33楼回复引用 急需一份资料谢谢 2009-04-11 16:34 | jhjohn[未注册用户] #34楼回复引用 麻烦传份给我,要全部资源(文档+源码),万分感谢 2009-04-13 08:36 | yldx #35楼回复引用 您好!麻烦传分全部资源(文档+源码),谢谢 2009-04-15 13:00 | xhm0924[未注册用户] #36楼回复引用 谢谢,传份给我,要全部资源(文档+源码),万分感谢!急用2009-04-25 09:35 | bestyaq

OPC客户端工具使用手册

OPC 客户端 2.0版本 用户手册 北京华夏首科科技有限公司二○○四年八月

1、界面介绍 (4) 2、工具栏 (4) 3、菜单 (5) 3.1、主菜单 (5) 3 .2、右键菜单 (8) 4、操作说明 (12) 4.1、添加OPC服务器连接 (12) 4.2、添加组 (13) 4.3、添加项 (13) 4.4、显示和修改对象属性 (15) 4.5、导出组配置为CSV文件 (17) 4.6、导入CSV文件配置组 (18)

1、界面介绍 主界面如下图: 主要分为三个区域,左上方的区域以树形显示OPC服务器和组,称为OPC组管理器,右上方是项信息,共有项ID、数据类型、值、时间戳、品质、更新计数等栏,下方的区域是日志显示区,有日期、时间、事件三栏。 2、工具栏 软件的工具栏由下列按钮组成: 添加新的OPC服务器。

添加新组。 添加新项。 属性设置,针对当前选择的对象(OPC服务器、组、项)设置相应的属性。 剪贴当前选择的对象。 拷贝当前选择的对象。 粘贴已拷贝的对象。 删除当前选择的对象。 3、菜单 分为主菜单和右键菜单两部分介绍 3.1、主菜单 编辑菜单如下图: 添加服务器连接:是添加新的OPC服务器, 添加组:添加新组,“添加项”是添加新项。

属性:属性设置,针对当前选择的对象(OPC服务器、组、项)设置相应的属性。剪贴:剪贴当前选择的对象。 拷贝:拷贝当前选择的对象。 粘贴:粘贴已拷贝的对象。 删除:删除当前选择的对象。 查看菜单如图: 组更新间隔:查看和设置组更新间隔。 清除日志:清除已记录的日志信息, 仅记录错误日志:设置系统仅记录错误事件的日志。 工具菜单如下图: 连接:连接断开的OPC服务器连接。 断开:断开已建立的与OPC服务器的连接。 重新连接:重新连接OPC服务器。

别人学习opc客户端开发的体会

OPC协议的编写 2010-01-28 14:20:46| 分类:通信类| 标签:|字号大中小订阅 我从北京买了一本《OPC应用程序入门》,在此之前基本上只是知道有OPC,在五月四日开始,我学了七天。其中有苦有甜。我写下来,权做休息或是练练打字。 第一天 安装了《入门》提供的东西,包括是下面几个文件。还有个批处理文件,是一个注册过程。 opccomn_ps.dll opcproxy.dll opcdaauto.dll OPCTrend.ocx OPCBar.ocx OpcServer.exe OPCJDADemoServer.exe 看了一阵书,知道了前三个是:通用接口,PROXY-STUB,自动化接口。不明白。 后面两个是demo 服务器。 上网,用GOOGLE,查OPC,很自然就找到了https://www.doczj.com/doc/6312267030.html,.,又下了个free 服务器。安装了(注册)。 到了工控网,看到有人在推荐clienttools,就下了一个,叫WXOPC。运行一下, 点击连接服务器图标,立即出现了三个: OPCJ.SAMPLESERVER.1 OPCJ.DADEMOSERVER.1 HEXATEC.PCDATA

第三个是opcconnect上download的计算机基本情况的简单程序。 点击他们,还出现了一些“item”,“value"的内容还在变,有意思。我就想这工具还真不错,不知我能不能做到,但一想,如果这些功能都做不到,这OPC就没多少 人敢学,也就没有市场。 有一段时间没用VB了,先热了热身,看了自己过去编过的code。 第二日 今天先看书。 《OPC应用程序入门》,40元,我花了48元,从汇款到收到用了12天,拿到手上,感觉很单薄。我的看书观点是:在看的过程中迷信书,看完后怀疑书,然后忘记书。尽管这本书上我立即就发现 有错误。我还是仔细地看下去。 这是一本教人们用VB编应用客户端程序的书,希望让一般工控技术员认识OPC其实不复杂, 最起码编用户程序(客户端)不难。 在这之前,我对COM和DCOM技术有所了解,也是很模糊的,OPC以COM和DCOM技术为基础,主要是在服务器端(server),而在用户端并不要很在意它们。 书上对OPC体系有描述,我画了个图。 OPCserver是COM组件,如果安装(注册了)一个OPCserver后,利用WINDOWS的组件工具可以看到,如果这个server安装在别的计算机上,不是本地机,那它就是个DCOM组件(分布式)。 OPC基金会公布了通用接口(用户接口),用C++访问OPCserver只要通过这个接口就可以, 并没有必要了解OPCserver是怎么工作的。 对于VB、VBA、EXCEL、DELPHI等编程软件或工具,不能直接访问通用接口,而要通过所谓的自动化接口(automation interface),OPC组织发布了DATA ACESS 2.0,实际上已经有了3.0版。

相关主题
文本预览
相关文档 最新文档