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

Этот пример показывает основные шаги, вовлеченные в использование OPC Toolbox™, чтобы получить данные из Сервера 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                462  cell                
  logQual          300x3             133204  cell                
  logRate            1x1                  8  double              
  logTime          300x3               7200  double              
  logVal           300x3               7200  double              

Отобразите данные на графике

Можно теперь отобразить эти данные на графике все на одном наборе осей. datetick функция преобразует метки деления Оси X в строки отформатированной даты.

plot(logTime,logVal);
axis tight
datetick('x','keeplimits')
legend(logIDs)

Данные о значении не дают полное представление. Необходимо всегда исследовать качество данных, чтобы определить валидность массива значения.

Аннотируйте график маркерами, где качеством не является 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)
Для просмотра документации необходимо авторизоваться на сайте