Журнал Сервера OPC данных

Как программное обеспечение OPC Toolbox регистрирует данные

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

Примечание

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

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

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

  • Logging takes place at the group level - При планировании задачи ведения журнала настройте группу только с элементами, которые необходимо записать. Включение большего количества элементов, чем вам нужно, только увеличит использование памяти и/или диска, и использование этих данных может оказаться более трудным из-за ненужных элементов в наборе данных.

  • Inactive items in a group will not be logged - Необходимо убедиться, что элементы, которые необходимо записать, активны при запуске сеанса логгирования. Вы управляете активным состоянием daitem объект с использованием Active свойство daitem объект.

  • Data change events (records) may not include all items - событие изменения данных содержит только элементы группы, которые изменили свое значение и/или состояние качества с момента последнего обновления. Следовательно, запись не гарантированно содержит каждый элемент данных. Это необходимо учитывать при планировании сеанса логгирования.

  • OPC logging tasks are not guaranteed to complete - поскольку события изменения данных происходят только тогда, когда элемент в группе изменяет состояние на сервере, можно запустить задачу ведения журнала, которая не будет завершена. Для примера, если элементы группы никогда не изменяются, событие изменения данных никогда не будет сгенерировано для этой группы. Следовательно, записи не будут регистрироваться.

  • Logged data is not guaranteed to be regularly sampled - событие изменения данных можно форсировать в любое время (см. Форсирование события изменения данных). Если вы делаете это во время задачи регистрации, события изменения данных могут происходить в нерегулярных шагах расчета. Кроме того, событие изменения данных может не содержать информацию для каждого элемента в группе. Следовательно, зарегистрированные Сервером OPC данные могут не возникнуть при регулярных шагах расчета.

Обзор задачи регистрации и представление того, как вышеуказанные точки влияют на сеанс логгирования, приведены в следующем разделе.

Обзор задачи ведения журнала

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

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

da = opcda('localhost','Matrikon.OPC.Simulation.1');
connect(da);
grp = addgroup(da,'CallbackTest');
itm1 = additem(grp,'Triangle Waves.Real8');
itm2 = additem(grp,'Saw-Toothed Waves.Boolean');

Шаг 2: настройте длительность регистрации.  Этот пример устанавливает UpdateRate значение до 1 секунды и RecordsToAcquire свойство для 6. Дополнительные сведения об этом шаге см. в разделе Управление Длительности сеанса Логгировании.

grp.UpdateRate = 1;
grp.RecordsToAcquire = 6;

Шаг 3: настройте место назначения регистрации.  В этом примере данные регистрируются на диске и в памяти. Для имени файла диска задано значение LoggingExample.olf. The LogToDiskMode для свойства задано значение 'overwrite', так что, если имя файла существует, механизм тулбокса должен перезаписать файл. Дополнительные сведения об этом шаге см. в разделе Управление адресатом записанных данных.

grp.LoggingMode = 'disk&memory';
grp.LogFileName = 'LoggingExample.olf';
grp.LogToDiskMode = 'overwrite';

Шаг 4: Запустите задачу регистрации.  Запустите dagroup объект. Задача ведения журнала запускается, и сводные данные групп обновляются, отражая состояние ведения журнала. Дополнительные сведения об этом шаге см. в разделе Запуск задачи ведения журнала.

start(grp)
grp

Шаг 5. Отслеживайте прогресс в ведении журнала.  Примерно через 3 секунды получите и отобразите последнее полученное значение. Спустя еще одну секунду получите первые две записи во время задачи ведения журнала. Затем дождитесь выполнения задачи регистрации. Для получения дополнительной информации об этом шаге см. раздел «Мониторинг прогресса выполнения задачи ведения журнала».

pause(3.5)
sPeek = peekdata(grp, 1);
% Display the local event time, item IDs and values
disp(sPeek.LocalEventTime)
disp({sPeek.Items.ItemID;sPeek.Items.Value})
pause(1)
sGet = getdata(grp, 2);
wait(grp)

Шаг 6: Получите данные.  Этот пример извлекает баланс записей в массив структур. Дополнительные сведения об этом шаге см. в разделе Получение данных из памяти.

sFinished = getdata(grp,grp.RecordsAvailable);

Шаг 7: Очистить.  Когда они вам больше не нужны, всегда удаляйте из памяти какие-либо объекты тулбокса и переменные, которые ссылаются на них. Удаление opcda объект клиента также удаляет группу и daitem объекты.

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

Настройка сеанса логгирования

