Клиент OPC - как читать с удаленного сервера OPC

Я использовал OPCDotNetLib, но не могу читать данные с удаленного сервера OPC там .

Я могу подключиться, как

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

Но поиск методов DataChanged или ReadCompleted не работает или работает неправильно.

Я тестировал то же самое с локальным OPC-сервером, и он работает хорошо, с удаленным OPC-сервером я могу подключаться, я могу добавлять элементы и могу читать данные. Сервер OPC на удаленном компьютере показывает, что я их читаю, но не вижу никаких данных. Похоже, мне нужен другой способ обхода OPCDotNetLib для удаленного OPC-сервера.

Я даже нашел там комментарий

Эта библиотека / dll не будет работать на удаленном сервере, возможно только локальное использование.

Есть ли другие доступные библиотеки .NET для OPC-клиента?


person cnd    schedule 07.02.2011    source источник


Ответы (2)


У вас есть несколько вариантов совместимости с OPC. Вы можете использовать классические оболочки COM, предоставляемые OPC Foundation, или новую библиотеку OPC, разработанную для .Net.

Я лично еще не переключался на более новую библиотеку, но это подробное описание того, как использовать _1 _, _ 2_ и OpcRcw.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;
person Greg Buehler    schedule 07.02.2011
comment
Но где взять OpcNetApi.dll, OpcNetApi.Com.dll и OpcRcw.Da.dll? :( Я не являюсь оплачиваемым членом OPC Foundation. - person cnd; 08.02.2011
comment
@nCdy вам понадобится OPC Redistributable 2.00 из надежного источника. В противном случае вы можете приобрести усовершенствованный компонент у таких компаний, как Kepware или Matrikon. - person Greg Buehler; 08.02.2011
comment
@GregBuehler Я отключаюсь, но клиент остается активным на стороне сервера opc. Ты знаешь почему? - person Cer; 14.03.2018

Я знаю, что это было давно, но чтобы помочь тем, кому нужны библиотеки. Чтобы согласиться с ответом Грега Бюлерса. Они бесплатны и являются частью ядра OPC Foundation, и их можно найти здесь щелкните вкладку «Архивы», если вам нужны предыдущие версии. Мне потребовалась целая вечность, чтобы найти их, поэтому я надеюсь, что это может кому-то помочь.

person doogie    schedule 29.08.2014
comment
Ссылка вроде мертвая. Я предполагаю, что он перемещен сюда opcfoundation.org/developer-tools/ образцы-и-инструменты-классика /. Однако требуется регистрация. - person Anttu; 24.10.2019