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

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

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