exponenta event banner

Просмотрите пространство имен сервера UA OPC

Этот пример показывает вам, как найти серверы Объединенной автоматизации (UA) OPC, соединиться с ними и просмотреть их пространство имен, чтобы найти узлы интересным.

Структура серверов UA OPC доступные данные через одно или несколько пространств имен, состоя из нескольких связанных Узлов. OPC Toolbox представляет два типа Узлов UA OPC: Объектные узлы, которые помогают организовать данные и Узлы переменной, которые хранят данные в их свойстве Value. Узлы переменных могут содержать другие Узлы переменной как дочерние элементы. Каждое пространство имен имеет Индекс, однозначно определяющий то пространство имен.

Все Серверы OPC должны опубликовать узел Сервера, содержа информацию о сервере UA OPC включая возможности того сервера, доступную функциональность сервера и другой диагностической информации. Узел Сервера должен существовать как индекс 0 пространства имен, названный 'Сервером'. Этот пример исследует узел ServerCapabilities, содержавшийся в узле Сервера примера сервер UA OPC.

ПРЕДПОСЫЛКИ:

Исследуйте доступные серверы UA OPC на хосте

Все серверы UA OPC указывают с Локальным Сервисом Открытия на свой хост. Локальный сервис открытия (LDS) публикует все доступные серверы, а также их уникальный "адрес" (или URL) для соединения с тем сервером.

Можно обнаружить серверы UA OPC, доступные на хосте с помощью opcuaserverinfo. Этот пример использует локальный хост.

serverList = opcuaserverinfo('localhost')
serverList = 

1×2 OPC UA ServerInfo array:
    index              Description                 Hostname     Port 
    -----  -----------------------------------  --------------  -----
      1    UA Sample Server                     TMOPTI02WIN764  51210
      2    Quickstart Historical Access Server  TMOPTI02WIN764  62550

Список серверов показывает 3 доступных сервера UA OPC и номер порта, на котором можно соединиться с сервером. Можно найти определенный сервер путем поиска Описания серверов. Найдите сервер, содержащий слово "Sample".

sampleServerInfo = findDescription(serverList, 'Sample')
sampleServerInfo = 

OPC UA ServerInfo 'UA Sample Server':

   Connection Information
    Hostname: 'TMOPTI02WIN764'
        Port: 51210

Создайте клиент UA OPC и подключение к серверу

В порядке просмотреть пространство имен сервера, необходимо создать Клиент UA OPC и подключение что клиент к серверу. Можно создать клиент непосредственно из результатов opcuaserverinfo.

uaClient = opcua(sampleServerInfo);

Первоначально клиент отключается от сервера и показывает краткий обзор клиентских свойств.

disp(uaClient)
OPC UA Client UA Sample Server:
                     Hostname: TMOPTI02WIN764
                         Port: 51210
                      Timeout: 10

                       Status: Disconnected

Вы знаете, что клиент отключается путем запроса свойства Status или вызывания функции isConnected.

disp(uaClient.Status)

isConnected(uaClient)
Disconnected

ans =

   0

Если вы соединяете клиент с сервером, дополнительные свойства с сервера отображены.

connect(uaClient)
disp(uaClient)
OPC UA Client UA Sample Server:
                     Hostname: TMOPTI02WIN764
                         Port: 51210
                      Timeout: 10

                       Status: Connected

                  ServerState: Running

                MinSampleRate: 0 sec
          MaxHistoryReadNodes: 0
      MaxHistoryValuesPerNode: 0
                 MaxReadNodes: 0
                MaxWriteNodes: 0

Отображение показывает, что клиентское Состояние теперь 'Соединяется', сервер находится в 'Рабочем' состоянии, и клиент хранит информацию относительно пределов сервера. В этом случае все пределы обнуляются, указывая, что нет никакого предела всего сервера для частот дискретизации, максимальных узлов или значений для операций чтения на Демонстрационном Сервере.

Просмотр пространства имен сервера

