OpenSCADAWiki : Doc/API

API системы OpenSCADA


Статус:Публикация
Версия:0.5.0
Содержание:Cодержит исчерпывающее описание API системы OpenSCADA. Также содержится руководство по программированию ядра системы и созданию модулей для неё.

Оглавление документа


1 Внутренняя структура, API системы OpenSCADA.


Статическая диаграмма классов (136 Кб)
Рис. 1. Статическая диаграмма классов


2 Общая структура системы. Модульность (TSubSYS, TModule)

Корнем, от которого строится вся система, является объект TSYS. Корень содержит подсистемы (TSubSYS). Подсистемы могут быть: обычными и модульными. Отличие модульных подсистем четко прослеживается на рис. 1. Так, модульные подсистемы обязательно содержат список модульных объектов (TModule), например подсистема архивы TArchiveS содержит модульные объекты TTipArchivators. В тоже время обычная подсистема таких объектов не содержит. Например подсистема безопасности TSeсurity (рис.2).


Слоистая структура системы OpenSCADA (29 Кб)
Рис. 2. Слоистая структура системы OpenSCADA.

В процессе инициализации корня (TSYS) определяется глобальная переменная SYS. Переменная SYS может использоваться для прямого обращения к корню системы из любого её узла. Инициализация корня выполняется единожды из главной вызывающей функции. После запуска управление захватывается объектом системы до остановки. Корневой объект концентрирует все обшесистемные функции системы OpenSCADA.


Продолжением корневого объекта (TSYS), выполняющего функции обслуживания потока системных сообщений, выступает объект TMess. Объект доступен посредством глобальной переменной Mess, которая инициализируется корнем системы. Объект содержит функции кодирования, декодирования и локализации сообщений.


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


Модуль – составная часть модульной подсистемы. В общем, для всех модулей и их подсистем, модуль предоставляет информацию о себе, своём происхождении и экспортируемых функциях. Отдельно взятый модуль реализует функциональность в соответствии со своими потребностями.

2.1 Корневой объект системы (TSYS)

Наследует:TCntrNode.

Данные:
Способы кодирования символьных последовательностей (enum – IO::Code):


Виды представления целого в функциях TSYS::int2str() и TSYS::ll2str() (enum – IO::IntView):


Шаблоны:


Публичные методы:

2.2 Объект сообщений системы (TMess)


Данные:
Типы (уровни) сообщений (enum – TMess::Type):


Структура сообщения (struct – TMess::SRec):


Публичные методы:

1 – в syslog;
2 – в stdout;
4 – в stderr;
8 – в архив.

2.3 Объект подсистемы (TSubSYS)

Наследует:TCntrNode.
Наследуется:TArchiveS, TProtocolS, TBDS, TFunctionS, TSeсurity, TModShedul, TTransportS, TUIS, TSpecialS, TControllerS, TParamS.

Публичные методы:


Защищённые методы:

2.4 Объект модуля (TModule)

Наследует:TCntrNode.
Наследуется:TProtocol, TTipBD, TTipArchive, TTipTransport, TUI, Tspecial, TTipController.

Данные:
Структура данных идентифицирующей модуль (struct – TModule::SAt):


Структура экспортируемых функций (class – TModule::ExpFunc):


Публичные методы:


Защищённые атрибуты:


Защищённые методы:


3 Подсистема “Базы Данных” (TBDS)

Подсистема «Базы Данных» представлена объектом TBDS который содержит модульные объекты типов БД TTipBD. Каждый тип базы данных содержит объекты отдельно взятых баз данных данного типа TBD. Каждая БД, в свою очередь, содержит объекты своих таблиц TTable (рис. 3).


Слоистая структура подсистемы БД (30 Кб)
Рис. 3. Слоистая структура подсистемы БД.

Подсистема представляет базовые функции для доступа к типам БД, а также обобщающие функции для манипуляции с базами данных и таблицами. Так, для скрытия источника данных, которым может быть и конфигурационный файл, предоставляются функции абстрактного доступа к источнику данных. А для хранения обще-системных данных предоставляется системная таблица и функции абстрактного доступа к ней. Следовательно, обще-системные данные могут храниться как в конфигурационном файле, так и в таблице БД. Приоритетным источником, в таком случае, является таблица БД.


Являясь модульным объектом, тип БД (TTipBD) содержит доступ к реализации механизма той или иной БД. Доступ производится посредством открытых БД модуля отдельно взятого типа БД. Открываемые/регистрированные БД описываются в таблице открываемых БД или в конфигурационном файле. Существует, так называемая, рабочая БД, которая открывается всегда и указывается в конфигурационном файле. БД поддерживающие SQL-запросы могут предоставлять доступ основанный на прямых SQL-запросах.


В процессе использования, компоненты системы OpenSCADA открывают таблицы (TTable) в доступных БД и работают с ними.

3.1 Объект подсистемы «Базы Данных» (TBDS)

Наследует:TSubSYS.

Публичные методы:

3.2 Модульный объект типов баз данных (TTipBD)

Наследует:TModule.
Наследуется:Корневыми объектами модулей подсистемы «БД».

Публичные методы:

3.3 Объект базы данных (TBD)

Наследует:TCntrNode.
Наследуется:Объектами баз данных модулей подсистемы «БД».

Публичные методы:


Защищённые методы:

3.4 Объект таблицы (TTable)

Наследует:TCntrNode.
Наследуется:Объектами таблиц модулей подсистемы «БД».

Публичные методы:


4 Подсистема “Сбор данных” (TDAQS)

Подсистема “Сбор данных” представлена объектом TDAQS, который содержит модульные объекты типов источников данных TTipDAQ. Объект типов источников данных содержит объекты контроллеров TController и объекты типов параметров TTipParam. Объекты типов параметров предоставляются модулем контроллера и содержат структуру БД отдельных типов параметров (аналоговые, дискретные ...). Объекты контроллеров содержат объекты параметров TParamContr. Каждый параметр ассоциируется с одним из типов параметров. Для хранения атрибутов, параметр наследуется от объекта значений TValue, который и содержит значения атрибутов TVal (рис. 4).


Слоистая структура подсистемы подсистемы сбора данных (51 Кб)
Рис. 4. Слоистая структура подсистемы сбора данных.

Подсистема содержит типы источников данных. Источником может выступать практически любая сущность предоставляющая какие либо данные. Тип источника может делится на отдельные источники (контроллеры) в пределах конкретного типа. Например, если взять данные из операционной системы (ОС), то под отдельным источником можно понимать операционную систему отдельного ПК.


Источник данных (контроллер) делится, или содержит, параметры. Под параметром подразумевается какая-то часть источника данных. В случае с ОС это будет, например: расход оперативной памяти, частота процессора и много других составных частей.


Параметр, в свою очередь, содержит атрибуты, которые и предоставляют данные. Кроме основных данных атрибутами могут предоставляться и сопутствующие или детализирующие данные. В случае тойже ОС и расхода памяти, атрибутами может предоставляться не только занятая память, а также и сколько её всего, сколько в свопе и т.д.

