Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

АСУ Технологических Процессов- Новые Технологии #46


Служба Рассылок Subscribe.Ru проекта Citycat.Ru
АСУ Технологических Процессов- Новые Технологии  # 46

Мир Новых Технологий
  PingWin's Service

 

Не тот глуп, кто не знает, но тот, кто знать не хочет. /Г. С. Сковорода/

# Здравствуйте, уважаемые подписчики

  Обещал вам продолжить тему ОРС. Вот, пожалуй, с этого и начнем. Информация по протоколу.

Удачи, и всего наилучшего!
До встречи на Форуме АСУ ТП !

С уважением,
Дмитрий Милосердов
could@chat.ru

***

Сегодня в выпуске:

1.Протокол OPC (OLE for Process Control): описание и сравнение.

***
Протокол OPC (OLE for Process Control): описание и сравнение.

 Современные решения в области стандартизации связаны, прежде всего, с фирмой Microsoft. Это в первую очередь технология OPC (OLE for Process Control), т. е. OLE (Object Linking and Embedding) для технологического управления. Она представляет собой стандартный метод для доступа к периферийным устройствам, системам SCADA/MMI или другим промышленным приложениям, основанным на технологиях OLE, COM (Component Object Model) и DCOM (Distributed COM). В общих словах, OPC представлена набором стандартных объектов, методов и свойств, отвечающих требованиям промышленных приложений реального времени. Эти требования включают в себя синтаксис для доступа к объектам, эффективную передачу данных от оборудования к приложениям, способность клиента работать с несколькими серверами одновременно и поддержку конфигурации сервера. Программные пакеты на основе OPC легко интегрировать в бизнес-приложения, поддерживающие OLE. [5]
Первая версия OPC вышла в 1995 г. Она не претендовала на стандарт, но была призвана сыграть роль пробного камня для всех заинтересованных сторон. Основной упор был сделан на сбор данных. Более сложные задачи: сигнализация (оповещение о наступлении технологических событий), отслеживание трендов (последовательностей значений параметров, отражающих поведение технологического процесса), моделирование — отложены на будущее. В том же 1995 г. появилась независимая некоммерческая организация OPC Foundation. Цель ее деятельности централизация управления разработкой нового стандарта. В настоящее время она объединяет около 250 компаний, среди которых Fisher-Rosemount, Rockwell Software, Intellution [5]. В данный работе была использован стандарт второй версии OPC – версия 2.03 от 27 июля 1999 года.
Вкратце опишем интерфейс доступа к данным по протоколу (технологии) OPC.
Замечание: Для работы OPC требуется ОС Windows 95, Windows NT 4 и старше

Общие сведения

OPC-клиент может подключаться к OPC-серверу, поставляемую одним или большим числом вендоров.

Рис. .1. OPC Клиент

Различные вендоры могут разрабатывать различные OPC серверы. Код, предоставляемый вендором, определяет устройство и данные, к которым каждый сервер имеет доступ, ссылки на данные и детальную информацию как сервер физически обращается к данным. Спецификация об именовании в [6] .

Рис. .2. Взаимосвязь OPC Клиент/OPC Сервер.

На верхнем уровне OPC сервер представляется несколькими объектами: сервером, группой и тэгом. Объект OPC сервера содержит информацию о сервере и работает как контейнер для объектов OPC групп. Объект OPC группы содержит информацию о самом себе и обслуживает механизм для хранения в нем и логической организации тэгов OPC.
OPC группы предоставляют путь клиентам для организации данных. Например, группа может представляться тэгами в соответствующем операторском экране (кадре) или отчете. Данные могут быть считаны или записаны. Соединения, основанные на исключительных ситуациях, также могут быть созданы между клиентом и тэгом в группе, который может быть включен или выключен в зависимости от требований. OPC клиент может определять частоту, с которой OPC сервер должен предоставлять изменения данных OPC клиенту.
Возможны два типа групп: публичные (общедоступные) или локальные (конфиденциальные). Публичные группы необходимы для разделения между множеством клиентов. Локальные группы существуют только для одного клиента. Для публичных групп существуют отдельные/специфичные интерфейсы (см. [6]).
Внутри каждой группы клиент может определять (привязать) один или больше OPC тэгов.

