Получение данных от сервера исторического доступа к историческим данным OPC

В этом примере показано, как получить данные с сервера OPC Исторические Данные Access (HDA).

НЕОБХОДИМЫЕ УСЛОВИЯ:

Запуск регистрации исторических данных на сервере

ПРИМЕЧАНИЕ. Обычно этот шаг не требуется выполнять на производственном сервере.

Этот пример использует сервер симуляции, который регистрирует только исторические данные для элементов, подписанных с помощью клиента OPC Data Access. Загрузите объект клиента из MAT файла и соедините его заново.

daObjs = load('opcdemoHDAConfigure.mat');
connect(daObjs.opcdemoHDAConfigure);

Подождите, пока сервер запишет некоторые данные.

pause(10);

Создайте объект клиента OPC HDA

Создайте клиент OPC HDA, сопоставленный с сервером OPC HDA.

hdaObj = opchda('localhost','matrikon.OPC.Simulation')
hdaObj = 

OPC HDA Client localhost/matrikon.OPC.Simulation:
               Host: localhost
           ServerID: matrikon.OPC.Simulation
            Timeout: 10 seconds

             Status: disconnected

         Aggregates: -- (client is disconnected)
     ItemAttributes: -- (client is disconnected)

Объект клиента управляет соединением с сервером, позволяет извлекать информацию о сервере, просматривать пространство имен сервера и читать данные, хранящиеся на сервере.

На данной точке клиент еще не подключен к серверу. Подключите клиент к серверу.

connect(hdaObj);

Чтобы подтвердить подключение клиента, отобразите его Status свойство.

hdaObj.Status
ans =

connected

Определение элементов интереса

Этот пример использует Real8 элементы из Saw-toothed Waves и Real8 и UInt2 элементы из Random. Создайте массив ячеек из имен элементов для простоты использования.

itmIDs = {'Saw-toothed Waves.Real8', ...
    'Random.Real8', ...
    'Random.UInt2'};

Чтение необработанных данных с сервера

Считывайте значения необработанных данных с сервера за прошедший день.

data = readRaw(hdaObj,itmIDs,now-1,now)
data = 

1-by-3 OPC HDA Data object:

            ItemID                Value           Start TimeStamp           End TimeStamp              Quality        
    -----------------------  ---------------  -----------------------  -----------------------  ----------------------
    Saw-toothed Waves.Real8  9 double values  2016-04-12 16:30:17.662  2016-04-12 16:30:25.776  1 unique quality [Raw]
    Random.Real8             9 double values  2016-04-12 16:30:17.662  2016-04-12 16:30:25.776  1 unique quality [Raw]
    Random.UInt2             9 uint16 values  2016-04-12 16:30:17.662  2016-04-12 16:30:25.776  1 unique quality [Raw]

Use the showValues method to display all values.

Примечание.Сервер Matrikon сохраняет только последние 200 моделируемых значений для каждого элемента.

Отображение значений первого элемента данных.

showValues(data(1))
OPC HDA Data object for item Saw-toothed Waves.Real8:

           TIMESTAMP             VALUE       QUALITY
    =======================  =============  ==========
    2016-04-12 16:30:17.662       3.141593  Raw (Good)
    2016-04-12 16:30:18.677       6.283185  Raw (Good)
    2016-04-12 16:30:19.692       9.424778  Raw (Good)
    2016-04-12 16:30:20.707      12.566371  Raw (Good)
    2016-04-12 16:30:21.717      15.707963  Raw (Good)
    2016-04-12 16:30:22.732      18.849556  Raw (Good)
    2016-04-12 16:30:23.747      21.991149  Raw (Good)
    2016-04-12 16:30:24.761      25.132741  Raw (Good)
    2016-04-12 16:30:25.776      28.274334  Raw (Good)

Чтение обработанных данных с сервера

Запросите Aggregates свойство объекта HDA Client, чтобы узнать, какие совокупные типы поддерживает сервер.

hdaObj.Aggregates
ans = 

OPC HDA Aggregate Types:
          Name         ID                                          Description                                        
    -----------------  --  -------------------------------------------------------------------------------------------
    INTERPOLATIVE      1   Retrieve interpolated values.
    TIMEAVERAGE        4   Retrieve the time weighted average data over the resample interval.
    MINIMUMACTUALTIME  7   Retrieve the minimum value in the resample interval and the timestamp of the minimum value.
    MINIMUM            8   Retrieve the minimum value in the resample interval.
    MAXIMUMACTUALTIME  9   Retrieve the maximum value in the resample interval and the timestamp of the maximum value.
    MAXIMUM            10  Retrieve the maximum value in the resample interval.

Сервер Matrikon поддерживает взвешенное по времени средним значением значение, поэтому мы будем использовать этот совокупный тип на 10 секундах данных за последнюю 1 минуту. Обратите внимание на то, как Aggregates свойство может использоваться, чтобы задать совокупный тип.

pData = readProcessed(hdaObj,itmIDs,hdaObj.Aggregates.TIMEAVERAGE,10,now-1/24/60,now)'
pData = 

1-by-3 OPC HDA Data object:

            ItemID                Value           Start TimeStamp           End TimeStamp                  Quality           
    -----------------------  ---------------  -----------------------  -----------------------  -----------------------------
    Saw-toothed Waves.Real8  6 double values  2016-04-12 16:29:26.840  2016-04-12 16:30:16.840  1 unique quality [Calculated]
    Random.Real8             6 double values  2016-04-12 16:29:26.840  2016-04-12 16:30:16.840  1 unique quality [Calculated]
    Random.UInt2             6 uint16 values  2016-04-12 16:29:26.840  2016-04-12 16:30:16.840  1 unique quality [Calculated]

Use the showValues method to display all values.

Отобразите значения для Random.Real8 элемент.

itmInd = getIndexFromID(pData,'Random.Real8');
showValues(pData(itmInd))
OPC HDA Data object for item Random.Real8:

           TIMESTAMP             VALUE             QUALITY
    =======================  =============  ======================
    2016-04-12 16:29:26.840    5073.986117  Calculated (Uncertain)
    2016-04-12 16:29:36.840    5073.986074  Calculated (Uncertain)
    2016-04-12 16:29:46.840    5073.986105  Calculated (Uncertain)
    2016-04-12 16:29:56.840    5073.986137  Calculated (Uncertain)
    2016-04-12 16:30:06.840    5073.986227  Calculated (Uncertain)
    2016-04-12 16:30:16.840    7322.794889  Calculated (Uncertain)

Последнее значение имеет качество 'Uncertain' поскольку интервал времени не является полным 10 секундами.

Очистка

Когда вы закончите с объектами OPC Toolbox™, удалите их из модуля OPC Toolbox. Хотя удаление объекта HDA Client автоматически отсоединяет объект от сервера, этот пример явно показывает его.

disconnect(hdaObj)
delete(hdaObj)
disconnect(daObjs.opcdemoHDAConfigure);
delete(daObjs.opcdemoHDAConfigure);

Объект клиента теперь недействителен.

isvalid(hdaObj)
ans =

   0