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