В этом примере показано, как получить данные с сервера доступа к историческим данным (HDA) OPC.
ПРЕДВАРИТЕЛЬНЫЕ УСЛОВИЯ:
ПРИМЕЧАНИЕ: Обычно выполнение этого шага на производственном сервере не требуется.
В этом примере используется сервер моделирования, который регистрирует исторические данные только для элементов, подписанных с помощью клиента OPC Data Access. Загрузите объект клиента из MAT-файла и снова подключите клиент.
daObjs = load('opcdemoHDAConfigure.mat');
connect(daObjs.opcdemoHDAConfigure);
Подождите, пока сервер зарегистрирует некоторые данные.
pause(10);
Создайте клиент 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