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

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

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

Для получения дополнительной информации о генерации объектов OPC HDA Data, смотрите пример Получить данные от OPC Исторических данных Access Server.

Загрузка выборочных данных 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 для возврата объединения временных рядов в объект данные. Новые значения интерполируются с помощью предоставленного метода (или линейной интерполяции, если метод не передан).

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.