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
:
добавление:
Когда 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
.
Если 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
.