Модераторы: ama_kid
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OPC перестает сообщать об valueChanged 
:(
    Опции темы
Tsaritsin
Дата 24.4.2014, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.2.2010

Репутация: нет
Всего: нет



Здравствуйте. 
Итак есть OPC сервер (Local Discovery Server скачан из www.opcfoundation.org).
В WPF - программе настроена подписка на определенный тег (Int32) этого сервера. Подключаюсь с помощью библиотеки Siemens (Opc.Ua.Client.dll и Opc.Ua.Core.dll) Ничего особенного, все взято из стандартных примеров.
Код

MonitoredItem monitoredItem = new MonitoredItem(m_Subscription.DefaultItem);
ClientMonitoredItemData clientData = new ClientMonitoredItemData();
clientData.callback = callback;
clientData.clientHandle = clientHandle;
monitoredItem.StartNodeId = variableNodeId;
monitoredItem.AttributeId = Attributes.Value;
monitoredItem.MonitoringMode = MonitoringMode.Reporting;
monitoredItem.SamplingInterval = 100
monitoredItem.QueueSize = 1;
monitoredItem.DiscardOldest = false;
monitoredItem.Handle = clientData;
m_Subscription.AddItem(monitoredItem);
m_Subscription.ApplyChanges();

Так вот наблюдается плавающий баг. Иногда все работает и исправно срабатывает вызом метода (callback) при изменении значения тэга, но иногда он просто перестает срабатывать и для того что бы опять возобновить отслеживание значения тега приходится закрывать соединение, заново конектится и формировать подписку. Отловить момент когда это происходит не получается. Иногда я могу час просидеть посылая на на сервер различные значения и все работает. А и ногда и пары минут хватает что бы все сломалось. Причем нет привязки к конкретным значениям или чему либо. Вобщем прошу помочь, направить на путь как нормально разобрать такую ситуацию(проблему). Может кто сталкивался с подобной проблемой у OPC клиентов и знает в чем может быть проблема.
PM MAIL   Вверх
ama_kid
Дата 24.4.2014, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 1
Всего: 95



Первым делом надо отделить мух от котлет. Т.е. понять, что именно глючит - ОРС-сервер или клиент. Для этого я бы заменил Local Discovery Server на Matrikon OPC Server Simulator и провел эксперимент с ним. Если проблема исчезнет - значит все вопросы к используемому ОРС серверу. Но что-то подсказывает мне, что проблема таки в клиенте, причем из-за слов "для того что бы опять возобновить отслеживание значения тега приходится закрывать соединение, заново конектится и формировать подписку" есть подозрение, что слетает сам объект monitoredItem по некому Access Violation, которое блокируется без обработки обрамляющим кодом. Поэтому я бы внимательно присмотрелся к содержимому этого callback-обработчика и для начала попробовал весь его код заключить в try...except...end (что не есть правильно, но в качестве первого шага было бы полезно).


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Tsaritsin
Дата 24.4.2014, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.2.2010

Репутация: нет
Всего: нет



Цитата

 я бы заменил Local Discovery Server на Matrikon OPC Server Simulator

Над этим я как раз работаю, но в планах было попробовать на KeepWare.
Цитата

 попробовал весь его код заключить в try...except...end

Это было сделано еще до моего поста в попытках отловить бажину. По сути там на каждый чих (есть несколько типов exception для определенных этапов обработки значений) стоит вывод в лог.
Спасибо за советы. Но я к этому в какой-то мере пришел пытаясь поймать проблему за  хвост. Вообщем где-то есть слабое место из-за которого слетает оповещение. К самом коде почти все обрамлено в try...cath...finally (C#). Случаи (если и есть) когда этого нет, должны были бы выстрелить сообщением что произошло не обработанное исключение и т.п. Но ведь ничего этого нет. В какой-то момент просто перестает срабатывать событие на изменение данных, хотя сама программа работает и не висит или т.п. Хотя в подписках (если остановить программу и дебаге) по прежнему присутствует искомый monitoredItem. Я уже переписал программу исключив лишние развлетления при обработке новых значений (генерированиие дополнительных событий и т.п.), подозревая что проблема была так сказать в "thread-level-access", но особо не полегчало. Жду KeepWare, что бы попробовать на нем. Попутно вопрос. Ведь сам сервер не может сбросить подписку? Т.е. если в тег пишет одна программа а другая его слушает, то первая не может сбить прослушивание ни коим образом? И вообще каково качество Local Discovery Server от www.opcfoundation.org. Может у него и раньше присутствовали такие проблемы?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SCADA-системы и контроллеры стандарта IEC (МЭК) | Следующая тема »


 




[ Время генерации скрипта: 0.1093 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.