Получите данные из 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                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)