В этом примере показаны основные шаги, связанные с использованием 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

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