exponenta event banner

Чтение и запись данных на сервер доступа к данным OPC

В этом примере показано, как использовать OPC Toolbox™ синхронных операций чтения и записи для обмена данными с сервером OPC.

ПРЕДВАРИТЕЛЬНЫЕ УСЛОВИЯ:

Подключение к серверу и создание объектов

Создание opcda и подключите этот клиент к серверу OPC.

da = opcda('localhost','Matrikon.OPC.Simulation.1');
connect(da);

Добавьте группу к клиенту и элемент к группе.

grp = addgroup(da);
itm1 = additem(grp,'Random.Real8');

Выполнение синхронных операций чтения

Операция чтения по умолчанию получает значения из кэша сервера.

r = read(itm1)
r = 

  struct with fields:

       ItemID: 'Random.Real8'
        Value: 0
      Quality: 'Bad: Out of Service'
    TimeStamp: [2016 8 30 11 55 24.4130]
        Error: ''

Чтобы заставить сервер считывать значение с устройства, укажите этот параметр. Этот процесс может занять некоторое время, если сервер OPC находится в сети или устройству требуется некоторое время для получения значения.

r = read(itm1,'device')
r = 

  struct with fields:

       ItemID: 'Random.Real8'
        Value: 20.8848
      Quality: 'Good: Non-specific'
    TimeStamp: [2016 8 30 11 55 24.7220]
        Error: ''

Выполнение синхронных операций записи

Добавление элемента, доступного для записи, в группу.

itm2 = additem(grp,'Bucket Brigade.Real8')
itm2 =

Summary of OPC Data Access Item Object: Bucket Brigade.Real8

   Object Parameters
      Parent        : Group0
      Access Rights : read/write

   Object Status
      Active        : on

   Data Parameters
      Data Type     : double
      Value         : 
      Quality       : Bad: Out of Service
      Timestamp     : 

Запишите значение 10 в элемент.

write(itm2,10)

Прочитайте значение обратно в MATLAB.

r = read(itm2,'device')
r = 

  struct with fields:

       ItemID: 'Bucket Brigade.Real8'
        Value: 10
      Quality: 'Good: Non-specific'
    TimeStamp: [2016 8 30 11 55 24.8520]
        Error: ''

Считывание из нескольких элементов

С помощью объекта группы можно считывать данные из нескольких элементов.

r = read(grp)
r = 

  2×1 struct array with fields:

    ItemID
    Value
    Quality
    TimeStamp
    Error

Отображение информации об отдельных элементах путем индексирования.

r(1)
ans = 

  struct with fields:

       ItemID: 'Random.Real8'
        Value: 20.8848
      Quality: 'Good: Non-specific'
    TimeStamp: [2016 8 30 11 55 24.7220]
        Error: ''

Извлеките несколько значений из элемента.

itmIDs = {r.ItemID}
vals = [r.Value]
itmIDs =

  1×2 cell array

    'Random.Real8'    'Bucket Brigade.Real8'


vals =

   20.8848   10.0000

Запись в несколько элементов

Запись в несколько элементов, передача значений элементов в группе в виде массива ячеек.

write(grp,{1.234,5.432})
Warning: One or more items could not be written.
	Random.Real8 returned 'The item's access rights do not allow the operation.' 

Предыдущая команда возвращает предупреждение, поскольку первый элемент не позволяет записать в него данные. Однако второй имеет записанное значение 5.432. Вы можете убедиться, что читаете его.

r = read(itm2,'device')
r = 

  struct with fields:

       ItemID: 'Bucket Brigade.Real8'
        Value: 5.4320
      Quality: 'Good: Non-specific'
    TimeStamp: [2016 8 30 11 55 24.9070]
        Error: ''

Очистить

Отключитесь от сервера и удалите объект клиента.

disconnect(da)
delete(da)

При удалении объекта клиента автоматически удаляются объекты группы и элемента.