В этом примере показано, как получить данные с сервера OPC Исторические Данные Access (HDA).
НЕОБХОДИМЫЕ УСЛОВИЯ:
ПРИМЕЧАНИЕ. Обычно этот шаг не требуется выполнять на производственном сервере.
Этот пример использует сервер симуляции, который регистрирует только исторические данные для элементов, подписанных с помощью клиента 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