2011-02-07 188 views
1

我使用了OPCDotNetLib,但无法从远程OPC服务器读取数据。OPC客户端 - 如何从远程OPC服务器读取

我可以连接,就像

Type typeofOPCserver = Type.GetTypeFromProgID(clsidOPCserver, ip); 

但看的方法DataChanged或ReadCompleted不工作或工作的错误。

我对本地OPC服务器进行了测试,效果很好,远程OPC服务器可以连接,我可以添加项目并可以读取数据。远程计算机上的OPC服务器显示我读取了它们,但我看不到任何数据。好像我需要在OPCDotNetLib上为远程OPC服务器提供另一种解决方法。

我甚至发现评论有

该库/ DLL不会在远程服务器上运行,只有本地使用是可能的。

是否还有一些可用的OPC Client .NET库?

回答

9

您有几个OPC兼容性选项。您可以使用OPC Foundation提供的经典COM包装器,也可以使用为.Net设计的较新的OPC库。

我没有亲自切换到新的图书馆还没有,但是这是一个突破的如何使用OpcNetApi.dllOpcNetApi.Com.dllOpcRcw.Da.dll初始化连接并订阅DataChanged事件下来:

Opc.Da.Server scadaServer = null; 
List<Opc.Da.Item> scadaItems = null; 
Opc.Da.Subscription scadaSubscription = null; 

string scadaUrl = string.Format("opcda://{0}/{1}", hostname, 
                opcServerVendor); 

scadaServer = new Opc.Da.Server(new OpcCom.Factory(), new Opc.URL(scadaUrl)); 
scadaServer.Connect(); 

var scadaItems = new List<Opc.Da.Item>(); // I'm using a List<T>, but cast back to a simple array using ToArray(); 

// Repeat this next part for all the items you need to subscribe 
Opc.Da.Item item = new Opc.Da.Item(); 
item.ItemName = TagPath; // Where TagPath is something like device.channel.tag001; 
item.ClientHandle = handle; // handle is up to you, but i use a logical name for it 
item.Active = true; 
item.ActiveSpecified = true; 

scadaItems.Add(item); 

Opc.Da.SubscriptionState subscriptionState = new Opc.Da.SubscriptionState(); 
subscriptionState.Active = true; 
subscriptionState.UpdateRate = 40; 
subscriptionState.Deadband = 0; 

scadaSubscription = scadaSubscription ?? (Opc.Da.Subscription)scadaServer.CreateSubscription(subscriptionState); 

Opc.Da.ItemResult[] result = scadaSubscription.AddItems(scadaItems.ToArray()); 
for (int i = 0; i < result.Length; i++) 
    scadaItems[i].ServerHandle = result[i].ServerHandle; 

scadaSubscription.DataChanged += new Opc.Da.DataChangedEventHandler(OnDataChange); 
scadaSubscription.State.Active = true; 
+0

因此,我在哪里可以得到OpcNetApi.dll,OpcNetApi.Com.dll和OpcRcw.Da.dll? :(我不支付OPC 基金会会员的费用 – Cynede 2011-02-08 05:27:20

4

我知道这已经有一段时间了,但要帮助那些需要图书馆的人。 与格雷格比埃勒一起回答。 它们是免费的,并且是OPC基金会的核心组成部分,可以找到here如果您需要以前的版本,请单击“存档”选项卡。我永远花了我的时间找到他们,所以我希望这可以帮助别人。