Управление данными с помощью объектов HDA OPC Toolbox

Объекты данных OPC HDA обеспечивают начальные функции хранения, визуализации и манипуляции для работы с историческими данными OPC в MATLAB®. Чтобы облегчить подготовку к дальнейшей обработке, объекты данных OPC HDA позволяют вам повторно собирать исторические данные OPC следующим образом:

  • Чтобы подготовить данные к алгоритмам анализа, которые требуют регулярной выборки данных, используйте resample функция.

  • Чтобы убедиться, что данные из всех элементов содержат один и тот же вектор временной метки, используйте tsunion функция, которая хранит все данные и интерполирует данные для отсутствующих временных меток в каждом элементе, или tsintersect функция, которая отбрасывает любые данные из временной метки, которая существует не во всех элементах объекта.

Повторно отобразите объекты данных, чтобы включить все доступные метки времени с использованием tsunion

Учитывая массив объектов данных, tsunion адаптирует все данные к одному общему набору временных меток путем нахождения всех уникальных меток времени во всех элементах массива. Значения каждого элемента данных затем экстраполируются или интерполируются в новых временных метках. Повторная дискретизация выполняется с использованием метода, заданного в вызове функции. Допустимые методы 'linear', 'spline', 'pchip', 'nearest', и 'hold'. Значение по умолчанию является 'linear'. Если возвращено Value является вектор символов, только 'hold' поддерживается. Элементы с тем же идентификатором позиции объединяются, так что tsunion создает объекты данных с уникальными идентификаторами элементов. The Quality интерполированных временных меток установлено в 'Interpolated:Good', и для экстраполированных временных меток установлено значение 'Interpolated:Uncertain'.

Plots of separate data object and their union

На двух верхних графиках выше показаны два отдельных объекта данных. Нижний график является результатом того, что эти два объекта данных передаются tsunion функция. Можно увидеть, что на нижнем графике каждый элемент был расширен, чтобы включить временные метки другого и что значения были экстраполированы, чтобы удовлетворить этим новым временным меткам.

Повторно попробуйте объекты данных, чтобы включить все общие Метки времени с использованием tsintersect

Когда вы заинтересованы только в временных метках, общих для ряда объектов данных, вы можете использовать tsintersect функция. Он генерирует новый объект данных HDA OPC, в котором каждый элемент имеет тот же вектор временной метки, состоящий из тех временных меток, которые были общими для всех элементов исходных предоставленных объектов данных. Если предоставленные объекты данных содержат элементы с тем же идентификатором элемента, эти элементы объединяются в один перед вычислением пересечения.

Plots of separate data object and their intersection

Предыдущий рисунок показывает, как значения двух объектов данных, нанесенные на график в первой и второй позициях соответственно, могут быть пересечены, чтобы создать новый объект, элементы которого содержат только временные метки, общие для исходных двух. Необычные временные метки отбрасываются вместе со значениями данных.

Повторный отбор данных на новый набор меток времени

Можно хотеть повторно отобразить все элементы объекта данных в заданные метки времени; для примера, когда вы имеете значения данных для второго элемента и хотите коррелировать ваш объект данных с исходным в тех же временных метках. Там, где нет точных значений, resample функция повторяет (интерполирует или экстраполирует) значения данных в требуемых метках времени с помощью заданного метода повторной дискретизации. Допустимые методы включают 'linear', 'spline', 'pchip', и 'nearest' (см. interp1 для получения дополнительной информации об этих методах), а также 'hold', которое реализует нуль поведение удержания порядка (предыдущие значения сохраняются до тех пор, пока не будет существовать новое значение ).

Для значений векторов символов только 'hold' поддерживается метод. Попытка повторно отобразить данные, содержащие векторы символов, любым методом, кроме 'hold' генерирует ошибку.

Эта концепция проиллюстрирована на следующей графике.

Plots of original and resampled data with different timestamps

На этом рисунке синяя линия представляет исходные значения данных, в то время как красная линия представляет повторно дискретизированные данные в новом наборе временных меток. Эти новые временные метки отмечены красными звездами, в то время как оригинальные временные метки отмечены синими кругами.

Преобразуйте объекты данных OPC HDA в типы числовых данных MATLAB

При извлечении данных с сервера и сохранении их в объекте данных 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'.