Получение данных от сервера Доступ

В этом примере показаны основные шаги, связанные с использованием Toolbox™ OPC для получения данных от Сервера OPC.

НЕОБХОДИМЫЕ УСЛОВИЯ:

Создайте иерархию объектов OPC Data Access

Создайте 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...   

Настройте свойства объекта OPC Toolbox

Сконфигурируйте группу, чтобы записать 60 секунд данных с интервалом 0,2 секунды.

logDuration = 60;
logRate = 0.2;
numRecords = ceil(logDuration./logRate)
grp.UpdateRate = logRate;
grp.RecordsToAcquire = numRecords;
numRecords =

   300

Получение Сервера OPC данных

Запустите задачу сбора и дождитесь завершения задачи, прежде чем продолжать выполнение любого кода 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)