Пространство имен сервера инкрементно получено непосредственно в Клиентскую переменную UA OPC в MATLAB. Вы получаете доступ к верхнему уровню пространства имен сервера с помощью свойства Namespace. Это свойство хранит Узлы UA OPC. Каждый узел может содержать один или несколько Дочерних элементов, которые являются самостоятельно узлами.

topNodes = uaClient.Namespace
topNodes = 

1x4 OPC UA Node array:
    index      Name       NsInd  Identifier  NodeType  Children
    -----  -------------  -----  ----------  --------  --------
      1    Server         0      2253        Object    10
      2    Data           2      10157       Object    3
      3    Boilers        4      1240        Object    2
      4    MemoryBuffers  7      1025        Object    2

Узел под названием 'Server' содержит 10 дочерних элементов.

Можно искать индексацию использующего пространства имен в Дочернее свойство доступных узлов. Например, чтобы найти узел ServerCapabilities, можно запросить Дочерние элементы узла Сервера.

serverChildren = topNodes(1).Children
serverChildren = 

1x10 OPC UA Node array:
    index         Name         NsInd  Identifier  NodeType  Children
    -----  ------------------  -----  ----------  --------  --------
      1    ServerArray         0      2254        Variable  0
      2    NamespaceArray      0      2255        Variable  0
      3    ServerStatus        0      2256        Variable  6
      4    ServiceLevel        0      2267        Variable  0
      5    Auditing            0      2994        Variable  0
      6    ServerCapabilities  0      2268        Object    14
      7    ServerDiagnostics   0      2274        Object    4
      8    VendorServerInfo    0      2295        Object    0
      9    ServerRedundancy    0      2296        Object    4
     10    Namespaces          0      11715       Object    0

Узел ServerCapabilities является шестым узлом в списке.

serverCapabilities = serverChildren(6)
serverCapabilities = 

OPC UA Node object:
                      Name: ServerCapabilities
               Description: Describes capabilities supported by the server.
            NamespaceIndex: 0
                Identifier: 2268
                  NodeType: Object

                    Parent: Server
                  Children: 14 nodes.

Поиск узлов в пространстве имен

Можно искать узлы от переменной Node, или из свойства Namespace непосредственно. Чтобы найти узел 'ServerCapabilities', не индексируя в свойство Namespace, используйте findNodeByName. Чтобы избежать поиска, находящего все экземпляры узлов, содержащих слово 'ServerCapabilities', вы используете параметр '-once'.

serverCapabilities = findNodeByName(topNodes, 'ServerCapabilities', '-once')
serverCapabilities = 

OPC UA Node object:
                      Name: ServerCapabilities
               Description: Describes capabilities supported by the server.
            NamespaceIndex: 0
                Identifier: 2268
                  NodeType: Object

                    Parent: Server
                  Children: 14 nodes.

Чтобы найти все узлы, содержащие слово 'Double' на Имя, запросите весь topNodes использование параметра '-partial'. Обратите внимание на то, что этот поиск загрузит целое пространство имен в MATLAB, так используйте этот метод поиска с осторожностью.

doubleNodes = findNodeByName(topNodes, 'Double', '-partial')
doubleNodes = 

1x13 OPC UA Node array:
    index     Name      NsInd  Identifier  NodeType  Children
    -----  -----------  -----  ----------  --------  --------
      1    Double       8      Double      Object    101
      2    DoubleValue  2      10226       Variable  0
      3    DoubleValue  2      10310       Variable  0
      4    DoubleValue  2      10394       Variable  0
      5    DoubleValue  2      10473       Variable  0
      6    DoubleValue  2      10596       Variable  1
      7    DoubleValue  2      10731       Variable  1
      8    DoubleValue  2      10854       Variable  0
      9    DoubleValue  2      10938       Variable  0
     10    DoubleValue  2      11022       Variable  0
     11    DoubleValue  2      11101       Variable  0
     12    DoubleValue  2      11224       Variable  1
     13    DoubleValue  2      11359       Variable  1

Понимание NodeType

