Спецификация доступа к данным OPC, реализованная программным обеспечением OPC Toolbox™, обеспечивает доступ к текущим значениям данных на сервере OPC. Часто для анализа, устранения неполадок и создания прототипов необходимо знать, как данные сервера OPC менялись в течение определенного периода времени. Например, можно использовать данные временных рядов для оптимизации контура управления или идентификации системы на части завода. Программное обеспечение OPC Toolbox обеспечивает механизм ведения журнала, который хранит историю данных, которые менялись в течение определенного периода времени. В этом разделе рассматривается настройка и выполнение задачи ведения журнала с помощью панели инструментов.
Примечание
Механизм регистрации программного обеспечения OPC Toolbox не предназначен для замены архивного приложения или приложения базы данных, которое регистрирует данные в течение длительного периода времени. Скорее, механизм ведения журнала позволяет быстро конфигурировать задачу регистрации данных в отдельных случаях, когда изменения в общезаводском архиве данных могут оказаться невозможными.
Программа OPC Toolbox использует событие изменения данных для регистрации данных. Каждое регистрируемое событие изменения данных называется записью. Запись содержит информацию о времени регистрации записи клиентом и сведения о каждом элементе в событии изменения данных. События изменения данных подробно рассматриваются в разделах События изменения данных и Подписка.
Использование события изменения данных для ведения журнала означает, что при планировании сеанса ведения журнала необходимо учитывать следующие моменты:
Ведение журнала выполняется на уровне группы. При планировании задачи ведения журнала настройте группу только с теми элементами, которые необходимо зарегистрировать. Включение большего количества элементов, чем необходимо, только увеличит использование памяти и/или диска, и использование этих данных может быть более сложным из-за ненужных элементов в наборе данных.
Неактивные элементы в группе не заносятся в журнал. При запуске сеанса ведения журнала необходимо убедиться, что элементы, необходимые для регистрации, активны. Управление активным состоянием daitem с использованием Active имущества daitem объект.
События (записи) изменения данных могут включать не все элементы - событие изменения данных содержит только элементы в группе, которые изменили свое значение и/или состояние качества с момента последнего обновления. Следовательно, запись не гарантированно содержит каждый элемент данных. Это необходимо учитывать при планировании сеанса ведения журнала.
Задачи регистрации OPC не гарантированы. Поскольку события изменения данных происходят только при изменении состояния элемента в группе на сервере, можно запустить задачу регистрации, которая никогда не завершится. Например, если элементы в группе никогда не изменяются, для этой группы никогда не будет создано событие изменения данных. Следовательно, записи не будут регистрироваться.
Не гарантируется регулярная выборка зарегистрированных данных - в любое время можно принудительно выполнить событие изменения данных (см. раздел Принудительное выполнение события изменения данных). Если сделать это во время задачи ведения журнала, события изменения данных могут происходить в нерегулярное время выборки. Кроме того, событие изменения данных не может содержать информацию для каждого элемента в группе. Следовательно, регистрируемые данные сервера 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 Logs Data), вы можете управлять скоростью, с которой сервер будет обновлять элементы, и количеством записей, которые должна хранить задача ведения журнала перед автоматической остановкой задачи ведения журнала. Управление этими аспектами задачи ведения журнала осуществляется с помощью следующих свойств dagroup объект:
UpdateRate: UpdateRate определяет частоту проверки значений элементов.
RecordsToAcquire: RecordsToAcquire свойство определяет количество записей, которые должно регистрировать программное обеспечение OPC Toolbox перед автоматической остановкой сеанса ведения журнала. Задачу ведения журнала можно также остановить вручную с помощью stop функция.
DeadbandPercent: DeadbandPercent свойство не управляет непосредственно продолжительностью задачи ведения журнала, но оказывает значительное влияние на то, как часто генерируется событие изменения данных для аналоговых элементов (элемент, значение которого не ограничено дискретными значениями). Путем установки DeadbandPercent значение 0, можно гарантировать, что событие изменения данных происходит при каждом изменении значения. Для получения дополнительной информации о DeadbandPercent, обратитесь к странице ссылок на свойства.
Вы можете использовать UpdateRate и RecordsToAcquire для определения минимальной продолжительности задачи ведения журнала. Продолжительность задачи ведения журнала не менее
UpdateRate * RecordsToAcquire
Например, если UpdateRate имеет значение 10 (секунд) и RecordsToAcquire свойство равно 360, то при условии, что событие изменения данных генерируется каждый раз, когда сервер запрашивает значения элемента, задача регистрации займет 3600 секунд или один час.
Программное обеспечение 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: событие start создается при запуске задачи ведения журнала.
Событие получения записей: событие получения записей генерируется каждый раз, когда задача регистрации получает заданное количество записей.
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. Этот процесс описывается в следующих разделах:
Извлечение данных из памяти (Retrieve Data from Memory) - обсуждается извлечение данных из механизма панели инструментов в MATLAB.
Извлечение данных с диска (Retrieve Data from Disk) - обсуждается извлечение данных из файла диска в 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, передается в качестве первого аргумента. Данные, сохраненные в файле журнала, возвращаются в виде массива структуры в том же формате, что и структура, возвращенная getdata. Записи, извлеченные из файла журнала в рабочую область MATLAB, не удаляются из файла журнала.
Можно указать ряд дополнительных аргументов для opcread , которые управляют записями, извлеченными из файла. Дополнительные аргументы должны указываться именем опции и ее значением. Доступны следующие опции.
Имя опции | Описание значения опции |
|---|---|
| Укажите массив ячеек идентификаторов элементов, которые требуется вернуть. Элементы, отсутствующие в этом списке, считываться не будут. |
| Укажите диапазон дат для времени события. Диапазон должен быть |
| Укажите индекс извлекаемых записей как |
| Укажите тип данных в качестве символьного вектора, который должен использоваться для возвращаемых значений. Допустимые векторы символов типа данных совпадают с векторами для |
В следующем примере извлекаются данные, записанные во время примера на странице Обзор задачи ведения журнала, сначала в структурный массив, а затем записи 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.