exponenta event banner

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Преобразуйте объекты данных 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'.