4.1 Объект подсистемы «Сбор данных» (TDAQS)

Наследует:TSubSYS, TElem.

Публичные методы:

4.2 Модульный объект типа контроллера (TTipDAQ)

Наследует:TModule, TElem.
Наследуется:Корневыми объектами модулей подсистемы «Сбор данных».

Публичные методы:


Защищённые методы:

4.3 Объект контроллера (TController)

Наследует:TModule, TConfig.
Наследуется:Объектами контроллеров модулей подсистемы «Сбор данных».

Публичные методы:


Защищённые атрибуты:


Защищённые методы:

4.4 Объект типа параметров (TTipParam)

Наследует:TElem.

Публичные методы:

4.5 Объект параметра физического уровня (TParamContr)

Наследует:TConfig, TValue.
Наследуется:Объектами параметров модулей подсистемы «Сбор данных».

Публичные методы:


Защищённые методы:

4.6 Объект значения (TValue)

Наследует:TValElem, TCntrNode.
Наследуется:TParamContr.

Публичные методы:


Защищённые методы:

4.7 Объект атрибута (TVal).

Наследует:TCntrNode.

Данные:
Дополнительные флаги к объекту TFld (define):


Значения ошибки для различных типов данных:


Публичные методы:


Защищённые методы:


5 Подсистема “Архивы” (TArchiveS)

Подсистема «Архивы» представлена объектом TArchiveS который содержит, на уровне подсистемы, модульные объекты типов архиваторов TTipArchivator. Каждый объект типа архиватора содержит объекты архиваторов сообщений TMArchivator и архиваторов значений TVArchivator. Кроме этого объект подсистемы архивы содержит методы архива сообщений и объекты архивов значений TVArchive. Объект архива значений TVArchive содержит буфер значений путём наследования объекта буфера TValBuf. Для связи архива значений с архиваторами предназначен объект элемента значения TVArchEl. Этот объект содержится в архиваторе и на него ссылается архив. Структура подсистемы «Архивы» представлена на рис. 5.


Слоистая структура подсистемы архивов (36 Кб)
Рис. 5. Слоистая структура подсистемы архивов.

Подсистема «Архивы». Содержит механизмы архивирования сообщений и значений. Непосредственно содержит архив сообщений вместе с его буфером. Содержит методы доступа к архивам значений и архиваторам значений и сообщений. Кроме этого выполняет задачу активного сбора данных из источников значений для архивов значений, а также архивирование архива сообщений по архиваторам.


Архив значений (TVArchive) cодержит буфер (TValBuf) для промежуточного накопления значений перед архивированием. Связывается с источником значений в лице параметров системы OpenSCADA в активном или пассивном режиме, а также с другими источниками в пассивном режиме. Для архивирования на физические хранилища связывается с архиваторами значений различных типов.


Объект буфера TValBuf cодержит массив значений основных типов системы OpenSCADA: строка, целое, вещественное и логичное. Поддерживается хранение значений в режимах жесткой, мягкой сетки и режиме свободного доступа. Предусмотрен, также, режим времени высокого разрешения (микросекунды). Используется как для непосредсвенного хранения больших массивов значений, так и для обмена с большими масивами методом покадрового доступа.


Корневой объект модуля подсистемы «Архивы» (TTipArchivator) cодержит информацию о конкретно взятом типе модуля. В рамках отдельных модулей может реализовывать собственные общемодульные функции. В общем, для модулей этого типа, содержит методы доступа к хранилищам значений и сообщений.


Объект архиватора сообщений (TMArchivator) содержит конкретную реализацию хранилища сообщений. В общем, для архиваторов сообщений, предоставляется интерфейс для доступа к реализации механизма архивирования.


Объект архиватора значений (TVArchivator) содержит конкретную реализацию хранилища значений. В общем, для архиваторов значений, предоставляется интерфейс для доступа к реализации механизма архивирования и назначение архивов значений на обслуживание архиватором.


Объект элемента архива TVArchEl связывает объекты архивов с архиваторами. Используется для доступа к архиваторам из архива, а также к архивам из архиватора, т.е. для перекрёстных вызовов.

5.1 Объект подсистемы «Архивы» (TArchiveS)

Наследует:SubSYS.

Публичные методы:

5.2 Объект архива значений (TVArchive)

Наследует:TCntrNode, TValBuf, TConfig

Данные:
Режим сбора данных/источник (struct – TVArchive::SrcMode):


Публичные методы:

5.3 Объект буфера значений (TValBuf)

Наследуется:TVArchive

Публичные методы:


Защищённые методы:

5.4 Модульный объект типа архиватора (TTipArchivator)

Наследует:TModule.
Наследуется:Корневыми объектами модулей подсистемы «Архивы».

Публичные методы:


Защищённые методы:

5.5 Объект архиватора сообщений (TMArchivator)

Наследует:TCntrNode, TConfig
Наследуется:Объектами архиваторов сообщений модулей подсистемы «Архивы».

Публичные методы:


Защищённые атрибуты:


Защищённые методы:

5.6 Объект архиватора значений (TVArchivator)

Наследует:TCntrNode, TConfig
Наследуется:Объектами архиваторов значений модулей подсистемы «Архивы».

Публичные методы:


Защищённые методы:


Защищённые атрибуты:

5.7 Объект элемента архива в архиваторе (TVArchEl)

Наследуется:Объектами архиваторов значений модулей подсистемы «Архивы».

Публичные методы:


6 Подсистема «Транспорты» (TTransportS)

Подсистема «Транспорты» представлена объектом TTransportS который содержит, на уровне подсистемы, модульные объекты типов транспортов TTipTransport. Каждый тип транспорта содержит объекты входящих TTransportIn и исходящих TTransportOut транспортов. Общая структура подсистемы приведена на рис. 6.


Слоистая структура подсистемы транспортов (34 Кб)
Рис. 6. Слоистая структура подсистемы транспортов.

Корневой объект модуля подсистемы «Транспорты» содержит информацию о конкретно взятом типе модуля. В рамках отдельно взятого модуля может реализовывать собственные общемодульные функции. В общем, для всех модулей, содержит методы доступа к входящим и исходящим транспортам конкретно взятого модуля.


Объект входящего транспорта TTransportIn предоставляет интерфейс к реализации модульного метода входящего транспорта.


Объект исходящего транспорта TTransportOut предоставляет интерфейс к реализации модульного метода исходящего транспорта.

6.1 Объект подсистемы «Транспорты» (TTransportS)

Наследует:TSubSYS.

Публичные методы:

6.2 Модульный объект типа транспортов (TTipTransport)

Наследует:TModule.
Наследуется:Корневыми объектами модулей подсистемы «Транспорты».

Публичные методы:


Защищённые методы:

6.3 Объект входящих транспортов (TTransportIn)

