Регистрируйте данные о сервере 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. Во время задачи логгирования данные получены из памяти. Когда задача останавливается, остающиеся записи получены.

Шаг 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. 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 Software), можно управлять уровнем, на котором сервер обновит элементы и сколько записей задача логгирования должна сохранить прежде автоматически остановить задачу логгирования. Вы управляете этими аспектами задачи логгирования при помощи следующих свойств dagroup объект:

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

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

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

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

UpdateRate * RecordsToAcquire

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

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

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

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

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

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

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

  • LogToDiskMode: 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 автоматически выполнил функцию, когда задача логгирования запустится, когда задача логгирования останавливается, и каждый раз, когда конкретное количество записей получено во время задачи логгирования. dagroup объект имеет три свойства коллбэка, которые используются во время сеанса логгирования. Каждое свойство коллбэка задает действие, чтобы взять, когда конкретное событие логгирования имеет место:

  • Start event: A запускаются, событие сгенерировано, когда задача логгирования запускается.

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

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

Для примера использования коллбэков в задаче логгирования, вид на море Недавно Записанные данные.

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

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

Запустите задачу логгирования

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

start(grp)

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

  1. Генерирует событие запуска и выполняет StartFcn 'callback'.

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

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

  4. Наборы RecordsAcquired и RecordsAvailable к 0.

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

Контролируйте прогресс задачи логгирования

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

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

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

  • RecordsAvailable: RecordsAvailable свойство содержит количество записей, которые хранились в механизме программного обеспечения OPC Toolbox для этой задачи логгирования. Данные только регистрируются к памяти если LoggingMode установлен в 'memory' или 'disk&memory'. Вы извлекаете данные из механизма тулбокса с помощью getdata функция. Смотрите Получают Записанные данные в рабочее пространство 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. Следующие разделы описывают этот процесс:

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

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

  • Формат массивов: Чтобы визуализировать и анализировать ваши данные, необходимо будет работать с временными рядами каждого из элементов в группе. Формат массивов является регистрируемыми данными о структуре, “распакованными” в отдельные массивы для Значения, Качества и 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', и записанные данные содержат массивы или векторы символов, ошибка будет сгенерирована, и никакие данные не будут возвращены.

Следующий пример получает данные, регистрируемые во время примера на странице Overview Задачи Логгирования, сначала в массив структур, и затем записывает 3 - 6, получены в отдельные массивы для Значения, Качества и 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.