exponenta event banner

Визуализация и предварительная обработка данных OPC HDA

В этом примере показано, как работать с объектами OPC HDA Data.

Объекты данных OPC HDA создаются при считывании данных с сервера доступа к историческим данным OPC (HDA). Объекты OPC HDA Data позволяют сохранять, визуализировать и обрабатывать исторические данные перед преобразованием этих данных во встроенные типы данных для дальнейшей обработки в MATLAB.

Дополнительные сведения о создании объектов данных OPC HDA см. в примере Получение данных с сервера доступа к данным за прошлые периоды OPC.

Загрузить выборку данных OPC HDA

Загрузите образцы данных в рабочую область.

load opcdemoHDAData

Просмотр объектов данных OPC HDA

Проверьте рабочую область, чтобы увидеть загруженные переменные.

whos
  Name              Size            Bytes  Class           Attributes

  hdaDataSmall      1x2               356  opc.hda.Data              
  hdaDataVis        1x2              9088  opc.hda.Data              

Отображение сводки данных, содержащихся в hdaDataVis.

hdaDataVis
hdaDataVis = 

1-by-2 OPC HDA Data object:

        ItemID            Value            Start TimeStamp           End TimeStamp              Quality        
    --------------  -----------------  -----------------------  -----------------------  ----------------------
    Example.Item.1  361 double values  2010-05-12 08:15:00.000  2010-05-12 09:15:00.000  1 unique quality [Raw]
    Example.Item.2  11 double values   2010-05-12 08:30:00.000  2010-05-12 09:30:00.000  2 unique qualities

Объект данных содержит два элемента. Первый элемент Example.Item.1 содержит 361 значение и одно уникальное качество, в то время как второе имеет 11 значений и два уникальных качества.

Более подробно изучите второй элемент с помощью showValues способ.

showValues(hdaDataVis(2))
OPC HDA Data object for item Example.Item.2:

           TIMESTAMP             VALUE           QUALITY
    =======================  =============  =================
    2010-05-12 08:30:00.000      -0.500000  Raw (Good)       
    2010-05-12 08:36:00.000      -0.250000  Raw (Good)       
    2010-05-12 08:42:00.000       0.000000  Raw (Good)       
    2010-05-12 08:48:00.000       0.250000  Raw (Good)       
    2010-05-12 08:54:00.000       0.500000  Calculated (Good)
    2010-05-12 09:00:00.000       0.500000  Calculated (Good)
    2010-05-12 09:06:00.000       0.400000  Calculated (Good)
    2010-05-12 09:12:00.000       0.300000  Raw (Good)       
    2010-05-12 09:18:00.000       0.200000  Raw (Good)       
    2010-05-12 09:24:00.000       0.100000  Raw (Good)       
    2010-05-12 09:30:00.000       0.000000  Raw (Good)       

Изменение формата отображения даты

Получение текущего формата отображения даты с помощью opc.getDateDisplayFormat.

origFormat = opc.getDateDisplayFormat;

Измените формат отображения на стандартный формат даты в США и снова отобразите значение.

opc.setDateDisplayFormat('mm/dd/yyyy HH:MM AM');
showValues(hdaDataVis(2))
OPC HDA Data object for item Example.Item.2:

         TIMESTAMP           VALUE           QUALITY
    ===================  =============  =================
    05/12/2010  8:30 AM      -0.500000  Raw (Good)       
    05/12/2010  8:36 AM      -0.250000  Raw (Good)       
    05/12/2010  8:42 AM       0.000000  Raw (Good)       
    05/12/2010  8:48 AM       0.250000  Raw (Good)       
    05/12/2010  8:54 AM       0.500000  Calculated (Good)
    05/12/2010  9:00 AM       0.500000  Calculated (Good)
    05/12/2010  9:06 AM       0.400000  Calculated (Good)
    05/12/2010  9:12 AM       0.300000  Raw (Good)       
    05/12/2010  9:18 AM       0.200000  Raw (Good)       
    05/12/2010  9:24 AM       0.100000  Raw (Good)       
    05/12/2010  9:30 AM       0.000000  Raw (Good)       

Восстановите формат отображения по умолчанию.

opc.setDateDisplayFormat('default')
ans =

yyyy-mm-dd HH:MM:SS.FFF

Сбросьте формат отображения до исходного значения.

opc.setDateDisplayFormat(origFormat);

Визуализация данных OPC HDA

Визуализация данных OPC HDA с помощью plot или stairs методы для объекта данных.

axH1 = subplot(2,1,1);
plot(hdaDataVis);
title('Plot of hdaDataVis data');
axH2 = subplot(2,1,2);
stairs(hdaDataVis);
title('Stairstep plot of hdaDataVis data');
legend show

Повторная выборка данных OPC HDA

Проверьте небольшой набор данных. Этот набор данных намеренно мал, чтобы показать концепцию повторной выборки.

hdaDataSmall
hdaDataSmall = 

1-by-2 OPC HDA Data object:

        ItemID            Value           Start TimeStamp           End TimeStamp              Quality        
    ---------------  ---------------  -----------------------  -----------------------  ----------------------
    Example.ItemR.1  5 double values  2010-06-01 09:30:00.000  2010-06-01 09:31:00.000  1 unique quality [Raw]
    Example.ItemR.2  3 double values  2010-06-01 09:30:00.000  2010-06-01 09:31:00.000  1 unique quality [Raw]

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

