Лекция
12. Технология OPC
Содержание
лекции:
-
Введение.
Цели создания, преимущества OPC
-
Архитектура
OPC. Типичные сценарии взаимодействия
клиента и сервера
-
Разработка
сервера и клиента. Реализуемые
интерфейсы и их методы
-
Введение.
Цели создания, преимущества OPC
По
мере развития систем промышленной
автоматизации, оборудования разных
производителей становилось всё больше,
для каждого из них требовалось своё,
уникальное программное обеспечение.
В 1990 гг. у разработчиков систем
промышленной автоматизации возникла
необходимость в разработке универсального
программного обеспечения для обмена
данными с устройствами разных
производителей. Для реализации этой
цели была создана организация OPC
Foundation, объединяющая множество
независимых производителей оборудования
и программных средств автоматизации.
В результате появилась спецификация,
определяющая правила для создания
подобного рода ПО – спецификация OPC
(OLE for Process Control).
Создателями
спецификации рассматриваются три
уровня представления информации и
управления на производственном
предприятии: полевой, технологический,
хозяйственный. Устройства полевого
оборудования (контроллеры, интеллектуальные
датчики) являются источниками данных
для ДП АСУТП – систем технологического
управления (SCADA-систем), которые, в свою
очередь, передают данные системам
автоматизации производственно-хозяйственной
деятельности и учета. Различные звенья
этой структуры выпускаются различными
производителями и поддерживают
различные протоколы передачи данных.
Это привело к тому, что к концу 90-х гг.
каждая тиражируемая SCADA-система
поставляется с набором драйверов для
получения данных от устройств системы
телемеханики по 10-20 наиболее
распространенным протоколам и
дополнительно предоставляет средства
и интерфейс для разработки системным
интегратором дополнительных модулей
опроса с устройствами, поддерживающими
нестандартные протоколы передачи
данных. Доступ к данным своих БД
SCADA-системы часто предоставляют или
с использованием нестандартных
серверов, или по спецификациям ODBC или
NetDDE, плохо подходящим для передачи
технологической информации. Исходя
из этого, обеспечение универсального
интерфейса передачи технологических
данных являлось насущной задачей.
Повсеместное внедрение стандарта OPC
позволит производителю устройства –
источника данных разработать сервер,
а поставщику программного решения
сбора данных – клиента только для
одного протокола (см. Рис.
12.1).
Преимуществами
OPC являются иерархическое пространство
имен, простая объектная модель,
прозрачность локального/сетевого
взаимодействия, поддержка различных
режимов передачи данных. OPC в настоящее
время безусловно является наиболее
развитой и перспективной технологией
информационного взаимодействия.
Недостатком OPC является отсутствие
кросс-платформенной поддержки: и
OPC-клиент, и OPC-сервер могут функционировать
только на платформе Windows, т.к. это
программная технология, основанная
на механизме удалённого вызова процедур
с использованием стека DCOM.
Рис.
12.1. Технология OPC в производстве
OPC
– это набор спецификаций стандартов:
OPC Data Access определяет интерфейсы передачи
оперативных технологических данных,
OPC Alarm & Events стандартизует передачу
сообщений-тревог, OPC Historical Data Access –
передачу ретроспектив технологических
данных, прорабатываются также стандарты
OPC Batch, OPC Security и др.
Далее мы будем
рассматривать спецификацию OPC Data
Access Server 2.0 – именно обеспечение доступа
(чтения и записи) данных является
основной задачей информационного
стыка.
-
^ Архитектура
OPC. Типичные сценарии взаимодействия
клиента и сервера
OPC
(OLE for Process Control) является расширением
технологии Microsoft COM/DCOM для приложений
реального времени. OPC – это больше,
чем протокол передачи данных, это –
протокол (технология) объектного
взаимодействия. На рис. 12.2 показана
объектная модель OPC-сервера. С
концептуальной точки зрения, программа
– OPC-сервер заключает в себе сущности
трех типов: сервер, группа, элемент.
Объект «сервер» (OPCServer) реализует
механизм COM/DCOM соединений и выполняет
роль контейнера для объектов типа
«группа» (OPCGroup), каждый из которых, в
свою очередь, содержит множество
элементов (OPCItem) и обрабатывает запросы
OPC-клиентов. Прямого доступа клиента
к элементам не предусматривается.
Рис.
12.2. Объектная модель OPC-сервера.
Вообще,
понятие группы является центральным
при рассмотрении взаимодействия
сервера и клиента. При инициализации
OPC-клиент создает на сервере свои
«частные» (private) группы, в которые
добавляет элементы, значения которых
ему требуется считать (имена и параметры
элементов заданы у клиента; узнать
возможные пользователь может, просмотрев
с помощью этого же или другого клиента
адресное пространство сервера), и
настраивает их свойства – индивидуальные
параметры коммуникации (см. табл.
12.1). Стандарт OPC также предусматривает
возможность создания «общих» (public)
групп, доступных всем клиентам,
подсоединенным к серверу. Однако при
подключении к такой общей группе
сервер создает копию группы для
отдельного использования каждым
клиентом. Т.о., группы используются
сервером для разграничения взаимодействия
с каждым из клиентов.
Каждый элемент
(OPCItem) является объектом, содержащим
значение одного из поддерживаемых
сервером типов данных (обычно
целочисленные, с плавающей точкой,
строковые) и свойства – метку времени
(timestamp), достоверность (quality) и др.
Табл.
12.1. Свойства OPC-группы.
Атрибут
|
Описание
|
Name
|
Имя OPC-группы
|
Active
|
OPC-клиент
устанавливает значение этого атрибута
при создании группы и сбрасывает
его при окончании использования
|
Enable
|
Установка/сброс
этого атрибута позволяет клиенту
динамически разрешать/запрещать
отправку сервером измененных значений
элементов
|
Cached data
|
OPC-клиент может
указать, должен ли при получении его
запросов сервер читать данные
непосредственно от источника данных
или допустимо вернуть хранящиеся в
кэше ранее считанные значения.
|
Percent Deadband
|
Величина «зоны
нечувствительности» (в процентах
от диапазона измерения), устанавливаемая
для всех аналоговых элементов группы.
|
Update Rate
|
Частота проверки
сервером наличия изменений значений
элементов. Также этот параметр может
использоваться сервером для
определения частоты запроса новых
данных от устройств – источников
данных.
|
Time Zone (Time Bias)
|
Данные о часовом
поясе клиента, возможно требуемые
для преобразования меток времени
элементов группы
|
Client Handle
|
Уникальный
идентификатор клиента
|
Спецификация
OPC Data Access определяет четыре механизма
взаимодействия OPC-клиента и OPC-сервера:
-
Синхронные
вызовы – при получении запроса на
чтение или запись набора значений
процедура обработки запроса сервера
не возвращает управление, пока запрос
не будет выполнен.
-
Асинхронные
вызовы – возврат управления из
процедуры обработки запроса происходит
немедленно; после чего сервер выполняет
требуемую передачу данных клиенту.
-
Обновление –
при получении запроса сервер в
асинхронном режиме передает значения
сигналов (элементов) из определенного
при инициализации взаимодействия
набора.
-
Подписка –
сервер спонтанно, без запроса со
стороны клиента, передает клиенту
значения сигналов из определенного
набора при их изменении.
Первые два
способа взаимодействия классифицируются
как механизмы периодической выборки
(polling): клиентe для получения значений
от сервера каждый раз требуется
передать управляющую информацию
(идентификаторы сигналов). Третий и
четвертый способы рассматриваются
как механизмы обратного вызова
(callback): сначала клиент выполняет
инициализацию, после чего взаимодействие
сводится только к передаче данных;
при этом сервер обладает всей необходимой
информацией для инициирования
транзакции.
Для иллюстрации
сказанного рассмотрим отличия сценариев
взаимодействия OPC-клиента и OPC-сервера
при различных механизмах коммуникации.
При выполнении синхронного чтения
последовательность действий следующая:
-
Клиент
подсоединяется к серверу.
-
Клиент создает
на сервере объекты OPCGroup, устанавливает
их атрибут Active.
-
Клиент создает
объекты OPCItem в этих группах, устанавливает
их атрибут Active.
-
Клиент выполняет
запрос синхронного чтения значений
одного или нескольких OPCItem.
-
Сервер
возвращает запрошенные значения.
При асинхронном
чтении первые три действия клиента
те же, что и при синхронном, далее
выполняются следующие операции:
-
Клиент создает
на сервере «возвратное соединение»
(callback connection).
-
Клиент выполняет
запрос асинхронного чтения значений
одного или нескольких OPCItem.
-
Сервер
возвращает запрошенные значения
после выполнения других, более
приоритетных операций.
В режиме
подписки последовательность действий
при инициализации повторяет запрос
асинхронного чтения, после чего
управление передачей данных полностью
передается серверу.
-
Клиент
подсоединяется к серверу.
-
Клиент создает
на сервере объекты OPCGroup, устанавливает
их атрибуты Active, Enable, UpdateRate, Deadband.
-
Клиент создает
объекты OPCItem в этих группах, устанавливает
их атрибут Active.
-
Клиент создает
на сервере «возвратное соединение».
-
Циклически,
с частотой UpdateRate проверять, не
изменились ли текущие значения
элементов от в последний раз сообщенных
клиенту, для изменившихся – передать
клиенту измененные значения.
-
^ Разработка
сервера и клиента. Реализуемые
интерфейсы и их методы
Разработчик
OPC сервера должен реализовать, во-первых,
логику взаимодействия с источником
данных (OPC-сервер скрывает протокол
обмена, но должен взаимодействовать
с сетью технологических контроллеров
или базой данных ИС по их оригинальным
протоколам); во-вторых, описываемые
стандартом интерфейсы взаимодействия
с OPC-клиентом.
Объект OPCServer должен
реализовывать следующие интерфейсы:
-
IUnknown
– общий интерфейс, реализуемый любым
OLE-объектом
-
IOPCCommon – функции
настройки коммуникации в сессии
«клиент-сервер»
-
IOPCServer –
интерфейс позволяет клиенту
создавать/удалять свои группы элементов
-
IConnectionPointContainer
– функции доступа клиента к информации
о соединениях
-
IOPCItemProperties
– функции для информирования клиента
о возможных свойствах
-
IOPCServerPublicGroup
– функции управления общими группами
-
IOPCBrowseServerAddressSpace
– интерфейс для выполнения клиентом
операций по «просмотру» иерархически
организованного адресного пространства
сервера.
-
IPersistFile –
позволяет клиенту сохранять и загружать
различные конфигурации сервера.
Объект
OPCGroup должен реализовывать следующие
интерфейсы:
-
IUnknown
– общий интерфейс, реализуемый любым
OLE-объектом
-
IOPCItemMgt –
функции добавления, удаления и
управления поведением элементов
группы
-
IOPCGroupStateMgt –
управление состоянием группы, режимом
обновления данных
-
IOPCPublicGroupStateMgt
– создание и определение состояния
общей группы
-
IOPCSyncIO – функции
синхронного чтения/записи
-
IOPCAsyncIO2 –
функции асинхронного чтения/записи
-
IConnectionPointContainer
– функции доступа клиента к информации
о соединениях
-
IEnumOPCItemAttributes
– позволяет клиенту работать со
списком элементов группы, получать
значения атрибутов элементов.
Методы
рассмотренных интерфейсов сведены в
табл. 12.2, 12.3.
Таблица 12.2. Интерфейсы
объекта OPCServer и их методы.
№
|
Метод
|
Описание
|
IOPCCommon
|
1
|
SetLocaleID
|
Устанавливает
требуемый клиенту Locale ID
|
2
|
GetLocaleID
|
Возвращает
используемый клиентом/сервером
Locale ID
|
3
|
QueryAvailableLocaleIDs
|
Запрашивает
список поддерживаемых сервером
Locale ID
|
4
|
GetErrorString
|
По указанному
коду ошибки возвращает ее текстовое
описание
|
5
|
SetClientName
|
Позволяет клиенту
сохранить информацию о себе на
сервере
|
IOPCServer
|
6
|
AddGroup
|
Добавить группу
|
7
|
GetErrorString
|
По указанному
коду ошибки возвращает ее текстовое
описание
|
8
|
GetGroupByName
|
Получить
идентификптор группы
|
9
|
GetStatus
|
Получить код
возврата последней операции
|
10
|
RemoveGroup
|
Удалить группу
|
11
|
CreateGroupEnumerator
|
Создать список
используемых клиентом групп
|
IConnectionPointContainer
|
12
|
EnumConnectionPonts
|
Создать список
установленных соединений клиента
и сервера
|
13
|
FindConnectionPoint
|
Получить указатель
на определенное соединение
|
IOPCItemProperties
|
14
|
QueryAvailableProperties
|
Возвращает список
доступных свойств для указанного
элемента
|
15
|
GetItemProperties
|
Возвращает список
значений свойств для указанных
элементов
|
16
|
LookupItemIDs
|
Получить список
ID элементов
|
IOPCServerPublicGroup
(optional)
|
17
|
GetPublicGroupByName
|
Выполняет
“подсоединение” клиента общей
группе
|
18
|
RemovePublicGroup
|
Удаляет общую
группу
|
IOPCBrowseServerAddressSpace
(optional)
|
19
|
QueryOrganization
|
Запросить тип
адресного пространства сервера
|
20
|
ChangeBrowsePosition
|
Изменить “текущее
положение” в иерархической структуре
|
21
|
BrowseOPCItemIDs
|
Получить список
пдветвей и элементов для текущей
позиции
|
22
|
GetItemID
|
Получить полную
информацию о ID элемента
|
23
|
BrowseAccessPaths
|
По полному ID
элемента определяет его пути доступа
|
IPersistFile (optional)
|
24
|
IsDirty
|
Были или нет
изменения кофигурации после сохранения
|
25
|
Load
|
Загружает
выбранную конфигурацию сервера
|
26
|
Save
|
Сохраняет текущую
конфигурацию
|
27
|
SaveCompleted
|
Позволяет клиенту
обработать момент завершения
сохранения
|
28
|
GetCurFile
|
Возвращает имя
файла текущей конфигурации
|
Таблица
12.3. Интерфейсы объекта OPCGroup и их методы.
№
|
Метод
|
Описание
|
IOPCItemMgt
|
1
|
AddItems
|
Добавить элементы
(указав имя, тип, параметры каждого)
|
2
|
ValidateItems
|
Проверяет, могут
ли элементы быть безошибочно
добавлены
|
3
|
RemoveItems
|
Удалить элементы
|
4
|
SetActiveState
|
Установить
атрибут «active» для элемента
|
5
|
SetClientHandles
|
Установить для
элемента идентификатор клиента
|
6
|
SetDatatypes
|
Изменить тип
данных для одного или нескольких
элементов
|
7
|
CreateEnumerators
|
Создать перечисление
(список) элементов в группе
|
IOPCGroupStateMgt
|
8
|
GetState
|
Получить текущие
значения параметров группы
|
9
|
SetState
|
Установить
параметры группы (см. табл. 11.1)
|
10
|
SetName
|
Установить имя
группы
|
11
|
CloneGroup
|
Создать копию
группы (включая элементы)
|
IOPCPublicGroupStateMgt
|
12
|
GetState
|
Получить состояние
(определить, является ли группа
общей)
|
13
|
MoveToPublic
|
Сделать группу
общей
|
IOPCSyncIO
|
14
|
Read
|
Считать значения
одного или нескольких элементов
|
15
|
Write
|
Установить
значения одного или нескольких
элементов
|
IOPCAsyncIO
|
16
|
Read
|
Считать значения
одного или нескольких элементов
|
17
|
Write
|
Установить
значения одного или нескольких
элементов
|
18
|
Refresh
|
Повторно получить
значения запрошенных ранее элементов
|
19
|
Cancel
|
Отменить чтение
данных
|
20
|
SetState
|
Установить
значение атрибута «enable»
|
21
|
GetState
|
Получить значение
атрибута «enable»
|
IConnectionPointContainer
|
22
|
EnumConnectionPonts
|
Создать список
установленных соединений клиента
и группы
|
23
|
FindConnectionPoint
|
Получить указатель
на определенное соединение
|
IenumOPCItemAttributes
|
24
|
Next
|
Получить указатель
на «следующий» элемент списка
|
25
|
Skip
|
Пропустить
«следующий» элемент списка
|
26
|
Reset
|
Вернуться к
первому элементу в списке
|
27
|
Clone
|
Создать копию
списка
|
Разработка
OPC-клиента также предполагает как
реализацию логики взаимодействия с
получателем считываемых данных, так
и интерфейса IOPCDataCallback для получения
данных от сервера как результата
выполнения асинхронного чтения или
подписки на измененные данные. Для
реакции на запрос сервера о закрытии
соединений требуется реализовать
интерфейс IOPCShutdown. Для OPC-клиента, как
и для любого COM-приложения, обязательна
реализации интерфейса IUnknown.
Таблица
12.4. Интерфейсы OPC-клиента и их методы.
№
|
Метод
|
Описание
|
IOPCDataCallback
|
1
|
OnDataChange
|
Обработка
сообщения, содержащего измененные
данные
|
2
|
OnReadComplete
|
Обработка
сообщения о завершении асинхронного
чтения
|
3
|
OnWriteComplete
|
Обработка
сообщения о завершении асинхронной
записи
|
4
|
OnCancelComplete
|
Обработка
результата отмены асинхронного
действия
|
IOPCShutdown
|
5
|
ShutdownRequest
|
|
|