1

我使用了 OPCDotNetLib,但无法从那里的远程 OPC Server 读取数据。

我可以连接,比如

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

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

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

我什至在那里找到了评论

这个库/dll 不能在远程服务器上工作,只能在本地使用。

是否有其他可用的 OPC 客户端 .NET 库?

4

2 回答 2

10

您有几个 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;
于 2011-02-07T20:39:33.967 回答
4

我知道已经有一段时间了,但要帮助那些需要图书馆的人。与 Greg Buehlers 一起回答。它们是免费的,并且是核心 OPC 基金会的一部分,如果您需要以前的版本,可以在此处单击“存档”选项卡找到。我花了很长时间才找到它们,所以我希望这可以帮助某人。

于 2014-08-29T16:46:08.047 回答