OPCGate - Описание


Оглавление



Введение


OPCGate — шлюз, предоставляющий любому Вашему приложению функциональность OPC DA сервера. Данный программный продукт состоит из двух компонентов: программы OPCGate.exe, являющейся собственно OPC сервером, и библиотеки OPCGate.lib, являющейся связующим звеном между OPC сервером и пользовательским приложением. Связь между компонентами осуществляется по защищенному SSL протоколу, клиентом выступает приложение OPCGate.exe, а сервером — библиотека OPCGate.lib. Подлинность клиента при соединении удостоверяется проверкой сертификата.

Готовый сконфигурированный пример, демонстрирующий работу OPC шлюза, состоящий из тестового приложения Test.exe, программы OPCGate.exe и OPC вьюера OPCView.exe можно найти в директории Demo1.

В начало страницы

Описание библиотеки OPCGate.lib


Общие замечания


Для обеспечения взаимодействия Вашего приложения с OPC шлюзом OPCGate, Вам необходимо написать собственный класс, унаследованый от предоставляемого библиотекой абстрактного базового класса TOPCGate. В дочернем классе необходимо реализовать три функции, декларируемые в родительском классе как чистые виртуальные:

virtual void __fastcall GetValues(TStrings *sl);
virtual void __fastcall Log(const AnsiString &msg);
virtual void __fastcall GetTags(TStrings *sl);

Кроме того, при изменении значений тэгов, необходимо обеспечить вызов функции базового класса

void __fastcall SetValues(TStrings *sl);

Пример реализации тестового приложения, работающего с библиотекой OPCGate.lib, можно найти в директории Test.

В начало страницы

Функция GetValues()


Функция

virtual void __fastcall GetValues(TStrings *sl);

должна заполнять список строк значениями тэгов. Пустой список предоставляет библиотека, очистка списка тоже лежит на ней. Формат строк значений тэгов - разделенные пробелами текстовые поля:

  • числовой индекс тэга (начиная с 1)
  • значение (числовое)
  • достоверность:
  • b - bad
  • g - good
  • дата
  • время

Для форматирования строк значений тэгов рекомендуется использовать статические функции класса

static AnsiString __fastcall FormatVal(int idx, bool val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, char val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, unsigned char val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, short val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, unsigned short val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, int val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, unsigned int val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, long val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, unsigned long val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, float val, bool good, 
  const TDateTime &dt);
static AnsiString __fastcall FormatVal(int idx, double val, bool good, 
  const TDateTime &dt);

переопределенные для различных типов переменных. Эти функции принимают следующие параметры:

  • idx - числовой индекс тэга (начиная с 1)
  • val - значение переменной тэга
  • good - признак достоверности
  • dt - метка времени

и возвращают сформированную строку, готовую для вставки в список.

В начало страницы

Функция Log()


Функция

virtual void __fastcall Log(const AnsiString &msg);

используется для протоколирования событий при отладке. Ее реализация - полностью на Ваше усмотрение. Например, можно воспользоваться классом файла-протокола TLog из библиотеки LIB_UTILS.

В начало страницы

Функция GetTags()


Функция

virtual void __fastcall GetTags(TStrings *sl);

должна заполнять список строк описаниями тэгов Пустой список предоставляет библиотека, очистка списка тоже лежит на ней. Формат строк описаний тэгов - разделенные пробелами текстовые поля:

  • числовой индекс тэга (начиная с 1)
  • имя тэга (иерархический разделитель - точка)
  • тип тэга:
  • b - bool
  • i1 - char
  • u1 - unsigned char
  • i2 - short
  • u2 - unsigned short
  • i4 - long
  • u4 - unsigned long
  • r4 - float
  • r8 - double
  • права доступа (для будущих версий, сейчас - только r):
  • r - read
  • rw - read/write
В начало страницы

Функция SetValues()


Функция

void __fastcall SetValues(TStrings *sl);

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

Замечание: индексы тэгов должны совпадать с теми, что определялись при формировании описания тэгов в функции GetTags().

В начало страницы

Вызов конструктора TOPCGate


Конструктор базового класса TOPCGate имеет две формы:

__fastcall TOPCGate(int port, TLogFlags logFlags, int connTOms, 
  int subsTOms, bool buffSubs);
__fastcall TOPCGate(int port, const AnsiString &certFile,	
  const AnsiString &keyFile, const AnsiString &rootCertFile,
  TLogFlags logFlags, int connTOms, int subsTOms, bool buffSubs);