Сеанс логгирования связан с dagroup объект. Перед началом сеанса логгирования необходимо убедиться, что сеанс логгирования настроен правильно. В этом разделе объясняется, как вы можете управлять

  • Продолжительность сеанса логгирования (см. «Управление длительностью сеанса логгирования»). По умолчанию группа регистрирует приблизительно одну минуту данных на полсекунды интервалов.

  • Адрес назначения записанных данных (см. «Управление адресатом записанных данных»). По умолчанию группа регистрирует данные в памяти.

  • Ответ на события, происходящие во время сеанса логгирования (см. «Настройка коллбэков регистрации»). По умолчанию сеанс логгирования не принимает никаких действий в ответ на события, происходящие во время сеанса логгирования.

Управление Длительности сеанса Логгирования

Хотя вы не можете гарантировать, что сеанс логгирования займет определенное время (см. раздел «Как данные журналов программного обеспечения OPC Toolbox»), вы можете управлять частотой обновления элементов сервером и количеством записей, которые должны храниться в задаче регистрации перед автоматической остановкой задачи регистрации. Вы управляете этими аспектами задачи регистрации с помощью следующих свойств dagroup объект:

  • UpdateRate: The UpdateRate свойство определяет, как часто проверяются значения элементов.

  • RecordsToAcquire: The RecordsToAcquire свойство определяет, сколько записей программное обеспечение OPC Toolbox должно войти в журнал перед автоматической остановкой сеанса логгирования. Задачу регистрации можно также остановить вручную, используя stop функция.

  • DeadbandPercent: The DeadbandPercent свойство не контролирует длительность задачи регистрации непосредственно, но оказывает значительное влияние на то, как часто событие изменения данных генерируется для аналоговых элементов (элемент, значение которого не ограничено дискретными значениями). Путем установки DeadbandPercent свойство 0 позволяет гарантировать, что событие изменения данных происходит каждый раз, когда изменяется значение. Для получения дополнительной информации о DeadbandPercentобратитесь к странице с описанием свойств.

Можно использовать UpdateRate и RecordsToAcquire свойства для определения минимальной длительности задачи регистрации. Длительность задачи регистрации не менее

UpdateRate * RecordsToAcquire

Для примера, если UpdateRate свойство имеет значение 10 (секунд) и RecordsToAcquire свойство равно 360, тогда при условии, что событие изменения данных генерируется каждый раз, когда сервер запрашивает значения элемента, задача регистрации занимает 3600 секунд или один час.

Управление адресатом записанных данных

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

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

The LoggingMode свойство dagroup объект управляет, где хранятся записанные данные. Можно задать 'memory' (значение по умолчанию), или 'disk', или 'disk&memory' как значение для LoggingMode.

Следующие свойства управляют тем, как программное обеспечение OPC Toolbox регистрирует данные на диске. Вы должны задать LoggingMode свойство к 'disk' или 'disk&memory' для того, чтобы эти свойства вступили в эффект:

  • LogFileName: The LogFileName свойство является вектором символов, которое задает имя файла диска, который используется для хранения записанных данных. Если файл не существует, данные будут записаны в это имя файла. Если файл действительно существует, LogToDiskMode свойство задает поведение тулбокса.

  • LogToDiskMode: The LogToDiskMode свойство контролирует, как программное обеспечение OPC Toolbox обрабатывает логгирование диска, когда файл задан как LogFileName уже существует. Каждый раз, когда задача регистрации запускается, если LoggingMode установлено в 'disk' или 'disk&memory', тулбокс проверяет, является ли файл с именем, заданным LogFileName свойство существует. Если файл существует, тулбокс предпримет следующее действие, основанное на LogToDiskMode свойство:

    • 'append': Когда LogToDiskMode установлено в 'append', записанные данные будут добавлены к существующим данным в файле.

    • 'overwrite': Когда LogToDiskMode установлено в 'overwrite'все существующие в файле данные будут удалены без предупреждения, а новые данные будут записаны в файл.

    • 'index': Когда LogToDiskMode установлено в 'index'Программное обеспечение OPC Toolbox автоматически изменяет имя файла журнала согласно следующему алгоритму:

      Имя первого файла журнала задается начальным значением LogFileName.

      Если имя пытающегося файла существует, LogFileName изменяется путем добавления числового идентификатора. Для примера, если LogFileName первоначально задается как 'groupRlog.olf', затем groupRlog.olf - первое имя файла, groupRlog01.olf - второе имя файла и так далее. Если LogFileName уже содержит числовые символы, они используются для определения следующей последовательности в модификаторе. Для примера, если LogFileName первоначально задается как 'groupRlog010.olf', и groupRlog010.olf существует, следующая попытка файла groupRlog011.olfи так далее.

      Фактическое используемое имя файла является именем первого файла, которое не существует. Таким образом, каждая последовательная операция логгирования записывается в другой файл, и никакие предыдущие данные не теряются.

Сконфигурируйте логирование коллбэков

