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

Этот пример показывает вам, как найти серверы Унифицированной архитектуры (UA) OPC, соединиться с ними и просмотреть их пространство имен, чтобы найти узлы интересным. Чтобы запустить этот пример в вашем сеансе работы с MATLAB, необходимо будет установить и запустить Сервер Симуляции UA Prosys OPC. Считайте раздел Getting Started документации OPC Toolbox для получения дополнительной информации.

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

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

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

ПРИМЕЧАНИЕ: Этот раздел этого примера требует, чтобы вы установили Локальный Сервис Открытия и сконфигурировали Сервер Симуляции UA Prosys OPC, чтобы указать с LDS. Инструкции для того, как сделать это, включены в раздел Getting Started документации OPC Toolbox.

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

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

serverList = opcuaserverinfo('localhost')
serverList = 

1×3 OPC UA ServerInfo array:
    index              Description                           Hostname               Port 
    -----  -----------------------------------  ----------------------------------  -----
      1    SimulationServer                     tmopti01win1064.dhcp.mathworks.com  53530
      2    UA Sample Server                     tmopti01win1064                     51210
      3    Quickstart Historical Access Server  tmopti01win1064                     62550

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

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

OPC UA ServerInfo 'SimulationServer':

   Connection Information
    Hostname: 'tmopti01win1064.dhcp.mathworks.com'
        Port: 53530

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

Для того, чтобы просмотреть пространство имен сервера, необходимо создать Клиент UA OPC и подключение что клиент к серверу. Если вы знаете имя узла и порт сервера UA OPC, вы могли бы просто создать Клиент UA OPC, использующий имя узла и аргументы port.

uaClient = opcua('localhost', 53530);

Если вы ранее обнаружили сервер с помощью opcuaserverinfo команда, можно создать клиент непосредственно из opcuaserverinfo результаты.

uaClient = opcua(sampleServerInfo)
uaClient = 

OPC UA Client SimulationServer:
                     Hostname: tmopti01win1064.dhcp.mathworks.com
                         Port: 53530
                      Timeout: 10

                       Status: Disconnected

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

status = uaClient.Status

isConnected(uaClient)
status =

    'Disconnected'


ans =

  logical

   0

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

connect(uaClient)
uaClient
uaClient = 

OPC UA Client SimulationServer:
                     Hostname: tmopti01win1064.dhcp.mathworks.com
                         Port: 53530
                      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 = 

1x6 OPC UA Node array:
    index           Name            NsInd        Identifier         NodeType  Children
    -----  -----------------------  -----  -----------------------  --------  --------
      1    Server                   0      2253                     Object    12
      2    MyObjects                2      MyObjectsFolder          Object    1
      3    StaticData               3      StaticData               Object    9
      4    NonUaNodeComplianceTest  4      NonUaNodeComplianceTest  Object    33
      5    Simulation               5      85/0:Simulation          Object    7
      6    MyBigNodeManager         6      MyBigNodeManager         Object    1000

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

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

serverChildren = topNodes(1).Children
serverChildren = 

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

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

serverCapabilities = serverChildren(2)
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 = 

1x6 OPC UA Node array:
    index          Name           NsInd       Identifier        NodeType  Children
    -----  ---------------------  -----  ---------------------  --------  --------
      1    Double                 4      Double                 Variable  0
      2    DoubleAnalogItemArray  3      DoubleAnalogItemArray  Variable  3
      3    DoubleAnalogItem       3      DoubleAnalogItem       Variable  3
      4    DoubleDataItem         3      DoubleDataItem         Variable  1
      5    DoubleArray            3      DoubleArray            Variable  0
      6    Double                 3      Double                 Variable  0

Понимание NodeType

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

allNodeTypes = {doubleNodes.NodeType}
allNodeTypes =

  1×6 cell array

  Columns 1 through 4

    {'Variable'}    {'Variable'}    {'Variable'}    {'Variable'}

  Columns 5 through 6

    {'Variable'}    {'Variable'}

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

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

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

doubleNodes(2)
ans = 

OPC UA Node object:
                      Name: DoubleAnalogItemArray
               Description: 
            NamespaceIndex: 3
                Identifier: DoubleAnalogItemArray
                  NodeType: Variable

                    Parent: AnalogItemArrays
                  Children: 3 nodes.

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

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

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

doubleNodes(2).ServerArrayDimensions
ans =

  uint32

   0

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

Узлы заданы исключительно их 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    ModellingRules                0      2996        Object    6
      2    AggregateFunctions            0      2997        Object    14
      3    HistoryServerCapabilities     0      11192       Object    15
      4    OperationLimits               0      11704       Object    12
      5    LocaleIdArray                 0      2271        Variable  0
      6    MinSupportedSampleRate        0      2272        Variable  0
      7    MaxQueryContinuationPoints    0      2736        Variable  0
      8    MaxByteStringLength           0      12911       Variable  0
      9    ServerProfileArray            0      2269        Variable  0
     10    MaxHistoryContinuationPoints  0      2737        Variable  0
     11    SoftwareCertificates          0      3704        Variable  0
     12    MaxStringLength               0      11703       Variable  0
     13    MaxBrowseContinuationPoints   0      2735        Variable  0
     14    MaxArrayLength                0      11702       Variable  0

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

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

disconnect(uaClient);