Iconics Genesis64 и OPC UA
Автор |
Повідомлення |
Повідомлення створено: 04. 03. 2014 [14:34]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
Из прочих различающихся параметров могу выделить такой.
В сообщениях UA Secure Conversation Message: CreateSessionResponse
В Unified Automation
SessionId: NodeId
NodeId EncodingMask: URI (0x04)
NodeId Namespace Id: 1
Guid: f0c34b4a-a7be-6e45-908c-225a8d3ac0df
AuthenticationToken: NodeId
NodeId EncodingMask: Numeric of arbitrary length (0x02)
NodeId Namespace Id: 0
NodeId Identifier Numeric: 1113836920
В OpenSCADA
SessionId: NodeId
NodeId EncodingMask: Two byte encoded Numeric (0x00)
NodeId Identifier Numeric: 8
AuthenticationToken: NodeId
NodeId EncodingMask: Two byte encoded Numeric (0x00)
NodeId Identifier Numeric: 8
В Ignition
SessionId: NodeId
NodeId EncodingMask: Numeric of arbitrary length (0x02)
NodeId Namespace Id: 1337
NodeId Identifier Numeric: 7
AuthenticationToken: NodeId
NodeId EncodingMask: Numeric of arbitrary length (0x02)
NodeId Namespace Id: 1337
NodeId Identifier Numeric: 8
Параметр Namespace в OPC UA OpenSCADA отсутствует. Про этот параметр
The NodeId is a builtin DataType. However, there is a structure behind this DataType as described in Fig. 2.35. The first part of the NodeId is the NamespaceIndex, followed by an be a numeric value, a GUID, a string, or an opaque value (byte string). Together with the NamespaceIndex it uniquely identifies a Node in an OPC UA server.
И подробнее в книге http://books.google.ru/books?id=de9uLdXKj1IC&printsec=frontcover&hl=ru&source=gbs_ge_summary_r&cad=0#v=onepage&q=Specific%20Built-in%20DataTypes&f=false
[Повідомлення редагувалось 3 раз(ів), останній раз 04.03.2014 в 14:37.]
|
Повідомлення створено: 04. 03. 2014 [19:38]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"rxs5" wrote:
Параметр Namespace в OPC UA OpenSCADA отсутствует.
Да, отсутствует. Точнее он нулевой, а для NodeId используется первый, простейший тип с нулевым NS и идентификатором от 0 до 255.
"rxs5" wrote:
Про этот параметр
Я в курсе и использованный вариант "0" корректен.
Но добавил NS=100 для проверки.
P.S. Судя по дампу, Genesis64 таким поведением плодит кучу сеансов, не закрывая их. Погляжу на предмет закрытия их по таймауту.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 05. 03. 2014 [12:35]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
"roman" wrote:
"rxs5" wrote:
Про этот параметр
Я в курсе и использованный вариант "0" корректен.
Но добавил NS=100 для проверки.
P.S. Судя по дампу, Genesis64 таким поведением плодит кучу сеансов, не закрывая их. Погляжу на предмет закрытия их по таймауту.
Я хотел 2-ю часть написать после ответа про Namespace.
Там еще есть отличия: в Genesis64 только 1 readrequest/readresponse c OpenSCADA OPC UA, а в других OPC UA серверах (ignition и unified automation) 3 readrequest/readresponse после чего в них идет browserequest/browseresponse. А вот при подключении Genesis64 к OpenSCADA OPC UA нет browserequest/browseresponse. Думаю это происходит из-за того, что клиент Genesis64 не собрал достаточно данных, и потому вышел на session id и node id в которых везде есть namespace, кроме OpenSCADA OPC UA.
И да, действительно не происходит закрытия канала при общении Genesis64 c OpenSCADA OPC UA - после единственного readrequest/readresponse идет обмен поTCP и потом снова Hello. Думаю, что для клиента Genesis64 что-то не так прошло при обмене (нет 2, 3 readrequest/readresponse и других пакетов) и он делает запрос снова.
Проверю 2061 немного позже и напишу результат.
[Повідомлення редагувалось 1 раз(ів), останній раз 05.03.2014 в 12:40.]
|
Повідомлення створено: 05. 03. 2014 [16:37]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
"rxs5" wrote:
Проверю 2061 немного позже и напишу результат.
Проверил. Не помогло. Как и раньше только 1 readrequest/readresponse c OpenSCADA OPC UA и нет browserequest/browseresponse.
Хотя, увидел Namespace только в SessionId: NodeId, а в AuthenticationToken: NodeId он так и не появился.
И еще, может NodeId Namespace Id это не случайное значение, а от чего-то зависит ?
Новый дамп во вложении.
[Повідомлення редагувалось 1 раз(ів), останній раз 05.03.2014 в 16:37.]
Вкладений файл
|
Повідомлення створено: 05. 03. 2014 [17:21]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"rxs5" wrote:
Хотя, увидел Namespace только в SessionId: NodeId, а в AuthenticationToken: NodeId он так и не появился.
Ну так, о AuthenticationToken речи не шло. Кроме того NS в нём отличается, в примерах.
"rxs5" wrote:
И еще, может NodeId Namespace Id это не случайное значение, а от чего-то зависит ?
Не встречал об этом никакой информации и использовал по назначению, только для выделения узлов подсистемы DAQ.
Кроме того проблема только с Genesis.
Может он чего-то особого от сертификата ожидает и тупо про это молчит. Попробуйте от него консоли добиться и нормальных сообщений.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 05. 03. 2014 [18:12]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
"roman" wrote:
"rxs5" wrote:
Хотя, увидел Namespace только в SessionId: NodeId, а в AuthenticationToken: NodeId он так и не появился.
Ну так, о AuthenticationToken речи не шло. Кроме того NS в нём отличается, в примерах.
Как не шло речи, если в примерах они указаны были ? И да, отличаются, что может подтверждать, что они не просто так указываются, а с чем-то связаны.
|
Повідомлення створено: 05. 03. 2014 [19:11]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
Нашел в логах Genesis64 ошибку
<record level="800" timestamp="2014-03-05T16:52:54.859" processID="6532" threadID="86" file="Unknown" lineNo="0" SeqNo="919666" colNo="0" processName="C:\Program Files\ICONICS\GENESIS64\Components\IcoFwxServer.exe" threadName="Session Worker: opc.tcp://192.168.195.97:4848 - [None:None]" appDomainID="50081034" appDomainName="IcoFwxServer.exe" assemblyName="IcoUaClient, Version=10.80.118.0, Culture=neutral, PublicKeyToken=58aa7495915e8ed4" assemblyCodebase="file:///c:/program files/ICONICS/genesis64/components/IcoUaClient.DLL" namespace="Ico.Fwx.Ua.Client" class="UaClientSession" method="a(String A_0, PasswordCache A_1, Boolean A_2, String& A_3)">
<message>Cannot open a session with opc.tcp://192.168.195.97:4848 - [None:None], The first namespace in the table must be the OPC-UA namespace.</message>
</record>
<record level="800" timestamp="2014-03-05T16:52:54.860" processID="6532" threadID="86" file="Unknown" lineNo="0" SeqNo="920493" colNo="0" processName="C:\Program Files\ICONICS\GENESIS64\Components\IcoFwxServer.exe" threadName="Session Worker: opc.tcp://192.168.195.97:4848 - [None:None]" appDomainID="50081034" appDomainName="IcoFwxServer.exe" assemblyName="IcoUaClient, Version=10.80.118.0, Culture=neutral, PublicKeyToken=58aa7495915e8ed4" assemblyCodebase="file:///c:/program files/ICONICS/genesis64/components/IcoUaClient.DLL" namespace="Ico.Fwx.Ua.Client" class="UaClientSession" method="a(String A_0, PasswordCache A_1, Boolean A_2, String& A_3)">
<message>ArgumentException : The first namespace in the table must be the OPC-UA namespace.</message>
<details>
<exceptionStackTrace>System.ArgumentException
в Opc.Ua.NamespaceTable.Update(IEnumerable`1 namespaceUris)
в Opc.Ua.Client.Session.FetchNamespaceTables()
в Opc.Ua.Client.Session.Open(String sessionName, UInt32 sessionTimeout, IUserIdentity identity, IList`1 preferredLocales)
в Ico.Fwx.Ua.Client.UaClientSession.a(String A_0, PasswordCache A_1, Boolean A_2, String& A_3)
</exceptionStackTrace>
<stackTrace> в Ico.Fwx.Ua.Client.UaClientSession.a(String A_0, PasswordCache A_1, Boolean A_2, String& A_3)
в Ico.Fwx.Ua.Client.UaClientSession.a(String A_0, PasswordCache A_1)
в Ico.Fwx.Ua.Client.UaClientSession.f(String serverUrl)
в 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)
</stackTrace>
</details>
</record>
|
Повідомлення створено: 05. 03. 2014 [21:56]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"rxs5" wrote:
И да, отличаются, что может подтверждать, что они не просто так указываются, а с чем-то связаны.
Ничто это не подтверждает, поскольку ни с чем не связано, и проблемы только в Genesis. Или указывайте с чем связано!
Добавил NS 100 для AuthenticationToken.
"rxs5" wrote:
Cannot open a session with opc.tcp://192.168.195.97:4848 - [None:None], The first namespace in the table must be the OPC-UA namespace.
И о чём это говорит, разве только о проблемах с таблицей NS у клиента.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 05. 03. 2014 [23:42]
|
rxs5
Дмитрий Лыков
In tech support
Автор теми
Зареєстрован(а) с: 06.11.2013
Повідомлення: 205
|
"roman" wrote:
Ничто это не подтверждает, поскольку ни с чем не связано, и проблемы только в Genesis. Или указывайте с чем связано!
Добавил NS 100 для AuthenticationToken.
Не помогло для 2063. Думаю что добавление NS 100 случайным образом и не должно было помочь. Слишком уж просто все было бы. Вряд ли проблемы в серт. клиенте, который также работает с серт. серверами. Я могу предположить, что он клиент Genesis64 работает более строго, чем остальные клиенты.
"roman" wrote:
И о чём это говорит, разве только о проблемах с таблицей NS у клиента.
А таблицу NS клиент строит не получая ли ее от сервера ? Почему с другими серверами нет проблемы с таблицей NS ? Может как раз потому, что у других серверов эти NS присутствуют и в нужном синтаксисе и содержании ?
Добавил скриншот полного лога как появляется ошибка и весь лог.
Вкладений файл
|
Повідомлення створено: 06. 03. 2014 [12:08]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"rxs5" wrote:
"roman" wrote:
Ничто это не подтверждает, поскольку ни с чем не связано, и проблемы только в Genesis. Или указывайте с чем связано!
Добавил NS 100 для AuthenticationToken.
Не помогло для 2063. Думаю что добавление NS 100 случайным образом и не должно было помочь. Слишком уж просто все было бы. Вряд ли проблемы в серт. клиенте, который также работает с серт. серверами. Я могу предположить, что он клиент Genesis64 работает более строго, чем остальные клиенты.
Почитав спецификацию увидел там ссылку индексов NS на список NameSpaces в параметре 2055.
Поглядев на дамп с сервером UA увидел, что связь прослеживается, поскольку значения NS не превышает 5, размерности списка NameSpace.
Однако в случае с Ignition такой связи нет, тут ещё вечером погляжу на список NS.
Собственно в OpenSCADA добавил NS3 для DAQ узлов OpenSCADA, а для sessionId и authenticationToken установил NS в 1 и 0, как в UA-Server.
Проверяйте!
Learn, learn and learn better than work, work and work.
|
|
|