Объекты данных HDA OPC обеспечивают устройство хранения данных исходных данных, визуализацию и функции манипуляции для вас, чтобы работать с историческими данными OPC в MATLAB®. Чтобы упростить подготовку к последующей обработке, объекты данных HDA OPC позволяют вам передискретизировать исторические данные OPC можно следующим образом:
Чтобы подготовить данные к аналитическим алгоритмам, которые требуют, чтобы данные были регулярно произведены, используйте resample
функция.
Чтобы гарантировать, что данные из всех элементов содержат тот же вектор метки времени, используйте tsunion
функция, которая сохраняет все данные и интерполирует данные для пропавших без вести меток времени в каждом элементе, или tsintersect
функция, которая отбрасывает любые данные из метки времени, которая не существует во всех элементах в объекте.
Учитывая массив объектов данных, tsunion
адаптирует все данные, чтобы иметь один единый набор меток времени путем нахождения всех уникальных меток времени во всех элементах массива. Значения каждого элемента данных затем экстраполируются или интерполируются в новых метках времени. Передискретизация выполняется с помощью метода, заданного в вызове функции. Действительными методами является 'linear'
сплайн
pchip
самый близкий
, и 'hold'
. Значением по умолчанию является 'linear'
. Если кто-либо возвратил Value
вектор символов, только 'hold'
поддерживается. Элементы с тем же ID элемента объединены, так, чтобы tsunion
создает объекты данных с уникальными идентификаторами элемента. Quality
из интерполированных меток времени установлен в 'Interpolated:Good'
, и поскольку экстраполируемые метки времени установлен в 'Interpolated:Uncertain'
.
Лучшие два графика выше изображают два отдельных объекта данных. Нижний график является результатом этих двух объектов данных, передаваемых tsunion
функция. Вы видите, что в нижнем графике, что каждый элемент был расширен, чтобы включать метки времени другой и это оценивает, экстраполировались, чтобы удовлетворить этим новым меткам времени.
Когда вы интересуетесь только метками времени, характерными для многих объектов данных, можно использовать tsintersect
функция. Это генерирует новый объект данных HDA OPC, в котором каждый элемент имеет тот же вектор метки времени, состоявший из тех меток времени, которые были характерны для всех элементов в исходных обеспеченных объектах данных. Если объекты предоставленных данных содержат элементы с тем же ID элемента, те элементы объединены в один прежде, чем вычислить пересечение.
Предыдущий рисунок показывает, как значения двух объектов данных, построенных в первых и вторых положениях соответственно, могут быть пересечены, чтобы произвести новый объект, элементы которого содержат только метки времени, характерные для исходных двух. Редкие метки времени отбрасываются наряду с их значениями данных.
Вы можете хотеть передискретизировать все элементы в объекте данных в штампах требуемого времени; например, когда вы имеете значения данных для второго элемента и хотите коррелировать свой объект данных с оригиналом в тех же метках времени. Где никакие точные значения не доступны, resample
функция передискретизирует (интерполируйте или экстраполируйте), значения данных в требуемых метках времени с помощью метода передискретизации вы задаете. Действительные методы включают 'linear'
сплайн
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'
.