Наследует:TCntrNode, TConfig.
Наследуется:Объектами входящих транспортов модулей подсистемы «Транспорты».

Публичные методы:


Защищённые атрибуты:


Защищённые методы:

6.4 Объект исходящих транспортов (TTransportOut)

Наследует:TCntrNode, TConfig.
Наследуется:Объектами исходящих транспортов модулей подсистемы «Транспорты».

Публичные методы:


Защищённые атрибуты:


Защищённые методы:


7 Подсистема “Протоколы коммуникационных интерфейсов” (TProtocolS)

Подсистема «Протоколы коммуникационных интерфейсов» представлена объектом TProtocolS, который содержит, на уровне подсистемы, модульные объекты отдельных протоколов TProtocol. Каждый протокол содержит объекты открытых сеансов входящих протоколов TProtocolIn.


Объект TProtocolS предоставляет доступ к входящим протоколам отдельно взятых типов транспортных протоколов.

7.1 Объект подсистемы «Протоколы коммуникационных интерфейсов» (TProtocolS)

Наследует:TSubSYS.

Публичные методы:

7.2 Модульный объект протокола (TProtocol)

Наследует:TModule.
Наследуется:Корневыми объектами модулей подсистемы «Протоколы».

Публичные методы:

7.3 Объект сеанса входящего протокола (TProtocolIn)

Наследует:TCntrNode.
Наследуется:Объектами сеанса входящего протокола модулей подсистемы «Протоколы».

Публичные методы:


8 Подсистема “Пользовательские интерфейсы” (TUIS)

Подсистема «Пользовательские интерфейсы» представлена объектом TUIS который содержит, на уровне подсистемы, модульные объекты пользовательских интерфейсов TUI.

8.1 Объект подсистемы «Пользовательские интерфейсы» (TUIS)

Наследует:TSubSYS.

Публичные методы:

8.2 Модульный объект пользовательского интерфейса (TUI)

Наследует:TModule.
Наследуется:Корневыми объектами модулей подсистемы «Пользовательские интерфейсы».

Защищённые методы:


Защищённые атрибуты:


9 Подсистема “Специальные” (TSpecialS)

Подсистема «Системные» представлена объектом TSpecialS, который содержит, на уровне подсистемы, модульные объекты специальных TSpecial.

9.1 Объект подсистемы «Специальные» (TSpecialS)

Наследует:TSubSYS.

Публичные методы:

9.2 Модульный объект специальных (TSpecial)

Наследует:TModule.
Наследуется:Корневыми объектами модулей подсистемы «Специальные».

Защищённые методы:


Защищённые атрибуты:


10 Подсистема “Безопасность” (TSeсurity)

Подсистема безопасности представлена объектом TSeсurity, который содержит объекты групп TGroup и пользователей TUser.


Объект пользователя TUser cодержит пользовательскую информацию и выполняет проверку аутентичности пользователя в соответсвии с указанным паролем.


Объект пользователя TGroup содержит информацю о группе пользователей и выполняет проверку на принадлежность пользователя к группе.

10.1 Объект подсистемы «Безопасность» (TSeсurity)

Наследует:TSubSYS.

Публичные методы:

10.2 Объект пользователя (TUser)

Наследует:TCntrNode, TConfig.

Публичные методы:

10.3 Объект группы пользователей (TGroup)

Наследует:TCntrNode, TConfig.

Публичные методы:


11 Подсистема “Управление модулями” (TModSchedul)

Подсистема «Управление модулями» представлена объектом TModSchedul.


Подсистема содержит механизм управления модулями содержащимися в разделяемых библиотеках.

11.1 Объект подсистемы «Управление модулями» (TModSchedul)

Наследует:TSubSYS.

Данные:
Структура информации о разделяемой библиотеке (struct – TModSchedul::SHD):


Структура информации о модуле (struct – TModSchedul::SUse):


Публичные методы:


12 Подсистема “Параметры” (TParamS)

Подсистема «Параметры» представлена объектом TParamS, который содержит объекты параметров логического уровня TParam и шаблоны параметров TPrmTempl.


Подсистема выполняет периодический обсчёт параметров построенных на основе шаблонов.


Объект параметра логического уровня TParam предоставляет механизм связывания с параметрами физического уровня, а также рекурсивное связывание с параметрами логического уровня. Реализованы механизмы: прямого отражения и связывание по шаблону.


Общий принцип формирования параметра логического уровня представлено на рис.7.


Структура параметра логического уровня (37 Кб)
Рис. 7. Формирование параметра логического уровня по шаблону.

Объект шаблона параметра содержит структуру шаблона параметра основанную на функциях объектной модели системы OpenSCADA, добавляя к структуре функции описание связей параметра функции.

12.1 Объект подсистемы «Параметры» (TParamS)

Наследует:TSubSYS

Публичные методы:

12.2 Объект параметра логического уровня (TParam)

Наследует:TValue, TConfig

Данные:
Режимы функционирования параметра логического уровня (enum – TParam::Mode):


Публичные методы:

12.3 Объект шаблона параметра (TPrmTempl)

Наследует:TCntrNode, TConfig.

Данные:
Режим отражения параметра функции на атрибут параметра логического уровня (enum – TPrmTempl::AttrMode):


Режим доступа к параметру функции шаблона (enum – TPrmTempl::AccMode):


Структура параметров функции для шаблона (class – TPrmTempl::SIOPrm):


Публичные методы:


13 Компоненты объектной модели системы OpenSCADA

Объектная модель системы OpenSCADA строится на основе объекта функции TFunction, параметрах функции IO и кадре значений функции TValFunc. В последствии, объекты функции включаются в объектное дерево формируя объектную модель системы. Использование функций объектной модели производится путём связывания кадра значений TValFunc с функцией.


Идея в целом доступно представленна на рис. 8.


Основа среды программирования системы OpenSCADA. (71 Кб)
Рис. 8. Основа среды программирования системы Open SCADA?.

Объект функции (TFunction) предоставляет интерфейс для формирования параметров функции и алгоритма вычисления в объекте наследующем его.


Объект параметра функции (IO) cодержит конфигурацию отдельно взятого параметра.


Объект кадра значений (TValFunc) содержит значения в соответствии со структурой связанной функции. При исполнении алгоритма ассоциированой функции используются значения этого объекта.

13.1 Объект функции (TFunction)

Наследует:TCntrNode
Наследуется:Модулями и узлами систем содержащими функции для публикации в объектную модель системы.

Публичные методы:


Защищённые атрибуты:


Защищённые методы:

13.2 Объект параметра функции (IO)


Данные:
Типы параметра (enum – IO::Type):


Режимы параметра (enum – IO::Mode):


Публичные методы:

13.3 Объект значения функции (TValFunc).


Публичные методы:


14 Данные в системе OpenSCADA и их хранение в БД (TConfig)

Хранение данных в системе построено на объектах TConfig и TElem. Эти объекты хранят структуру и значения полей БД, что позволяет выполнять прямую загрузку и сохранение конфигурации через подсистему «БД».