Взаимоотношения Группа/Тэг

OPC тэги предоставляют связи к источникам данных в сервере. OPC тэг, исходя из точки зрения традиционного интерфейса, не доступен как объект для OPC клиента. Поэтому, для OPC тэга внешние интерфейсы не определены. Доступ к OPC тэгам можно получить через OPC группу, которая «содержит» OPC тэг, или, если выразиться иначе, определяет OPC тэг.
С каждым тэгом ассоциированы: Значение (Value), Качество (Quality) и Временная Метка (Time Stamp). Значение определено в COM типе Variant, Качество аналогично тому, как это сделано в Fieldbus, а Временная Метка соответствует типу Windows FILETIME.
Обратите внимание, что тэги не являются источниками данных, это лишь связи к ним. К примеру, тэги в РСУ располагаются там, где нужно системе, а не там, где их определил и где теперь получает данные OPC клиент. Проще всего понять OPC тэг как указатель на адрес с данными, но не как физический источник данных.

Где нужен OPC

Хотя OPC разработан в первую очередь для получения данных с сетевого сервера, интерфейсы (И/Ф) OPC могут быть использованы в самых различных местах приложения. На самом нижнем уровне они могут передавать «сырые» данные из физических устройств в РСУ или SCADA, или из РСУ или SCADA в приложение… Архитектура и дизайн делают возможным создание OPC сервера, который позволяет клиентским приложениям получать доступ к данным многих OPC серверов, предоставляемых различными вендорами OPC, работающих на различных узлах (контроллерах, АРМ и т.п.) через единственный объект.

Рис. .3. Взаимосвязь OPC Клиент/Сервер

Базовая архитектура OPC и Компоненты

OPC это спецификация для двух наборов интерфейсов (И/Ф): Традиционный OPC Интерфейс (OPC Custom Interfaces) и Автоматизированный OPC Интерфейс (OPC Automation interfaces). Пересмотренный Автоматизированный интерфейс предоставляется с вторым выпуском спецификации OPC. Там же определяется, что лучшим решением является создание двух различных подходов к созданию обоих типов и/ф, причем Автоматизированный И/Ф OPC – опционален. Это показано ниже.

Рис. .4. Интерфейсы OPC

 

Рис. .5. Стандартный OPC сервер

Спецификация OPC описывает COM интерфейсы (там, где это интерфейсы), а не наследование (не как наследовать) этих интерфейсов. Он описывает поведение, которым должны обладать эти интерфейсы для обслуживания клиентских приложений, пользующиеся ними. Как и все потомки COM, архитектура OPC – клиент-серверная модель, в которой OPC сервер, как компонента, обеспечивает интерфейс к OPC объектам и управляет ими. Также необходимо, чтобы сервер консолидировал и оптимизировал запросы к данным от различных клиентов, чтобы обеспечивать эффективную коммуникацию с физическим устройством. Для ввода (чтения), данные, возвращенные устройством, должны буферизироваться для асинхронного распространения или синхронного чтения различными OPC клиентами. Для вывода (записи), OPC сервер обновляет данные в физическом устройстве по «поручению» OPC клиентов.

Рис. .6. Стандартная группа OPC

Интерфейсы указанные в […] – опциональные, прочие же – обязательные. Интерфейсы обозначенные old считаются устаревшими и поддерживаются лишь для обратной совместимости. В дополнение к далеко неполному обзору стандарта OPC приведем описание доступных объектов, интерфейсов и методов:

OPCServer

IOPCServer

IOPCServerPublicGroups (optional)

IOPCBrowseServerAddressSpace (optional)

IOPCItemProperties (new 2.0)

IConnectionPointContainer (new 2.0)

