Iconics Genesis64 и OPC UA
Автор |
Повідомлення |
Повідомлення створено: 12. 03. 2014 [21:44]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"rxs5" wrote:
Дамп и лог Genesis64 записал.
Тут увидел бравзинг "Objects" и вызов TranslateBrowsePathsToNodeIds.
Добавил реализацию TranslateBrowsePathsToNodeIds на предмет иерархичного поиска.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 13. 03. 2014 [14:42]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
"roman" wrote:
Тут увидел бравзинг "Objects" и вызов TranslateBrowsePathsToNodeIds.
Добавил реализацию TranslateBrowsePathsToNodeIds на предмет иерархичного поиска.
Проверил на 2072. Стало лучше - теперь можно зайти в DAQ. Но вот дальше в глубь зайти уже не удается. Клиент Genesis64 при попытке доступа к вложенным в DAQ папкам приписывает одну после другой, хотя должен заменять их в пути, т.к. они на одном уровне. Скриншот и 2 лога добавил.
Вкладений файл
|
Повідомлення створено: 14. 03. 2014 [11:41]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"rxs5" wrote:
Проверил на 2072. Стало лучше - теперь можно зайти в DAQ. Но вот дальше в глубь зайти уже не удается. Клиент Genesis64 при попытке доступа к вложенным в DAQ папкам приписывает одну после другой, хотя должен заменять их в пути, т.к. они на одном уровне. Скриншот и 2 лога добавил.
Понял наконец смысл TranslateBrowsePathsToNodeIds. Эта функция используется для получения NodeId из пути имён обзора, теми кому лень прямо хранить полученный в "Browse" NodeId. Чем они увеличивают нагрузку на сервер, повторным браузингом и чем глубже, тем больше нагрузка!
Переписал TranslateBrowsePathsToNodeIds!
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 14. 03. 2014 [13:14]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
"roman" wrote:
Понял наконец смысл TranslateBrowsePathsToNodeIds. Эта функция используется для получения NodeId из пути имён обзора, теми кому лень прямо хранить полученный в "Browse" NodeId. Чем они увеличивают нагрузку на сервер, повторным браузингом и чем глубже, тем больше нагрузка!
Переписал TranslateBrowsePathsToNodeIds!
Спасибо. Проверил на 2073 - работает браузинг, в том числе и по глубине дерева.
Проверил чтение значений полей узла - они не отображается. Genesis64 отображается ошибку (скриншот).
То же самое поле читается в Indusoft Web Studio и в UAExpert.
Дампы во вложении.
----
Также проверил с системными данными
По строке, которую формирует клиент Genesis64, данные не считываются.
Пример строки
opc.tcp://192.168.195.97:4848/OSCADA_OPC/None - [None:None:XML]\[OpenSCADA_DAQ]DAQ/System DA/Активные данные/Full CPU Load.load
------------
Посмотрел лог Genesis64, есть сообщения об ошибках.
UA: opc.tcp://192.168.195.97:4848/OSCADA_OPC/None - [None:None:XML]
CreateMonitoredItems(ns=2;s=DAQ.System.AutoDA.CPULoad.load: Invalid ID (0)): Good
в Ico.Fwx.Ua.Client.UaClientSession.a(String A_0, Int32 A_1, StatusCode A_2, String A_3, List`1 A_4, List`1 A_5)
в Ico.Fwx.Ua.Client.UaClientSession.a(Subscription A_0, Boolean A_1)
в Ico.Fwx.Ua.Client.UaClientSession.n()
в Ico.Fwx.Ua.Client.UaClientSession.ad()
в Ico.Fwx.Ua.Client.UaClientSession.ae()
в Ico.Fwx.Ua.Client.UaClientSession.d(Object A_0)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart(Object obj)
Далее
UA: opc.tcp://192.168.195.97:4848/OSCADA_OPC/None - [None:None:XML]
CreateMonitoredItems(ns=2;s=DAQ.System.AutoDA.CPULoad.load: Duplicate ID: 1): Good
в Ico.Fwx.Ua.Client.UaClientSession.a(String A_0, Int32 A_1, StatusCode A_2, String A_3, List`1 A_4, List`1 A_5)
в Ico.Fwx.Ua.Client.UaClientSession.a(MonitoredItem A_0)
в Ico.Fwx.Ua.Client.UaClientSession.a(Subscription A_0, Boolean A_1)
в Ico.Fwx.Ua.Client.UaClientSession.n()
в Ico.Fwx.Ua.Client.UaClientSession.ad()
в Ico.Fwx.Ua.Client.UaClientSession.ae()
в Ico.Fwx.Ua.Client.UaClientSession.d(Object A_0)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart(Object obj)
Затем
UA: opc.tcp://192.168.195.97:4848/OSCADA_OPC/None - [None:None:XML]
CreateMonitoredItems(ns=2;s=DAQ.System.AutoDA.CPULoad.load: Duplicate ID: 2): Good
в Ico.Fwx.Ua.Client.UaClientSession.a(String A_0, Int32 A_1, StatusCode A_2, String A_3, List`1 A_4, List`1 A_5)
в Ico.Fwx.Ua.Client.UaClientSession.a(MonitoredItem A_0)
в Ico.Fwx.Ua.Client.UaClientSession.a(Subscription A_0, Boolean A_1)
в Ico.Fwx.Ua.Client.UaClientSession.n()
в Ico.Fwx.Ua.Client.UaClientSession.ad()
в Ico.Fwx.Ua.Client.UaClientSession.ae()
в Ico.Fwx.Ua.Client.UaClientSession.d(Object A_0)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart(Object obj)
И
UA: opc.tcp://192.168.195.97:4848/OSCADA_OPC/None - [None:None:XML]
CreateMonitoredItems(ns=2;s=DAQ.System.AutoDA.CPULoad.load: Revised queue size = 0): Good
в Ico.Fwx.Ua.Client.UaClientSession.a(String A_0, Int32 A_1, StatusCode A_2, String A_3, List`1 A_4, List`1 A_5)
в Ico.Fwx.Ua.Client.UaClientSession.a(Int32 A_0, String A_1)
в Ico.Fwx.Ua.Client.UaClientSession.a(MonitoredItem A_0)
в Ico.Fwx.Ua.Client.UaClientSession.a(Subscription A_0, Boolean A_1)
в Ico.Fwx.Ua.Client.UaClientSession.b(Boolean reportAddFailures)
в Ico.Fwx.Ua.Client.UaClientSession.ab()
в Ico.Fwx.Ua.Client.UaClientSession.ae()
в Ico.Fwx.Ua.Client.UaClientSession.d(Object A_0)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart(Object obj)
Далее они повторяются в таком же порядке
В логе ошибки имеют уровень level="800"
[Повідомлення редагувалось 2 раз(ів), останній раз 14.03.2014 в 13:31.]
Вкладений файл
|
Повідомлення створено: 15. 03. 2014 [20:28]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"rxs5" wrote:
Проверил чтение значений полей узла - они не отображается. Genesis64 отображается ошибку (скриншот).
То же самое поле читается в Indusoft Web Studio и в UAExpert.
Дампы во вложении.
Дамп один и в нём нет попыток "CreateMonitoredItems(ns=2;s=DAQ.System.AutoDA.CPULoad.load: Invalid ID (0))"
Само чтение, если не Publish, искать слишком долго, запишите участок короткий но репрезентативный для проблемы.
Для CreateMonitoredItems в дампе видно только:
- DAQ.SBK.sbk_savel.C1_1_2_9_.Data:13
- DAQ.SBK.sbk_savel.C1_1_2_9_.Data:14
- DAQ.SBK.sbk_savel.C1_1_2_9_.Data:18
Кстати для атрибутов 14, 18 это бессмысленно.
Кроме того клиент тупит и рассылает Republish запросы за отсутствующими номерами последовательности.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 17. 03. 2014 [10:34]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
"roman" wrote:
"rxs5" wrote:
Проверил чтение значений полей узла - они не отображается. Genesis64 отображается ошибку (скриншот).
То же самое поле читается в Indusoft Web Studio и в UAExpert.
Дампы во вложении.
Дамп один и в нём нет попыток "CreateMonitoredItems(ns=2;s=DAQ.System.AutoDA.CPULoad.load: Invalid ID (0))"
Само чтение, если не Publish, искать слишком долго, запишите участок короткий но репрезентативный для проблемы.
Дампы - имел в виду 1 wireshark + 1 Genesis64. Строка
CreateMonitoredItems(ns=2;s=DAQ.System.AutoDA.CPULoad.load: Invalid ID (0)): Good
как раз из логе Genesis64, хотя я это и указывал в предыдущем сообщении.
"roman" wrote:
Для CreateMonitoredItems в дампе видно только:
- DAQ.SBK.sbk_savel.C1_1_2_9_.Data:13
- DAQ.SBK.sbk_savel.C1_1_2_9_.Data:14
- DAQ.SBK.sbk_savel.C1_1_2_9_.Data:18
Кстати для атрибутов 14, 18 это бессмысленно.
Кроме того клиент тупит и рассылает Republish запросы за отсутствующими номерами последовательности.
Дамп wireshark делал по элементам DAQ.SBK, а лог Genesis64 по DAQ.System DA. Тут да, мог запутать.
Могу снова сделать дамп и лог по System DA, чтобы исключить влияние не родного для OpenSCADA модуля.
[Повідомлення редагувалось 1 раз(ів), останній раз 17.03.2014 в 10:35.]
|
Повідомлення створено: 17. 03. 2014 [12:16]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"rxs5" wrote:
Дамп wireshark делал по элементам DAQ.SBK, а лог Genesis64 по DAQ.System DA. Тут да, мог запутать.
Могу снова сделать дамп и лог по System DA, чтобы исключить влияние не родного для OpenSCADA модуля.
Конечно, иначе соотносить невозможно, поскольку в последнем дампе принципиальных проблем не видно.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 17. 03. 2014 [15:41]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
"roman" wrote:
Конечно, иначе соотносить невозможно, поскольку в последнем дампе принципиальных проблем не видно.
Сделал на сборке 2073. В вложении дамп и лог. Данные в Genesis64 в Runtime не отображаются.
Ошибки вида
CreateMonitoredItems(ns=2;s=DAQ.System.AutoDA.CPULoad.load: Invalid ID (0)): Good и другие есть в логе Genesis64.
[Повідомлення редагувалось 1 раз(ів), останній раз 17.03.2014 в 15:41.]
Вкладений файл
|
Повідомлення створено: 17. 03. 2014 [17:45]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"rxs5" wrote:
Сделал на сборке 2073. В вложении дамп и лог. Данные в Genesis64 в Runtime не отображаются.
Ошибки вида
CreateMonitoredItems(ns=2;s=DAQ.System.AutoDA.CPULoad.load: Invalid ID (0)): Good и другие есть в логе Genesis64.
Похоже ему нулевые идентификаторы категорически не нравятся.
Пришёл запрос CreateMonitoredItems для DAQ.System.AutoDA.CPULoad.load, соответственно созданы идентификаторы для атрибутов 0:13, 1:14, 2:18 далее он прямо читает атрибуты 14 и 18, а 13 игнорирует.
Дочитал такое:
This primitive data type is an UInt32 that is used as an identifier, such as a handle. All values,
except for 0, are valid.
Сделаю эти идентификаторы ненулевыми.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 17. 03. 2014 [22:33]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"roman" wrote:
Сделаю эти идентификаторы ненулевыми.
Сделал!
Learn, learn and learn better than work, work and work.
|
|
|