8.3.2 Интерфейсы и их методы объекта 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:
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 |
Cancel (dwCancelID); |
HRESULT |
Refresh(dwSource, dwTransactionID, pdwCancelID); |
HRESULT |
SetState(bEnable); |
HRESULT |
GetState(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); |
8.3.3 Объект EnumOPCItemAttributes
Интерфейс IEnumOPCItemAttributes:
HRESULT |
Next(celt, ppItemArray, pceltFetched); |
HRESULT |
Skip(celt); |
HRESULT |
Reset( void); |
HRESULT |
Clone(ppEnumItemAttributes); |
8.4 Поддержка технологии OPC в системе TraceMode
TraceMode может выступать в качестве OPC-сервера и OPC-клиента. В качестве OPC-клиента он поддерживает следующие режимы: SYNC/CACHE – синхронное чтение из кэша; SYNC/DEVICE – синхронный обмен данными с устройством; ASYNC/DEVICE – асинхронный обмен данными с устройством; ADVISE – асинхронное чтение данных при изменении их значения.
В режиме ADVISE принимаются значения, присылаемые по каналу подписки, которые присылаются сервером только при изменении значения параметра. В режиме ASYNC опрашивается OPC-сервер и принимаются данные, присылаемые по каналу подписки. Поддерживаемые типы данных: VT_R4 (FLOAT, 4 байта) – для каналов типа FLOAT и VT_I4 (INT, 4 байта) – для каналов типа HEX.
Доступ к значениям каналов через механизм OPC осуществляется с помощью программного шлюза. Он реализован в виде отдельного программного модуля, поддерживающего интерфейс OPC Data Access (OPCDA) версии 2.0. В состав шлюза OPC входят следующие файлы: opcgate.exe – исполнительный модуль шлюза; opccomn_ps.dll – библиотека поддержки DCOM для OPC 2.0; opcproxy.dll – библиотека поддержки DCOM для OPC 2.0. Шлюз должен быть зарегистрирован на том компьютере, где установлен TraceMode. Доступ к данным через шлюз осуществляется при условии работы TraceMode. Шлюз OPC для TraceMode имеет следующие идентификаторы: ProgID:"TraceMode.OPC_Gateway", CLSID:{D5238CB9-AEBE-11D2-B5E1-00409524E73B}.
8.5 Поддерживаемые интерфейсы
В качестве OPC-сервера TraceMode поддерживает следующие интерфейсы.
1. Интерфейсы сервера:
IOPCCommon – поддерживается (смена LCID реализована только для NT);
IOPCServer – поддерживается;
IOPCBrowseServerAddressSpace – поддерживается;
IconnectionPointContainer – (для IOPCShutdown) поддерживается;
2. Интерфейсы группы:
IOPCGroupStateMgt – все методы, кроме CloneGroup();
IOPCSyncIO – поддерживается;
IOPCAsyncIO2 – поддерживается;
IOPCItemMgt – поддерживается;
IOPCAsyncIO – поддерживается;
IdataObject – поддерживается;
IEnumOPCItemAttributes – поддерживается;
IconnectionPointContainer – (для IOPCDataCallback) поддерживается.
Для обращения к различным атрибутам каналов надо после имени канала через точку указать обозначение атрибута в мнемонике ТРЕЙС МОУД. Например, channel.R – реальное значение канала channel. Чтение значений атрибутов каналов разрешено всем OPC-клиентам.
Чтобы разрешить OPC-клиентам запись в каналы, можно использовать два механизма:
Создать в проекте пользователя с именем default (пароль не имеет значения) – в этом случае запись разрешена всем OPC-клиентам. Данный способ разрешения записи в каналы имеет наивысший приоритет.
Создать в реестре раздел HKEY_LOCAL_MACHINE\Software\AdAstra\TRACE MODE\5.0\OPC Gateway. Создать в нем следующие текстовые параметры и задать их значение: Login – имя пользователя; Password – пароль. Значения этих параметров, а также имя пользователя и пароль OPC-клиента, через шлюз OPC передаются серверу матобработки. В случае совпадения имен и паролей, OPC-клиент получает разрешение на запись в каналы. Данный способ имеет более низкий приоритет по отношению к первому. То есть, если имя и пароль OPC-клиента не совпадают с указанными в реестре, но при этом в проекте создан пользователь с именем default, OPC-клиент получает право на запись в каналы.
Если ни один из этих способов не применен, то запись в каналы запрещена, и операция Write возвращает ошибку E_FAIL.
Посредством своей программы OPC-клиент может установить значения трех системных переменных с целью проверки, разрешена ли ему запись в каналы: $OPCGATE_USER – имя пользователя; $OPCGATE_PASSWORD – пароль пользователя; $OPCGATE_LOGIN_STATUS – если запись разрешена, устанавливается в единицу.
8.6 Настройка обмена по OPC. Файл конфигурации
Для обмена данными с OPC-серверами предусмотрен специальный подтип каналов. Он называется OPC. МРВ может одновременно установить связь с 256-ю серверами. Для каждого из них создается файл конфигурации, в котором описываются его идентификаторы и соответствие его каналов каналам ТРЕЙС МОУД. Эти файлы располагаются в директории проекта. Их имя формируется следующим образом:
NODENAME_OPC<n>.CNF,
где NODENAME – имя базы каналов узла; <n> – номер от 0 до 255 (этот номер соответствует номеру сервера). Файлы конфигурации OPC-сервера имеют текстовый формат.
В первой строке файла присутствует следующая запись: %%OPC_SERVER_CONFIG.
Далее следуют строки, описывающие параметры сервера:
PROGID:<id>, где id – идентификатор в формате строки, под которым OPC-сервер зарегистрирован в системе.
CLSID:<id>, где id – идентификатор в формате GUID, под которым OPC-сервер зарегистрирован в системе. При наличии параметра CLSID параметр PROGID игнорируется.
HOSTNAME:<PC_name>, где PC_name – имя компьютера в сети. Этот параметр следует задать при обмене с удаленным OPC-сервером. В этом случае необходимо задать параметр CLSID.
Далее в файле описания следуют описания каналов.
Каждое описание начинается строкой: %CHANID:<id>, где <id> – идентификатор канала ТРЕЙС МОУД. Если файл конфигурации создается автоматически, то в нем прописываются числовые идентификаторы. При редактировании файла вручную можно указать имя канала.
После этой строки следует описание канала OPC-сервера: ID:<id>, где <id> – идентификатор канала OPC-сервера.
ACCPATH:<path>, где <path> – путь доступа (зависит от OPC-сервера). При отсутствии этого атрибута в качестве пути доступа принимается пустая строка.
Для доступа к удаленному серверу может потребоваться запуск утилиты DCOMCNFG.EXE и установка соответствующих разрешений. Удаленный сервер должен запускаться пользователем, имеющим достаточно прав.
В случае невозможности запуска OPC-серверов МРВ выдает код ошибки 50.
Контроль текущего состояния обмена по OPC осуществляется с помощью канала ДИАГНОСТИКА с дополнением к подтипу OPC. Значение этого канала определяет следующие ситуации в обмене:
0 – нормальная работа;
3 – ошибка записи;
4 – ошибка чтения;
5 – ошибка работы с памятью;
7 – ошибка конфигурации (конфигурационных файлов);
9 – ошибка связи с OPC-сервером;
11 – ошибка выполнения операции (вызова ОС или функции OPC);
12 – неизвестная ошибка.