IOPCCommon (new 2.0)

IPersistFile (optional)

OPCGroup

IOPCGroupStateMgt

IOPCPublicGroupStateMgt (optional)

IOPCASyncIO2 (new 2.0)

IOPCAsyncIO (obsolete - V1)

IOPCItemMgt

IConnectionPointContainer (new 2.0)

IOPCSyncIO

IDataObject (obsolete - V1)

EnumOPCItemAttributes

IEnumOPCItemAttributes

Объект OPCServer

IOPCCommon

HRESULT QueryAvailableLocaleIDs ( pdwCount, pdwLcid )
HRESULT GetErrorString ( dwError, ppString)
HRESULT SetClientName (szName)

IOPCServer

HRESULT AddGroup(szName, bActive, dwRequestedUpdateRate, hClientGroup, pTimeBias, pPercentDeadband, dwLCID, phServerGroup, pRevisedUpdateRate, riid, ppUnk)
HRESULT GetErrorString(dwError, dwLocale, ppString)
HRESULT GetGroupByName(szName, riid, ppUnk)
HRESULT GetStatus(ppServerStatus)
HRESULT RemoveGroup(hServerGroup, bForce)
HRESULT CreateGroupEnumerator(dwScope, riid, ppUnk)

 

IConnectionPointContainer

HRESULT EnumConnectionPoints( IEnumConnectionPoints ppEnum);
HRESULT FindConnectionPoint( REFIID riid, IConnectionPoint ppCP);

 

IOPCItemProperties

HRESULT QueryAvailableProperties(szItemID, pdwCount,
ppPropertyIDs, ppDescriptions, ppvtDataTypes );
HRESULT GetItemProperties (szItemID, dwCount, pdwPropertyIDs,
ppvData, ppErrors );
HRESULT LookupItemIDs( szItemID, dwCount, pdwPropertyIDs,
ppszNewItemIDs, ppErrors );

 

IOPCBrowseServerAddressSpace (optional)

HRESULT QueryOrganization(pNameSpaceType );
HRESULT ChangeBrowsePosition(dwBrowseDirection, szString );
HRESULT BrowseOPCItemIDs( dwBrowseFilterType, szFilterCriteria, vtDataTypeFilter, dwAccessRightsFilter, ppIEnumString );
HRESULT GetItemID( szItemDataID, szItemID );
HRESULT BrowseAccessPaths( szItemID, ppIEnumString );

 

IOPCServerPublicGroups (optional)

HRESULT GetPublicGroupByName(szName, riid, ppUnk);
HRESULT RemovePublicGroup(hServerGroup, bForce);

 

IPersistFile (optional)

HRESULT IsDirty();
HRESULT Load(pszFileName, dwMode);
HRESULT Save(pszFileName, fRemember);
HRESULT SaveCompleted( pszFileName);
HRESULT GetCurFileName( ppszFileName);

 

Объект OPCGroup

IOPCGroupStateMgt

HRESULT GetState(pUpdateRate, pActive, ppName, pTimeBias, pPercentDeadband, pLCID, phClientGroup, phServerGroup)
HRESULT SetState(pRequestedUpdateRate, pRevisedUpdateRate, pActive, pTimeBias, pPercentDeadband, pLCID, phClientGroup)
HRESULT SetName(szName);
HRESULT CloneGroup(szName, riid, ppUnk);

 

IOPCPublicGroupStateMgt (optional)

HRESULT GetState(pPublic);
HRESULT MoveToPublic(void);

 

IOPCSyncIO

HRESULT Read(dwSource, dwCount, phServer, ppItemValues, ppErrors)
HRESULT Write(dwCount, phServer, pItemValues, ppErrors)

 

IOPCAsyncIO2

HRESULT Read(dwCount, phServer, dwTransactionID, pdwCancelID, ppErrors,)
HRESULT Write(dwCount, phServer, pItemValues, dwTransactionID, pdwCancelID, ppErrors);
HRESULT Cancel2 (dwCancelID);
HRESULT Refresh2(dwSource, dwTransactionID, pdwCancelID);
HRESULT SetEnable(bEnable);
HRESULT GetEnable(pbEnable);

 

