Первым шагом взаимодействия с сервером OPC из программного обеспечения MATLAB ® является установление соединения между сервером и программным обеспечением OPC Toolbox™. Вы создаетеopcda объекты клиента для управления соединением между сервером OPC и панелью инструментов. Затем создается dagroup объекты для управления наборами daitem и затем вы создадите daitem сами объекты, представляющие элементы сервера. Элемент сервера соответствует физическому устройству или месту хранения в системе SCADA или DCS.
Необходимо создать объекты панели инструментов в порядке, описанном выше. Подключение к серверам доступа к данным OPC описывает, как создать opcda клиентский объект. В этом разделе рассматривается создание и настройка dagroup и daitem объекты.
Программное обеспечение OPC Toolbox DA реализовано с использованием трех основных объектов, предназначенных для управления подключениями к серверам и коллекциями элементов сервера. Три объекта расположены в определенной иерархии, показанной на следующем рисунке.

Объекты клиента доступа к данным OPC (opcda клиентский объектs) представляют конкретный экземпляр клиента OPC, который может взаимодействовать только с одним сервером. Сервер определяется с помощью Host и ServerID свойства. Host определяет компьютер, на котором установлен сервер. ServerID свойство определяет идентификатор программы (ProgID) сервера, созданный при установке сервера на этом хосте. opcda клиентский объект действует как контейнер для нескольких объектов группы и управляет подключением к серверу, взаимодействием с сервером и просмотром пространства имен серверов.
Объекты группы доступа к данным (dagroup объекты) представляют собой контейнеры для одного или нескольких элементов сервера (точки данных на сервере). A dagroup объект управляет тем, как часто элементы в группе должны считываться, должна ли храниться историческая информация об элементах, а также управляет созданием и удалением элементов. Группы не могут существовать без opcda клиентский объект. Вы создаете dagroup с использованием addgroup функции opcda клиентский объект.
Объекты элемента доступа к данным (daitem objects) представляют элементы сервера. Элементы определяются идентификатором элемента, который однозначно определяет этот элемент сервера в пространстве имен сервера. A daitem объект имеет Value, a Qualityи TimeStamp, представляющую информацию, собранную сервером из прибора или точки данных в системе SCADA. Value, Quality, и TimeStamp свойства представляют информацию, известную серверу при последнем запросе сервера на доступ к информации из этого прибора.
A dagroup объект может существовать только в пределах opcda клиентский объект. Аналогично, a daitem объект может существовать только в пределах dagroup объект. Вы создаете dagroup с использованием addgroup метод opcda клиентский объект. Вы создаете daitem с использованием additem способ dagroup объект.
Программа OPC Toolbox использует объекты для определения сервера, к которому должен подключиться клиент, и расположения элементов в группах. На следующем рисунке показана взаимосвязь между объектами доступа к данным панели инструментов OPC и сервером OPC.

