Спецификация доступа к 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
объект выполняет следующие операции:
Генерирует событие start и выполняет StartFcn
коллбэк.
Если Subscription
является 'off'
, устанавливает Subscription
на 'on'
и выдает предупреждение.
Удаляет все записи, связанные с объектом, из модуля программного обеспечения OPC Toolbox.
Устанавливает RecordsAcquired
и RecordsAvailable
на 0
.
Устанавливает 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
коллбэк выполняется.
Программное обеспечение OPC Toolbox не регистрирует данные непосредственно в рабочем пространстве MATLAB. При входе в память данные буферизуются в ядре тулбокса эффективным способом хранения. При регистрации на диске данные регистрируются в формате ASCII. Чтобы проанализировать ваши данные, необходимо извлечь данные из движка тулбокса или из файла диска в MATLAB для обработки. В этом разделе описывается, как получить ваши записанные данные в рабочее пространство MATLAB. Этот процесс описывается в следующих разделах:
Retrieve Data from Memory, обсуждает, как извлечь данные из движка тулбокса в 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
, которые управляют записями, которые извлекаются из файла. Дополнительные аргументы должны быть заданы именем опции и значением опции. Доступны следующие опции.
Имя опции | Описание значения опции |
---|---|
| Укажите массив ячеек с идентификаторами элементов, которые вы хотите вернуть. Элементы, отсутствующие в этом списке, считываться не будут. |
| Укажите область значений дат для времени события. Необходимо область значений |
| Укажите индекс записей, которые нужно получить следующим |
| Укажите тип данных, как вектор символов, который должен использоваться для возвращаемых значений. Допустимые векторы символов типа данных те же, что и для |
В следующем примере данные, записанные во время примера на странице Обзор задачи регистрации, сначала в массив структур, а затем записи 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
.