Библиотека Opc и командная строка для упрощения работы с OPC-операциями и обеспечения прозрачности между различными протоколами.
В настоящее время поддерживается синхронная работа по протоколам UA и DA.
Использование
Доступен пакет nuget для библиотеки. Чтобы установить H.Opc, выполните следующую команду в консоли диспетчера пакетов:
PM> Install-Package H.Opc
Примечание: пакет был перемещён на NuGet.org из Hylasoft.Opc в H.Opc из-за проблем с учётной записью NuGet.
Чтобы установить интерфейс командной строки, перейдите в раздел релизов (https://github.com/hylasoft-usa/h-opc/releases).
Документация
Для использования клиента UA просто...
using (var client = new UaClient(new Uri("opc.tcp://host-url")))
{
client.Connect();
// Используйте здесь `client`
}
или с параметрами...
var options = new UaClientOptions {
UserIdentity = new Opc.Ua.UserIdentity("<your-username>", "<your-password>")
};
using (var client = new UaClient(new Uri("opc.tcp://host-url")), options)
{
client.Connect();
// Используйте здесь `client`
}
Вместо этого можно использовать клиент DA:
using (var client = new DaClient(new Uri("opcda://host-url")))
{
client.Connect();
// Используйте `client` здесь
}
Вы можете получить ссылку на узел с помощью...
var node = client.FindNode("path.to.my.node");
Это даст вам ссылку на узел node
в папке path.to.my
.
Вы можете использовать ссылку на узел для изучения иерархии узлов с помощью свойств Parent
и SubNodes
. Например...
Node parentNode = node.Parent;
IEnumerable<Node> children = client.ExploreFolder(node.Tag);
IENumerable<Node> grandChildren = children.SelectMany(m => client.ExploreFolder(m.Tag));
Чтение переменной? Так же просто, как...
var myString = client.Read<string>("path.to.string").Value;
var myInt = client.Read<int>("path.to.num").Value;
Приведённый выше пример будет читать строку из тегов string
и num
в папке path.to
.
Чтобы записать значение, просто...
client.Write("path.to.string", "My new value");
client.Write("path.to.num", 42);
Простой мониторинг:
client.Monitor<string>("path.to.string", (readEvent, unsubscribe) =>
{
DoSomethingWithYourValue(readEvent.Value);
if(ThatsEnough == true)
unsubscribe();
});
Второй параметр — это Action<T, Action>
, который имеет два параметра:
readEvent
содержит всю информацию, относящуюся к событию, такую как временные метки, качество и значение.unsubscribe
— это функция, которая отменяет подписку на текущий отслеживаемый элемент. Это очень удобно, когда вы хотите завершить обратный вызов.Важно, чтобы вы либо заключили клиент в оператор using
, либо вызвали Dispose()
, когда закончите, чтобы отменить подписку на все отслеживаемые элементы и завершить соединение!
Каждый метод имеет асинхронный аналог, который можно использовать с синтаксисом async/await. Асинхронный синтаксис рекомендуется по сравнению с синхронным (возможно, синхронный однажды будет устаревшим).
Также можно использовать проект интерфейса командной строки для быстрого тестирования.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )