В этом примере показано, как использовать 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)
Удаление клиентского объекта автоматически удаляет группу и объекты элемента.