OPC客户端 - 如何从远程OPC服务器读取

cnd*_*cnd 1 .net opc

我使用OPCDotNetLib但无法从远程OPC Server读取数据.

我可以连接,比如

Type typeofOPCserver = Type.GetTypeFromProgID(clsidOPCserver, ip);
Run Code Online (Sandbox Code Playgroud)

但是查看DataChanged或ReadCompleted方法不起作用或工作错误.

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

我甚至在那里发表了评论

此库/ dll不能在远程服务器上运行,只能在本地使用.

是否有其他可用的OPC Client .NET库?

Gre*_*ler 9

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

我没有亲自切换到新的图书馆还没有,但是这是一个突破的如何使用下来OpcNetApi.dll,OpcNetApi.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;
Run Code Online (Sandbox Code Playgroud)