Можно сконфигурировать dagroup объект, так что MATLAB будет автоматически выполнять функцию, когда начинается задача регистрации, когда задача регистрации останавливается, и каждый раз, когда заданное количество записей получается во время задачи регистрации. The dagroup объект имеет три свойства коллбэка, которые используются во время сеанса логгирования. Каждое свойство коллбэка определяет действие, которое должно выполняться, когда происходит конкретное событие логгирования:

  • Start event: Событие запуска генерируется при запуске задачи регистрации.

  • Records acquired event: Полученное событие записи генерируется каждый раз, когда задача регистрации получает установленное количество записей.

  • Stop event: Событие остановки генерируется, когда задача регистрации останавливается или автоматически, или пользователем, вызывающим stop функция.

Пример использования коллбэков в задаче регистрации см. в разделе Просмотр недавно записанных данных.

Выполните задачу ведения журнала

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

Запуск задачи ведения журнала

Вы запускаете задачу ведения журнала, вызывая start функция, передача dagroup объект, который необходимо начать регистрировать. Следующий пример запускает задачу регистрации для dagroup grp объекта.

start(grp)

Когда вы запускаете задачу ведения журнала, определенные свойства группы и элемента становятся доступными только для чтения, поскольку изменение этих свойств во время задачи ведения журнала повредит процесс логгирования. Кроме того, dagroup объект выполняет следующие операции:

  1. Генерирует событие start и выполняет StartFcn коллбэк.

  2. Если Subscription является 'off', устанавливает Subscription на 'on' и выдает предупреждение.

  3. Удаляет все записи, связанные с объектом, из модуля программного обеспечения OPC Toolbox.

  4. Устанавливает RecordsAcquired и RecordsAvailable на 0.

  5. Устанавливает Logging свойство к 'on'.

Отслеживайте прогресс выполнения задачи регистрации

Во время задачи логгирования можно контролировать прогресс задачи, исследуя следующие свойства dagroup объект:

  • Logging: The Logging для свойства задано значение 'on' в начале задачи ведения журнала и установлено на 'off' когда задача регистрации останавливается.

  • RecordsAcquired: The RecordsAcquired свойство содержит количество записей, которые были записаны в адрес назначения, заданный LoggingMode свойство. Когда вызывается стартовая функция, RecordsAcquired установлено в 0. Когда RecordsAcquired достигает RecordsToAcquireзадача регистрации останавливается автоматически.

  • RecordsAvailable: The RecordsAvailable свойство содержит количество записей, хранимых в механизме OPC Toolbox для этой задачи логгирования. Данные регистрируются в памяти только в том случае, если LoggingMode установлено в 'memory' или 'disk&memory'. Вы извлекаете данные из механизма тулбокса с помощью getdata функция. Смотрите Get Logged Data в рабочем пространстве MATLAB для получения дополнительной информации об использовании getdata.

Можно контролировать эти свойства в сводке отображения dagroup объект, путем ввода имени dagroup объект в командной строке.

grp
grp =
Summary of OPC Data Access Group Object: group1
   Object Parameters
      Group Type   : private
      Item         : 1-by-1 daitem object
      Parent       : localhost/Matrikon.OPC.Simulation.1
      Update Rate  : 0.5
      Deadband     : 0%
   Object Status
      Active       : on
      Subscription : on
      Logging      : on
   Logging Parameters
      Records      : 120
      Duration     : at least 60 seconds
      Logging to   : disk
      Log File     : group1log.olf ('index' mode)
      Status       : 5 records acquired since starting.
                     0 records available for GETDATA/PEEKDATA

Остановите задачу регистрации

Задача ведения журнала останавливается, когда достигается одно из следующих условий:

  • Количество записанных записей достигает значения, заданного RecordsToAcquire свойство.

  • Задачу регистрации можно остановить вручную с помощью stop функция.

Следующий пример вручную останавливает задачу регистрации для dagroup grp объекта.

stop(grp)

Когда задача регистрации останавливается, Logging для свойства задано значение 'off', генерируется событие остановки и StopFcn коллбэк выполняется.

Получите записанные данные в рабочее пространство MATLAB

Программное обеспечение OPC Toolbox не регистрирует данные непосредственно в рабочем пространстве MATLAB. При входе в память данные буферизуются в ядре тулбокса эффективным способом хранения. При регистрации на диске данные регистрируются в формате ASCII. Чтобы проанализировать ваши данные, необходимо извлечь данные из движка тулбокса или из файла диска в MATLAB для обработки. В этом разделе описывается, как получить ваши записанные данные в рабочее пространство MATLAB. Этот процесс описывается в следующих разделах:

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

  • Формат структуры: Этот формат хранит каждое событие изменения данных в структуре. Данные из задачи регистрации являются просто массивом таких структур.

  • Формат массива: Чтобы визуализировать и проанализировать ваши данные, вам нужно будет работать с временными рядами каждого из элементов в группе. Формат массива - это записанные структурные данные, «распакованные» в отдельные массивы для Value, Quality и TimeStamp.

