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