Объекты данных OPC HDA обеспечивают начальные функции хранения, визуализации и манипуляции для работы с историческими данными OPC в MATLAB®. Чтобы облегчить подготовку к дальнейшей обработке, объекты данных OPC HDA позволяют вам повторно собирать исторические данные OPC следующим образом:
Чтобы подготовить данные к алгоритмам анализа, которые требуют регулярной выборки данных, используйте resample
функция.
Чтобы убедиться, что данные из всех элементов содержат один и тот же вектор временной метки, используйте tsunion
функция, которая хранит все данные и интерполирует данные для отсутствующих временных меток в каждом элементе, или tsintersect
функция, которая отбрасывает любые данные из временной метки, которая существует не во всех элементах объекта.
Учитывая массив объектов данных, tsunion
адаптирует все данные к одному общему набору временных меток путем нахождения всех уникальных меток времени во всех элементах массива. Значения каждого элемента данных затем экстраполируются или интерполируются в новых временных метках. Повторная дискретизация выполняется с использованием метода, заданного в вызове функции. Допустимые методы 'linear'
, 'spline'
, 'pchip'
, 'nearest'
, и 'hold'
. Значение по умолчанию является 'linear'
. Если возвращено Value
является вектор символов, только 'hold'
поддерживается. Элементы с тем же идентификатором позиции объединяются, так что tsunion
создает объекты данных с уникальными идентификаторами элементов. The Quality
интерполированных временных меток установлено в 'Interpolated:Good'
, и для экстраполированных временных меток установлено значение 'Interpolated:Uncertain'
.
На двух верхних графиках выше показаны два отдельных объекта данных. Нижний график является результатом того, что эти два объекта данных передаются tsunion
функция. Можно увидеть, что на нижнем графике каждый элемент был расширен, чтобы включить временные метки другого и что значения были экстраполированы, чтобы удовлетворить этим новым временным меткам.
Когда вы заинтересованы только в временных метках, общих для ряда объектов данных, вы можете использовать tsintersect
функция. Он генерирует новый объект данных HDA OPC, в котором каждый элемент имеет тот же вектор временной метки, состоящий из тех временных меток, которые были общими для всех элементов исходных предоставленных объектов данных. Если предоставленные объекты данных содержат элементы с тем же идентификатором элемента, эти элементы объединяются в один перед вычислением пересечения.
Предыдущий рисунок показывает, как значения двух объектов данных, нанесенные на график в первой и второй позициях соответственно, могут быть пересечены, чтобы создать новый объект, элементы которого содержат только временные метки, общие для исходных двух. Необычные временные метки отбрасываются вместе со значениями данных.
Можно хотеть повторно отобразить все элементы объекта данных в заданные метки времени; для примера, когда вы имеете значения данных для второго элемента и хотите коррелировать ваш объект данных с исходным в тех же временных метках. Там, где нет точных значений, resample
функция повторяет (интерполирует или экстраполирует) значения данных в требуемых метках времени с помощью заданного метода повторной дискретизации. Допустимые методы включают 'linear'
, 'spline'
, 'pchip'
, и 'nearest'
(см. interp1
для получения дополнительной информации об этих методах), а также 'hold'
, которое реализует нуль поведение удержания порядка (предыдущие значения сохраняются до тех пор, пока не будет существовать новое значение ).
Для значений векторов символов только 'hold'
поддерживается метод. Попытка повторно отобразить данные, содержащие векторы символов, любым методом, кроме 'hold'
генерирует ошибку.
Эта концепция проиллюстрирована на следующей графике.
На этом рисунке синяя линия представляет исходные значения данных, в то время как красная линия представляет повторно дискретизированные данные в новом наборе временных меток. Эти новые временные метки отмечены красными звездами, в то время как оригинальные временные метки отмечены синими кругами.
При извлечении данных с сервера и сохранении их в объекте данных OPC Toolbox клиент автоматически преобразует значения из типов вариантов OPC (см. Сравнение типов данных MATLAB и COM). Извлеките значения данных из объекта данных путем ссылки на Value
свойство. Например, чтобы отобразить и получить доступ к первому элементу hdaReadRaw
объект данных:
hdaReadRaw
hdaReadRaw = 1-by-5 OPC HDA Data object: ItemID Value Start TimeStamp End TimeStamp Quality -------------- ----------------- ----------------------- ----------------------- ---------------------- Random.Int1 5 int8 values 2010-12-01 16:05:30.902 2010-12-01 16:05:32.869 1 unique quality [Raw] Random.Uint2 5 double values 2010-12-01 16:05:30.902 2010-12-01 16:05:32.869 1 unique quality [Raw] Random.Real8 5 double values 2010-12-01 16:05:30.902 2010-12-01 16:05:32.869 1 unique quality [Raw] Random.String 5 cell values 2010-12-01 16:05:30.902 2010-12-01 16:05:32.869 1 unique quality [Raw] Random.Boolean 5 logical values 2010-12-01 16:05:30.902 2010-12-01 16:05:32.869 1 unique quality [Raw] class(hdaReadRaw(1).Value) int8
Альтернативой является вызов стандартных методов преобразования типов, доступных в MATLAB для всего объекта, в этом случае все элементы преобразуются в выбранный тип (при условии, что они имеют одинаковые векторы временных меток):
newArray = double(hdaReadRaw(1)); class(newArray)
double
В этом примере hdaReadRaw(1)
имеет начальный собственный тип данных 'int8'
но после передачи его в 'double'
вызов преобразования, результирующие значения имеют собственный тип MATLAB 'double'
.