Работа с отформатированными данными структуры

Когда структуры используются

Программное обеспечение OPC Toolbox™ использует структуры, чтобы возвратить данные из Сервера OPC для следующих операций:

  • Синхронные операции чтения, выполняемое использование read функция.

  • Асинхронные операции чтения, выполняемое использование readasync функция.

  • Данные изменяют события, сгенерированные Сервером OPC для всех активных, подписанных групп или через a refresh вызов функции.

  • Получение записанных данных в формате структуры из памяти с помощью getdata или peekdata функции.

Во всех случаях структура возвращенных данных является тем же самым. В этом разделе описываются ту структуру, и как можно использовать данные о структуре, чтобы изучить операции OPC.

Выполните операцию чтения на нескольких элементах

Чтобы проиллюстрировать, как использовать отформатированные данные структуры, следующий пример читает значения из трех элементов на Сервере Симуляции Matrikon™ OPC.

Шаг 1: создайте групповые объекты OPC Toolbox

Этот пример создает иерархию объектов OPC Toolbox для Сервера Симуляции Matrikon. Чтобы запустить этот пример в вашей системе, у вас должен быть установленный Сервер Симуляции Matrikon. В качестве альтернативы можно заменить значения, используемые в создании объектов со значениями для сервера, к которому можно получить доступ.

da = opcda('localhost','Matrikon.OPC.Simulation.1');
connect(da);
grp = addgroup(da,'StructExample');
itm1 = additem(grp,'Random.Real8');
itm2 = additem(grp,'Saw-toothed Waves.UInt2');
itm3 = additem(grp,'Random.Boolean');

Шаг 2: Чтение данных

Этот пример читает значения сначала из устройства и затем из кэша сервера. Данные возвращены в формате структуры.

r1 = read(grp, 'device');
r2 = read(grp);

Шаг 3: интерпретируйте данные

Данные возвращены в формате структуры. Чтобы интерпретировать данные, необходимо извлечь релевантную информацию из структур. В этом примере вы сравниваете Значение, Качество и TimeStamp, чтобы подтвердить, что они - то же самое для обеих операций чтения.

disp({r1.ItemID;r1.Value;r2.Value})
disp({r1.ItemID;r1.Quality;r2.Quality})
disp({r1.ItemID;r1.TimeStamp;r2.TimeStamp})

Шаг 4: считайте больше данных

Путем чтения сначала из кэша и затем из устройства, можно сравнить возвращенные данные, чтобы видеть, произошло ли какое-либо изменение. В этом случае данные не будут тем же самым.

