Этот раздел иллюстрирует основные шаги для создания приложения OPC Toolbox™ Data Access путем визуализации сигналов треугольной волны и пилозубой волны, предоставляемых Matrikon™ OPC Simulation Server. Приложение регистрирует данные в памяти и строит графики этих данных, выделяя неопределенные или плохие точки данных. Визуализируя данные, вы можете более четко увидеть отношения между сигналами.
Примечание
Чтобы запустить пример кода в следующих шагах, вам нужен Matrikon OPC Simulation Server на локальной машине. Для получения дополнительной информации об установке см. раздел Установка OPC DA или HDA Simulation Server для OPC Classic Examples. Код требует лишь незначительных изменений для работы с другими серверами.
На этом шаге вы получаете две части информации, которую тулбокс должен уникально идентифицировать сервер OPC Data Access, к которому вы хотите подключиться. Эта информация используется при создании объекта OPC Data Access Client (opcda
объект клиента), описанный в шаге 2: Создание объекта клиента доступа к OPC Data.
Первой информацией является имя хоста серверного компьютера. Имя хоста (описательное имя типа "PlantServer
"или IP-адрес, например 192.168.16.32
) определяет компьютер в сети и используется протоколами OPC Data Access для определения доступных серверов OPC на этом компьютере и для связи с компьютером для установления соединения с сервером. В любом приложении OPC Toolbox необходимо знать имя Сервера OPC узла, чтобы можно было установить соединение с этим узлом. Сетевой администратор может предоставить список имен узлов, предоставляющих серверы OPC в сети. В этом примере вы будете использовать localhost
как имя узла, поскольку вы будете подключаться к серверу OPC на том же компьютере, что и клиент.
Второй раздел информации является идентификатором сервера OPC. Каждый Сервер OPC на конкретном узле идентифицируется уникальным идентификатором сервера (также называемым идентификатором программы или ProgID), который выделяется этому серверу при установке. Идентификатор сервера является текстовым вектором символов, обычно содержащим периоды.
Несмотря на то, что сетевой администратор может предоставить список идентификаторов серверов для определенного хоста, можно запросить у хоста все доступные серверы OPC. Обнаружение доступных серверов доступа к данным обсуждает, как запросить хосты из командной строки.
Используйте opcserverinfo
функция для создания запроса из командной строки.
hostInfo = opcserverinfo('localhost')
hostInfo = Host: 'localhost' ServerID: {1x3 cell} ServerDescription: {1x3 cell} OPCSpecification: {'DA2' 'DA2' 'DA2'} ObjectConstructor: {1x3 cell}
Изучение возвращенной структуры более подробно предоставляет идентификаторы серверов каждого Сервера OPC.
allServers = hostInfo.ServerID'
allServers = 'Matrikon.OPC.Simulation.1' 'ICONICS.Simulator.1' 'Softing.OPCToolboxDemo_ServerDA.1'
После определения имени хоста и идентификатора сервера OPC для подключения, можно создать opcda
объект клиента. Клиент контролирует состояние подключения к серверу и сохраняет любые события, происходящие с этого сервера (такие как уведомление об изменении состояния данных, которое называется событием изменения данных) в журнале событий. The opcda
объект клиента также содержит все объекты группы доступа к данным, созданные на клиенте. Для получения дополнительной информации об иерархии объектов OPC Toolbox смотрите Иерархию объектов тулбокс для стандарта доступа к данным.
Используйте opcda
функция для определения имени хоста и идентификатора сервера.
da = opcda('localhost','Matrikon.OPC.Simulation.1')
da = OPC Data Access Object: localhost/Matrikon.OPC.Simulation.1 Server Parameters Host: localhost ServerID: Matrikon.OPC.Simulation.1 Status: disconnected Object Parameters Group: 0-by-1 dagroup object
Дополнительные сведения о создании клиентов см. в разделе Создание объектов доступа к данным OPC Toolbox.
Объекты клиента Доступ не подключаются автоматически к серверу при создании. Это позволяет вам полностью настроить иерархию объектов OPC Toolbox (клиент с группами и элементами) перед подключением к серверу или даже без присутствия сервера.
Используйте connect
функция для соединения opcda
объект клиента для сервера в командной строке.
connect(da)
Вы создаете объекты группы доступа к данным (dagroup
объекты) для управления и хранения набора объектов Data Access Item (daitem
объекты). A dagroup
объект управляет тем, как часто сервер должен уведомлять вас о любых изменениях в значениях элементов, управляет статусом активации элементов этой группы, определяет, запускает и останавливает регистрацию задач.
Сами по себе, dagroup
s объекта
не полезны. После добавления элементов в группу можно управлять этими элементами, считывать значения с сервера для всех элементов группы и регистрировать данные для этих элементов, используя dagroup
объект. На шаге 5 вы просматриваете доступные теги на сервере OPC. Шаг 6 включает добавление элементов, связанных с этими тегами, в dagroup
объект.
Используйте addgroup
функция для создания dagroup
объекты из командной строки. Этот пример добавляет группу к opcda
объект клиента уже создан.
grp = addgroup(da)
grp = OPC Group Object: Group0 Object Parameters GroupType: private Item: 0-by-1 daitem object Parent: localhost/Matrikon.OPC.Simulation.1 UpdateRate: 0.5 DeadbandPercent: 0 Object Status Active: on Subscription: on Logging: off LoggingMode: memory
Дополнительные сведения о создании Групповых объектов из командной строки см. в разделе «Создание групповых объектов доступа к данным».
Все серверы OPC обеспечивают доступ к серверным элементам через пространство имен сервера. Пространство имен является упорядоченным списком серверных элементов, обычно расположенным в иерархическом формате для быстрого доступа. Серверный элемент (также известная как метка) является точкой измерения или данных на сервере, обеспечивая информацию от устройства (такого как датчик давления) или от другого программного пакета, который поставляет данные через OPC Data Доступы (такого как пакет SCADA).
Примечание
Если вы знаете идентификаторы позиций интересующей вас серверных элементов, можно пропустить этот раздел и перейти непосредственно к шагу 6 «Добавление элементов OPC Data доступа к группе». В этом примере предположим, что вы не знаете точных идентификаторов элементов, хотя вы знаете, что хотите записать информацию из Пилозубых волн и Треугольных волн, предоставленных Matrikon Simulation Server.
Из командной строки можно «просмотреть» пространство имен серверов, используя serveritems
функция. Необходимо предоставить подключенное opcda
объект клиента к serveritems
функция и необязательный аргумент в виде вектора символов для ограничения возвращаемых результатов. Вектор символов может содержать подстановочные символы (*
). Пример использования serveritems
является следующим.
sawtoothItems = serveritems(da,'*Saw*')
sawtoothItems = 'Saw-toothed Waves.' 'Saw-toothed Waves.Int1' 'Saw-toothed Waves.Int2' 'Saw-toothed Waves.Int4' 'Saw-toothed Waves.Money' 'Saw-toothed Waves.Real4' 'Saw-toothed Waves.Real8' 'Saw-toothed Waves.UInt1' 'Saw-toothed Waves.UInt2' 'Saw-toothed Waves.UInt4'
Команда для получения свойств серверного элемента serveritemprops
. См. serveritemprops
страница с описанием для получения дополнительной информации.
Теперь, когда вы нашли серверные элементы в пространстве имен, можно добавить объекты Доступ Item (daitem
объект) для этих тегов в dagroup
объект, созданный вами на шаге 4. A daitem
объект является ссылкой на тег в пространстве имен, с указанием значения тег и дополнительной информации по этому элементу, такому как канонический тип данных.
A daitem
объект первоначально не содержит информации о серверном элементе, которую он представляет. The daitem
объект обновляется только тогда, когда сервер уведомляет клиент об изменении статуса этого элемента (уведомление называется событием изменения данных) или клиент специально читает значение с сервера.
Каждый раз, когда вы считываете или получаете данные от сервера через событие изменения данных, сервер предоставляет вам обновленные значения Value, Quality и Timestamp.
Используйте additem
функция для добавления элементов в dagroup
объект. Вам нужно пройти dagroup
объект, к которому будут добавлены элементы, и полный идентификатор элемента в виде вектора символов. Идентификаторы элементов были найдены с помощью serveritems
функция на шаге 5.
itm1 = additem(grp,'Saw-toothed Waves.Real8')
itm1 = OPC Item Object: Saw-toothed Waves.Real8 Object Parameters Parent: Group0 AccessRights: read/write DataType: double Object Status Active: on Data: Value: Quality: Timestamp:
В группу можно добавить несколько элементов в одном additem
вызов, путем определения нескольких ItemID
значения в массиве ячеек.
itms = additem(grp,{'Triangle Waves.Real8', ... 'Triangle Waves.UInt2'})
itms = OPC Item Object Array: Index: DataType: Active: ItemID: 1 double on Triangle Waves.Real8 2 uint16 on Triangle Waves.UInt2
Дополнительные сведения о добавлении элементов в группы см. в разделе Создание объектов элемента доступа к данным.
Групповой объект позволяет вам читать и записывать значения из всех элементов группы и записывать данные в память и/или диск.
Значения Value, Quality и Timestamp элементов постоянно обновляются, пока у вас включена подписка. Подписка определяет, отправляются ли события изменения данных сервером OPC в тулбокс для элементов, значения которых изменяются. UpdateRate
и DeadbandPercent
задайте, как часто элементы должны запрашиваться для нового значения и отправляются ли все изменения значений или только изменения заданной величины в тулбокс. Для получения дополнительной информации о подписке смотрите События изменения данных и Подписка.
Наблюдая данные в течение некоторого времени, вы увидите, что три сигнала, по-видимому, имеют одинаковые области значений. Это указывает, что вы можете визуализировать данные в тех же осях, когда вы постройте график на шаге 10.
На шаге 9 вы сконфигурируете задачу регистрации и данные журнала для этих трех элементов.
Используйте read
функция с групповым объектом в качестве первого параметра для чтения значений из всех элементов группы. read
функция подробно описана в Read and Запись данных.
Теперь, когда ваш dagroup
объект содержит элементы, используйте группу для управления взаимодействием этих элементов с сервером. На этом шаге настройте группу для регистрации данных из этих элементов в течение 2 минут с интервалом 0 2 секунды. Можно использовать записанные данные на шаге 9, чтобы визуализировать сигналы, произведенные Matrikon Simulation Server.
OPC Data Access Servers обеспечивают доступ только к «живым» данным (последнему известному значению каждого серверного элемента в пространстве имен). Во многих случаях одно значение сигнала не полезно, и временные ряды, содержащий значение сигналов в течение периода времени, полезны при анализе этого сигнала или набора сигналов. Программное обеспечение OPC Toolbox™ позволяет вам записывать все элементы группы на диск или память, и извлекать эти данные для анализа в MATLAB®.
Сеанс логгирования конфигурируется с помощью dagroup
объект. Изменяя свойства, связанные с логгированием, вы контролируете, как часто данные должны отправляться с сервера на клиент, сколько записей группа должна записывать в журнал и где записывать данные в журнал.
Используйте set
функция для установки свойств объекта OPC Toolbox. В командной строке можно вычислить количество записей, необходимых для задачи регистрации.
logDuration = 2*60; logRate = 0.2; numRecords = ceil(logDuration./logRate); grp.UpdateRate = logRate; grp.RecordsToAcquire = numRecords;
Теперь, когда вы сконфигурировали dagroup
Свойства логгирования объекта, ваш объект может записать необходимый объем данных в память.
Используйте start
функция с необходимой dagroup
объект для запуска задачи ведения журнала.
start(grp)
Задача ведения журнала выполняется в фоновом режиме. Можно продолжить работу в MATLAB, пока задача ведения журнала находится в операции. Задача регистрации не зависит от других расчетов, происходящих в MATLAB, и обработка MATLAB не блокируется задачей регистрации. Можно дать MATLAB указание дождаться завершения задачи ведения журнала, используя wait
функция.
wait(grp)
После концов логгирования передайте данные из двигателя тулбокса в рабочее пространство MATLAB с помощью getdata
функция, которая обеспечивает два типа выхода, в зависимости от ее 'datatype'
аргумент. Для получения дополнительной информации смотрите getdata
страница с описанием. В этом случае вы извлекаете данные в отдельные массивы и строите график данных.
Этот пример создает рисунок:
[logIDs, logVal, logQual, logTime, logEvtTime] = ... getdata(grp,'double'); plot(logTime,logVal) axis tight datetick('x','keeplimits') legend(logIDs)
Заметьте, как три сигнала кажутся почти полностью не связанными, за исключением периода двух Real8
сигналы. Пиковые значения для каждого сигнала различны, как и периоды для двух Triangle Waves
сигналы. Визуализируя данные, можно получить некоторое представление о том, как Matrikon OPC Simulation Server моделирует каждый тег. В этом случае очевидно, что Real8
и UInt2
сигналы имеют другой период.
После завершения задачи OPC необходимо удалить объекты задачи из памяти и очистить рабочее пространство MATLAB от переменных, связанных с этими объектами.
При использовании объектов OPC Toolbox в командной строке MATLAB или из собственных функций необходимо удалить их из движка OPC Toolbox с помощью delete
функция. Обратите внимание, что при удалении объекта тулбокса дочерние элементы этого объекта автоматически удаляются из модуля тулбокса. В этом примере нет необходимости удалять grp
и itm
так как они дети da
.
disconnect(da) delete(da) clear da grp itm close(gcf)
Управление объектами OPC Toolbox подробно рассмотрено в разделе «Удаление объектов».