Первая форма используется для связи по открытому протоколу, вторая по SSL. Параметры, передаваемые в конструктор:

  • port - слушающий TCP порт
  • certFile - файл сертификата сервера
  • keyFile - файл приватного ключа сервера
  • rootCertFile - файл сертификата удостоверяющего центра
  • logFlags - флаги протоколирования событий, объединенные по ИЛИ:
  • 0x0001 - протоколировать события, связанные с обработчиками ошибок
  • 0x0002 - протоколировать события, связанные с SSL и проверкой сертификатов
  • 0x0004 - протоколировать события, связанные с работой TCP сервера
  • 0x0008 - протоколировать события протокола прикладного уровня
  • connTOms - таймаут неактивного соединения (мс), партнер может переопределить это значение, но на величину не более, чем задана здесь
  • subsTOms - время ожидания приема от подписавшегося партнера (мс), партнер может переопределить это значение, но на величину не более, чем задана здесь
  • buffSubs - буферирование данных, перед отправкой подписавшемуся партнеру. Использование буферизации снижает трафик и повышает быстродействие при частом изменении значений параметров, но может приводить к потере промежуточных значений.
В начало страницы

Описание программы OPCGate.exe


Общие замечания


Программа OPCGate.exe построена на основе открытой библиотеки LightOPC, созданной Лабораторией сетевых информационных систем Института проблем информатики РАН (ИПИ РАН).

Для выполнения таких действий, как регистрация OPC сервера, необходимы права администратора. Кроме того, в операционных системах Windows Wista и Windows 7, необходим запуск программы от имени администратора. Так как в ходе работы программе OPCGate.exe необходимо осуществлять запись в файлы, директория, где расположена программа, не должна быть защищена от записи.

В начало страницы

Конфигурационный файл программы OPCGate.exe


Конфигурационный файл программы OPCGate.exe располагается в одном каталоге с программой и имеет имя OPCGate.cfg. В конфигурационном файле допускается наличие пустых строк в любом месте и количестве. Символ # является признаком строкового комментария и вся информация за ним до конца строки игнорируется.

Параметры конфигурационного файла

Общие параметры приложения
  • Title=OPC Gate - заголовок консольного окна приложения. Любая строка.
  • HideConsole=0 - скрывать окно приложения после запуска. Для отладки рекомендуется отключать (0), в последующем можно включить (1), чтоб на рабочем столе не мешались лишние окна.
Управление протоколированием событий
  • LogFlags=0x0 - объединенные по ИЛИ флаги протоколирования различных событий
  • 0x0001 - события, связанные с ошибками
  • 0x0002 - события запуска и остановки приложения
  • 0x0004 - события, связанные с чтением конфигурации
  • 0x0008 - события, связанные с SSL соединением
  • 0x0010 - события, связанные с работой TCP клиента
  • 0x0020 - события, связанные с OPC тэгами
  • 0x0040 - события, связанные с работой OPC сервера
  • 0x0080 - события, связанные с работой протокола обмена прикладного уровня
Параметры TCP клиента
  • Host=127.0.0.1 - IP-адрес сервера
  • Port=43211 - слушающий TCP порт сервера
Параметры SSL
  • SSL=1 - включить (1) SSL шифрование передачи междуклиентом и сервером. Отключить (0) шифрование можно на время отладки или, в крайнем случае, при нехватке быстродействия. Необходимо иметь ввиду, что при отключеном шифровании обмен ведется открытым текстом и отсутствует какое либо разграничение доступа.
  • CertFile=client.crt - файл клиентского сертификата, необходимого для установления SSL соединения с сервером и проверки прав клиента на подключение. Для упрощения генерации сертификатов можно воспользоваться набором командных файлов из подкаталога CA.
  • KeyFile=client.key - файл клиентского приватного ключа, необходимого работы с клиентским сертификатом.
Параметры протокола
  • ProtocolType=2 - тип протокола - циклический опрос сервера (1) или подписка на события, инициируемые сервером при изменении значения тэгов (2). Оптимальный протокол зависит от характера изменения данных и прочих условий. В общем случае рекомендуется использовать 2 для сокращения бесполезного трафика клиент-сервер.
  • ProtocolTO=1000 - таймаут ожидания ответа сервера в милисекундах
  • ProtocolCycle=5000 - для протокола типа 1 (циклический опрос сервера) - период опроса сервера в милисекундах, для протокола типа 2 (подписка на события, инициируемые сервером) - период пинга сервера в милисекундах, для подтверждения активности клиента.
  • ProtocolSrvConnTO=10000 - таймаут неактивности клиента в милисекундах, после которого он будет отключен сервером. Данный параметр при подключении передается серверу для согласования параметров обмена.
  • ProtocolSrvSubsTO=1000 - таймаут ожидания ответа клиента сервером в милисекундах при работе по протоколу 2 (подписка на события, инициируемые сервером). Данный параметр при подключении передается серверу для согласования параметров обмена.
Параметры OPC сервера
  • OPCClsID=OPCGate Demo1 Server - идентификатор класса OPC сервера
  • OPCProgID=OPC.OPCGate.demo1 - идентификатор программы OPC сервера
  • OPCGUID=22b9bbdf-efbf-4fc9-876c-e75ac60996d9 - глобальный идентификатор OPC сервера
  • OPCRefRate=0 - параметр для оптимизации работы OPC сервера, подробности в комментариях в файле lightopc.h в каталоге LightOPC (описание структуры loDriver).
  • OPCFlags=0 - объединенные по ИЛИ флаги, управляющие различными опциями OPC сервера, подробности в комментариях в файле lightopc.h в каталоге LightOPC (описание структуры loDriver).
В начало страницы

Параметры командной строки программы OPCGate.exe


Программа OPCGate.exe распознает следующие параметры командной строки:

  • -o или --out - перенаправление вывода программы в файл. После данной команды через пробел должно быть указано имя файла.
  • -h или --help - вывод краткой справки по ключам командной строки.
  • -u или --unregister - удаление регистрации OPC сервера.
  • -g или --guidgen - генерация нового уникального GUID.
  • -r или --register - регистрация OPC сервера.
  • -t или --tags - импорт списка тэгов из пользовательского приложения.

Допускается указывать одновременно несколько команд, разделяя их пробелами. При этом команды будут выполняться в том порядке, как они описаны выше. Запуск программы OPCGate.exe с параметрами командной строки инициирует выполнение указанных команд и выход из программы. Для работы в режиме OPC сервера необходим запуск без параметров. Выход из программы в этом случае, если консольное окно программы не скрыто в настройках, осуществляется нажатием комбинации клавиш Ctrl+Break или Ctrl+Break. При скрытом окне консоли для аварийного завершения программы пользуйтесь диспетчером задач (вкладка Процессы).

Для регистрации OPC сервера необходимо сгенерировать для него уникальный идентификатор GUID. Это можно сделать запустив программу OPCGate.exe с опцией командной строки -g. Чтобы не списывать GUID с консоли, можно указать программе вывод в файл посредством директивы -o <имя файла>, либо командами перенаправления ввода-вывода ОС. Сгенерированный GUID надо вписать как значению параметра OPCGUID конфигурационного файла. Далее можно произвести регистрацию сервера с помощью опции командной строки -r.
Внимание! Если необходимо изменить параметры регистрации (параметры настроечного файла OPCClsID, OPCProgID, OPCGUID), прежде чем выполнять изменения, необходимо разрегистрировать сервер со старыми параметрами, запустив программу с ключем -u.

После регистрации OPC сервера, необходимо импортировать список его тэгов путем запуска программы с опцией командной строки -t при запущенном пользовательском приложении. Результатом данной операции будет появление в директории программы файла OPCGate.tag. Данную операцию необходимо проделывать всякий раз при изменении состава тэгов пользовательской программы.

В начало страницы

Служебные OPC тэги


Помимо тэгов, представляющих технологические параметры, в адресном пространстве OPC сервера имеются два служебных тэга типа bool:

  • OPCGate.Connection
  • OPCGate.TagsHashGood

Первый из перечисленных тэгов указывает на состояние соединения между приложением OPCGate.exe и библиотекой OPCGate.lib. Истинное его значение означает успешно установленное соединение.

Второй из перечисленных тэгов указывает на соответствие списка тэгов приложения OPCGate.exe и списка тегов пользовательского приложения, предоставляемого им в библиотеку OPCGate.lib. Истинное его значение означает соответствие конфигурации, ложное — на несоответствие. В последнем случае необходимо выполнить импорт тэгов, запустив программу OPCGate.exe с параметром командной строки -t или --tags при запущенном пользовательском приложении.

В начало страницы