opcda клиентский объект устанавливает соединение между программным обеспечением OPC Toolbox и сервером OPC, используя стандарты OPC Data Access Specification. Стандарты основаны на стандартах совместимости Microsoft ® COM/DCOM.
daitem объекты представляют определенные элементы сервера. Следует отметить, что для эффективной работы клиенту обычно требуется только подмножество всего пространства имен сервера. На рисунке выше только PV и SP позиции FIC01, и LIT01 , являются обязательными для данной конкретной группы. Другая группа может содержать только одну daitem объект, представляющий один элемент сервера.
Примечание
dagroup не имеет эквивалента на сервере OPC. Однако сервер хранит записи о каждой группе, созданной клиентом, и использует это имя группы для передачи клиентской информации об элементах в этой группе.
После создания opcda объект манданта, можно добавить группы в мандант. A dagroup объект управляет несколькими daitem объекты. Использование dagroup можно считывать данные из всех элементов в этой группе за одно действие, записывать данные в элементы в группе, определять действия, выполняемые при изменении значения любого из элементов в этой группе, или регистрировать данные для всех элементов в этой группе для анализа и обработки.
Создание dagroup объект, вы используете addgroup функция, определение opcda объект клиента, к которому требуется добавить группу, и необязательное имя группы. Правила определения собственного имени группы см. в разделе Указание имени группы.
В приведенном ниже примере создается opcda , соединяет этот объект с сервером и добавляет две группы к клиенту. Первая группа автоматически именуется сервером, а второй группе присваивается указанное имя.
da = opcda('localhost','Matrikon.OPC.Simulation.1'); connect(da); grp1 = addgroup(da); grp2 = addgroup(da,'MyGroup');
Каждая группа, созданная под определенным клиентским объектом, должна иметь уникальное имя. Это позволяет серверу OPC однозначно идентифицировать группу при выполнении клиентом запроса сервера с использованием этой группы. Имя может быть любым непустым символьным вектором.
Нет необходимости указывать имя группы для каждой группы, добавляемой к клиенту. Если имя не указано, сервер OPC автоматически назначит вам имя группы. Каждый сервер OPC определяет различные правила автоматического именования групп.
При попытке создать группу с тем же именем, что и группа, уже созданная для этого клиента, будет создана ошибка.
Сведения об автоматическом именовании групп при создании групп с отключенным клиентом см. в разделе Удаление объектов.
Просмотр сводки характеристик dagroup введите имя переменной, назначенное объекту, в командной строке. Например, это сводка для объекта grp1.
grp1

Элементы в этом списке соответствуют нумерованным элементам в сводке объектов:
Название Summary включает имя dagroup объект. В примере это присвоенное серверу имя Group0.
Object Parameters в разделе перечислены значения ключа dagroup свойства объекта. Эти свойства описывают тип группы, daitem объекты, связанные с группой, имя родителя группы opcda клиентский объект и свойства, управляющие тем, как сервер обновляет сведения об элементах для этой группы. В этом примере все элементы, созданные в этой группе, будут обновляться с интервалом в полсекунды с диапазоном нечувствительности 0%. Сведения о том, как сервер обновляет информацию об элементе, см. в разделе События изменения данных и подписка.
Object Status в разделе приводится текущее состояние объекта. A dagroup объект может находиться в одном из нескольких состояний:
Active состояние определяет, применяется ли какая-либо операция в группе к элементу.
Subscription состояние определяет, будут ли изменения в значении или качестве элемента вызывать событие изменения данных. Дополнительные сведения о программе см. в разделе События изменения данных и подписка. Subscription собственность.
Logging состояние описывает, регистрируется ли группа или нет. Сведения о регистрации данных см. в разделе Регистрация данных сервера OPC.
Logging Parameters В разделе описываются значения свойств регистрации для этой группы. Свойства ведения журнала управляют тем, как dagroup объект регистрирует данные, включая продолжительность задачи ведения журнала и назначение зарегистрированных данных. Сведения о регистрации данных с помощью см. в разделе Регистрация данных сервера OPC dagroup объекты.
A dagroup объект без элементов не выполняет никаких полезных функций. После добавления элементов в группу можно использовать группу для
Считывание данных с сервера OPC и запись данных на него. Дополнительные сведения см. в разделе Чтение и запись данных.
Управление уведомлением сервера OPC MATLAB об изменениях в любом элементе, связанном с dagroup объект. Дополнительные сведения см. в разделе События изменения данных и подписка.
Регистрировать данные всех элементов в этой группе для последующей обработки и анализа. Журнал данных сервера OPC описывает, как управлять регистрацией.
A dagroup объект предоставляет контейнер для сбора одного или нескольких daitem объекты. A daitem объект предоставляет ссылку на определенный элемент сервера. daitem объект определяет способ извлечения и сохранения клиентского значения элемента сервера, а также сохраняет последние данные, полученные с сервера для этого элемента сервера. Вы можете использовать daitem объект для чтения данных с сервера для этого элемента сервера или записи значений в этот элемент сервера на сервере.
Вы создаете daitem с использованием additem функция, определение dagroup объект, к которому необходимо добавить элемент, и полный идентификатор элемента сервера. Можно получить список полных идентификаторов элементов для всех элементов сервера с помощью serveritems функция.
Приведенный ниже пример основан на примере создания объектов группы доступа к данным путем добавления daitem объект к первой группе, созданной в этом примере. Вызывается элемент сервера, связанный с этим элементом 'Random.Real8'.
itm1 = additem(grp1,'Random.Real8');
При создании daitem , создается объект, который хранит значение элемента сервера локально на клиенте. Можно указать, что тип данных локального хранилища отличается от типа данных серверного хранилища. Например, можно указать, что значение, сохраненное на сервере как целое число, должно храниться в MATLAB как значение с плавающей запятой двойной точности, поскольку известно, что вычисления с двойной точностью будут выполняться со значением этого элемента.
Несмотря на возможность изменения типа данных элемента после его создания, можно также создать элемент с определенным типом данных, указав тип данных в качестве третьего параметра для additem функция. Спецификация типа данных должна быть символьным вектором, описывающим этот тип данных. Допустимыми типами данных OPC являются любые числовые типы данных MATLAB, плюс 'char', и 'logical'. Дополнительные сведения о поддерживаемых типах данных см. в разделе Работа с различными типами данных.
В приведенном ниже примере в группу добавляется еще один элемент grp1 создан на примере в разделе Создание объектов группы доступа к данным. Идентификатор товара: 'Random.UInt2', который хранится на сервере как беззнаковое 16-битное целое число. Путем указания типа данных как 'double'значение будет возвращено в MATLAB и сохранено локально как число с плавающей запятой двойной точности.
itm2 = additem(grp1,'Random.UInt2','double');
Примечание
Процесс преобразования типа данных сервера в тип данных элемента выполняется сервером с использованием правил преобразования Microsoft COM Variant. При попытке преобразовать значение в тип данных, не имеющий диапазона этого значения, сервер OPC возвращает ошибку при попытке обновить значение этого элемента. Затем следует изменить тип данных на тип, который имеет такой же или больший диапазон, чем тип данных элемента сервера. Дополнительные сведения см. в разделе Работа с различными типами данных.
При необходимости можно указать Active статус daitem путем передачи вектора символов в качестве четвертого параметра additem функция. Active статус может быть 'on' или 'off'. Элемент с Active состояние 'off' ведет себя так, как будто элемент не был создан: обновление значения элемента на сервере не будет выполнено, и чтение или запись с этим элементом завершится ошибкой. Вы используете Active для временного отключения элемента без удаления этого элемента из MATLAB. Для получения дополнительной информации о Active , см. справочную страницу для Active собственность.
Просмотр сводки характеристик daitem введите имя переменной, назначенное объекту, в командной строке. Например, это сводка для объекта itm1.
itm1