Объект TElem содержит структуру записи БД. Структура записи содержит исчерпывающую информацию о элементах, их типах, размерах и остальных параметрах. Информации в данной структуре достаточно для создания, контроля и управления реальной структурой БД. Элементарной единицей записи является ячейка Tfld.


Объект TСonfig является наследником от TElem и содержит реальные значения элементов. TConfig используется в качестве параметра в функциях манипуляции с записями таблиц в подсистеме «БД». Элементарной единицей записи является ячейка TCfg.


Для предоставления возможности предупреждения хранилища данных о смене структуры предусмотрен объект TValElem, от которого наследуется хранилище TConfig и список которых содержится в структуре TElem.

14.1 Объект данных (TConfig)

Наследует:TValElem
Наследуется:TParamContr, TController, TArchiveMess, TArchiveVal, TTransportIn, TTransportOut, TUser, TGroup, TParamS, а также модульные объекты хранящие свои данные в БД.

Публичные методы:


Защищённые методы:

14.2 Ячейка данных (TCfg)


Данные:
Дополнительные флаги к TFld (define):


Публичные методы:

14.3 Объект структуры данных (TElem)

Наследуется:TTipParam, TControllerS, TTipController, а также модульными объектами совмещающими функции хранения структуры.

Публичные методы:

14.4 Ячейка структуры данных (TFld)


Данные:
Тип ячейки (enum – TFld::Type):


Флаги ячейки (define):


Публичные методы:

14.5 Объект упреждения про смену структуры (TValElem)

Наследуется:TValue, TConfig.

Защищённые методы:


15 Интерфейс управления системой и динамическое дерево объектов системы (TCntrNode)

Для полного покрытия ключевых компонентов системы сетью объектов единой структуры предназначен объект узла динамического дерева TCntrNode. На этот объект возлагаются функции:


Любой объект имеющий потребность в предоставлении динамического доступа к себе или своим компонентам должен наследоваться от объекта узла динамического дерева TCntrNode. Данное родство автоматически включает узел в динамическое дерево объектов охваченное как прямой так и обратной связью, а также предоставляет возможность создания контейнеров под собственные дочерние узлы. Также, узел получает возможность упреждения про включение и исключение/удаление узла из дерева, с возможностью отказа от исключения/удаления.


Интерфейс управления системы включён в состав объекта TCntrNode и соответственно охватывает все узлы динамического дерева системы позволяя единообразно управлять системой в не зависимости от используемого инструмента. Интерфейс управления системой выполнен на основе языка разметки XML. Можно придумать множество способов использования интерфейса управления системой, в качестве примера отметим следующие наиболее яркие решения:


Интерфейс управления системой реализован посредством двух составляющих:


Информационная иерархическая структура содержит информацию о публичных элементах управления и может быть использована для построения диалогов управления узлами системы.


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


Общий интерфейс управления строится из отдельных узлов динамического дерева. Иерархичность наследования от объекта TCntrNode позволяет реализовывать многоуровневое дополнение конфигурации интерфейса управления. Общий вид динамического дерева узлов представлен на рис. 9.


Пример динамического дерева узлов системы OpenSCADA. (100 Кб)
Рис. 9. Пример динамического дерева узлов системы OpenSCADA.

Узлы системы, содержащие данные для интерфейса управления системой, также, должны подключаться в динамическое дерево объектов. Подключение узла к динамическому дереву производится следующим образом:

15.1 Информационные теги интерфейса управления системой

Информационные теги для языка XML составляют алфавит формирования описания конфигурационных диалогов.

Тег области <area>

Область описываются тегом <area> и предназначены для группировки элементов по различным признакам. Область может включать другие элементы, и области. Корневые области формируют закладки, в представлении пользовательского интерфейса.

<area id='base' dscr='Base information'>
  <fld id='host' dscr='Host name' acs='0444' tp='str'/>
  <fld id='user' dscr='Operated user' acs='0444' tp='str'/>
  <fld id='sys' dscr='Station system' acs='0444' tp='str'/>
  <area id='other' dscr='Other options'>
     <fld id='val' dscr='Value' acs='0664' tp='real'/>
  </area>    
</area>

Теги данных

Теги описывающие данные приведены в таблице 1.


Таблица 1. Теги описывающие данные

ТегОписание
<fld>Простейшие данные строкового, целого, вещественного и логического типов.
<list>Списки с данными строкового, целого, вещественного и логического типов.
<table>Таблицы с данными в ячейках строкового, целого, вещественного и логического типов.
<img>Изображения.

Тег <fld>

<fld id='host' dscr='Host name' acs='0444' tp='str'/>
<fld id='user' dscr='Operated user' acs='0444' tp='str'/>
<fld id='sys' dscr='Station system' acs='0444' tp='str'/>

Тип элемента описываемого тегом <fld> указывается атрибутом <tp> (таблица 2).


Таблица 2. Значения атрибута <tp> тега <fld>.

Тег <tp>Описание
strСтроковый тип.
<fld id='host' dscr='Host name' acs='0444' tp='str'> server </fld>
decЦелое число в десятичном представлении.
<fld id='debug' dscr='Debug level' acs='0660' tp='dec' min='0' max='8'> 7 </fld>
octЦелое число в восьмеричном представлении.
<fld id='cr_file_perm' dscr='Make files permissions(default 0644)' acs='0660' tp='oct' len='3'/> 0600 </fld>
hexЦелое число в шестнадцатеричном представлении.
realВещественное число.
boolЛогический признак («false»|"true").
<fld id='log_sysl' dscr='Direct messages to syslog' acs='0660' tp='bool'> true </fld>
timeВремя в секундах (от 01/01/1970).
<fld id='v_beg' tp='time'>FF4556DA</fld>

Таблица 3. Действия над элементом описанным тегом <fld>.

ОперацияДействие
Опрос
  • Запрос: запрос содержимого, команда «Get».
  • Результат: значение в тексте тега.
Модификация
  • Запрос:
    • инициализация тега: <set>value</set>;
    • отправка запроса, команда «Set».

Тег <list>

<list id='mod_auto' dscr='List of shared libs(modules)' tp='str' dest='file'>
   <el id='0'>./MODULES/arh_base.o</el>
   <el id='1'>./MODULES/cntr_sys.o</el>
</list>

Тип элементов в списке указывается атрибутом <tp>. Значения атрибута <tp> приведены в таблице 1.


Таблица 4. Действия над списком.

ОперацияДействие
Опрос
  • Запрос: запрос содержимого, команда «Get».
  • Результат: строки в тегах <el>.
Добавление строки
  • Запрос: инициализация тега: <add id='tst'>Test</add>
Читается как – добавить строку с индексом «tst» и значением «Test». Если список неиндексированный то атрибут id отсутствует.
  • Отправка запроса, команда «Set».
