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