showValues(hdaDataSmall(1))
showValues(hdaDataSmall(2))
OPC HDA Data object for item Example.ItemR.1:

           TIMESTAMP             VALUE       QUALITY
    =======================  =============  ==========
    2010-06-01 09:30:00.000       0.000000  Raw (Good)
    2010-06-01 09:30:15.000       1.000000  Raw (Good)
    2010-06-01 09:30:30.000       2.000000  Raw (Good)
    2010-06-01 09:30:45.000       1.000000  Raw (Good)
    2010-06-01 09:31:00.000       0.000000  Raw (Good)


OPC HDA Data object for item Example.ItemR.2:

           TIMESTAMP             VALUE       QUALITY
    =======================  =============  ==========
    2010-06-01 09:30:00.000       1.000000  Raw (Good)
    2010-06-01 09:30:30.000       2.000000  Raw (Good)
    2010-06-01 09:31:00.000       3.000000  Raw (Good)

Попытка преобразовать данные в двойной массив. Преобразование завершится ошибкой.

try
    vals = double(hdaDataSmall);
catch exc
    disp(exc.message)
end
Conversion to double failed. All elements of the OPC HDA Data object must have the same time stamp.
Consider using 'TSUNION' or 'RESAMPLE' on the Data object.

Пересечение временных отметок элементов приводит к меньшему набору данных с регулярной выборкой.

hdaDataIntersect = hdaDataSmall.tsintersect
hdaDataIntersect = 

1-by-2 OPC HDA Data object:

        ItemID            Value           Start TimeStamp           End TimeStamp              Quality        
    ---------------  ---------------  -----------------------  -----------------------  ----------------------
    Example.ItemR.1  3 double values  2010-06-01 09:30:00.000  2010-06-01 09:31:00.000  1 unique quality [Raw]
    Example.ItemR.2  3 double values  2010-06-01 09:30:00.000  2010-06-01 09:31:00.000  1 unique quality [Raw]

Use the showValues method to display all values.

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

showValues(hdaDataIntersect)
OPC HDA Data object array:

                  TIMESTAMP  Example.ItemR.1  Example.ItemR.2  
    =======================  ===============  ===============  
    2010-06-01 09:30:00.000         0.000000         1.000000  
    2010-06-01 09:30:30.000         2.000000         2.000000  
    2010-06-01 09:31:00.000         0.000000         3.000000  

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

vals = double(hdaDataIntersect)
vals =

     0     1
     2     2
     0     3

Использовать tsunion возвращает объединение временных рядов в объекте Data. Новые значения интерполируются с использованием предоставленного метода (или линейной интерполяции, если метод не предоставлен).

hdaDataUnion = hdaDataSmall.tsunion
showValues(hdaDataUnion)
hdaDataUnion = 

1-by-2 OPC HDA Data object:

        ItemID            Value           Start TimeStamp           End TimeStamp              Quality        
    ---------------  ---------------  -----------------------  -----------------------  ----------------------
    Example.ItemR.1  5 double values  2010-06-01 09:30:00.000  2010-06-01 09:31:00.000  1 unique quality [Raw]
    Example.ItemR.2  5 double values  2010-06-01 09:30:00.000  2010-06-01 09:31:00.000  2 unique qualities

Use the showValues method to display all values.

OPC HDA Data object array:

                  TIMESTAMP  Example.ItemR.1  Example.ItemR.2  
    =======================  ===============  ===============  
    2010-06-01 09:30:00.000         0.000000         1.000000  
    2010-06-01 09:30:15.000         1.000000         1.500000  
    2010-06-01 09:30:30.000         2.000000         2.000000  
    2010-06-01 09:30:45.000         1.000000         2.500000  
    2010-06-01 09:31:00.000         0.000000         3.000000  

Обратите внимание, что для этих новых значений в параметре качества установлено значение «Interpolated». Example.ItemR.2.

showValues(hdaDataUnion(2))
OPC HDA Data object for item Example.ItemR.2:

           TIMESTAMP             VALUE            QUALITY
    =======================  =============  ===================
    2010-06-01 09:30:00.000       1.000000  Raw (Good)         
    2010-06-01 09:30:15.000       1.500000  Interpolated (Good)
    2010-06-01 09:30:30.000       2.000000  Raw (Good)         
    2010-06-01 09:30:45.000       2.500000  Interpolated (Good)
    2010-06-01 09:31:00.000       3.000000  Raw (Good)         

Постройте график данных с маркерами, чтобы показать, как работают методы.

subplot(2,1,1);
plot(hdaDataSmall,'Marker','.');
hold all
plot(hdaDataIntersect,'Marker','o','LineStyle','none');
title('Intersection of time series in Data object');
subplot(2,1,2);
plot(hdaDataSmall,'Marker','.');
hold all
plot(hdaDataUnion,'Marker','o','LineStyle','none');
title('Union of time series in Data object');

Выполните повторную выборку небольшого набора данных на указанных шагах времени.

newTS = datenum(2010,6,1,9,30,[0:60]);
hdaDataResampled = resample(hdaDataSmall,newTS)
figure;
plot(hdaDataSmall);
hold all
stairs(hdaDataResampled);
hdaDataResampled = 

1-by-2 OPC HDA Data object:

        ItemID            Value            Start TimeStamp           End TimeStamp            Quality      
    ---------------  ----------------  -----------------------  -----------------------  ------------------
    Example.ItemR.1  61 double values  2010-06-01 09:30:00.000  2010-06-01 09:31:00.000  2 unique qualities
    Example.ItemR.2  61 double values  2010-06-01 09:30:00.000  2010-06-01 09:31:00.000  2 unique qualities

Use the showValues method to display all values.