Вставка строки
  • Запрос: инициализация тега: <ins pos='3' p_id='tst1' id='tst' >Test</ins>
Читается как – вставить строку с индексом «tst» и значением «Test» в позицию 3 со строкой «tst1». В случае индексного списка атрибут p_id содержит индекс иначе текст строки. Если список неиндексированный то атрибут id отсутствует.
  • Отправка запроса, команда «Set».
Удаление строки
  • Запрос: инициализация тега: <del pos='3' id='tst'>Test</del>
Читается как – удалить строку с индексом «tst» и значением «Test» в позиции 3. Если список неиндексированный то атрибут id отсутствует.
  • Отправка запроса, команда «Set».
Изменение строки
  • Запрос: инициализация тега: <edit pos='3' p_id='tst1' id='tst' >Test</edit>
Читается как – заменить строку в позиции 3 на строку с индексом «tst» и значением «Test». В случае индексного списка атрибут p_id содержит индекс иначе текст строки. Если список неиндексированный то атрибут id отсутствует.
  • Отправка запроса, команда «Set».
Перемещение строки
  • Запрос: инициализация тега: <move pos='3' to='5'/>
Читается как – переместить строку с позиции 3 в позицию 5.
  • Отправка запроса, команда «Set».

Тег <table>

<table id='a_mess' key='0'>
  <list id='0' tp='str'>
    <el id='0'>Sat Feb 21 18:04:16 2004</el>    
  </list>
  <list id='1' tp='str'>
    <el id='0'>SYS</el>
  </list>
  <list id='2' tp='str'>
    <el id='0'>*:(TSYS)Broken PIPE signal allow!</el>
  </list>
</table>

Если указан атрибут <key> и в нём перечислены ключевые колонки, то работа с таблицей переходит в режим адресации по идентификаторам колонок и ключам.


Таблица 5. Действия над таблицей.

ОперацияДействие
Опрос
  • Запрос: Запрос содержимого. Команда «Get».
  • Результат: Группа списков <list> с строками в тегах <el>.
Добавление строки
  • Запрос: Инициализация тега: <add/>. Добавление строки.
  • Отправка запроса. Команда «Set».
Вставка строки
  • Запрос: Инициализация тега: <ins row='3'/>. Вставка строки в позицию 3.
Данная команда не работает при установленном атрибуте <key>!
  • Отправка запроса. Команда «Set».
Удаление строки
  • Запрос: Инициализация тега: <del row='3'/>. Удалить строку в позиции 3.
Если определён атрибут <key>, то тег запишется: <del key_id='Test'/>. Удаление строки в позиции где значение колонки <id> равно 'Test'.
  • Отправка запроса. Команда «Set».
Перемещение строки
  • Запрос: Инициализация тега: <move row='3' to='5'/>. Переместить строку с позиции 3 в позицию 5.
Данная команда не работает при установленном атрибуте <key>!
  • Отправка запроса. Команда «Set».
Изменить ячейку
  • Запрос: Инициализация тега: <set row='3' col='id'> Test </set>. Установить значение ячейки в строке 3 и колонке 'id' в «Test».
Если определён атрибут <key>, то тег запишется: <set key_id='Test' col='id'>Test1</set>. Установка колонки с именем 'id' строки в позиции где значение колонки <id> равно 'Test' в значение 'Test1'. Практически, данная команда переименовывает ключевой элемент указанной строки.
  • Отправка запроса. Команда «Set».

Тег <img>

<img id='ico' descr='Иконка страницы'>
// Mime Base64 кодированный файл изображения иконки
</img>

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

Команды с параметрами. Тег <comm>

<comm id='add'>
  <fld id='tm' tp='time'/>
  <fld id='cat' tp='str'/>
  <fld id='lvl' tp='dec' min='0' max='7'/>
  <fld id='mess' tp='str'/>
</comm>

Предназначен для передачи команд и действий узлу. Команды могут включать параметры. Параметры описываются тегом <fld>.
Команда инициализируется запросом на модификацию. В качестве аргументов запроса выступают путь к тегу <comm> и ветка этого тега с инициализированными параметрами в тегах <fld>.

Ветки (дочерние узлы)

<list id='k_br' dscr='Kernel branches' tp='br' mode='att'>
  <el id='0'>kern1<el/>
  <el id='1'>kern2<el/>
</list>

Ветки описываются обычным списком <list> со специальными атрибутами tp='br' и mode='att|at'.
Методика запроса и модификации веток полностью совпадает с методикой работы со списком <list>.


15.2 Иерархические зависимости элементов языка управления

Пример языка управления:

<oscada_cntr>
  <area id='a_gen' dscr='Generic control' acs='0440'>
    <fld id='config' dscr='Config file' acs='0660' com='1' tp='str' dest='file'/>
    <fld id='cr_file_perm' dscr='Files' acs='0660' cfg='1' tp='oct' len='3'/>
    <fld id='cr_dir_perm' dscr='Directories' acs='0660' cfg='1' tp='oct' len='3'/>
    <comm id='upd_opt' dscr='Update options(from config)'/>
    <comm id='quit' dscr='Quit'/>
  </area>
  <area id='a_kern' dscr='Kernels'>
    <list id='k_br' dscr='Kernels' tp='br' mode='att'>
      <el id='0'>kern1<el/>
    </list>
  </area>
</oscada_cntr>

Таблица 6. Иерархические зависимости элементов языка:

ТегОписаниеАтрибутыСодержимое
oscada_cntrКорневой элемент страницы. Является единственным и служит для идентификации принадлежности к языку интерфейса управления.id — идентификатор;
dscr — описание.
(area, img)
areaГруппировка стандартных тегов.id — идентификатор;
dscr — описание;
acs — права доступа;
own — id владельца;
grp — id группы.
(area, fld, list, table, comm, img)
commКоманды узлу.id — идентификатор;
dscr — описание;
acs — права доступа;
own — id владельца;
grp — id группы.
(fld)
fldОписание данных стандартных типов.

id — идентификатор;
dscr — описание;
acs — права доступа;
own — id владельца;
grp — id группы;
tp — тип элемента:
str(len, dest, cols, rows) — строковый элемент;
dec(len, max, min, dest) — целое число в десятичном представлении;
oct(len, max, min, dest) — целое число в восьмеричном представлении;
hex(len, max, min, dest) — целое число в шестнадцатеричном;
real(len, max, min, dest) — вещественное число;
bool — логический признак (true|false);
time — время/дата в секундах (от 01/01/1970).
Связные:
len — длина значения (симв.);
min — минимум значения;
max — максимум значения;
cols — количество колонок;
rows — количество строк;
dest — способ ввода:

file — полное имя файла;
dir — полное имя директории;
select(select) — выборный тип;
sel_ed(select) — выборный тип с возможностью редактирования.

select — путь к скрытому списку;

Значение элемента.
listСписок данных стандартных типов.

id — идентификатор;
dscr — описание;
acs — права доступа;
own — id владельца;
grp — id группы;
tp — как в <fld> кроме:

