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