exponenta event banner

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

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

ПРЕДВАРИТЕЛЬНЫЕ УСЛОВИЯ:

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

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

В этом примере используется сервер моделирования, который регистрирует исторические данные только для элементов, подписанных с помощью клиента 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