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

В этом примере показано, как использовать 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)

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