exponenta event banner

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

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

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

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

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

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

Plots of separate data object and their union

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

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

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

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'.