Узлы имеют NodeType, который описывает, является ли тот узел просто организационным модулем (Объект NodeType) или содержит данные (Переменная NodeType). Переменный NodeTypes может содержать Дочерние элементы - NodeType Переменной не гарантирует, что узел не содержит Дочерних элементов. В этом примере doubleNodes содержит один Объектный узел и 12 Узлов переменной.

allNodeTypes = {doubleNodes.NodeType}
allNodeTypes = 

  Columns 1 through 5

    'Object'    'Variable'    'Variable'    'Variable'    'Variable'

  Columns 6 through 10

    'Variable'    'Variable'    'Variable'    'Variable'    'Variable'

  Columns 11 through 13

    'Variable'    'Variable'    'Variable'

Понимание переменной свойства NodeType

Узел переменной имеет дополнительные свойства, описывающие данные, хранимые в Узле переменной. Чтобы просмотреть эти свойства, отобразите Узел переменной.

doubleNodes(2)
ans = 

OPC UA Node object:
                      Name: DoubleValue
               Description: 
            NamespaceIndex: 2
                Identifier: 10226
                  NodeType: Variable

                    Parent: Scalar
                  Children: 0 nodes.

            ServerDataType: Double
        AccessLevelCurrent: read/write
        AccessLevelHistory: none
               Historizing: 0

Этот узел имеет ServerDataType 'Double', и позволяет читать и писать Текущего значения (свойство AccessLevelCurrent), но не поддерживает исторических данных, читая (AccessLevelHistory). Сервер не Гистоповышается этот узел, как свидетельствуется свойством Historizing.

Некоторые свойства, такие как ServerValueRank и ServerArrayDimensions не показывают в отображении узла, но можно запросить через соответствующее свойство. Смотрите справку на этих свойствах для получения дополнительной информации.

Построение узлов непосредственно

Узлы заданы исключительно их NamespaceIndex и их Идентификатором. Можно создать известный узел, не просматривая свойство Namespace с помощью функции opcuanode. Например, чтобы создать узел ServerCapabilities непосредственно можно использовать NamespaceIndex 0, и Идентификатор 2268 (все серверы UA OPC должны опубликовать узел ServerCapabilities с этим NamespaceIndex и Идентификатором).

capabilitiesNode = opcuanode(0, 2268, uaClient)
capabilitiesNode = 

OPC UA Node object:
                      Name: ServerCapabilities
               Description: Describes capabilities supported by the server.
            NamespaceIndex: 0
                Identifier: 2268
                  NodeType: Object

                  Children: 14 nodes.

Обратите внимание на то, что узлы, созданные с помощью opcuanode, не имеют никакого свойства Parent.

capabilitiesNode.Parent
ans = 

Empty OPC UA Node object.

Однако их Дочерние элементы автоматически получены, если узел сопоставлен со связанным Клиентом UA OPC.

capabilitiesNode.Children
ans = 

1x14 OPC UA Node array:
    index              Name              NsInd  Identifier  NodeType  Children
    -----  ----------------------------  -----  ----------  --------  --------
      1    ServerProfileArray            0      2269        Variable  0
      2    LocaleIdArray                 0      2271        Variable  0
      3    MinSupportedSampleRate        0      2272        Variable  0
      4    MaxBrowseContinuationPoints   0      2735        Variable  0
      5    MaxQueryContinuationPoints    0      2736        Variable  0
      6    MaxHistoryContinuationPoints  0      2737        Variable  0
      7    SoftwareCertificates          0      3704        Variable  0
      8    MaxArrayLength                0      11702       Variable  0
      9    MaxStringLength               0      11703       Variable  0
     10    OperationLimits               0      11704       Object    12
     11    ModellingRules                0      2996        Object    0
     12    AggregateFunctions            0      2997        Object    37
     13    HistoryServerCapabilities     0      11192       Object    15
     14    HistoryServerCapabilities     6      15820059    Object    15

Отключитесь от сервера

Когда вы закончили связываться с сервером, необходимо отключить клиент от сервера. Это также автоматически выполняется, когда клиентская переменная выходит из осциллографа в MATLAB.

disconnect(uaClient);