Используя программное обеспечение OPC Toolbox™, можно обмениваться данными с Сервером OPC с помощью отдельных элементов, или с помощью dagroup
объект выполнить операцию на нескольких элементах. Чтение и запись операции могут быть выполнены синхронно, так, чтобы ваш сеанс MATLAB® ожидал операции, чтобы завершиться, или асинхронно, позволяя вашему сеансу работы с MATLAB продолжить обрабатывать, в то время как операция происходит в фоновом режиме.
Можно считать данные из любого элемента, который сопоставлен со связанным клиентом. Когда вы выполните операцию чтения на элементе, сервер возвратит информацию о серверном элементе, сопоставленном с тем ID элемента. Операция чтения может быть выполнена синхронно или асинхронно:
Используйте Синхронные Операции чтения, описывает, как выполнить синхронные операции чтения. Синхронные операции чтения могут запросить данные из кэша сервера, или непосредственно от устройства.
Используйте Асинхронные Операции чтения, описывает, как выполнить асинхронные операции чтения.
Синхронная операция чтения означает, что MATLAB будет ожидать сервера, чтобы возвратить данные из запроса чтения прежде, чем продолжить обрабатывать. Данные, возвращенные сервером, могут прибыть из кэша сервера, или можно запросить, чтобы сервер считал значения из устройства, к которому относится серверный элемент.
Вы используете read
функция, чтобы выполнить синхронные операции чтения, передавая daitem
объект сопоставил с серверным элементом, который вы хотите считать. Если операция чтения успешна, данные возвращены в структуре, содержащей информацию об операции чтения, включая значение серверного элемента, качество того значения, и время, когда сервер получил то значение. Value
элемента,
Quality
и Timestamp
свойства также обновляются, чтобы отразить значения, полученные из операции чтения.
Следующий пример создает opcda
объект клиента и конфигурирует группу с одним элементом, 'Random.Real8'
. Синхронная операция чтения затем выполняется на элементе.
da = opcda('localhost','Matrikon.OPC.Simulation.1'); connect(da); grp = addgroup(da); itm1 = additem(grp,'Random.Real8'); r = read(itm1)
r = ItemID: 'Random.Real8' Value: 4.3252e+003 Quality: 'Good: Non-specific' TimeStamp: [2004 3 2 9 50 26.6710] Error: ''
Задайте Источник Операции чтения. По умолчанию синхронная операция чтения возвратит данные из кэша Сервера OPC. Путем чтения из кэша вы не должны ожидать возможно медленного устройства, чтобы предоставить данные серверу. Можно задать источник синхронной операции чтения как второй параметр к read
функция. Если источник задан как 'device'
, сервер считает значение из устройства и возвратит то значение вам (а также обновление кэша сервера с тем значением).
Примечание
Чтение от устройства может быть медленным. Если операция чтения генерирует ошибку из-за тайм-аута, вы, возможно, должны увеличить значение Timeout
свойство opcda
объект клиента сопоставил с группой или элементом для того, чтобы поддержать синхронные чтения от устройства.
Следующий пример считывает данные из устройства, сопоставленного с itm1
.
r = read(itm1,'device')
r = ItemID: 'Random.Real8' Value: 9.1297e+003 Quality: 'Good: Non-specific' TimeStamp: [2004 3 2 10 8 20.2650] Error: ''
Читайте из Кэша с Неактивными Элементами. Для того, чтобы уменьшать коммуникационный трафик и ускорить доступ к данным, Серверы OPC не хранят все значения серверного элемента в своем кэше. Только те серверные элементы, которые активны, будут храниться в кэше сервера. Поэтому синхронные операции чтения из кэша на неактивном элементе возвратят данные, которые не могут соответствовать текущему значению устройства. При попытке считать данные из неактивного элемента с помощью read
функция, и не задает 'device'
как источник, Quality
будет установлен в 'Bad: Out of Service'
.
Вы управляете активным состоянием элемента с помощью Active
свойство.
Следующий пример устанавливает Active
свойство элемента к 'off'
и попытки читать из кэша.
itm1.Active = 'off';
r = read(itm1)
Warning: One or more items is inactive. (Type "warning off opc:read:iteminactive" to suppress this warning.) r = ItemID: 'Random.Real8' Value: 8.4278e+003 Quality: 'Bad: Out of Service' TimeStamp: [2004 3 2 10 17 19.9370] Error: ''
Асинхронная операция чтения создает просьбу считать данные, и затем отправляет тот запрос к серверу. Если запрос был принят, MATLAB продолжает обрабатывать следующую инструкцию, не ожидая, чтобы получить любые значения от сервера. Когда данные готовы быть возвращенными, сервер передает данные обратно в MATLAB путем генерации чтения асинхронное событие. MATLAB обработает то событие, как только это может выполнить ту задачу.
Асинхронные операции чтения всегда возвращают данные из устройства.
При помощи асинхронной операции чтения можно продолжить выполнять задачи в MATLAB, в то время как значение читается из устройства, и затем обработайте возвращенное значение, когда сервер может предоставить его назад MATLAB.
Вы выполняете асинхронные операции чтения с помощью readasync
функция, передавая daitem
возразите, что вы хотите читать из. Если успешный, функция возвратит ID транзакции, уникальный идентификатор для той асинхронной транзакции. Можно использовать тот ID транзакции, чтобы идентифицировать операцию чтения, когда это возвращено посредством чтения асинхронное событие.
Когда асинхронная операция чтения обрабатывается в MATLAB, Value
элемента,
Quality
и Timestamp
свойства также обновляются, чтобы отразить значения, полученные из асинхронной операции чтения.
Следующий пример использования асинхронной операции чтения использует коллбэк по умолчанию для чтения асинхронное событие. Коллбэк по умолчанию установлен в opccallback
функция, которая отображает информацию о событии в командной строке.
tid = readasync(itm1)
tid = 3
ID транзакции для этой операции равняется 3. Немного позже функция обратного вызова по умолчанию отображает следующую информацию в командной строке.
OPC ReadAsync event occurred at local time 10:44:49 Transaction ID: 3 Group Name: Group0 1 items read.
Можно изменить чтение асинхронная функция обратного вызова события путем установки ReadAsyncFcn
свойство dagroup
объект.
Можно записать данные к отдельным элементам, или группам элементов. В этом разделе описывается записать данные к отдельным элементам. Смотрите Чтение и Запись Несколько Значений для получения информации об использовании dagroup
объекты записать данные к нескольким элементам.
Можно записать данные к Серверу OPC с помощью синхронной операции записи, в этом случае MATLAB будет ожидать сервера, чтобы подтвердить, что операция записи успешно выполняется, или использование асинхронной операции записи, в этом случае MATLAB свободен продолжить выполнять другие задачи, в то время как операция записи происходит. Поскольку операции записи всегда применяются непосредственно к устройству, синхронная операция записи может занять существенное количество времени, особенно если устройство, в которое вы пишете, имеет медленную связь с Сервером OPC.
Вы используете write
функция, чтобы выполнить синхронные операции записи. Первым аргументом является daitem
объект, который представляет серверный элемент, в который вы хотите записать. Второй аргумент является значением, которое вы хотите записать в тот серверный элемент. write
функция не возвращает результатов, но сгенерирует ошибку, если операция записи не успешна.
Следующий пример создает элемент с ID элемента 'Bucket Brigade.Real8'
и пишет значению 10.34
к элементу. Значение затем читается с помощью синхронной операции чтения.
itm2 = additem(grp,'Bucket Brigade.Real8'); write(itm2, 10.34) r = read(itm2,'device')
Вы не должны гарантировать, что тип данных значения пишете, и тип данных daitem
возразите, то же самое. Программное обеспечение OPC Toolbox использует сервер, чтобы выполнить преобразование из типа данных, который вы обеспечиваете к типу данных, требуемому для того серверного элемента. Для получения информации о том, как тулбокс обрабатывает различные типы данных, смотрите работу с Различными типами данных.
Асинхронная операция записи создает просьбу записать данные, и затем отправляет тот запрос к серверу. Если запрос был принят, MATLAB продолжает обрабатывать следующую инструкцию, не ожидая данных, которые будут записаны. Когда операция записи завершается на сервере, сервер уведомляет MATLAB что операция, завершенная путем генерации записи асинхронное событие, содержащее информацию о ли операция записи, за которой следуют, и сообщение об ошибке если применимо. MATLAB обработает то событие, как только это может выполнить ту задачу.
Вы используете writeasync
функционируйте, чтобы записать значения в сервер асинхронно. Первым аргументом является daitem
объект, который представляет серверный элемент, в который вы хотите записать. Второй аргумент является значением, которое вы хотите записать в тот серверный элемент. Возвращаемое значение является ID транзакции операции. Можно использовать ID транзакции, чтобы идентифицировать операцию записи, когда это возвращено через запись асинхронное событие.
Следующий пример использует асинхронные операции, чтобы записать значению 57.8
к элементу 'Bucket Brigade.Real8'
созданный ранее.
tid = writeasync(itm2, 57.8)
tid = 4
Некоторое время позже, стандартный коллбэк (opccallback
) отобразит результаты операции записи к командной строке.
OPC WriteAsync event occurred at local time 11:15:27 Transaction ID: 4 Group Name: Group0 1 items written.
Можно изменить запись асинхронная функция обратного вызова события путем установки WriteAsyncFcn
свойство dagroup
объект.
Когда вы используете операцию чтения и операцию записи на одном daitem
объект, вы читаете или пишете одно значение на транзакцию. Программное обеспечение OPC Toolbox позволяет вам выполнять одну операцию, чтобы считать несколько значений элемента или записать несколько значений. Можно также использовать dagroup
возразите, чтобы считать и записать значения с помощью всех элементов в группе, или можно выполнить операции чтения и операции записи на векторах объекта элемента.
daitem
объектный вектор является одной переменной в рабочем пространстве MATLAB, содержащем больше чем один daitem
объект. Можно создать векторы элемента с помощью любого из стандартных методов конкатенации, доступных в MATLAB. Смотрите Создают Векторы Объекта Доступа к данным OPC Toolbox для получения информации о создании и работе с векторами объекта тулбокса.
Когда вы выполняете любую операцию чтения или операцию записи на dagroup
объект, это - эквивалент выполнения операции на Item
свойство той группы, которая является daitem
возразите вектору, представляющему все элементы, которые содержатся в dagroup
объект.
Следующие разделы описывают, как выполнить операции чтения и операции записи на нескольких элементах:
Читайте Несколько Значений описывает, как считать несколько значений из вектора элемента или dagroup
объект.
Запишите, что Несколько Значений описывают, как записать несколько значений в вектор элемента или dagroup
объект.
Обработка ошибок для Нескольких Операций чтения Элемента и Операций записи объясняет, как программное обеспечение OPC Toolbox имеет дело с ошибками при выполнении операций чтения и операций записи на нескольких объектах.
Следующие разделы описывают, как синхронные операции чтения и асинхронные операции чтения ведут себя для нескольких элементов.
Синхронные Операции чтения. Когда вы читаете несколько значений с помощью read
функция, возвращенное значение будет массивом структур. Каждый элемент структуры будет содержать те же поля. Одно из полей является ID элемента, к которому относится информация в том элементе структуры.
Следующий пример выполняет синхронную операцию чтения на dagroup
объект создается в предыдущих примерах в этом разделе.
r = read(grp)
r = 2x1 struct array with fields: ItemID Value Quality TimeStamp Error
Чтобы отобразить первую запись в массиве структур, используйте индексацию в структуру.
r(1)
ans = ItemID: 'Random.Real8' Value: 3.7068e+003 Quality: 'Good: Non-specific' TimeStamp: [2004 3 2 11 49 52.5460] Error: ''
Чтобы отобразить все значения конкретного поля, можно использовать синтаксис генерации списка в MATLAB. Включение того списка в массиве ячеек группирует значения в одну переменную.
{r.Value}
ans = {3.7068e+003 10}
Асинхронные Операции чтения. Когда вы читаете несколько значений с помощью readasync
функция, возвращаемое значение является все еще одним ID транзакции. Несколько значений будут возвращены в чтении, которое асинхронная структура события передала ReadAsyncFcn
'callback'. Для получения информации о структуре чтения асинхронное событие смотрите Типы событий.
Когда вы выполняете операцию записи на нескольких элементах, необходимо задать несколько значений, один для каждого элемента, в который вы пишете. Программное обеспечение OPC Toolbox требует, чтобы эти несколько значений были в массиве ячеек, поскольку типы данных для каждого значения могут отличаться. Для получения информации о построении массивов ячеек смотрите, что MATLAB Программирует.
Примечание
Даже если вы используете совпадающий тип данных для каждого значения, записанного в dagroup
объект или daitem
возразите вектору, необходимо все еще использовать массив ячеек, чтобы задать отдельные значения. Используйте num2cell
функционируйте, чтобы преобразовать числовые массивы в массивы ячеек.
Следующий пример пишет значения в dagroup
объект, содержащий два элемента.
write(grp, {1.234, 5.43})
При чтении и записи с несколькими элементами, ошибка, сгенерированная путем выполнения операции на одном элементе, автоматически не сгенерирует ошибку в MATLAB. Следующие правила применяются к чтению и записи с несколькими элементами:
Если все элементы приведут операцию к сбою, ошибка будет сгенерирована. Сообщение об ошибке будет содержать определенную информацию для каждого элемента о том, почему элемент перестал работать.
Если некоторые элементы перестали работать, но некоторые успешно выполняются, операция не делает ошибки, но генерирует предупреждение, перечисляя, какие элементы перестали работать и причина отказа.
Обратите внимание на то, что для асинхронных операций чтения и операций записи, элементы могут перестать работать рано (во время запроса об операции) или поздно (когда информация возвращена в сервер). Если какие-либо элементы перестанут работать поздно, ошибочное событие будет сгенерировано в дополнение к чтению асинхронное событие или запишет асинхронное событие.