Управляйте данными Используя объекты HDA OPC Toolbox

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

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

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

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

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

Plots of separate data object and their union

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

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

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

Plots of separate data object and their intersection

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

Передискретизируйте данные к новому набору меток времени

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

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

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

Plots of original and resampled data with different timestamps

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

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