Этот пример показывает основные шаги, вовлеченные в использование OPC Toolbox™, чтобы получить данные из Сервера 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)