Элементы в этом списке соответствуют нумерованным элементам в сводке объектов:
Название Summary включает полный идентификатор элемента. В примере элемент связан с 'Random.Real8' элемент сервера.
Object Parameters в разделе перечислены значения ключа daitem свойства объекта. Эти свойства описывают имя элемента Parent группа и Access Rights объявляется сервером.
Object Status в разделе перечисляется активное состояние объекта. Active состояние определяет, применяется ли какая-либо операция в родительской группе к элементу, и следует ли уведомлять об изменениях в значении элемента.
Data Parameters в разделе перечислены Data Type используется daitem объект для хранения значения и Value, Quality, и TimeStamp последнего значения, полученного с сервера для этого элемента. Для получения дополнительной информации о Value, Quality, и TimeStamp элемента, см. OPC Данные: Значение, Качество и TimeStamp.
Вы создаете daitem объект для запроса значения связанного элемента сервера или записи значений в этот элемент сервера. Можно записывать значения в один элемент и считывать значения из одного элемента с помощью daitem объект. Дополнительные сведения о чтении и записи значений см. в разделе Чтение и запись данных.
Также можно использовать родительский элемент dagroup объект для чтения и записи значений для всех daitem объекты, содержащиеся в этой группе, или для регистрации изменений в значении элемента в течение определенного периода времени. Сведения о регистрации см. в разделе Регистрация данных сервера OPC.
При создании объектов с подключенным клиентом программа OPC Toolbox проверяет эти объекты на сервере OPC перед их созданием на клиенте. Например, при добавлении группы к клиенту с помощью addgroup , процесс проверки гарантирует, что на сервере не существует другой группы с таким же именем и что сервер примет группу. При добавлении элемента его идентификатор проверяется как допустимый элемент сервера.
Иногда может потребоваться создать иерархию объектов панели инструментов без подключения к серверу. Например, вы можете быть вне сайта и хотите настроить задачу ведения журнала для использования на следующий день, а не ждать настройки объектов для этой задачи, когда вы находитесь на сайте.
Программное обеспечение OPC Toolbox позволяет настраивать всю иерархию объектов панели инструментов без подключения к серверу. Однако без подключения к серверу панель инструментов не может проверить созданные объекты на этом сервере. Вместо этого программа OPC Toolbox выполняет некоторую базовую проверку создаваемых объектов и повторно проверяет их на сервере при подключении.
При создании объектов панели инструментов с отключенным клиентом выполняется следующая проверка:
При добавлении группы с помощью addgroup функция, если имя не указано, программа OPC Toolbox автоматически присваивает уникальное имя 'groupN', где N - наименьшее целое число, обеспечивающее уникальность имени группы. Например, первая созданная группа будет 'group1', то 'group2'и так далее.
При указании имени группы при использовании addgroup если группа с таким именем уже существует, генерируется ошибка.
При добавлении элемента в группу с помощью additem функция, ошибка генерируется только в том случае, если элемент с таким именем уже существует в этой группе. Другие проверки товара не выполняются.
При добавлении элемента в группу, если тип данных для этого элемента не указан, для этого типа данных устанавливается значение 'unknown'. При подключении к серверу тип данных будет изменен на тип элемента сервера. CanonicalDataType.
Несмотря на все проверки, описанные выше, сервер может не принимать все объекты, созданные на отключенном клиенте, когда этот клиент подключен к серверу с помощью connect функция. Например, идентификатор элемента элемента может быть недопустимым для этого сервера или имя группы может быть недопустимым для этого сервера. При подключении клиента к серверу с помощью connectвсе объекты, отклоненные сервером, будут удалены из иерархии объектов, и будет сгенерировано предупреждение. Таким образом, все объекты на подключенном клиенте гарантированно принимаются сервером.
Программное обеспечение OPC Toolbox поддерживает использование векторов объектов. Вектор объекта - это единственная переменная в рабочей области MATLAB, содержащая ссылку на несколько объектов. Например, все группы, добавленные в opcda объекты клиента хранятся в клиенте Group собственность. Group содержит свойство dagroup вектор объекта, представляющий все группы в этом клиенте. Аналогично, a dagroup объект имеет Item свойство, содержащее ссылку на каждое daitem объект, созданный в группе.
Векторы можно построить, используя любой из стандартных методов конкатенации, доступных в MATLAB. Однако программное обеспечение OPC Toolbox накладывает некоторые ограничения на построение векторов объектов:
Объекты должны быть одного класса. Например, можно объединить два dagroup объекты, но невозможно объединить dagroup объект с daitem объект.
Объекты группы и номенклатуры должны иметь один и тот же родитель.
Одно из измерений результирующего массива должно быть скалярным. Можно создать вектор столбца (объекты m-by-1) или вектор строки (объекты 1-by-n), но не матрицу m-by-n.
Программа OPC Toolbox не заполняет отсутствующие элементы вектора. Вместо этого генерируется ошибка. Например, скалярный объект с 4-м индексом нельзя назначить скалярному объекту.
В следующих разделах описывается создание и использование векторов объектов панели инструментов.
Функция «Создать векторы объектов» описывает, как создавать векторы объектов.
Отображение сводки векторов объектов описывает отображение векторов объектов в командной строке.
Использование векторов объектов описывает, как можно использовать векторы объектов с помощью OPC Toolbox.
Вектор объекта можно построить с помощью любого из следующих методов.
Использование конкатенации списков переменных отдельных объектов
Использование индексированного назначения
Использование свойств объекта для извлечения векторов объекта
Создание векторов объектов с помощью конкатенации. Для построения вектора объекта OPC Toolbox Data Access с использованием конкатенации используется обычный синтаксис MATLAB для конкатенации. Создайте список всех объектов, которые требуется создать, и окружите этот список квадратными скобками ([]). Разделите каждый элемент вектора объекта запятой (,) для создания вектора строки или точкой с запятой (;) для создания вектора столбца.
В следующем примере создаются три фиктивных opcda и объединяет их в вектор строки.
da1 = opcda('Host1','Dummy.Server.1'); da2 = opcda('Host2','Dummy.Server.2'); da3 = opcda('Host3','Dummy.Server.3'); dav = [da1, da2, da3];
Создание векторов объектов с помощью индексированного назначения. Индексированное назначение относится к созданию векторов путем назначения элементов определенным индексам в векторе. В следующем примере создается один и тот же трехэлементный opcda вектор объекта клиента, как в предыдущем примере, с использованием индексированного назначения.
dav(1) = opcda('Host1','Dummy.Server.1'); dav(2) = opcda('Host2','Dummy.Server.2'); dav(3) = opcda('Host3','Dummy.Server.3');
Создание вектора объекта с помощью свойств объекта. Вектор объекта можно получить при назначении Group свойство opcda клиентский объект или Item свойство dagroup объект, к переменной. Если клиент имеет более одной группы или группа имеет более одного элемента, результирующее свойство является вектором объекта.
Сведения о получении свойств объекта см. в разделе Просмотр значения конкретного свойства.
Чтобы просмотреть сводку вектора объекта, введите имя вектора объекта в командной строке. Например, это сводка вектора клиента dav.
dav
OPC Data Access Object Array: Index: Status: Name: 1 disconnected Host1/Dummy.Server.1 2 disconnected Host2/Dummy.Server.2 3 disconnected Host3/Dummy.Server.3
Сводная информация для каждого класса объектов доступа к данным панели инструментов OPC различна. Однако основной дисплей аналогичен.
Векторы объектов используются точно так же, как и обычная переменная объекта. Функция, вызываемая вектором объекта, просто применяется ко всем объектам вектора. Например, передача вектора клиента dav функция connect соединяет каждый объект вектора с его сервером OPC.
Примечание
Некоторые функции OPC Toolbox не принимают векторы объектов в качестве аргументов. При попытке использовать вектор объекта с функцией, которая не принимает векторы объекта, генерируется ошибка. Для получения информации о том, поддерживает ли функция векторы объектов, см. соответствующую справочную страницу функции.
Если требуется извлечь элементы вектора объекта, используйте стандартную индексную нотацию MATLAB. Например, следующий пример извлекает второй элемент из клиентского вектора dav.
dax = dav(2);
Спецификация OPC Data Access Specification предоставляет механизм совместного использования конфигурации группы многими клиентами. Как правило, клиент имеет частный доступ к группе; ни один другой клиент, подключенный к тому же серверу, не может видеть эту группу и элементы, настроенные в этой группе. Однако клиент может определить группу как общедоступную, что позволит другим клиентам, подключенным к тому же серверу, получить доступ к этой группе.
Примечание
Спецификация OPC Data Access Specification определяет поддержку общедоступных групп как необязательную. Следовательно, некоторые OPC-серверы не будут поддерживать общественные группы.
Общедоступная группа отличается от частной группой следующими способами:
После определения группы как общедоступной нельзя добавлять элементы в эту группу или удалять элементы из группы. Это ограничение гарантирует, что каждый клиент, использующий эту общедоступную группу, будет иметь доступ к одним и тем же элементам и не будет беспокоиться о добавлении или удалении элементов из этой группы. Прежде чем сделать эту группу открытой, необходимо убедиться в правильности элементов группы.
Каждый клиент, получающий доступ к общедоступной группе, может установить свои собственные свойства группы, такие как UpdateRate, DeadbandPercent, Active, и Subscription свойства. Например, один клиент может определить UpdateRate из 10 секунд для общедоступной группы, в то время как другой клиент указывает UpdateRate как 2 секунд.
Каждая открытая группа, определенная на сервере, должна иметь уникальное имя. При попытке создать общую группу с именем, совпадающим с именем общей группы на сервере, генерируется ошибка.
Один клиент не может иметь общедоступную группу и частную группу с тем же именем. Например, нельзя подключиться к общей группе с именем 'LogGroup' а затем создать частную группу с именем 'LogGroup'.
С помощью OPC Toolbox можно определять и публиковать собственные открытые группы или подключаться к существующим открытым группам. Также требуется удалить открытые группы с сервера OPC. В следующих разделах показано, как можно работать с общедоступными группами с помощью OPC Toolbox:
Определение новой общедоступной группы описывает, как можно создавать новые общедоступные группы.
В разделе Подключение к существующей общедоступной группе описывается, как можно использовать общедоступную группу, которая уже определена на сервере.
Удаление открытых групп с сервера описывает, как можно удалить открытые группы с сервера OPC.
Новую общедоступную группу можно определить, создав частную группу обычным способом (как описано в разделе Создание объектов группы доступа к данным), а затем преобразовав ее в общедоступную группу.
Вы используете makepublic для преобразования частной группы в общедоступную. Единственный аргумент для makepublic функция - это объект группы, который требуется преобразовать в общедоступную группу.
В следующем примере создается частная группа с определенными элементами в этой группе. Затем группа преобразуется в общедоступную группу.
da = opcda('localhost','My.Server.1'); grp = addgroup(da,'PublicGrpExample'); itms = additem(grp,{'Item.ID.1','Item.ID.2'}); makepublic(grp);
Проверить тип группы можно с помощью GroupType собственность.
grp.GroupType
public
Помимо создания новых открытых групп, можно также создать соединение с существующей общей группой на сервере. Чтобы получить список доступных общедоступных групп на сервере, используйте opcserverinfo , передавая объект клиента, подключенный к серверу в качестве аргумента. Возвращенная структура включает поле с именем 'PublicGroups', содержащий массив ячеек открытых групп, определенных на этом сервере. Если 'PublicGroups' пустое поле, то следует проверить 'SupportedInterfaces' для обеспечения поддержки сервером открытых групп. Сервер, поддерживающий открытые группы, реализует IOPCServerPublicGroups интерфейс.
После создания списка доступных общедоступных групп можно создать подключение к этой группе с помощью addgroup , передавая его клиенту, который подключен к серверу, содержащему общедоступную группу, имя общедоступной группы и 'public' спецификатор типа группы.
Примечание
Невозможно создать подключение к существующей общей группе, если объект клиента отключен от сервера.
В следующем примере выполняется подключение к общей группе с именем 'PublicTrends' на сервере с идентификатором программы 'My.Server.1'.
da = opcda('localhost','My.Server.1'); connect(da); pubGrp = addgroup(da,'PublicTrends','public');
При подключении к общей группе элементы в этой группе автоматически создаются для вас.
itm = pubGrp.Items
itm = OPC Item Object Array: Index: DataType: Active: ItemID: 1 double on item.id.1 2 uint16 on item.id.2 3 double on item.id.3
Нельзя добавлять элементы в общую группу или удалять их из нее. Однако вы по-прежнему можете изменять частоту обновления группы, процент неактивной полосы и статус активности и подписки группы, а также использовать группу для чтения, записи или регистрации данных, как для частной группы.
По завершении использования общедоступной группы можно использовать delete для удаления этой группы из объекта клиента. Удаление группы из клиента не приводит к удалению общедоступной группы с сервера; другим клиентам может потребоваться эта группа после завершения работы с ней. Вместо этого удаление группы из клиента указывает серверу, что вы больше не заинтересованы в группе.
Можно запросить удаление общедоступной группы с сервера с помощью removepublicgroup , передавая объект клиента, подключенный к серверу, и имя удаляемой общедоступной группы.
Внимание
Спецификация доступа к данным OPC не предусматривает какого-либо механизма безопасности для удаления публичных групп; любой клиент может запросить удаление общедоступной группы. Вы должны использовать эту функцию с крайней осторожностью!
Если к этой группе подключены какие-либо клиенты, сервер выдаст предупреждение о том, что группа будет удалена после того, как все клиенты закончат использовать группу.