br(br_pref) — дочерние узлы.

idm — индексированный список (0|1);
hide — скрытый список (0|1);
s_com — способы модификации списка [add][,ins][,edit][,del]:

add — добавлять строки;
ins — вставлять строки.

edit — модифицировать строки;
del — удалять строки.
Связные:
br_pref — префикс дочерних узлов;
dest — как в <fld>.

(el)
tableТаблица данных стандартных типов.id — идентификатор;
dscr — описание;
acs — права доступа;
own — id владельца;
grp — id группы;
key — ключевые колонки (key=«id,name,per»).
(list)
imgИзображение.id — идентификатор;
dscr — описание;
acs — права доступа;
own — id владельца;
grp — id группы;
tp — формат изображения.
elТег строки для списка <list>id — номер строки.Значение строки

15.3 Объект узла динамического дерева (TCntrNode)

Наследуется:Всеми динамическими и управляемыми объектами, прямо или через потомков.

Данные:
Команды интерфейса управления (enum – TCntrNode::Command):


Состояния динамического узла (enum TCntrNode::Mode):


Публичные методы:


Защищённые методы:


16 XML в системе OpenSCADA (XMLNode)

XML в системе OpenSACDA представлен объектом XML-тега XMLNode.

16.1 XML-тег (XMLNode)


Данные:
Опции функции генерации XML-файла(define):


Публичные методы:



17 Ресурсы в системе OpenSCADA (ResAlloc, AutoHD)

Большинство узлов и подсистем системы OpenSCADA являются динамическими, т.е. допускают создание/удаление/конфигурацию в процессе функционирования системы. Учитывая многопоточность системы данная функциональность накладывает жесткие требование к синхронизации потоков. Для синхронизации в системе используются ресурсы функции которых локализованы в объекте <ResAlloc>. В объекте <ResAlloc> реализованы функции как классического захвата/освобождения ресурса так и функции с автоматическим освобождением ресурса. Автоматический ресурс подразумевает создание локального объекта ресурса с автоматическим его освобождением при разрушении (в деструкторе). Использование автоматических ресурсов значительно упрощает работу с ресурсами при использовании исключений.


Любой динамический объект системы наследуется от объекта TCntrNode, который содержит механизм подключения через шаблон AutoHD. Основной функцией шаблона является хранение ссылки на объект и захват ресурса исключающего удаление объекта на момент использования. Шаблон поддерживает копирование ресурса и автоматическое его освобождение в случае разрушения объекта шаблона. Для наглядности доступа к объектам порождённым от TCntrNode шаблон AutoHD поддерживает приведение типов основанное на динамическом приведении типов.

17.1 Объект ресурса (ResAlloc)


Публичные методы:

17.2 Шаблон (AutoHD)


Публичные методы:


18 Организация и структуры баз данных компонентов системы

Узлы и подсистемы системы OpenSCADA могут иметь собственные таблицы для хранения своих данных. При этом структура таблиц может быть индивидуальной, определяясь объектом <TConfig>. Узлы и подсистемы должны создавать и конфигурировать объект <TConfig> под свои требования.

18.1 Системные таблицы

Система OpenSCADA имеет две системные таблицы BD и SYS. Таблица BD содержит записи зарегистрированных БД, а таблица SYS содержит данные общесистемных параметров.


Таблица 7. Cтруктура таблицы общесистемных параметров (SYS).

Идентификатор параметра <id>Значение параметра <val>
/DemoStation/MessLev0
/DemoStation/Workdir/mnt/home/roman/work/OScadaD/share/OpenScada
/DemoStation/UI/QTStarter/StartModQTCfg

Таблица 8. Cтруктура таблицы зарегистрированных БД.

Идентификатор <ID>Тип БД <TYPE>Имя <NAME>Описание <DESCR>Адрес <ADDR>Включать <EN>
LibBDMySQLБиблиотека функций server.diya.org;roman;123456;oscadaUserLibs;;;KOI8-U1
AnastModelSQLiteМодель АГЛКС ./DATA/AGLKSModel.db1
GenDBMySQLОсновная БД server.diya.org;roman;123456;oscadaDemoSt;;;KOI8-U1

18.2 Таблицы подсистемы «Сбор данных»

Контроллеры (источники данных) подсистемы «Сбор данных» хранятся в таблицах своих подсистем с именем DQA_<ModName>. Структуры этих таблиц могут значительно отличаться, однако у всех них присутствуют обязательные поля одинаковые для всех них. Общая структура таблиц контроллеров представлена в таблице 5.


Таблица 9. Общая структура таблиц контроллеров подсистемы «Сбор данных» (DQA_<ModName>).

Идентификатор <ID>Имя контроллера <NAME>Описание <DESCR>Включать<ENABLE>Запускать <START>Индивидуальные параметры
AutoDAАвтоматический источникСбор данных из активных источников с автоматическим их выявлением.11 ...

Также как и таблица контроллеров, таблицы параметров для различных типов источников данных могут значительно отличаться, но также и имеют обязательные поля. Кроме отличия характерного для типа источника данных, таблицы параметров ещё могут быть разными для различных типов параметров. Общая структура таблицы параметров приведена в таблице 6.


Таблица 10. Общая структура таблиц параметров подсистемы «Сбор данных».

Шифр параметра <SHIFR>Имя параметра <NAME>Описание параметра <DESCR>Включать <EN>Индивидуальные параметры
P3P3Давление на диафрагме1...

18.3 Таблицы подсистемы «Параметры»

Для хранения данных подсистема «Параметры» использует четыре таблицы. Две таблицы для хранения шаблонов параметров (Params_tmpl) и их атрибутов (Params_tmpl_io) и две для хранения параметров логического уровня (Params) и их атрибутов (Params_io):


Таблица 11. Структура таблицы параметров логического уровня (Params).

Шифр <SHIFR>Имя <NAME>Описание <DESCR>Включать <EN>Режим <MODE>Шаблон <PRM>
testТестовый параметр 12test
F3F3Расход через диафрагму12border

Таблица 12. Структура таблицы атрибутов параметров логического уровня (Params_io).

Идентификатор параметра <PRM_ID>Идентификатор атрибута IDЗначений <VALUE>
teststOpenDAQ.BlockCalc.Anast1to2node.КШ6.open
teststCloseDAQ.BlockCalc.Anast1to2node.КШ6.st_close
testtCmd4

Таблица 13. Структура таблицы шаблонов параметров логического уровня (Params_tmpl).

Идентификатор <ID>Имя <NAME>Описание <DESCR>Функция объектной модели <FUNC>
testТестовый шаблон Special.FLibComplex1.digitBlock
borderГраничные условия DAQ.JavaLikeCalc.lib_TemplFunc.GenBoard

Таблица 14. Структура таблицы атрибутов шаблонов параметров логического уровня (Params_tmpl_io).

