C#使用OpcNetApi.dll和OpcNetApi.Com.dll操作OPC2011-07-04 博客园 臭臭的大佬本人学习了一下.Net,恰好,又要用这个。而网上很多VC6,VB6,VB .Net的但,很少C#的。现在研究一下,给出例子:测试平台,是VS2008,KEPServer,OpcNetApi.dll和OpcNetApi.Com.dll。当然我也同时安装了,西门子的Net2006和Step7,其中Net2006是负责OPC的,可能会在系统中创建一些dll之类的,因为我的程序换到一台没有Net2006的机子上既然有问题,不知其电脑问题还是因为没装Net2006。不过,理论上,OpcNetApi.dll和OpcNetApi.Com.dll足矣。还有,Net2006的安装路径下会有写dll和例子。例如我的是默认安装,C:Program FilesSiemensSIMATIC.NETopc2samples下有Automation、Custom、dotnet、xml四种应用的例子,有兴趣的可以研究研究。下面给出我的代码,是基于控制台的,代码不长,如果 您有C#经验和OPC基础应不难理解,而且还有注释,希望您能喜欢:)以下是Program.cs,有些测试操作我注释掉了,大家也可以玩玩。using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using Opc; using Opc.Da; using OpcCom;
namespace OPCAPITest { class Tester { private Opc.Da.Server m_server = null;//定义数据存取服务器 private Opc.Da.Subscription subscription = null;//定义组对象(订阅者) private Opc.Da.SubscriptionState state = null;//定义组(订阅者)状态,相当于OPC规范中组的参数 private Opc.IDiscovery m_discovery = new OpcCom.ServerEnumerator();//定义枚举基于COM服务器的接口,用来搜索所有的此类服务器。 public void Work() { //查询服务器 Opc.Server[] servers = m_discovery.GetAvailableServers(Specification.COM_DA_20,"TX1" , null); //daver表示数据存取规范版本,Specification.COMDA_20等于2.0版本。 //host为计算机名,null表示不需要任何网络安全认证。 if (servers != null) { foreach (Opc.Da.Server server in servers) { //server即为需要连接的OPC数据存取服务器。 if (String.Compare(server.Name,"TX1.KEPware.KEPServerEx.V4",true) == 0)//为true忽略大小写 //if (String.Compare(server.Name, "localhost.KEPware.KEPServerEx.V4", true) == 0)//不带计算机名为本地访问 { m_server = server;//建立连接。 break; } } }
//连接服务器 if (m_server != null)//非空连接服务器 m_server.Connect(); else return;