IOPCItemMgt

HRESULT AddItems(dwCount, pItemArray, ppAddResults, ppErrors)
HRESULT ValidateItems(dwCount, pItemArray, bBlobUpdate, ppValidationResults, ppErrors)
HRESULT RemoveItems(dwCount, phServer, ppErrors)
HRESULT SetActiveState(dwCount, phServer, bActive, ppErrors)
HRESULT SetClientHandles(dwCount, phServer, phClient, ppErrors)
HRESULT SetDatatypes(dwCount, phServer, pRequestedDatatypes, ppErrors)
HRESULT CreateEnumerator(riid, ppUnk)

 

IConnectionPointContainer

HRESULT EnumConnectionPoints( IEnumConnectionPoints ppEnum);
HRESULT FindConnectionPoint( REFIID riid, IConnectionPoint ppCP);

 

IOPCAsyncIO (old)

HRESULT Read(dwConnection, dwSource, dwCount, phServer, pTransactionID, ppErrors,)
HRESULT Write(dwConnection, dwCount, phServer, pItemValues, pTransactionID, ppErrors);
HRESULT Cancel (dwTransactionID);
HRESULT Refresh(dwConnection, dwSource, pTransactionID);

 

IDataObject (old)

HRESULT Dadvise(pFmt, adv, pSnk, pConnection);
HRESULT Dunadvise(Connection);

 

Объект EnumOPCItemAttributes

IEnumOPCItemAttributes

HRESULT Next(celt, ppItemArray, pceltFetched);
HRESULT Skip(celt);
HRESULT Reset( void);
HRESULT Clone(ppEnumItemAttributes);

 

Традиционный интерфейс (клиентская сторона)

IOPCDataCallback

HRESULT OnReadComplete(dwTransid, hGroup, hrMasterquality, hrMastererror, dwCount,
phClientItems, pvValues, pwQualities, pftTimeStamps, pErrors,);
HRESULT OnWriteComplete(dwTransid, hGroup, hrMastererr, dwCount, phClientItems,
pErrors);
HRESULT OnCancelComplete(dwTransid, hGroup);
HRESULT OnDataChange(dwTransid, hGroup, hrMasterquality, hrMastererror, dwCount,
phClientItems, pvValues, pwQualities, pftTimeStamps, pErrors,);

 

IOPCShutdown

Void ShutdownRequest(szReason);

 

IAdviseSink (old)

 

Void OnDataChange(pFE, pSTM);

 

***
Off-line Форум и конференция по вопросам автоматизации и АСУ ТП.
Для подписки на него Вы можете послать пустое письмо по
адресу-asutp-subscribe@egroups.com
В дальнейшем, для отправки сообщений и вопросов по АСУ ТП
писать на:asutp@egroups.com
Страничка Форума находится по адресу-http://www.egroups.com/group/asutp

***

У меня c Екатериной Калмыковой есть еще один совместный проект!
Рассылка "Секреты и откровения авторов рассылок" наверняка
заинтересует тех, кому захочется узнать больше об авторах-ведущих рассылок на сервере Городского Кота. Вам откроются личности и характеры ведущих рассылок в откровенных беседах на различные темы - от политики и экономики до
искусства и спорта.

Подпишитесь!
http://subscribe.ru/catalog/people.interview

***
                Copyright    2001 Дмитрий Милосердов
Копирование материалов обозрения разрешается только в случае указания на
"PingWin's Service" как на источник получения информации, при этом во всех ссылках обязательно явное указание адреса e-mail could@chat.ru
                            

ПРЕДУПРЕЖДЕНИЕ: "PingWin's  Service" является личной инициативой автора и работает без каких-либо гарантий !



http://subscribe.ru/
E-mail: ask@subscribe.ru
Поиск

В избранное