Читайте и запись данных

Введение в чтение и запись

Используя программное обеспечение 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 объект.

Следующие разделы описывают, как выполнить операции чтения и операции записи на нескольких элементах:

Считайте несколько значений

Следующие разделы описывают, как синхронные операции чтения и асинхронные операции чтения ведут себя для нескольких элементов.

Синхронные Операции чтения.  Когда вы читаете несколько значений с помощью 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. Следующие правила применяются к чтению и записи с несколькими элементами:

  • Если все элементы приведут операцию к сбою, ошибка будет сгенерирована. Сообщение об ошибке будет содержать определенную информацию для каждого элемента о том, почему элемент перестал работать.

  • Если некоторые элементы перестали работать, но некоторые успешно выполняются, операция не делает ошибки, но генерирует предупреждение, перечисляя, какие элементы перестали работать и причина отказа.

Обратите внимание на то, что для асинхронных операций чтения и операций записи, элементы могут перестать работать рано (во время запроса об операции) или поздно (когда информация возвращена в сервер). Если какие-либо элементы перестанут работать поздно, ошибочное событие будет сгенерировано в дополнение к чтению асинхронное событие или запишет асинхронное событие.