C#编写OPC客户端(1)

    因课题研究的是监控系统,需要与PLC通讯读取数据,在比较了一些通讯方式之后,决定选用OPC客户端来获取PLC的数据。OPC客户端的编写有很多种方式,其中较容易入门的是自动化的写法,即引用OPCAutomation.dll库,利用该库中的函数来连接和获取PLC中的数据。

   网上关于这方面的资料有限,而且很多帖子都很雷同,以VB居多。在研究和练习了许久之后,终于有了一些心得。由于本人的监控系统是使用C#编写的,所以就使用C#编写了客户端。希望能给其他人一些帮助。(毕竟自己在这方面花了很多时间和经历)希望大家在转发我的文章时注意写明转发来源!

   我主要这次主要连接的PLC是西门子的PLC,所以dll库就直接使用了西门子的SiemensOPCDAAutomation,安装上西门子的SimaticNET后,就会出现。在引用上直接添加引用

添加上dll库后,在你的主程序的最上方加上

using SimensOPCDAAutomation;

就可在程序中引用有关OPC中的所有函数了。

1、连接

代码
1 定义opc有关变量
2 OPCServer myServer;
3 OPCGroups myGroups;
4 OPCGroup[] myGroup;
5 OPCItem WriteItem;
6 服务器连接
7 myServer = new OPCServer();
8 HostName = Dns.GetHostName();
9 myServer.Connect("OPC.SimaticNet", HostName);
10 if (!(myServer.ServerState == (int)OPCServerState.OPCRunning))
11 {
12 MessageBox.Show("连接失败!", "注意");
13 return;
14 }

 

OPC协议时三层结构,Server→(Groups→Group)→(Items→Item)

要添加数据项必须通过组和组集,所以必须定义Groups和Group。而且Group也会影响到后面异步读取的DataChang事件,所以是必须的。接下来定义组和添加组

2、组

 

//添加组
myGroups = myServer.OPCGroups;
myGroup
=myGroups.Add("test");

 

 

其中的组名“test”是任意取的。

今天就写到这吧,呵呵!

 

posted on 2010-06-25 16:04  墨未浓  阅读(1660)  评论(3编辑  收藏  举报