В этом примере показаны основные шаги, выполняемые при использовании Toolbox™ OPC для получения данных с сервера OPC.
ПРЕДВАРИТЕЛЬНЫЕ УСЛОВИЯ:
Создание opcda объект, связанный с требуемым сервером, и подключение к серверу.
da = opcda('localhost','Matrikon.OPC.Simulation.1') connect(da)
da =
Summary of OPC Data Access Client Object: localhost/Matrikon.OPC.Simulation.1
Server Parameters
Host : localhost
ServerID : Matrikon.OPC.Simulation.1
Status : disconnected
Timeout : 10 seconds
Object Parameters
Group : 0-by-1 dagroup object
Event Log : 0 of 1000 events
Создайте объект группы для управления необходимыми элементами.
grp = addgroup(da,'DemoGroup')
grp =
Summary of OPC Data Access Group Object: DemoGroup
Object Parameters
Group Type : private
Item : 0-by-1 daitem object
Parent : localhost/Matrikon.OPC.Simulation.1
Update Rate : 0.5
Deadband : 0%
Object Status
Active : on
Subscription : on
Logging : off
Logging Parameters
Records : 120
Duration : at least 60 seconds
Logging to : memory
Status : Waiting for START.
0 records available for GETDATA/PEEKDATA
Добавить Real8 элемент из Saw-Toothed Waves и Real8 и UInt2 элементы из Triangle Waves в группу.
itmIDs = {'Saw-toothed Waves.Real8', ...
'Triangle Waves.Real8', ...
'Triangle Waves.UInt2'};
itm = additem(grp,itmIDs)
itm = OPC Item Object Array: Index: Active: ItemID: Value: Quality: TimeStamp: 1 on ...hed Waves.Real8 Bad: Ou... 2 on ...gle Waves.Real8 Bad: Ou... 3 on ...gle Waves.UInt2 Bad: Ou...
Сконфигурируйте группу для регистрации 60 секунд данных с интервалом 0,2 секунды.
logDuration = 60; logRate = 0.2; numRecords = ceil(logDuration./logRate) grp.UpdateRate = logRate; grp.RecordsToAcquire = numRecords;
numRecords = 300
Запустите задачу сбора данных и дождитесь завершения задачи, прежде чем продолжить выполнение любого кода MATLAB™.
start(grp) wait(grp)
Обратите внимание, что в ожидании завершения задачи ведения журнала MATLAB продолжает обрабатывать обратные вызовы из объектов OPC Toolbox (и других объектов, включающих функцию обратного вызова).
Извлеките записанные данные в отдельные массивы для отметок времени, качества и значений.
[logIDs,logVal,logQual,logTime,logEvtTime] = getdata(grp,'double');
Проверьте рабочую область на предмет размеров данных.
whos log*
Name Size Bytes Class Attributes logDuration 1x1 8 double logEvtTime 300x1 2400 double logIDs 1x3 438 cell logQual 300x3 126004 cell logRate 1x1 8 double logTime 300x3 7200 double logVal 300x3 7200 double
Теперь эти данные можно распечатать на одном наборе осей.
logTime = datetime(logTime,'ConvertFrom','datenum'); plot(logTime,logVal); axis tight lgd = legend(logIDs); lgd.AutoUpdate = 'off';

Данные значения не предоставляют полное изображение. Необходимо всегда проверять качество данных, чтобы определить достоверность массива значений.
Аннотирование графика маркерами, где качество не соответствует Good.
hold on isBadQual = strncmp(logQual,'Bad',3); isRepeatQual = strncmp(logQual,'Repeat',6); for k = 1:size(logQual,2) badInd = isBadQual(:,k); plot(logTime(badInd,k),logVal(badInd,k),'ro', ... 'MarkerFaceColor','r','MarkerEdgeColor','k') repInd = isRepeatQual(:,k); plot(logTime(repInd, k),logVal(repInd,k),'ro', ... 'MarkerFaceColor',[0.8 0.5 0],'MarkerEdgeColor','k') end hold off

Плохое качество отмечается красным цветом, а качество повтора - оранжевым.
Отсоедините и удалите объект клиента из модуля OPC Toolbox.
disconnect(da) delete(da)