exponenta event banner

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

В этом примере показаны основные шаги, выполняемые при использовании Toolbox™ OPC для получения данных с сервера 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...   

Настройка свойств объекта панели инструментов OPC

Сконфигурируйте группу для регистрации 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

Плохое качество отмечается красным цветом, а качество повтора - оранжевым.

Очистить

Отсоедините и удалите объект клиента из модуля OPC Toolbox.

disconnect(da)
delete(da)