Визуализируйте и предварительно обработайте данные о HDA OPC

Этот пример показывает вам, как работать с Объектами данных HDA OPC.

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

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

Выборка загрузки данные о HDA OPC

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

load opcdemoHDAData

Отобразите объекты данных HDA OPC

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

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);

Визуализируйте данные о HDA OPC

Визуализируйте Данные о HDA OPC с помощью 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

Передискретизируйте данные о HDA OPC

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

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  

Отметьте, как качество установлено в "Интерполированный" для тех новых значений в 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.