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