Идентификатор шаблона <TMPL_ID>Идентификатор атрибута <ID>Режим <ATTR_MODE>Доступ <ACCS_MODE>Значений <VALUE>
teststOpen12
teststClose12
testtCmd015

18.4 Таблицы подсистемы “Транспорты”

Подсистема “Транспорты” делится на входящие и исходящие транспорты. Для каждого типа транспортов существует своя таблица с собственной структурой. Имена таблиц, соответсвенно: Transport_In и Transport_Out. Таблицы могут дополняться полями характерными для каждого типа транспорта.


Таблица 15. Структура таблицы входящих транспортов (Transport_in).

Идентификатор <ID>Имя <NAME>Описание <DESCRIPT>Тип <MODULE>Адрес <ADDR>Протокол <PROT>Запускать <START>Индивидуальные поля типов транспортов
web1Web 1Work web transport for proced http requests.SocketsTCP::10002:0HTTP1...
tcp1TCP 1Test TCP input socket!SocketsTCP::10001:1SelfSystem1...

Таблица 16. Структура таблицы исходящих транспортов (Transport_out).

Идентификатор <ID>Имя <NAME>Описание <DESCRIPT>Тип <MODULE>Адрес <ADDR>Запускать <START>Индивидуальные поля типов транспортов
tcp_o1TCP Out 1Output TCP transport 1SocketsTCP::100011...
tcp_o2TCP Out 2Output TCP transport 2SocketsTCP:127.0.0.1:100011...

18.5 Таблицы подсистемы “Архивы”

Подсистема “Архивы” содержит три таблицы с предустановленными именами:


Таблицы архиваторов могут дополняться полями характерными для каждого типа архиватора.


Таблица 17. Структура таблицы архивов значений (Archive_val).

Идентификатор <ID>Имя <NAME>Описание <DESCR>Запускать <START>Тип значений <VTYPE>Периодичность буфера <BPER>Размер буфера <BSIZE>Жесткая сетка буфера <BHGRD>Высокое разрешение времени буфера <BHRES>Режим источника значений <SrcMode>Источник значений <Source>Перечень обслуживающих архиваторов <ArchS>
testТестовый архив 141100101DAQ.OperationSystem.AutoDA.CPULoad.loadBaseArh.val_test;BaseArh.val_OneMinutes;
MemInfo_useИспользуемая память 111100101DAQ.OperationSystem.AutoDA.MemInfo.useBaseArh.val_test;BaseArh.val_OneMinutes;

Таблица 18. Структура таблицы архиваторов значений (Archive_val_proc).

Идентификатор <ID>Тип архиватора <MODUL>Имя <NAME>Описание <DESCR>Запускать <START>Адрес <ADDR>Период значений <V_PER>Период архивирования <A_PER>Индивидуальные поля типов архиваторов
testBaseArhTest 1ARCHIVES/VAL/test/160...
OneMinutesBaseArhСредний за минуту 1ARCHIVES/VAL/OneMin/6060...

Таблица 19. Структура таблицы архиваторов сообщений (Archive_mess_proc).

Идентификатор <ID>Тип архиватора <MODUL>Имя <NAME>Описание <DESCR>Запускать <START>Шаблон категории сообщений <CATEG>Уровень сообщений <LEVEL>Адрес <ADDR>Индивидуальные поля типов архиваторов
StatErrorsBaseArhОшибки станции 1/DemoStation*4ARCHIVES/MESS/stError/...
NetRequstsBaseArhСетевые запросы 1/DemoStation/Transport/Sockets*1ARCHIVES/MESS/Net/...

18.6 Таблицы подсистемы “Безопасность”

Подсистема “Безопасность” содержит две таблицы: таблица пользователей системы (Security_user) и групп системы (Security_grp).


Таблица 20. Структура таблицы пользователей системы (Security_user).

Имя <NAME>Описание <DESCR>Индекс <ID>Пароль <PASS>Рабочая группа <GRP>
rootСуперпользователь0openscadaroot
userПользователь1 root

Таблица 21. Структура таблицы групп пользователей системы (Security_grp).

Имя <NAME>Описание <DESCR>Индекс <ID>Пользователи в группе <USERS>
rootГруппа суперпользователей0root;user

18.7 Структура баз данных модулей

Каждый модуль может иметь собственные БД для хранения собственных данных. Структура БД модулей может формироваться свободно исходя из внутренних потребностей.


19 API модулей модульных подсистем

Первым шагом при подключении разделяемых (SO – shared object) библиотек является подключение функций инициализации. Эти функции должны быть определены как обычные “С” функции, для исключения искажения имен функций. Обычно это делается следующим образом:

//================== CUT =========================
extern "C"
{
    TModule::SAt module( int n_mod )
    {
    //Формирование описателя модуля из списка
    //доступных в библиотеке модулей
    }
    TModule *attach( const TModule::SAt &AtMod, const string &source )
    {
    //Подключить указанный модуль
    }
}
//================== CUT =========================

Функции для работы с SO библиотекой:
TModule::SAt module( int n_mod );
Функция предназначена для последовательного опроса информации о модулях содержащихся в SO библиотеке. Параметр <n_mod> указывает на порядковый номер запрашиваемого модуля и должен перебираться начиная с нуля. В случае отсутствия модуля с данным идентификатором функция должна возвращать структуру с именем модуля нулевой длины, что и служит окончанием процесса сканирования.


TModule *attach( const TModule::SAt &AtMod, const string &source );
Подключение к указанному модулю.


Практически все функции и данные системы сведены в API-системы описанного в данном документе. Однако, для упрощения и ускорения процесса написания модулей, основные функции переопределяемые в модулях приведены в таблице 22.


Таблица 22. Основные функции использующиеся при создании модулей

Общее API модулей (TModule):

Атрибуты

  • string mId; — Идентификатор модуля.
  • string mName; — Имя модуля.
  • string mDescr; — Описание модуля.
  • string mType; — Тип модуля.
  • string mVers; — Версия модуля.
  • string mAutor; — Автор модуля.
  • string mLicense; — Лицензия модуля.
  • string mSource; — Источник/происхождение модуля.
Методы

  • virtual void modLoad( ); — Загрузка модуля.
  • virtual void modSave( ); — Сохранение модуля.
  • virtual void modStart( ); — Запуск модуля.
  • virtual void modStop( ); — Останов модуля.
  • virtual void modInfo( vector<string> &list ); — Список доступных элементов информации о модуле. Предусмотрены следующие информационные элементы:
    Modul — идентификатор модуля;
    Name — локализованное имя модуля;
    Type — тип модуля;
    Source — источник модуля (контейнер);
    Version — версия модуля;
    Autors — автора модуля;
    Descript — описание модуля;
    License — лицензия модуля.
  • virtual string modInfo( const string &name ); — Запрос указанного элемента информации.
  • void void postEnable(); — Подключение модуля к динамическому дереву объектов.
  • void modFuncReg( ExpFunc *func ); — Регистрация экспортируемой функции.