Получение данных из памяти

Вы извлекаете данные из памяти с помощью getdata функция, передача dagroup объект как первый аргумент и количество записей, которые вы хотите получить как второй аргумент. Данные возвращаются как структура, содержащая данные от каждого события изменения данных в задаче регистрации. Например, чтобы извлечь 20 записей для dagroup grp объекта:

s = getdata(grp, 20);

Если вы не задаете второй аргумент, getdata попытается получить количество записей, заданное RecordsToAcquire свойство dagroup объект. Если модуль OPC Toolbox содержит меньше записей для группы, чем запрошено, генерируется предупреждение, и будут получены все доступные записи.

Чтобы получить данные в формате массива, необходимо указать тип данных возвращаемых значений. Вы передаете вектор символов, определяющий этот тип данных как дополнительный аргумент к getdata функция. Допустимыми типами данных являются любые типы числовых данных MATLAB (для примера 'double' или 'uint32') плюс 'cell' для обозначения типа данных массива ячеек MATLAB.

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

Например, чтобы извлечь 20 записей записанных данных в формате двойного массива из dagroup grp объекта.

[itmID,val,qual,tStamp,evtTime] = getdata(grp,20,'double');

После извлечения данных в рабочее пространство MATLAB с помощью getdataзаписи удаляются из модуля тулбокса, чтобы освободить память для дополнительных записанных записей. Если вы задаете меньшее количество записей, чем доступное в памяти, getdata будет извлекать самые старые записи. Можно использовать RecordsAvailable свойство dagroup объект, чтобы определить, сколько записей сохранено в механизме тулбокса для этой группы.

Во время задачи ведения журнала можно изучить самые последние полученные записи с помощью peekdata функция, передача dagroup объект как первый аргумент и количество записей, которые нужно получить как второй аргумент. Данные возвращаются в структуре. Вы не можете вернуть данные в отдельные массивы, используя peekdata. Вы можете преобразовать структуру, возвращенную peekdata в отдельные массивы с помощью opcstruct2array функция. Данные, извлеченные с помощью peekdata не удаляется из модуля тулбокса.

Для примера использования getdata и peekdata во время задания ведения журнала см. Обзор задачи ведения журнала.

Когда вы удаляете dagroup объект, данные, сохраненные в механизме тулбокса для этого объекта, также удаляются.

Получение данных с диска

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

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

Имя опции

Описание значения опции

'items'

Укажите массив ячеек с идентификаторами элементов, которые вы хотите вернуть. Элементы, отсутствующие в этом списке, считываться не будут.

'dates'

Укажите область значений дат для времени события. Необходимо область значений [startDt endDt] где startDt и endDt являются номерами дат MATLAB.

'records'

Укажите индекс записей, которые нужно получить следующим [startRec endRec]. Записи за пределами этих индексов считываться не будут.

'datatype'

Укажите тип данных, как вектор символов, который должен использоваться для возвращаемых значений. Допустимые векторы символов типа данных те же, что и для getdata. Если вы задаете тип числовых данных или 'cell', выход будет возвращаем в отдельных массивах. Если вы задаете тип данных числового массива, такой как 'double' или 'uint32', и записанные данные содержат массивы или векторы символов, будет сгенерирована ошибка, и данные не будут возвращены.

В следующем примере данные, записанные во время примера на странице Обзор задачи регистрации, сначала в массив структур, а затем записи 3-6 извлекаются в отдельные массивы для Value, Quality и TimeStamp.

sDisk = opcread('LoggingExample.olf')
sDisk = 
40x1 struct array with fields:
    LocalEventTime
    Items

[i,v,q,t,e] = opcread('LoggingExample.olf', ...
    'records',[3,6], 'datatype','double')
i = 
    'Random.Real8'    'Random.UInt2'    'Random.Real4'
v =
  1.0e+004 *
    0.7819    3.0712    1.4771
    1.5599    2.7792    2.2051
    1.4682    0.4055    0.5315
    0.0235    2.4473    1.5456
q = 
  'Good: Non-specific'  'Good: Non-specific'  'Good: Non-specific'
  'Good: Non-specific'  'Good: Non-specific'  'Good: Non-specific'
  'Good: Non-specific'  'Good: Non-specific'  'Good: Non-specific'
  'Good: Non-specific'  'Good: Non-specific'  'Good: Non-specific'
t =
  1.0e+005 *
    7.3202    7.3202    7.3202
    7.3202    7.3202    7.3202
    7.3202    7.3202    7.3202
    7.3202    7.3202    7.3202
e =
  1.0e+005 *
    7.3202
    7.3202
    7.3202
    7.3202

Примечание

Для записи, которая будет возвращена opcread, он должен удовлетворять всем переданным опциям opcread.