r3 = read(grp);
r4 = read(grp, `device');
disp({r3.ItemID;r3.Value;r4.Value})

Шаг 5: Очистка

Всегда удаляйте объекты тулбокса из памяти и переменные, которые ссылаются на них, когда вам больше не нужны они.

disconnect(da)
delete(da)
clear da grp itm1 itm2 itm3

Интерпретируйте отформатированные данные структуры

Все данные возвращены read, opcread, и getdata функции, и включенный в данные изменяют и читают асинхронные структуры события, переданные функциям обратного вызова, имеет тот же базовый формат. Форматом лучше всего объясняют начиная с выхода от read функция, которая обеспечивает основу отформатированных данных структуры.

Отформатированные данные структуры для одного элемента

Когда вы выполняете read функция с одним daitem объект, следующая структура возвращена.

rSingle = read(itm1)

rSingle = 

       ItemID: 'Random.Real8'
        Value: 1.0440e+004
      Quality: 'Good: Non-specific'
    TimeStamp: [2004 3 10 14 46 9.5310]
        Error: ''

Все отформатированные данные структуры для элемента будут содержать ItemIDЗначение, Quality, и TimeStamp поля .

Примечание

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

Отформатированные данные структуры для нескольких элементов

Если вы выполняете read функция с групповым объектом, содержащим больше чем один элемент, массив структур возвращен.

rGroup = read(grp)

rGroup = 

3x1 struct array with fields:
    ItemID
    Value
    Quality
    TimeStamp
    Error

В этом случае массив структур содержит один элемент для каждого элемента, который был считан. ItemID поле в каждом элементе идентифицирует элемент, сопоставленный с тем элементом массива структур.

Примечание

Когда вы выполняете асинхронные операции чтения, и для событий изменения данных, порядок элементов в массиве структур определяется Сервером OPC. Порядок не может быть эквивалентным, порядок элементов передал функции чтения.

Отформатированные данные структуры для Событий

Структуры события содержат информацию в частности о событии, а также данных, сопоставленных с тем событием.

Следующий пример отображает содержимое чтения асинхронное событие.

cleareventlog(da);
tid = readasync(itm);
% Wait for the read async event to occur
pause(1);
event = get(da, 'EventLog')

event = 

    Type: 'ReadAsync'
    Data: [1x1 struct]

Поле данных структуры события содержит

event.Data

ans = 

    LocalEventTime: [2004 3 11 10 59 57.6710]
           TransID: 4
         GroupName: 'StructExample'
             Items: [1x1 struct]

Поле Items Структуры данных содержит

event.Data.Items

ans = 

       ItemID: 'Random.Real8'
        Value: 9.7471e+003
      Quality: 'Good: Non-specific'
    TimeStamp: [2004 3 11 10 59 57.6710]

Из примера вы видите, что структура события встраивает отформатированные данные структуры в Items поле Data структура сопоставлена с событием. Дополнительные поля Data структура предоставляет информацию о событии, таком как источник события, время, событие было получено тулбоксом и ID транзакции того события.

Отформатированные данные структуры для задачи логгирования

Данные логов программного обеспечения OPC Toolbox к памяти и/или диску с помощью данных изменяют событие. Когда вы возвращаете отформатированные данные структуры для задачи логгирования с помощью opcread или getdata функция, возвращенный массив структур содержит информацию о событии изменения данных, расположенную в массиве структур. Каждый элемент массива структур содержит запись или событие изменения данных. Массив структур имеет LocalEventTime и Items поля из данных изменяют событие. Items поле является в свою очередь массивом структур, содержащим поля ItemIDЗначение, Quality, и TimeStamp.

Когда использовать отформатированные данные структуры

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

Для задачи логгирования необходимо использовать отформатированные данные структуры, когда вы интересуетесь

  • “Необработанная” информация о событии возвращена Сервером OPC. Необработанная информация может помочь в диагностировании настройки Сервера OPC или клиентской настройки. Например, если вы видите значение данных, которое часто не изменяется, все же вы знаете, что устройство должно изменяться часто, можно исследовать отформатированные данные структуры, чтобы определить, когда Сервер OPC уведомляет клиенты изменения в Значении, Качестве и/или TimeStamp.

  • Время выполнения, а не данные временных рядов. Если необходимо отследить, когда оператор изменил состояние переключателя, отформатированные данные структуры предоставляют вам основанные на событии данные, а не данные временных рядов.

Для других задач, которые включают данные временных рядов, такие как визуализация данных, анализ, моделирование и операции оптимизации, необходимо рассмотреть использование выходного формата массива ячеек или числового массива для getdata и opcread. Для получения дополнительной информации о форматах массивов смотрите Отформатированные данные Массивов.

Преобразуйте отформатированные данные структуры, чтобы выстроить формат

Если вы получаете данные из памяти или диска в формате структуры, можно преобразовать получившуюся структуру в формат массивов с помощью opcstruct2array функция. Вы передаете массив структур функции, и это возвратит ItemIDЗначение, Quality, TimeStamp, и EventTime информация содержится в том массиве структур.

opcstruct2array функция особенно полезна, когда это необходимо, чтобы визуализировать или анализировать данные временных рядов, не удаляя его из памяти. Поскольку peekdata только возвращает массивы структур (из-за факторов скорости), можно использовать opcstruct2array преобразовывать содержимое данных о структуре в отдельные массивы в целях визуализации и анализа.

Примечание

Необходимо всегда получать данные в формате числового массива или массива ячеек каждый раз, когда вы только хотите управлять данными временных рядов. Несмотря на то, что opcstruct2array функция была спроектирована, чтобы использовать как можно меньше памяти, преобразование в MATLAB все еще требует пространства памяти и для массива структур и для полученных массивов.

Для примера использования opcstruct2array, смотрите Запись Функция обратного вызова.