API модулей подсистемы “БД”.

Тип БД (потомок от TTipBD):

  • virtual TBD *openBD( const string &iid ); — Открыть/создать БД.

БД (потомок от TBD):

  • virtual void enable( ); — Включение БД.
  • virtual void disable( ); — Отключение БД.
  • virtual void load( ); — Загрузка БД.
  • virtual void save( ); — Сохранение БД.
  • virtual void sqlReq( const string &req, vector< vector<string> > *tbl = NULL ); — Обслуживание SQL-запросов. Для БД поддерживающих SQL-запросы.
  • virtual TTable *openTable( const string &table, bool create ); — Открыть/создать таблицу.

Таблица (потомок от TTable):

  • virtual bool fieldSeek( int row, TConfig &cfg ); — Последовательное сканирование записей таблицы.
  • virtual void fieldGet( TConfig &cfg ); — Получение указанной записи.
  • virtual void fieldSet( TConfig &cfg ); — Установка указанной записи.
  • virtual void fieldDel( TConfig &cfg ); — Удаление указанной записи.
API модулей подсистемы “Сбор данных”.

Тип контроллера (потомок от TTipDAQ):

  • virtual TController *ContrAttach( const string &name, const string &daq_db ); — Открытие/подключение контроллера.

Контроллер (потомок от TController):

  • virtual void load( ); — Загрузка контроллера.
  • virtual void save( ); — Сохранение контроллера.
  • virtual void start( ); — Запуск контроллера.
  • virtual void stop( ); — Останов контроллера.
  • virtual void enable_( ); — Включение контроллера.
  • virtual void disable_( ); — Отключение контроллера.
  • virtual TParamContr *ParamAttach( const string &name, int type ); — Создание/открытие нового параметра.

Параметр контроллера (потомок от TParamContr):

  • virtual void enable( ); — Включить параметр.
  • virtual void disable( ); — Отключить параметр.
  • virtual void load( ); — Загрузка параметра.
  • virtual void save( ); — Сохранение параметра.
API модулей подсистемы «Архивы».

Тип архиватора (потомок от TTipArсhivator):

  • virtual TMArchivator *AMess(const string &iid, const string &idb ); — Создание архиватора сообщений.
  • virtual TVArchivator *AVal(const string &iid, const string &idb ); — Создание архиватора значений.

Архиватор сообщений (потомок от TMArchivator):

  • virtual void load( ); — Загрузка архиватора.
  • virtual void save( ); — Сохранение архиватора.
  • virtual void put( vector<TMess::SRec> &mess ); — Передать сообщение архиватору.
  • virtual void get( time_t b_tm, time_t e_tm, vector<TMess::SRec> &mess, const string &category = "", char level = 0, const string &arch = "" ); — Запросить сообщение из архиватора.

Архиватор значений (потомок от TVArchivator):

  • virtual void valPeriod( double iper ); — Установить периодичность значений архиватора.
  • virtual void archPeriod( int iper ); — Установить периодичность архивирования.
  • virtual void load( ); — Загрузить архиватор.
  • virtual void save( ); — Сохранить архиватор.
  • virtual void start( ); — Запустить архиватор.
  • virtual void stop( bool full_del = false ); — Остановить архиватор, с возможностью полного удаления если установлен <full_del>.
  • virtual TVArchEl *getArchEl( TVArchive &arch ); — Получение архива <arch> обслуживаемого архиватором.

Архивный элемент значений (потомок от TVArchEl):

  • virtual void fullErase(); — Полное удаление части архива в архиваторе.
  • virtual long long end(); — Время окончания архива в архиваторе.
  • virtual long long begin(); — Время начала архива в архиваторе.
  • virtual void getVal( TValBuf &buf, long long beg = 0, long long end = 0 ); — Получение кадра значений <buf> за время от <beg> и до <end> архива в архиваторе.
  • virtual string getS( long long *tm, bool up_ord ); — Получение строкового значения во время <tm> с притягиванием к верху <up_ord> из архива в архиваторе.
  • virtual double getR( long long *tm, bool up_ord ); — Получение вещественного значения во время <tm> с притягиванием к верху <up_ord> из архива в архиваторе.
  • virtual int getI( long long *tm, bool up_ord ); — Получение целого значения во время <tm> с притягиванием к верху <up_ord> из архива в архиваторе.
  • virtual char getB( long long *tm, bool up_ord ); — Получение логического значения во время <tm> с притягиванием к верху <up_ord> из архива в архиваторе.
  • virtual void setVal( TValBuf &buf, long long beg = 0, long long end = 0 ); — Установка кадра значений <buf> за время от <beg> и до <end> в архив в архиваторе.
API модулей подсистемы «Протоколы».

Протокол (потомок от TProtocol):

  • virtual TProtocolIn *in_open( const string &name ) — Открыть/создать входной протокол.

Входной протокол (потомок от TProtocolIn):

  • virtual bool mess( const string &request, string &answer, const string &sender ); — Передача неструктурированного сообщения в протокол.
API модулей подсистемы «Транспорты».

Тип транспорта (потомок от TTipTransport):

  • virtual TTransportIn *In( const string &name, const string &idb ); — Создать/открыть новый «входящий» транспорт.
  • virtual TTransportOut *Out( const string &name, const string &idb ); — Создать/открыть новый «исходящий» транспорт.

Входящий транспорт (потомок от TTransportIn):

  • virtual void start(); — Запуск транспорта.
  • virtual void stop(); — Останов транспорта.

Исходящий транспорт (потомок от TTransportOut):

  • virtual void start( ); — Запуск транспорта.
  • virtual void stop( ); — Останов транспорта.
  • virtual int messIO( const char *obuf, int len_ob, char *ibuf = NULL, int len_ib = 0, int time = 0 ); — Передать запрос через транспорт. Возможно указание таймаута.
API модулей подсистемы «Пользовательские интерфейсы».
Пользовательский интерфейс (потомок от TUI):
Не содержит специфических функций!
API модулей подсистемы «Специальные”.
Специальные (потомок от TSpecial):
Не содержит специфических функций!

20 Отладка и тестирование проекта OpenSCADA

Для контроля за качеством кода и проверки работоспособности различных участков системы пишутся специальные модули выполняющие процедуру тестирования с выдачей протокола тестирования. Данные модули необходимо выполнять после завершения работы над любым участком проекта.

21 Правила оформления и комментирования исходных текстов OpenSCADA и его модулей

При написании и оформлении исходных текстов системы OpenSCADA и его модулей необходимо придерживаться следующих правил:

indent -bli0 -i4 -l100 -npsl -npcs -prs -nsaf -nsai -ts8 <filename>.

Правила комментирования исходных текстов OpenSCADA:

22 Условные обозначения по тексту и в исходниках

???? — сомнение в целесообразности данного участка;
?!?! — участок не полностью реализован;
!!!! — тонкое место, участок требует переосмысления.