4. Конфигурация и настройка системы
Как можно видеть в разделе выше, OpenSCADA предоставляет возможность конфигурации для исполнения в различных ролях. Поддержка этой возможности обеспечивается развитыми механизмами конфигурации и хранения конфигурационных данных. Данный раздел содержит описание этих механизмов, призванное дать представление о гибкости и разнообразии, позволив тем самым использовать OpenSCADA на 100%.
При описании механизмов конфигурации и способов её хранения в этом разделе будет делаться упор на общесистемные механизмы. Особенности конфигурации и использования модулей подсистем OpenSCADA предоставляются в собственной документации этих модулей.
В OpenSCADA используется формализованный подход к описанию конфигурационных интерфейсов, основанный на языке XML. Фактически особенности конфигурации компонента системы предоставляется самим компонентом, пронизывая тем самым всю систему, как нервная система организма. В терминах OpenSCADA это называется интерфейсом контроля OpenSCADA (Control interface). На основе интерфейса контроля формируются графические интерфейсы конфигурации пользователя посредством модулей OpenSCADA. Такой подход имеет следующие важные преимущества:
- Масштабируемость. Можно подключать только нужные модули конфигурирования или вообще использовать только удалённые механизмы.
- Исключение необходимости обновления конфигураторов с добавлением нового модуля/функции, а также исключение "распухания" конфигуратора, обеспечивающего поддержку всей истории уже ненужных и устаревших модулей/функций.
- Простота создания графических интерфейсов конфигурации на различной основе за счёт чёткой формализации.
- Предоставляется возможность динамической конфигурации, т.е. конфигурацию можно выполнять непосредственно при работе системы как локально, так и удалённо, непосредственно контролируя результат.
- Простая и целевая расширяемость конфигурационного интерфейса, путём добавления полей конфигурации на языке описания интерфейса управления только в компонентах, этого требующих.
В OpenSCADA уже предоставляется три модуля конфигурации на разной основе визуализации. Отметим их и их возможности конфигурации:
- Модуль конфигурации на основе библиотеки графического интерфейса Qt(http://ru.wikipedia.org/wiki/Qt) — UI.QTCfg. Предоставляет развитый интерфейс конфигурации, позволяющий управлять как локальной, так и удалёнными станциями в локальной и глобальной сетях, включая безопасное соединение.
- Модуль конфигурации на основе динамических WEB-технологий (DHTML) — UI.WebCfgD. Предоставляет развитый интерфейс конфигурации, позволяющий управлять как локальной станцией сервера, так и удалёнными станциями в локальной и глобальной сетях, включая работу по безопасному соединению. Клиентское подключение осуществляется посредством обычного Web-браузера.
- Модуль конфигурации на основе статических WEB-технологий (XHTML) — UI.WebCfg. Предоставляет достаточный интерфейс конфигурации, позволяющий управлять локальной станцией сервера посредством обычного Web-браузера.
Значения конфигурации, изменённые в конфигураторах, а также большинство данных сохраняются в базах данных (БД). Учитывая модульность подсистемы "БД", ими могут быть различные БД. Причём предоставляется возможность хранения различных частей OpenSCADA как в разных БД одного типа, так и в БД разных типов.
Кроме БД данные о конфигурации могут содержаться в конфигурационном файле OpenSCADA, а также передаваться посредством параметров командной строки при вызове OpenSCADA. Сохранение конфигурации в конфигурационном файле осуществляется наравне с БД. Типовым именем конфигурационного файла OpenSCADA является /etc/oscada.xml. Формат конфигурационного файла и параметры командной строки рассмотрим в отдельном разделе.
Изменение конфигурации того или иного узла устанавливает флаг модификации соответствующего узла, а также активирует кнопки "Загрузить из БД", для загрузки первоначальной конфигурации, и "Сохранить в БД" для сохранения изменений. Признак модификации также поднимается к родительскому узлу, что позволяет осуществлять восстановление-сохранение от корневого узла, хотя реально, при операциях с БД, будут участвовать только модифицированные узлы. Удаление узла приводит к непосредственному удалению его из хранилища-БД и механизм модификации на эту операцию не распространяется.
Многие настройки и конфигурация объектов OpenSCADA, которые исполняются или уже включены, не применяются сразу-же по внесению изменений, поскольку конфигурация читается/применяется обычно только при включении или запуске. Следовательно для применения изменений, в таких случаях, достаточно включить/выключить включенный объект или перезапустить исполняющийся — остановить/запустить. На данный момент большинство настроек, не предусматривающих непосредственного применения, просто недоступны для редактирования.
Дальнейшее рассмотрение конфигурации OpenSCADA будет производиться на основе интерфейса конфигуратора UI.QTCfg, однако принципы работы будут полностью соответствовать и остальным конфигураторам, благодаря общности в используемом интерфейсе контроля OpenSCADA.
Рассмотрение начнём с конфигурации системных параметров OpenSCADA, которая размещается в шести вкладках корневой страницы станции:
- Вкладка "Станция" содержит основные информационные и конфигурационные поля станции, рис.4a. Перечислим предоставляемые поля и прокомментируем их:
- ID — содержит информацию об идентификаторе станции. Указывается параметром командной строки "--station". При загрузке ищется соответствующий идентификатору станции раздел в конфигурационном файле и если не обнаруживается то используется первый доступный.
- Имя станции — указывает локализованное имя станции. Указывается параметром командной строки "--statName".
- Программа — содержит информацию об имени программы. Обычно это OpenSCADA или имя основанного на OpenSCADA решения.
- Версия — содержит информацию о текущей версии программы.
- Имя хоста — содержит информацию о имени машины, на которой запущена станция.
- Системный пользователь — содержит информацию о пользователе, от имени которого выполняется программа в системе (ОС).
- Операционная система — содержит информацию о имени и версии ОС, ядре ОС, на которой исполняется программа.
- CPU — содержит оперативную информацию о процессоре, а именно число доступных процессоров/ядер и частота процессора, на которых исполняется программа. Значение частоты проверяется раз в 10 секунд, для X86, и позволяет отслеживать её изменение, например, механизмами управления питанием.
- Основной набор процессоров — указывает основной перечень процессоров для использования задачами OpenSCADA. В круглых скобках содержится перечень используемых процессоров на данный момент.
- Часы планирования задач — содержит информацию об использованных часах планирования задач и их разрешении на данной ОС. Позволяет сориентироваться с минимальным интервалом времени периодических задач, например, для задач сбора данных.
- Внутренняя кодировка — содержит информацию о кодировке, в которой хранятся текстовые сообщения внутри программы.
- Конфигурационный файл — содержит информацию о конфигурационном файле, используемом программой. Устанавливается параметром командной строки "--config".
- Рабочая директория — указывает на рабочую директорию станции. Используется в относительной адресации объектов на файловой системе, например, файлов БД. Допускает изменение пользователем для сохранения данных системы в другую БД. При этом значение этого поля не сохраняется в БД, а может быть изменено только в секции "WorkDB" конфигурационного файла.
- Директория модулей — указывает на директории модулей для OpenSCADA, разделённые ';', которые могут включать шаблоны файлов, в конце (/my/modules/path/lib*.so). Если значение этого поля некорректно, то при запуске программа завершиться с сообщением в консоли о некорректности конфигурации.
- Директория иконок — указывает на директорию, содержащую иконки программы. Если в дереве навигации конфигуратора отсутствуют иконки, то Вы неправильно указали значение этого поля.
- Директория документов — указывает на директорию, содержащую документы программы. Если Вы не можете вызвать локальные документы то Вы неправильно указали значение этого поля или документация не установлена.
- Рабочая БД — указывает на рабочую базу данных (БД), а именно на БД, используемую для хранения основных данных программы. Изменение этого поля отмечает все объекты программы как модифицированные, что позволяет сохранить или загрузить данные станции из указанной основной БД.
- Сохранять систему при выходе — указывает на необходимость сохранения изменённых данных при завершении работы программы.
- Период сохранения системы — указывает на периодичность в секундах, с которой сохранять изменённые данные станции.
- Язык — указывает на язык сообщений программы. Изменение этого поля допустимо, однако приводит к изменению языка сообщений только для интерфейса и динамических сообщений!
- Сообщения — раздел группы параметров, управляющих работой с сообщениями станции:
- Наименьший уровень — указывает на уровень сообщений, начиная с которого система будет их обрабатывать. Сообщения ниже этого уровня будут игнорироваться. Уровень "Отладка (0)" имеет особый смысл, а именно, при установке, будет включена генерация отладочных сообщений различными частями системы. Контролировать генерацию отладочных сообщений частями системы можно во вкладке "Отладка" (рис.4d).
- В системный логер(syslog) — указывает на необходимость направления сообщений в системный логер, механизм ОС для работы с сообщениями системы и ПО. При включении этого параметра появляется возможность управлять и контролировать сообщения OpenSCADA механизмами ОС.
- На стандартный выход(stdout) — указывает на использование, в качестве вывода сообщения, стандартного механизмы вывода в консоль. Выключение этого свойства исключит весь вывод в консоль, если не указан следующий параметр.
- На стандартный выход ошибок(stderr) — указывает на использование в качестве вывода сообщения стандартного механизмы вывода ошибок, обычно тоже направляется в консоль.
- В архив — указывает на необходимость вывода сообщений в архив сообщений OpenSCADA. Этот параметр обычно включен, а его выключение приводит к фактическому отключению архивирования сообщений на станции.
- Вкладка "Подсистемы" содержит список подсистем (рис.4b) и позволяет выполнять прямые переходы к ним с помощью контекстного меню.
- Вкладка "Резервирование" (рис.4с) содержит конфигурацию резервирования станции в составе настроек:
- Статус — содержит информацию о работе схемы резервирования. На данный момент это время, затраченное на исполнения одного цикла задачи обслуживания резерва.
- Уровень станции — указывает уровень данной станции в схеме резервирования (0-255).
- Период задачи резервирования — указывает периодичность исполнения задачи резервирования, в секундах, (1-255).
- Интервал времени восстановления соединения — указывает через какой интервал времени осуществлять попытку восстановления соединения с потерянной резервной станцией, в секундах, (0-255).
- Передача локальных первичных команд — включает передачу локальных первичных команд резервным станциям для автоматической синхронизации локальных изменений.
- Станции — содержит таблицу с информацией о резервных станциях. Станции можно добавлять и удалять посредством контекстного меню. Идентификатор добавленных станций нужно выбрать из списка доступных системных станций OpenSCADA. Наличие в таблице хотя-бы одной станции включает резервирование в целом и открывает доступ к страницам конфигурации резервирования на уровне подсистем, если подсистема поддерживает резервирование. Таблица предоставляет следующую информацию о станции:
- ID — идентификатор системной станции OpenSCADA, должен быть изменён после добавления путём выбора из перечня доступных;
- Имя — имя системной станции OpenSCADA;
- Жив — признак наличия связи с резервной станцией;
- Уровень — уровень удалённой станции в схеме резервирования;
- Счётчик — счётчик запросов к резервной станции или времени ожидания восстановления, в случае отсутствия связи.
- Переход к конфигурации перечня удалённых станций — команда для перехода на страницу конфигурации удалённых OpenSCADA станций, в подсистеме "Транспорты".
- Вкладка "Задачи" содержит таблицу со списком задач открытых различными компонентами OpenSCADA (рис.4d). Из таблицы можно получит различную информацию о задачах, а также назначить процессора для задач, на многопроцессорных системах.
- Вкладка "Отладка" содержит элементы контроля за отладкой (рис.4e) и активируется при выборе уровня сообщений "Отладка (0)" или при использовании счётчиков объектов.
- Вкладка "Переводы" содержит элементы менеджера централизованного перевода текстовых сообщений системы (рис.4f) и активируется при включении многоязыкового режима, установкой базового языка текстовых переменных. Элементы менеджера переводов:
- Базовый язык текстовых переменных — используется для включения режима поддержки многоязыковых текстовых переменных путём указания непустого базового языка. Значение базового языка выбирается из списка двухсимвольных кодов языков, обычно только текущий и базовый языки в списке. Далее для текстовых переменных на небазовом языке в таблицах БД будут создаваться отдельные колонки. Под текстовыми переменными подразумеваются все текстовые поля конфигуратора, которые могут быть переведены на другой язык. Числа и другие символьные значения к их числу не относятся и не переводятся.
- Динамический перевод — текущее и запланированное состояние динамического перевода текстовых сообщений. Динамический перевод текстовых сообщений вызывает включение кеша переводов текстовых сообщений и запроса переводов из БД для языков частей системы OpenSCADA, в значительной степени для многоязыковых динамических пользовательских интерфейсов когда пользователь имеет собственный-предпочтительный язык.
- Включение менеджера — включение менеджера переводов. Вызывает перезагрузку системы для формирования индекса встроенных переводов, что однако не приводит к формированию полного индекса сообщений в виду запрета перезагрузки ряда объектов в момент их исполнения. Для загрузки полного индекса сообщений необходимо сохранить менеджер во включенном режиме и перезапустить OpenSCADA. В процессе следующего запуска сформируется полный индекс сообщений.
- Языки — перечень языков переводов от базового, управляемые менеджером. Если для указанного языка в источнике присутствуют переводы то колонка языка будет их содержать иначе будет пуста.
- Фильтр источника — фильтр сообщений по подстроке в источнике.
- Проверять несовпадения — переключает проверку и индикацию на различие переводов сообщения в разных местах, на что необходимо больше времени.
- Сообщения — непосредственно таблица сообщений с колонками: базовый язык, выбранные языки перевода, источники сообщения. Для модификации доступны колонки языков в результате чего изменения будут внесены в источники сообщения.
Для модификации полей этой страницы могут потребоваться права привилегированного пользователя. Получить такие права можно, включив вашего пользователя в группу суперпользователя "root", или, войдя на станцию от имени суперпользователя "root".
Нужно отметить ещё один важный момент! Поля идентификаторов всех объектов OpenSCADA недопустимы для прямого редактирования, поскольку являются ключом для хранения данных объектов в БД. Однако поменять идентификатор объекта можно с помощью команды переноса и последующей вставки объекта (Cut->Paste) в конфигураторе.
Рис. 4a. Вкладка "Станция" корневой страницы конфигурации системы.
Рис. 4b. Вкладка "Подсистемы" корневой страницы конфигурации системы.
Задача обслуживания механизма резервирования запускается всегда и исполняется с периодичностью, установленной в соответствующем конфигурационном поле. Реальная работа по осуществлению резервирования осуществляется при наличии хотя бы одной резервной станции в списке станций и предполагает:
- Контроль за соединением с внешними станциями. В процессе контроля осуществляются запросы к удалённым станциям за обновлением информации о них и проверки связи. В случае потери связи со станцией повтор подключения к ней осуществляется через промежуток времени, указанный в конфигурационном поле интервала времени восстановления соединения. В поле "Жив" станции отображается текущее состояние связи. В поле "Счётчик" представлено количество запросов, осуществлённых к удалённой станции, или же время, оставшееся для осуществления следующей попытки соединения с потерянной станции. В поле "Запущен" приводится перечень активных контроллеров на удалённой станции с признаком локального исполнения.
- Локальное планирование исполнения объектов резервирования. Планирование осуществляется в соответствии с уровнями станций и предпочтениями исполнения объектов резервируемых подсистем: контроллеров, архиваторов сообщений.
- Вызов функции синхронизации данных для локальных объектов резервируемых подсистем, работающих в режиме синхронизации данных из внешних станций.
Рекомендуется резервирование настраивать таким образом чтобы БД резервных станций сохранялись одинаковыми, что в дальнейшем позволит безболезненно копировать их при восстановлении на любую станцию и соответственно в резервной копии можно хранить только один набор БД. При этом настройки, специфичные для отдельной станции, будут сохраняться в конфигурационном файле и можно будет легко конфигурировать и менять нужную станцию выбором соответствующего конфигурационного файла.
Настройка резервирования начинается с добавления резервных станций в список системных станций OpenSCADA на вкладке "Подсистема" подсистемы "Транспорты" (рис.4.3b). Причём добавлять тут нужно не только резервные станции к текущей, но и саму эту текущую станцию с её внешним адресом, т.е. своеобразная петля. В дальнейшем эти настройки будут сохранены в общую БД резервированной системы, а сама БД с этого момента будет использоваться при создании всех резервных станций. Соответственно важно на этом этапе внести все нужные изменения в общую БД вокруг проекта в целом!
Далее на конкретной станции, с копией общей БД, настраиваем её специфические параметры во вкладке "Резервирование" главной страницы (рис.4c), которые будут сохранены в конфигурационном файле.
После этого вся конфигурация резервирования осуществляется во вкладке "Резервирование" соответствующей подсистемы, "Сбор данных" (рис.4.5b) или "Архивы" (рис.4.6b). Если установить параметр "Передача локальных первичных команд" (рис.4c) то эта конфигурация, как и любая другая конфигурация общего характера, может осуществляться на одной из станций, а внесённые изменения попадут и на все резервные, конечно если они будут доступны.
Рис. 4c. Вкладка "Резервирование" корневой страницы конфигурации системы.
Рис. 4d. Вкладка "Задачи" корневой страницы конфигурации системы.
Для отладки различных особенностей работы OpenSCADA может потребоваться включение генерации дополнительных-отладочных сообщений, что осуществляется установкой минимального уровня сообщений, на вкладке "Станция", в "Отладка (0)". В результате этого появится вкладке "Отладка" (рис.4e) где доступны счётчики объектов для контроля за утечками, а также таблица с перечнем категорий поступающий отладочных сообщений. В таблице категорий можно выбрать только те источники отладочных сообщений, которые нужны, тем самым не перегружая подсистему вывода и архивирования сообщений, а так-же не понижая производительность системы в целом. Можно выбирать категории и высших уровней, вплоть до корневой категории системы, что выключит детальный выбор и включит генерацию всех сообщений по уровню или системе. Для изучения отладочных сообщений нужно перейти в подсистему "Архивы" (рис. 4.6c), для чего предусмотрена кнопка "Просмотр сообщений". Выбранный режим отладки и перечень категорий отладки может быть сохранён в конфигурационном файле стандартным образом и при следующем старте режим отладки активируется сразу, что важно в первую очередь для счётчиков объектов.
Рис. 4e. Вкладка "Отладка" корневой страницы конфигурации системы.
Рис. 4f. Вкладка "Переводы" корневой страницы конфигурации системы.
При рассмотрении страниц конфигурации модульных подсистем будут описаны общие для всех модулей свойства. Однако нужно отметить, что каждый модуль может предоставлять как дополнительные вкладки, так и отдельные поля для конфигурации собственных особенностей функционирования для страниц, объекты которых наследуются модулями. С особенностями и дополнениями модулей можно ознакомиться в отдельной документации на них.
4.1. Подсистема "БД"
Подсистема является модульной и содержит иерархию объектов изображённую на рис.4.1a. Для конфигурации подсистемы предусмотрена корневая страница подсистемы "БД", содержащая вкладку "Модули". Вкладка "Модули" (рис.4.1b) содержит список модулей подсистемы "БД", доступных на станции.
Для модификации полей страниц этой подсистемы могут потребоваться права привилегированного пользователя или включение вашего пользователя в группу "БД".
Рис. 4.1a. Иерархическая структура подсистемы "БД".
Рис. 4.1b. Вкладка "Модули" корневой страницы подсистемы "БД".
Каждый модуль подсистемы "БД" предоставляет конфигурационную страницу с вкладками "БД" и "Модуль". Вкладка "БД" (рис.4.1c) содержит список БД, зарегистрированных в модуле и флажок признака полного удаления БД при выполнении команды удаления. В контекстном меню списка БД предоставляется пользователю возможность добавления, удаления и перехода к нужной БД. Во вкладке "Модуль" содержится информация о модуле подсистемы "БД" (рис.4.1d):
- Модуль — идентификатор модуля.
- Имя — имя модуля.
- Тип — тип модуля, идентификатор подсистемы, к которой модуль принадлежит.
- Источник — разделяемая библиотека — источник данного модуля.
- Версия — версия модуля.
- Автор — автор модуля.
- Описание — краткое описание модуля.
- Лицензия — лицензионное соглашение распространения модуля.
Рис. 4.1c. Вкладка "БД" модуля подсистемы "БД".
Рис. 4.1d. Вкладка "Модуль" модуля подсистемы "БД".
Каждая БД содержит собственную страницу конфигурации с вкладками "База данных", "Таблицы" и "SQL", в случае поддержки SQL-запросов. Кроме основных операций можно выполнять копирование содержимого БД стандартной функцией копирования объектов в конфигураторе. Операция копирования содержимого БД подразумевает копирование исходной БД в БД назначения, при этом содержимое БД назначения не очищается перед операцией копирования. Копирование содержимого БД производится при условии включения обоих БД, иначе будет выполняться простое копирование объекта БД.
Вкладка "База данных" (рис.4.1e) содержит основные настройки БД в составе:
- Раздел "Состояние" — содержит свойства, характеризующие состояние БД:
- Включен — состояние БД "Включен".
- Доступные БД — перечень таблиц, которые содержит БД. Контекстным меню данного свойства предоставляется возможность физического удаления таблиц из БД.
- Загрузить систему из БД — команда для выполнения загрузки из данной БД. Может использоваться при переносе данных в БД между станциями. Например, можно сохранить участок одной станции в экспортную БД, физически перенести БД на другую станцию, подключить её в этой подсистеме и вызвать данную команду.
- Раздел "Конфигурация" — непосредственно содержит поля конфигурации:
- ID — содержит информацию об идентификаторе БД.
- Имя — указывает имя БД.
- Описание — краткое описание БД и её назначения.
- Адрес — адрес БД в специфичном для типа БД (модуля) в формате. Описание формата записи адреса БД, как правило, доступно во всплывающей подсказке этого поля.
- Кодовая страница — указывает на кодовую страницу, в которой хранятся и предоставляются текстовые значения БД. Значение кодовой страницы БД в связке с внутренней кодировкой станции используется для прозрачного перекодирования текстовых сообщений при обмене между станцией и БД.
- Включать — указывает на состояние "Включен", в которое переводить БД при загрузке.
Вкладка "Таблицы" (рис.4.1f) содержит список открытых таблиц. При нормальной работе программы эта вкладка пуста, поскольку после завершения работы с таблицами программа их закрывает. Наличие открытых таблиц говорит о том, что программа сейчас с таблицами работает или таблицы открыты пользователем для изучения их содержимого. В контекстном меню перечня открытых таблиц можно открыть таблицу для изучения (команда "Добавить"), закрыть открытую страницу (команда "Удалить") и перейти к изучению содержимого таблицы.
Вкладка "SQL" (рис.4.1g) доступна только для баз данных, поддерживающих SQL-запросы, и содержит поле ввода запроса, кнопку отправки запроса и таблицу с результатом запроса. Для управления контекстом транзакции запроса предусмотрено отдельное конфигурационное поле.
Рис. 4.1e. Вкладка "База данных" БД модуля подсистемы "БД".
Рис. 4.1f. Вкладка "Таблицы" БД модуля подсистемы "БД".
Рис. 4.1g. Вкладка "SQL" БД модуля подсистемы "БД".
Страница изучения содержимого таблицы содержит только одну вкладку "Таблица". Вкладка "Таблица" (рис.4.1h) содержит поле имени таблицы и таблицу с содержимым. Таблицей содержимого предоставляются функции:
- редактирование содержимого ячеек таблицы;
- добавление записи (строки);
- удаление записи (строки).
Рис. 4.1h. Вкладка "Таблица" таблицы БД модуля подсистемы "БД".
4.2. Подсистема "Безопасность"
Подсистема не является модульной. Для конфигурации подсистемы предусмотрена корневая страница подсистемы "Безопасность", содержащая вкладку "Пользователи и группы пользователей". Вкладка "Пользователи и группы пользователей" (рис.4.2a) содержит списки пользователей и групп пользователей. Пользователь в группе "Security" и с правами привилегированного пользователя может добавить, удалить пользователя или группу пользователей. Все остальные пользователи могут перейти к странице пользователя или группы пользователя.
Рис. 4.2a. Вкладка "Пользователи и группы пользователей" корневой страницы подсистемы "Безопасность".
Для конфигурации пользователя предоставляется страница, содержащая только вкладку "Пользователь" (рис.4.2b). Вкладка содержит конфигурационные данные профиля пользователя, которые может изменять сам пользователь, пользователь в группе "Security" или привилегированный пользователь:
- Имя — информация об имени (идентификаторе) пользователя.
- Полное имя — указывает на полное имя пользователя.
- Описание — описание и произвольная информация о пользователе.
- Пароль — поле для изменения пароля пользователя. Всегда отображает "******".
- Язык — язык пользователя для контекста динамических сообщений и синтеза речи пользовательского интерфейса. Пусто для системного языка.
- Изображение пользователя — указывает изображение пользователя. Изображение может быть загружено или выгружено.
- Группы пользователей — таблица с перечнем групп пользователей и признаком принадлежности пользователя к группам.
- БД пользователя — адрес БД для хранения данных пользователя.
Рис. 4.2b. Вкладка "Пользователь" страницы пользователя подсистемы "Безопасность".
Для конфигурации группы пользователей предоставляется страница, содержащая только вкладку "Группа" (рис.4.2c). Вкладка содержит конфигурационные данные профиля группы пользователей, которые может изменять только привилегированный пользователь:
- Имя — информация об имени (идентификаторе) группы пользователей.
- Полное имя — указывает на полное имя группы пользователей.
- Описание — описание и произвольная информация о группе пользователей.
- Пользователи — список пользователей, включенных в данную группу. С помощью контекстного меню списка можно добавить или удалить пользователя в группе.
- БД группы пользователей — адрес БД для хранения данных группы пользователей.
Рис. 4.2c. Вкладка "Группа" страницы группы пользователей подсистемы "Безопасность".
4.3. Подсистема "Транспорты"
Подсистема является модульной и содержит иерархию объектов, изображённую на рис.4.3a. Для конфигурации подсистемы предусмотрена корневая страница подсистемы "Транспорты", содержащая вкладки "Подсистема" и "Модули".
Рис. 4.3a. Иерархическая структура подсистемы "Транспорты".
Вкладка "Подсистема" (рис.4.3b) содержит таблицу конфигурации внешних, для данной, OpenSCADA станций. Внешние станции могут быть системными, пользовательскими или одновременно, что выбирается в соответствующей колонке. Системные внешние станции доступны только привилегированному пользователю и используются компонентами системного назначения, например, механизмом горизонтального резервирования и модулем DAQ.DAQGate. Пользовательские внешние станции привязаны к пользователю, который их создавал, а значит список пользовательских внешних станций индивидуален для каждого пользователя. Пользовательские внешние станции используются компонентами графического интерфейса, например: UI.QTCfg, UI.WebCfgD и UI.Vision. В таблице внешних станций возможно добавление и удаление записей про станцию, а также их модификация. Каждая запись содержит поля:
- Id — Идентификатор внешней станции.
- Имя — Имя внешней станции.
- Транспорт — Выбор из списка модуля подсистемы "Транспорты" для использования его в доступе к внешней станции.
- Адрес — Адрес внешней станции в формате, специфичном для выбранного в предыдущем поле модуля подсистемы "Транспорты".
- Пользователь — Имя/идентификатор пользователя удалённой станции, от имени которого выполнять подключение.
- Пароль — Пароль пользователя удалённой станции.
- Режим — Режим хоста: "Пользовательский", "Системный", "Пользовательский и Системный".
- Уровень поднятия — Уровень поднятия хостов указанного хоста для возможности перенаправления запросов.
Вкладка "Модули" (рис.4.1b) содержит список модулей подсистемы "Транспорты" и идентична для всех модульных подсистем.
Рис. 4.3b. Вкладка "Подсистема" корневой страницы подсистемы "Транспорты".
Каждый модуль подсистемы "Транспорты" предоставляет конфигурационную страницу с вкладками "Транспорты" и "Модуль". Вкладка "Транспорты" (рис.4.3c) содержит список входящих и исходящих транспортов, зарегистрированных в модуле. В контекстном меню списков транспортов пользователю предоставляется возможность добавления, удаления и перехода к нужному транспорту. Во вкладке "Модуль" содержится информация о модуле подсистемы "Транспорты" (рис.4.1d), состав которой идентичен для всех модулей.
Рис. 4.3c. Вкладка "Транспорты" модуля подсистемы "Транспорты".
Каждый транспорт содержит собственную страницу конфигурации с одной вкладкой "Транспорт". Эта вкладка содержит основные настройки транспорта. Входящий транспорт (рис.4.3d) содержит:
- Раздел "Состояние" — содержит свойства, характеризующие состояние транспорта:
- Статус — информация о текущем состоянии транспорта и статистика его работы.
- Выполняется — состояние транспорта "Выполняется".
- БД транспорта — адрес БД для хранения данных транспорта.
- Раздел "Конфигурация" — непосредственно содержит поля конфигурации:
- ID — информация об идентификаторе транспорта.
- Имя — указывает имя транспорта.
- Описание — краткое описание транспорта и его назначения.
- Адрес — адрес транспорта в специфичном для типа транспорта (модуля) формате. Описание формата записи адреса транспорта, как правило, доступно во всплывающей подсказке этого поля.
- Транспортный протокол — указывает на модуль транспортного протокола (подсистема "Транспортные протоколы"), который должен работать в связке с данным входным транспортом. Т.е. полученные неструктурированные данные этот модуль будет направлять на структуризацию и обработку указанному модулю транспортного протокола.
- Запускать — указывает на состояние "Выполняется", в которое переводить транспорт при загрузке.
Рис. 4.3d. Вкладка "Транспорт" страницы входящего транспорта модуля подсистемы "Транспорты".
Исходящий транспорт (рис.4.3e) содержит:
- Раздел "Состояние" — содержит свойства, характеризующие состояние транспорта:
- Статус — информация о текущем состоянии транспорта и статистика его работы.
- Выполняется — состояние транспорта "Выполняется".
- БД транспорта — адрес БД для хранения данных транспорта.
- Раздел "Конфигурация" — непосредственно содержит поля конфигурации:
- ID — информация об идентификаторе транспорта.
- Имя — указывает имя транспорта.
- Описание — краткое описание транспорта и его назначения.
- Адрес — адрес транспорта в специфичном для типа транспорта (модуля) формате. Описание формата записи адреса транспорта, как правило, доступно во всплывающей подсказке этого поля.
- Запускать — указывает на состояние "Выполняется", в которое переводить транспорт при загрузке.
Рис. 4.3e. Вкладка "Транспорт" страницы исходящего транспорта модуля подсистемы "Транспорты".
Исходящий транспорт, в дополнение, предоставляет вкладку формирования пользовательского запроса через данный транспорт (рис.4.3f). Вкладка предназначена для наладки связи, а также для отладки протоколов и содержит:
- Время (мс) — информация о времени, затраченном на запрос и получение ответа.
- Режим — указывает режим данных, из списка "Бинарный", "Текст(LF)", "Текст(CR)", "Текст(CR/LF)", в котором будет формироваться запрос и предоставляться ответ. В бинарном режиме данные записываются парами чисел в шестнадцатеричном исчислении, т.е байтами, разделёнными пробелами.
- Ожидать таймаута — признак ожидать таймаута при получении ответа. Многие системы при ответе на различных протоколах (HTTP) могут слать данные ответа несколькими кусками. Без этого флага будет получен и отображён только первый кусок. При установке этого флага будет осуществлено ожидание всех кусков ответа, вплоть до отсутствия данных в течении таймаута дожидания транспорта.
- Размер входного буфера, байт — контролирует размер входного буфера или выключает чтение (0) вообще, только запись.
- Отправить — команда отправить запрос.
- Запрос — содержит запрос в выбранном режиме представления данных.
- Ответ — предоставляет ответ в выбранном режиме представления данных.
Рис. 4.3f. Вкладка "Запрос" страницы исходящего транспорта модуля подсистемы "Транспорты".
4.4. Подсистема "Транспортные протоколы"
Подсистема является модульной. Для конфигурации подсистемы предусмотрена корневая страница подсистемы "Транспортные протоколы", содержащая вкладку "Модули". Вкладка "Модули" (рис.4.1b) содержит список модулей подсистемы "Транспортные протоколы" и идентична для всех модульных подсистем.
Каждый модуль подсистемы "Транспортные протоколы" предоставляет конфигурационную страницу с одной вкладкой "Модуль". Во вкладке "Модуль" содержится информация о модуле подсистемы "Транспортные протоколы" (рис.4.1d), состав которой идентичен для всех модулей.
4.5. Подсистема "Сбор данных"
Подсистема является модульной и содержит иерархию объектов, изображённую на рис.4.5a. Для конфигурации подсистемы предусмотрена корневая страница подсистемы "Сбор данных", содержащая вкладки "Резервирование", "Библиотеки шаблонов" и "Модули".
Для получения доступа на модификацию объектов этой подсистемы необходимы права пользователя в группе "DAQ" или права привилегированного пользователя.
Рис. 4.5a. Иерархическая структура подсистемы "Сбор данных".
Объектом резервирования подсистемы "Сбор Данных" выступает объект контроллера в рамках которого резервирование данных выполняет функции:
- Резервирование механизма сбора данных. Обычно эта функция реализуется без особых механизмов путём простого запуска параллельных резервных станций с одинаковой конфигурацией и работающих независимо. Однако в случае выполнения станцией функции ПЛК такое поведение недопустимо по причине одновременной выдачи управляющих воздействий и отсутствия синхронизации данных вычислителей.
- Компенсация потери данных на время простоя узла за счёт архива резервного. Предусмотрены два механизма компенсации. Первый и основной механизм осуществляет загрузку участков архива из резервной станции в момент запуска станции в целом или отдельных объектов контроллеров. Участок архива запрашивается с момента последней записи в локальном архиве и по текущее время. Глубина запроса при этом ограничивается указанием предельного времени в конфигурации резервирования. Второй, дополняющий механизм, осуществляет заполнение "дыр" в архиве значений, в момент фактического запроса пользователя к этим данным. Такой подход с одной стороны позволяет осуществить прогнозируемую по времени синхронизацию при старте, а с другой стороны фактически исключает потерю данных при условии работы хотя бы одной станции в течение всего рабочего времени.
- Распределение нагрузки по сбору данных между узлами. При создании сложных распределённых систем может оказаться важным вопрос прогнозирования и оптимизации общей производительности системы. С учётом таких задач механизм резервирования предусматривает исполнение задач сбора данных отдельных источников (контроллеров OpenSCADA) только на одной станции. При этом задачи остальных станций переходят в режим синхронизации данных с исполняющей станцией. В случае потери связи с исполняющей станцией запускается задача локального сбора данных. Предусмотрена также возможность оптимального распределение нагрузки исполнения задач сбора данных группы контроллеров между станциями.
- Оптимизация нагрузки на внешние источники данных за счёт запроса (обмена) данных у внешнего источника только одним узлом. В практике часто встречаются высоко-нагруженные источники данных или интерфейсы доступа к источникам данных, для которых даже сбор данных одной станцией может быть проблемой и потребует снижения периодичности сбора, т.е. качества данных. Механизм резервирования, кроме распределения нагрузки между станциями по описанной выше схеме, позволяет снять дополнительную нагрузку на источник данных и его интерфейсы тем самым повысив качество данных. Запись в атрибуты резервного объекта контроллера приводит к отправке запроса модификации на основной, т.е. через основной.
- Предотвращение некоторого отличия данных на разных узлах, связанное с несовпадением моментов времени при независимом сборе данных отдельными узлами, путём получения данных у станции с активным контроллером. В системах высокой отчётности с резервированием должно быть исключено или сведено к минимуму расхождение в данных на разных станциях, что подразумевает реальный сбор данных одной станцией и синхронизацию с этими данными остальных станций.
Вкладка "Резервирование" (рис.4.5b) доступна только если в резерве указана хотя-бы одна станция и содержит конфигурацию резервирования источников данных подсистемы "Сбор данных", в составе настроек:
- Глубина времени восстановления данных — указывает на максимальную глубину архивных данных для восстановления из архива удалённой станции при запуске в часах (0-12).
- Контроллеры — содержит таблицу с перечнем контроллеров, доступных для резервирования, и текущее их состояние:
- Контроллер — полный идентификатор контроллера;
- Имя — имя контроллера;
- Запущен — признак исполнения контроллера локальной станцией;
- Резервирование — режим резервирования контроллера, может быть выбран из перечня:
- "Выключено" — совершенно независимая работа объекта контроллера.
- "Асимметрично" — полное резервирование с доступной конфигурацией объекта контроллера удалённой станции и без попыток её обобщать.
- "Только нарушения" — фактическая работа без резервирования, но с подавлением нарушений от резервного объекта контроллера с целью исключения дублирующих сообщений о нарушениях.
- Предпочтение исполнения — конфигурация предпочтительного исполнения на указанной станции, может быть изменён; зарезервированные значения указывают на:
- <Высокий уровень> — исполнение на станции с наивысшим уровнем.
- <Низкий уровень> — исполнение на станции с самым низким уровнем.
- <Оптимально> — выбор для исполнения наименее нагруженной станции.
- Удалённый — признак, указывающий на исполнение контроллера удалённой станцией и работу локальной станции в режиме синхронизации данных с удалённой.
Рис. 4.5b. Вкладка "Резервирование" подсистемы "Сбор данных".
Вкладка "Библиотеки шаблонов" (рис.4.5c) содержит список библиотек шаблонов для параметров этой подсистемы. В контекстном меню списка библиотек шаблонов пользователю предоставляется возможность добавления, удаления и перехода к нужной библиотеке. Вкладка "Модули" (рис.4.1b) содержит список модулей подсистемы "Транспорты" и идентична для всех модульных подсистем.
Рис. 4.5c. Вкладка "Библиотеки шаблонов" подсистемы "Сбор данных".
Каждая библиотека шаблонов подсистемы "Сбор данных" предоставляет конфигурационную страницу с вкладками "Библиотека" и "Шаблоны параметров". Вкладка "Библиотека" (рис.4.5d) содержит основные настройки библиотеки в составе:
- Раздел "Состояние" — содержит свойства, характеризующие состояние библиотеки:
- Доступен — состояние библиотеки "Доступен".
- БД библиотеки — адрес БД для хранения данных библиотеки и шаблонов.
- Дата модификации — дата и время последней модификации объекта.
- Раздел "Конфигурация" — непосредственно содержит поля конфигурации:
- ID — информация об идентификаторе библиотеки.
- Имя — указывает имя библиотеки.
- Описание — краткое описание библиотеки и её назначения.
Вкладка "Шаблоны параметров" (рис.4.5e) содержит список шаблонов в библиотеке. В контекстном меню списка пользователю предоставляется возможность добавления, удаления и перехода к нужному шаблону.
Рис. 4.5d. Основная вкладка конфигурации библиотеки шаблонов подсистемы "Сбор данных".
Рис. 4.5e. Вкладка списка шаблонов в библиотеке шаблонов подсистемы "Сбор данных".
Каждый шаблон библиотеки шаблонов предоставляет конфигурационную страницу с вкладками "Шаблон" и "IO". Вкладка "Шаблон" (рис.4.5f) содержит основные настройки шаблона в составе:
- Раздел "Состояние" — содержит свойства, характеризующие состояние шаблона:
- Доступен — состояние шаблона "Доступен".
- Использовано — количество использования шаблона. Позволяет определить факт использования и, как следствие, возможность применения изменений шаблона.
- Дата модификации — дата и время последней модификации объекта.
- Раздел "Конфигурация" — непосредственно содержит поля конфигурации:
- ID — информация об идентификаторе шаблона.
- Имя — указывает имя шаблона.
- Описание — краткое описание шаблона и его назначения.
Рис. 4.5f. Главная вкладка конфигурации шаблона параметров подсистемы "Сбор данных".
Вкладка "IO" (рис.4.5g) содержит конфигурацию атрибутов (IO) шаблонов и программу шаблона на одном из языков пользовательского программирования OpenSCADA, например, DAQ.JavaLikeCalc.JavaScript. В таблицу атрибутов шаблона пользователь может, посредством контекстного меню, добавить, вставить, удалить, передвинуть вверх или вниз запись атрибута, а также отредактировать поля атрибута:
- Id — идентификатор атрибута.
- Имя — имя атрибута.
- Тип — выбор типа значения атрибута из списка: "Вещественный", "Целый", "Логический", "Строка", "Текст", "Объект".
- Режим — выбор режима из списка: "Вход", "Выход". Обычно используется для указания направления передачи данных посредством связи. Т.е. для значения "Вход" данные по связи будут только получаться, а для "Выход" также будут передаваться, в случае модификации.
- Атрибут — режим атрибута параметра, реализованного на основе шаблона из списка: "Не атрибут", "Только для чтения", "Полный доступ". Для атрибутов шаблона, у которых это поле установлено, будет создаваться соответствующий атрибут у параметра контроллера этой подсистемы.
- Конфигурация — режим конфигурации атрибута во вкладке конфигурации шаблона у параметра контроллера этой подсистемы из списка: "Переменная", "Константа", "Связь". В режимах "Константа" и "Связь" во вкладке конфигурации шаблона будут добавлены эти атрибуты для установки константы или указания внешней связи параметра.
- Значение — значение атрибута по умолчанию или шаблон ссылки для доступа по ссылке. Формат шаблона ссылки зависит от компонента, который его использует. Обычно для модуля DAQ.LogicLev шаблон ссылки записывается в виде: {Параметр}|{атрибут}. Поле {Параметр} — указывает имя параметра как контейнера атрибутов. Атрибуты с одинаковым значением {Параметр} будут группироваться и позволят назначаться только указанием контейнера атрибутов, а отдельные атрибуты будут связаны с атрибутами контейнера в соответствии с полем {атрибут}.
С синтаксисом языка программы шаблона можно ознакомиться в документации модуля, предоставляющего интерпретатор выбранного языка. Например, типичным языком пользовательского программирования OpenSCADA является DAQ.JavaLikeCalc.JavaScript.
Рис. 4.5g. Вкладка конфигурации атрибутов и программы шаблона подсистемы "Сбор данных".
Каждый модуль подсистемы "Сбор данных" предоставляет конфигурационную страницу с вкладками "Контроллеры" и "Модуль". Вкладка "Контроллеры" (рис.4.5h) содержит список контроллеров, зарегистрированных в модуле. В контекстном меню списка пользователю предоставляется возможность добавления, удаления и перехода к нужному контроллеру. Во вкладке "Модуль" содержится информация о модуле подсистемы "Сбор данных" (рис.4.1d), состав которой идентичен для всех модулей.
Рис. 4.5h. Вкладка "Контроллеры" модуля подсистемы "Сбор данных".
Каждый контроллер содержит собственную страницу конфигурации с вкладками "Контроллер", "Параметры" и "Диагностика".
Вкладка "Контроллер" (рис.4.5i) содержит основные настройки. Состав этих настроек может несколько отличаться от одного модуля этой подсистемы к другому, о чём можно узнать в собственной документации модулей. В качестве примера рассмотрим настройки контроллера у модуля контроллера логического уровня DAQ.LogicLev:
- Раздел "Состояние" — содержит свойства, характеризующие состояние контроллера:
- Статус — указывает статус контроллера. В нашем случае контроллер исполняется и время вычисления составляет 446 микросекунд.
- Включен — состояние контроллера "Включен". Включенный контроллер предоставляет возможность создания параметров и их конфигурации.
- Запущен — состояние контроллера "Запущен". Исполняющийся контроллер выполняет физический сбор данных и/или включает механизмы доступа к этим данным.
- БД контроллера — адрес БД для хранения данных контроллера и его параметров.
- Раздел "Конфигурация" — непосредственно содержит поля конфигурации:
- ID — информация об идентификаторе контроллера.
- Имя — указывает имя контроллера.
- Описание — краткое описание контроллера и его назначения.
- Включать — указывает на состояние "Включать," в которое переводить контроллер при загрузке.
- Запускать — указывает на состояние "Запущен", в которое переводить контроллер при загрузке.
- Таблицы параметров — имена таблиц, в которых сохранять параметры, разных типов (имеются в виду объекты параметров сбора данных).
- Планирование вычислений — определяет периодический или по расписанию характер вычисления. В нашем примере это секундное вычисления шаблона.
- Уровень приоритета задачи получения данных — устанавливает приоритет задачи сбора данных этого контроллера. Используется при планировании задач операционной системой. В случае наличия доступа это поле включает планирование задачи контроллера в режиме реального времени и указанным приоритетом иначе модифицирует параметр "nice" задачи.
Рис. 4.5i. Главная вкладка конфигурации контроллера подсистемы "Сбор данных".
Вкладка "Параметры" (рис.4.5j) содержит список параметров в контроллере, выбор типа параметров, создаваемых по умолчанию, а также информацию об общем количестве и количестве включенных параметров. В контекстном меню, списка параметров, пользователю предоставляется возможность добавления, удаления и перехода к нужному параметру.
Рис. 4.5j. Вкладка "Параметры" страницы конфигурации контроллера подсистемы "Сбор данных".
Вкладка "Диагностика" (рис.4.5k) содержит форму диагностических сообщений источника данных. Поскольку многие источники данных представляют собой внешние устройства с доступом к данным посредством сетевого обмена или системной шины то возможны различные нештатные ситуации при доступе к данным. Вывод всех их в поле "Статус", объекта контроллера, невозможен поскольку он отображает только текущее состояние доступа к данным. С помощью диагностики можно проследить все нештатные ситуации в виде сообщений, сформированных данным объектом контроллера за указанный промежуток времени и с выбранным уровнем сообщения. Кроме непосредственно рабочей диагностической информации ряд модулей источников данных могут предоставлять здесь различные отладочные дампы обмена, на уровне сообщений "Отладка (0)".
Рис. 4.5k. Вкладка "Диагностика" страницы конфигурации контроллера подсистемы "Сбор данных".
Параметры контроллеров подсистемы "Сбор данных" предоставляют конфигурационную страницу с вкладками "Параметр", "Атрибуты", "Архивация" и "Конфигурация шаблона". Вкладка "Конфигурация шаблона" не является стандартной, а присутствует только в параметрах модулей подсистемы "Сбор данных", которые реализуют механизмы работы по шаблону в контексте источника данных, ими обслуживаемого, для логического типа. В данный обзор эта вкладка включена для обеспечения логической завершённости обзора конфигурации шаблонов параметров подсистемы "Сбор данных" как финальный этап — использования.
Вкладка "Параметр" (рис.4.5l) содержит основные настройки в составе:
- Раздел "Состояние" — содержит свойства, характеризующие состояние параметра:
- Тип — указывает тип параметра. Тип выключенного параметра может быть изменён, если доступно несколько типов.
- Включен — состояние параметра "Включен". Включенный параметр используется контроллером для сбора данных.
- Раздел "Конфигурация" — непосредственно содержит поля конфигурации:
- ID — содержит информацию об идентификаторе параметра.
- Имя — указывает имя параметра.
- Описание — краткое описание параметра и его назначения.
- Включать — указывает на состояние "Включать", в которое переводить параметр при загрузке.
- Шаблон параметра — адрес ранее нами рассмотренного шаблона.
Вкладка "Атрибуты" (рис.4.5m) содержит атрибуты параметра и их значения в соответствии с конфигурацией используемого шаблона и вычисления его программы.
Вкладка "Архивация" (рис.4.5n) содержит таблицу с атрибутами параметра в колонках, и архиваторами в строках. Пользователь имеет возможность установить архивацию нужного атрибута требуемым архиватором просто изменив ячейку на пересечении.
Вкладка "Конфигурация шаблона" (рис.4.5o) содержит конфигурационные поля в соответствии с шаблоном. В примере это групповая связь на внешний параметр. Эту связь можно установить, просто указав путь к параметру, если флаг "Показывать только атрибуты" не установлен, или же установить адреса атрибутов по отдельности, если флаг установлен. Знак "(+)", в конце адреса, сигнализирует об успешной линковке и присутствии целевого объекта.
Рис. 4.5l. Главная вкладка конфигурации параметра контроллера подсистемы "Сбор данных".
Рис. 4.5m. Вкладка "Атрибуты" параметра контроллера подсистемы "Сбор данных".
Рис. 4.5n. Вкладка "Архивация" параметра контроллера подсистемы "Сбор данных".
Рис. 4.5o. Вкладка "Конфигурация шаблона" параметра контроллера подсистемы "Сбор данных".
4.6. Подсистема "Архивы"
Подсистема является модульной и содержит иерархию объектов, изображённую на рис.4.6a. Для конфигурации подсистемы предусмотрена корневая страница подсистемы "Архивы", содержащая вкладки "Резервирование", "Архив сообщений", "Архивы значений" и "Модули".
Для получения доступа на модификацию объектов этой подсистемы необходимы права пользователя в группе "Archive" или права привилегированного пользователя.
Рис. 4.6a. Иерархическая структура подсистемы "Архивы".
Объектом резервирования подсистемы "Архивы" выступает объект архиватора сообщений в рамках которого резервирование данных выполняет функции:
- Резервирование механизма архивации. Предусматривает обобщение сообщений с резервных станций посредством трёх механизмов:
- в основном цикле резервирования резервного архива осуществляется запрос новых сообщений архиватора на основной станции от времени последнего сообщения резервного объекта;
- запись сообщений в резервный архиватор приводит к перенаправлению запроса записи на основную станцию, как для новых так и перезаписывающих сообщений (также сообщения записываются локально);
- перезапись сообщений в основной архиватор приводит к рассылке этих сообщений всем резервным станциям.
- Компенсация потери данных на время простоя узла за счёт архива резервного узла. Предусматривает только первичную синхронизацию путём загрузки/перегрузки участков архива из резервной станции, в момент запуска станции в целом. Участок архива запрашивается с момента последней записи в локальном архиве минус значение параметра глубины принудительной перегрузки и по текущее время. Изменённые сообщений на глубину более указанной будут утеряны на запускаемой станции!
- Распределение нагрузки по архивации между узлами. При создании сложных распределённых систем может оказаться важным вопрос прогнозирования и оптимизации общей производительности системы. С учётом таких задач механизм резервирования предусматривает исполнение задач архивации отдельных архиваторов только на одной станции. При этом задачи остальных станций переходят в режим синхронизации данных с исполняющей станцией. В случае потери связи с исполняющей станцией запускается задача локальной архивации. Предусмотрена также возможность оптимального распределение нагрузки исполнения задач архивации группы архиваторов между станциями.
- Восстановление первичности нарушений. Для сообщений о нарушениях, отрицательный уровень, при записи осуществляется дополнительная обработка для активных нарушений, а именно обеспечивается перезапись только старыми — оригинальными.
Резервирование архиваторов значений не предоставляется прямо ввиду осуществления этого процесса через источники данных и подсистему сбора данных.
Вкладка "Резервирование" (рис.4.6b) доступна только если в резерве указана хотя-бы одна станция и содержит конфигурацию резервирования архиваторов сообщений подсистемы "Архивы", в составе настроек:
- Глубина принудительной перезагрузки истории резерва при запуске, в часах. — указывает на глубину запроса сообщений от времени последнего сообщения в локальном архиве. Иногда может быть полезным для перегрузки последних сообщений если они потенциально могут поменяться-дополниться при остановке данной станции.
- Архиваторы сообщений — содержит таблицу с перечнем архиваторов сообщений, доступных для резервирования, и текущее их состояние:
- Архиватор — полный идентификатор архиватора сообщений;
- Имя — имя архиватора;
- Запущен — признак исполнения архиватора локальной станцией;
- Резервирование — режим резервирования архиватора, включение;
- Предпочтение исполнения — конфигурация предпочтительного исполнения на указанной станции, может быть изменён; зарезервированные значения указывают на:
- <Высокий уровень> — исполнение на станции с наивысшим уровнем.
- <Низкий уровень> — исполнение на станции с самым низким уровнем.
- <Оптимально> — выбор для исполнения наименее нагруженной станции.
- Удалённый — признак, указывающий на исполнение архиватора удалённой станцией и работу локальной станции в режиме синхронизации данных с удалённой.
Рис. 4.6b. Вкладка "Резервирование" подсистемы "Архивы".
Вкладка "Архив сообщений" (рис.4.6c) содержит конфигурацию архива сообщений и форму запроса сообщений из архива.
Конфигурация архива сообщений представлена полями:
- Размер буфера сообщений — указывает на размерность области оперативной памяти зарезервированное на промежуточный буфер сообщений. Сообщения из буфера запрашиваются для просмотра и архивируются архиваторами сообщений.
- Период архивирования сообщений — периодичность, с которой архиваторы выбирают сообщения из буфера для их архивирования.
Форма запроса сообщений содержит конфигурационные поля запроса и таблицу результата. Конфигурационные поля запроса:
- Время, размер (сек.) и уровень — указывает время, размер или глубину (в секундах) и минимальный уровень сообщений (более или равный указанному) запроса.
- Шаблон категории — указывает категорию запрошенных сообщений. В категории можно указывать элементы выборки по шаблону, а именно символы "*" — для любой подстроки и "?" — для любого символа, а также регулярное выражение заключённое между символами '/' (/mod_(System|LogicLev)/).
- Архиваторы — указывает архиваторы сообщений (разделённые символом ';'), для которых обрабатывать запрос. Если значение отсутствует, то запрос будет обработан для буфера и всех архиваторов. Если указано "<buffer>", то запрос будет обработан для буфера сообщений.
Таблица результата содержит строки сообщений с колонками:
- Время — время сообщения.
- Категория — категория сообщения.
- Уровень — уровень сообщения.
- Сообщение — текст сообщения.
Рис. 4.6c. Вкладка "Архив сообщений" подсистемы "Архивы".
Вкладка "Архивы значений" (рис.4.6d) содержит общую конфигурацию архивирования значений и список архивов значений. В контекстном меню списка значений пользователю предоставляется возможность добавления, удаления и перехода к нужному архиву. Общая конфигурация архивирования представлена полями:
- Период получения данных (мс) — указывает периодичность задачи активного архивирования. Фактически, максимальная детализация или минимальный период, активных архивов определяется этим значением.
- Уровень приоритета задачи получения данных — устанавливает приоритетность задачи активного архивирования. Используется при планировании задач операционной системой. В случае наличия доступа это поле включает планирование задачи архивирования в режиме реального времени и указанным приоритетом иначе модифицирует параметр "nice" задачи.
- Принудительно устанавливать метку времени в текущее время — метка времени значений, полученных при активном архивировании, принудительно устанавливается в текущее время, заменяя время источника данных.
Вкладка "Модули" (рис.4.1b) содержит список модулей подсистемы "Архивы" и идентична для всех модульных подсистем.
Рис. 4.6d. Вкладка "Архивы значений" подсистемы "Архивы".
Архив значений подсистемы "Архивы" предоставляет конфигурационную страницу с вкладками "Архив", "Архиваторы" и "Значения".
Вкладка "Архив" (рис.4.6e) содержит основные настройки архива в составе:
- Раздел "Состояние" — Содержит свойства, характеризующие состояние архива:
- Выполняется — Состояние архива "Выполняется". Исполняющийся архив собирает данные в буфер и обслуживается архиваторами.
- Начало и конец буфера — Время начала и конца значений в буфере.
- БД архива — Адрес БД для хранения конфигурации архива.
- Раздел "Конфигурация" — Непосредственно содержит поля конфигурации:
- ID — Информация об идентификаторе архива.
- Имя — Указывает имя архива.
- Описание — Краткое описание архива и его назначения.
- Запускать — Указывает на состояние "Выполняется", в которое переводить архив при загрузке.
- Источник — Указывает на тип и адрес источника. Тип источника указывается из списка: "Пассивный", "Пассивный атрибут параметра" или "Активный атрибут параметра". Пассивный архив не имеет ассоциированного источника значений; данные в такой архив источник передаёт самостоятельно, например, из пользовательских вычислительных процедур посредством внутреннего языка программирования. Типы, с атрибутом параметра в поле адреса, указывают на параметр подсистемы "Сбор данных" как источник. Пассивный атрибут параметра направляет данные в архив самостоятельно с собственным периодом сбора данных. Активный атрибут параметра опрашивается задачей архивирования этой подсистемы. Фактически все источники реальных данных работают в пассивном режиме архивирования поскольку полученные данные сразу помещают в атрибут параметра, иногда по метке времени. А вот вычислители (DAQ.JavaLikeCalc, DAQ.LogicLev, DAQ.BlockCalc) могут работать только в активном режиме архивирования, поскольку данные в атрибуте параметра обновляются только при их непосредственном запросе и берутся из контекста вычисления. В случае с источниками реальных данных, разница между активным и пассивным режимом архивирования определяется тем, что в пассивном режиме источник может помещать данные в архив по метке времени, а в активном режиме метка времени всегда устанавливается в текущее системное время.
- Режим объединения данных — Устанавливает режим объединения данных при записи с буфера высокого разрешения (например, 1с) в архиватор низкого разрешения (например, 1мин.), когда в одну точку архиватора попадает несколько значений из буфера (например, 60). Реализованы режимы: "Скользящее среднее", "Один", "Минимум" и "Максимум".
- Тип значений — Указывает на тип значений, хранящихся в архиве, из списка: "Логический", "Целый", "Вещественный", "Строка", "Целое16", "Целое32", "Целое64", "Вещ.(Float)" и "Вещ.(Double).
- Период буфера (сек) — Указывает на периодичность значений в буфере архива.
- Размер буфера (единиц) — Указывает размерность или глубину буфера архива. Размерность обычно устанавливается в пересчёте на 60 сек периодичности задачи архивирования с запасом.
- Жесткая сетка времени буфера — Указывает на режим буфера. Режим жёсткой сетки подразумевает резервирование памяти под каждое значение, но без метки времени. Такой режим исключает возможность упаковки смежно-одинаковых значений, но экономит на хранении метки времени. Иначе буфер работает в режиме хранения значения и метки времени и поддерживает упаковку смежно-одинаковых значений.
- Высокое разрешение времени буфера — указывает на возможность хранения значений с периодичностью до 1 микросекунды, иначе значения могут храниться с периодичностью до 1 секунды.
- Заполнение проходных точек последним значением — в основном проходные значения заполняются EVAL однако иногда периодичность значений источника больше периодичности этого архива и это нормально.
Рис. 4.6e. Основная вкладка конфигурации архива значений подсистемы "Архивы".
Вкладка "Архиваторы" (рис.4.6f) содержит таблицу с конфигурацией процесса обработки данного архива доступными архиваторами. В строках расположены доступные архиваторы, а в колонках параметры:
- Архиватор — информация об адресе архиватора.
- Запущен — информация о состоянии "Запущен" архиватора.
- Обработка — признак обработки данного архива архиватором. Поле доступно для модификации пользователем.
- Период (c) — информация о периодичности архиватора.
- Начало — дата и время начала данных архива в архиваторе.
- Конец — дата и время конца данных архива в архиваторе.
Рис. 4.6f. Вкладка "Архиваторы" архива значений подсистемы "Архивы".
Вкладка "Значения" (рис.4.6g) содержит запрос значений в архиве и результат в виде таблицы значений или изображения тренда. Запрос значений содержит поля:
- Время — указывает время запроса. Содержит два поля: поле дата+время и микросекунды.
- Размер — указывает размер или глубину запроса в секундах.
- Архиватор — указывает архиватор значений для которого обрабатывать запрос. Если значение отсутствует, то запрос будет обработан для буфера и всех архиваторов. Если указано "<buffer>", то запрос будет обработан только для буфера архива.
- Показать график — указывает на необходимость представления данных архива в виде графика (тренда), иначе результат представляется в таблице, содержащей только время и значение. В случае установки этого поля формируется и отображается график, кроме того появляются дополнительные конфигурационные поля настройки изображения:
- Размер изображения — указывает ширину и высоту формируемого изображения в пикселах.
- Шкала значения — указывает нижнюю и верхнюю границу шкалы значения. Если оба значения установлены в 0 или равны, то шкала будет определяться автоматически в зависимости от значений.
Рис. 4.6g. Вкладка "Значения" архива значений подсистемы "Архивы".
Каждый модуль подсистемы "Архивы" предоставляет конфигурационную страницу с вкладками "Архиваторы" и "Модуль". Вкладка "Архиваторы" (рис.4.6h) содержит списки архиваторов сообщений и значений, зарегистрированных в модуле. В контекстном меню списков пользователю предоставляется возможность добавления, удаления и перехода к нужному контроллеру. Во вкладке "Модуль" содержится информация о модуле подсистемы "Архивы" (рис.4.1d), состав которой идентичен для всех модулей.
Рис. 4.6h. Вкладка "Архиваторы" модуля подсистемы "Архивы".
Архиваторы сообщений содержат собственную страницу конфигурации с вкладками "Архиватор" и "Сообщения".
Вкладка "Архиватор" (рис.4.6i) содержит основные настройки. Состав этих настроек может несколько отличаться от одного модуля этой подсистемы к другому о чём можно узнать в собственной документации модулей. В качестве примера рассмотрим настройки архиватора сообщений у модуля архива на файловую систему Arch.FSArch:
- Раздел "Состояние" — содержит свойства характеризующие состояние архиватора:
- Выполняется — состояние архиватора "Выполняется". Исполняющийся архиватор обрабатывает буфер архива сообщений и помещает его данные в своё хранилище, а также обслуживает запросы на доступ к данным в хранилище.
- БД архиватора — адрес БД для хранения данных архиватора.
- Конец — дата+время последних данных в хранилище архиватора.
- Начало — дата+время первых данных в хранилище архиватора.
- Размер файлов архиватора (кБ) — информация о суммарном размере файлов архиватора с данными.
- Время архивирования (мс) — время, затраченное на архивирование данных архива сообщений.
- Раздел "Конфигурация" — непосредственно содержит поля конфигурации:
- ID — информация об идентификаторе архиватора.
- Имя — указывает имя архиватора.
- Описание — краткое описание архиватора и его назначения.
- Запускать — указывает на состояние "Выполняется", в которое переводить архиватор при загрузке.
- Категории сообщений — список категорий сообщений, разделённый символом ';'. Сообщения, попавшие под шаблоны или регулярные выражения категорий, будут обрабатываться архиватором. В категории можно указывать элементы выборки по шаблону, а именно символы '*' — для любой подстроки и '?' — для любого символа, а также регулярное выражение заключённое между символами '/' (/mod_(System|LogicLev)/).
- Уровень сообщений — указывает на уровень сообщений архиватора. Сообщения с уровнем более или равным указанному обрабатываются архиватором.
- Адрес — адрес хранилища в специфичном для типа архиватора (модуля) формате. Описание формата записи адреса архиватора, как правило, доступно во всплывающей подсказке этого поля. В примере это относительный путь к директории хранилища.
- Раздел "Дополнительные опции" — специализированный для модуля раздел, о содержимом которого, можно ознакомиться в документации на модуль.
Рис. 4.6i. Главная вкладка конфигурации архиватора сообщений подсистемы "Архивы".
Вкладка "Сообщения" (рис.4.6j) содержит форму запроса сообщений из архива данного архиватора:
- Время, размер (сек.) и уровень — указывает время, размер или глубину (в секундах) и минимальный уровень сообщений (более или равный указанному) запроса.
- Шаблон категории — указывает категорию запрошенных сообщений. В категории можно указывать элементы выборки по шаблону, а именно символы '*' — для любой подстроки и '?' — для любого символа, а также регулярное выражение заключённое между символами '/' (/mod_(System|LogicLev)/).
Таблица результата содержит строки сообщений с колонками:
- Время — время сообщения.
- Категория — категория сообщения.
- Уровень — уровень сообщения.
- Сообщение — текст сообщения.
Рис. 4.6j. Вкладка запроса сообщений "Сообщения" архиватора сообщений подсистемы "Архивы".
Архиваторы значений содержат собственную страницу конфигурации с вкладками "Архиватор" и "Архивы".
Вкладка "Архиватор" (рис.4.6k) содержит основные настройки. Состав этих настроек может несколько отличаться от одного модуля этой подсистемы к другому, о чём можно узнать в собственной документации модулей. В качестве примера рассмотрим настройки архиватора значений у модуля архива на файловую систему Arch.FSArch:
- Раздел "Состояние" — содержит свойства характеризующие состояние архиватора:
- Выполняется — состояние архиватора "Выполняется". Исполняющийся архиватор обрабатывает буфера архивов значений и помещает их данные в своё хранилище, а также обслуживает запросы на доступ к данным в хранилище.
- Время архивирования (мс) — информация о времени затраченном на архивирование данных буферов архивов. Периодичность архивирования указывается в поле "Период архивирования" раздела "Конфигурация" этой вкладки.
- БД архиватора — адрес БД для хранения данных архиватора.
- Раздел "Конфигурация" — непосредственно содержит поля конфигурации:
- ID — информация об идентификаторе архиватора.
- Имя — указывает имя архиватора.
- Описание — краткое описание архиватора и его назначения.
- Запускать — указывает на состояние "Выполняется", в которое переводить архиватор при загрузке.
- Адрес — адрес хранилища в специфичном для типа архиватора (модуля) формате. Описание формата записи адреса архиватора, как правило, доступно во всплывающей подсказке этого поля. В примере это относительный путь к директории хранилища.
- Периодичность значений (сек) — указывает периодичность значений, которые содержаться в хранилище архиватора.
- Период архивирования (сек) — указывает периодичность задачи архивирования данных буферов архивов. Размерность буферов архивов во временном выражении должна быть не менее, а лучше несколько больше, периодичности задачи архивирования. Установить нулевой период для отключения использования архиватора в обработке буфера, только прямая запись.
- Приоритет выбора — Приоритет выбора архиватора для режима использования источника "Все". Установить в нуль для полного исключения из выбора.
- Раздел "Дополнительные опции" — специализированный для модуля раздел, о содержимом которого можно ознакомиться в документации на модуль.
Рис. 4.6k. Главная вкладка конфигурации архиватора значений подсистемы "Архивы".
Вкладка "Архивы" (рис.4.6l) содержит таблицу с информацией об архивах, обрабатываемых архиватором. В строках таблица содержит архивы, а в колонках информацию:
- Архив — имя архива.
- Период — периодичность архива в секундах.
- Размер буфера — размерность буфера в единицах.
- Размер файлов (Мб) — специфичное для модуля Arch.FSArch поле с информацией о суммарной размерности файлов хранилища архиватора для архива.
В случае с модулем Arch.FSArch в этой вкладке ещё содержится форма экспорта данных архиватора.
Рис. 4.6l. Вкладка "Архивы" архиватора значений подсистемы "Архивы".
4.7. Подсистема "Пользовательские интерфейсы"
Подсистема является модульной. Для конфигурации подсистемы предусмотрена корневая страница подсистемы "Пользовательские интерфейсы", содержащая вкладку "Модули". Вкладка "Модули" (рис.4.1b) содержит список модулей подсистемы и идентична для всех модульных подсистем.
Каждый модуль подсистемы "Пользовательские интерфейсы" предоставляет конфигурационную страницу с вкладками "Пользовательский интерфейс" и "Модуль". Вкладка "Пользовательский интерфейс" (рис.4.7a) предоставляет параметр для контроля за состоянием "Выполняется" модуля, а также разделы конфигурации специализированные для модулей этой подсистемы. Во вкладке "Модуль" содержится информация о модуле подсистемы "Пользовательские интерфейсы" (рис.4.1d), состав которой идентичен для всех модулей.
Рис. 4.7a. Вкладка "Пользовательский интерфейс" модуля подсистемы "Пользовательские интерфейсы".
4.8. Подсистема "Специальные"
Подсистема является модульной. Для конфигурации подсистемы предусмотрена корневая страница подсистемы "Специальные", содержащая вкладку "Модули". Вкладка "Модули" (рис.4.1b) содержит список модулей подсистемы и идентична для всех модульных подсистем.
Каждый модуль подсистемы "Специальные" предоставляет конфигурационную страницу с вкладками "Специальный модуль" и "Модуль". Вкладка "Специальный модуль" (рис.4.8a) предоставляет параметр для контроля за состоянием "Выполняется" модуля, а также разделы конфигурации специализированные для модулей этой подсистемы. Во вкладке "Модуль" содержится информация о модуле подсистемы "Специальные" (рис.4.1d), состав которой идентичен для всех модулей.
Рис. 4.8a. Вкладка "Специальный модуль" модуля подсистемы "Специальные".
4.9. Подсистема "Управление модулями"
Подсистема не является модульной. Для конфигурации подсистемы предусмотрена страница подсистемы "Управление модулями", содержащая вкладку "Подсистема". Вкладка "Подсистема" (рис.4.9a) содержит основные настройки подсистемы. Состав вкладки "Подсистема":
- Путь к разделяемым библиотекам (модулям) — информация о расположении директории с модулями системы OpenSCADA. Устанавливается параметром <ModDir> станции, конфигурационного файла.
- Запрещённые модули — список, разделённый символом ';', модулей, запрещённых для автоматического подключения и обновления. Устанавливается параметром <ModDeny> раздела подсистемы "sub_ModSched" станции конфигурационного файла. Список запрещённых модулей имеет больший приоритет чем разрешённых.
- Разрешённые модули — список, разделённый символом ';', модулей, разрешённых для автоматического подключения и обновления. Значение '*' используется для разрешения всех модулей. Устанавливается параметром <ModAllow> раздела подсистемы, sub_ModSched, станции, конфигурационного файла.
- Период проверки модулей (сек) — указывает на периодичность проверки модулей на факт их обновления. Модули, допустимые для автоматического подключения и обновления, будут автоматически обновлены.
- Проверить модуль сейчас — команда выполнить проверку модулей на факт их обновления. Модули, допустимые для автоматического подключения и обновления, будут автоматически обновлены.
- Разделяемые библиотеки (модули) — таблица с перечнем разделяемых библиотек с модулями, обнаруженными OpenSCADA. В строках расположены модули, а в колонках информация о них:
- Путь — информация о полном пути к разделяемой библиотеке.
- Время — информация о времени последней модификации файла разделяемой библиотеки.
- Модули — информация о перечне модулей в разделяемой библиотеке.
- Включен — состояние "Включен" разделяемой библиотеки. Привилегированным пользователям предоставляется возможность ручного включения/выключения разделяемых библиотек путём изменения этого поля.
Рис. 4.9a. Главная вкладка конфигурации подсистемы "Управление модулями".
4.10. Конфигурационный файл OpenSCADA и параметры командной строки вызова OpenSCADA
Конфигурационный файл системы OpenSCADA предназначен для хранения системной и общей конфигурации OpenSCADA-станции. Только в конфигурационном файле и через параметры командной строки можно указать часть ключевых системных параметров станции, поэтому знакомство со структурой конфигурационного файла необходимо для специалистов развёртывающих решения на основе OpenSCADA.
Называться конфигурационный файл системы OpenSCADA может по разному, однако принято название oscada.xml и производные от него. Конфигурационный файл обычно указывается, при запуске станции, параметром командной строки "--config=/home/roman/roman/work/OScadaD/etc/oscada_demo.xml". Для удобства вызова создаются скрипты запуска станции с нужным конфигурационным файлом или используется менеджер проектов при запуске скрипта openscada_start. Например скрипт (openscada_demo) использкется для вызова демонстрационной станции:
#!/bin/sh
openscada --config=/etc/oscada_demo.xml $@
Если конфигурационный файл не указан то используется стандартный: /etc/oscada.xml .
Структурно конфигурационный файл организован на расширяемом языке разметки текста XML. Следовательно требуется жёсткое соблюдение правил синтаксиса XML. Пример образца типового конфигурационного файла OpenSCADA, с узлами конфигурации большинства компонентов OpenASCADA, приведен ниже:
<?xml version="1.0" encoding="UTF-8" ?>
<OpenSCADA>
<!--
This is the OpenSCADA configuration file.
-->
<station id="AGLKS">
<!--
Describe internal parameters for station.
The station is OpenSCADA program.
-->
<prm id="StName">AGLKS</prm>
<prm id="StName_ru">АГЛКС</prm>
<prm id="StName_uk">АГЛКС</prm>
<prm id="WorkDB">SQLite.GenDB</prm>
<prm id="LogTarget">10</prm>
<prm id="Lang2CodeBase">en</prm>
<prm id="SaveAtExit">0</prm>
<prm id="SavePeriod">0</prm>
<node id="sub_BD">
<prm id="SYSStPref">0</prm>
<tbl id="DB">
<fld ID="GenDB" TYPE="SQLite" NAME="Generic DB" NAME_ru="Основная БД" NAME_uk="Основна БД" ADDR="St.db" CODEPAGE="UTF-8"/>
</tbl>
</node>
<node id="sub_Security">
<!--
<tbl id="Security_user">
<fld
NAME="root"
DESCR="Super user"
DESCR_ru="Супер пользователь"
DESCR_uk="Супер користувач"
PASS="openscada"/>
<fld
NAME="user"
DESCR="System user"
DESCR_ru="Системный пользователь"
DESCR_uk="Системний користувач"
PASS=""/>
</tbl>
<tbl id="Security_grp">
<fld
NAME="root"
DESCR="Super users groups"
DESCR_ru="Группа суперпользователей"
DESCR_uk="Група суперкористувачів"
USERS="root;user"/>
</tbl>-->
</node>
<node id="sub_ModSched">
<prm id="ModAllow">*</prm>
<prm id="ModDeny"></prm>
<prm id="ChkPer">0</prm>
</node>
<node id="sub_Transport">
<!--
<tbl id="Transport_in">
<fld
ID="WEB_1"
MODULE="Sockets"
NAME="Generic WEB interface"
NAME_ru="Основной WEB интерфейс"
NAME_uk="Основний WEB інтерфейс"
DESCRIPT="Generic transport for WEB interface."
DESCRIPT_ru="Основной транспорт для WEB интерфейса."
DESCRIPT_uk="Основний транспорт для WEB інтерфейсу."
ADDR="TCP::10002:0"
PROT="HTTP"
START="1"/>
<fld
ID="WEB_2"
MODULE="Sockets"
NAME="Reserve WEB interface"
NAME_ru="Резервный WEB интерфейс"
NAME_uk="Резервний WEB інтерфейс"
DESCRIPT="Reserve transport for WEB interface."
DESCRIPT_ru="Резервный транспорт для WEB интерфейса."
DESCRIPT_uk="Резервний транспорт для WEB інтерфейсу."
ADDR="TCP::10004:0"
PROT="HTTP"
START="1"/>
</tbl>
<tbl id="Transport_out">
<fld
ID="testModBus"
MODULE="Sockets"
NAME="Test ModBus"
NAME_ru="Тест ModBus"
NAME_uk="Тест ModBus"
DESCRIPT="Data exchange by protocol ModBus test."
DESCRIPT_ru="Тест обмена по протоколу ModBus."
DESCRIPT_uk="Тест обміну за протоколом ModBus."
ADDR="TCP:localhost:10502"
START="1"/>
</tbl>-->
</node>
<node id="sub_DAQ">
<!--
<tbl id="tmplib">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" DB="tmplib_test2"/>
</tbl>
<tbl id="tmplib_test2">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk=""
PROGRAM="JavaLikeCalc.JavaScript
cnt=5*i;"/>
</tbl>
<tbl id="tmplib_test2_io">
<fld TMPL_ID="test2" ID="i" NAME="I" NAME_ru="I" NAME_uk="I" TYPE="4" FLAGS="160" VALUE="" POS="0"/>
<fld TMPL_ID="test2" ID="cnt" NAME="Cnt" NAME_ru="Cnt" NAME_uk="Cnt" TYPE="4" FLAGS="32" VALUE="" POS="0"/>
</tbl>-->
<node id="mod_LogicLev">
<!--
<tbl id="DAQ">
<fld
ID="test2"
NAME="Test 2"
NAME_ru="Тест 2"
NAME_uk="Тест 2"
DESCR=""
DESCR_ru=""
DESCR_uk=""
ENABLE="1"
START="1"
PRM_BD="test2prm"
PERIOD="1000"
PRIOR="0"/>
</tbl>
<tbl id="test2prm">
<fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk=""
EN="1" MODE="2" PRM="test2.test2"/>
</tbl>-->
</node>
<node id="mod_System">
<!--
<tbl id="DAQ">
<fld
ID="DataOS"
NAME="Data OS"
NAME_ru="Даные ОС"
NAME_uk="Дані ОС"
DESCR="Data of services and subsystems OS."
DESCR_ru="Данные сервисов и подсистем ОС."
DESCR_uk="Дані сервісів та підсистем ОС."
ENABLE="1"
START="1"
AUTO_FILL="0"
PRM_BD="DataOSprm"
PERIOD="1000"
PRIOR="0"/>
</tbl>
<tbl id="DataOSprm">
<fld SHIFR="CPU" NAME="CPU load" NAME_ru="Нагрузка CPU" NAME_uk="Навантаження CPU" DESCR="" DESCR_ru="" DESCR_uk=""
EN="1" TYPE="CPU" SUBT="gen"/>
<fld SHIFR="MEM" NAME="Memory" NAME_ru="Память" NAME_uk="Пам\'ять" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" TYPE="MEM"/>
</tbl>
-->
</node>
<node id="mod_DiamondBoards">
<!--
<tbl id="DAQ">
<fld ID="Athena" NAME="Athena board" NAME_ru="Плата Athena" NAME_uk="Плата Athena" DESCR="" DESCR_ru="" DESCR_uk=""
ENABLE="1" START="0" BOARD="25" PRM_BD_A="AthenaAnPrm" PRM_BD_D="AthenaDigPrm" ADDR="640" INT="5"
DIO_CFG="0" ADMODE="0" ADRANGE="0" ADPOLAR="0" ADGAIN="0" ADCONVRATE="1000"/>
</tbl>
<tbl id="AthenaAnPrm">
<fld SHIFR="ai0" NAME="AI 0" NAME_ru="AI 0" NAME_uk="AI 0" DESCR="" DESCR_ru="" DESCR_uk="" EN="0" TYPE="0" CNL="0" GAIN="0"/>
</tbl>
<tbl id="AthenaDigPrm">
<fld SHIFR="di0" NAME="DI 0" NAME_ru="DI 0" NAME_uk="DI 0" DESCR="" DESCR_ru="" DESCR_uk="" EN="0" TYPE="0" PORT="0" CNL="0"/>
</tbl>
-->
</node>
<node id="mod_BlockCalc">
<!--
<tbl id="DAQ">
<fld ID="Model" NAME="Model" NAME_ru="Модель" NAME_uk="Модель" DESCR="" DESCR_ru="" DESCR_uk=""
ENABLE="1" START="1" PRM_BD="Model_prm" BLOCK_SH="Model_blcks" PERIOD="1000" PRIOR="0" PER_DB="0" ITER="1"/>
</tbl>
<tbl id="Model_blcks">
<fld ID="Klap" NAME="Klapan" NAME_ru="Клапан" NAME_uk="Клапан" DESCR="" DESCR_ru="" DESCR_uk=""
FUNC="DAQ.JavaLikeCalc.lib_techApp.klap" EN="1" PROC="1"/>
</tbl>
<tbl id="Model_blcks_io">
<fld BLK_ID="Klap" ID="l_kl1" TLNK="0" LNK="" VAL="50"/>
<fld BLK_ID="Klap" ID="l_kl2" TLNK="0" LNK="" VAL="20"/>
</tbl>
<tbl id="Model_prm">
<fld SHIFR="l_kl" NAME="Klap lev" NAME_ru="Полож. клапана" NAME_uk="Полож. клапана" DESCR="" DESCR_ru="" DESCR_uk=""
EN="1" IO="Klap.l_kl1"/>
</tbl>
-->
</node>
<node id="mod_JavaLikeCalc">
<!--
<tbl id="DAQ">
<fld ID="CalcTest" NAME="Calc Test" NAME_ru="Тест вычисл." NAME_uk="Тест обчисл." DESCR="" DESCR_ru="" DESCR_uk=""
ENABLE="1" START="1" PRM_BD="CalcTest_prm" FUNC="TemplFunc.d_alarm" SCHEDULE="1" PRIOR="0" ITER="1"/>
</tbl>
<tbl id="CalcTest_val">
<fld ID="in" VAL="0"/>
<fld ID="alrm" VAL=""/>
<fld ID="alrm_md" VAL="1"/>
<fld ID="alrm_mess" VAL="Error present."/>
</tbl>
<tbl id="CalcTest_prm">
<fld SHIFR="alrm" NAME="Alarm" NAME_ru="Авария" NAME_uk="Аварія" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" FLD="alrm"/>
</tbl>
<tbl id="lib">
<fld ID="TemplFunc" NAME="" NAME_ru="" NAME_uk="" DESCR="" ESCR_ru="" DESCR_uk="" DB="lib_TemplFunc"/>
</tbl>
<tbl id="lib_TemplFunc">
<fld ID="d_alarm" NAME="Digit alarm" NAME_ru="Авария по дискр." NAME_uk="Аварія за дискр" DESCR=""
FORMULA="alrm=(in==alrm_md)?"1:"+alrm_mess:"0";"/>
</tbl>
<tbl id="lib_TemplFunc_io">
<fld F_ID="d_alarm" ID="in" NAME="Input" NAME_ru="Вход" NAME_uk="Вхід" TYPE="3" MODE="0" DEF="" HIDE="0" POS="0"/>
<fld F_ID="d_alarm" ID="alrm" NAME="Alarm" NAME_ru="Авария" NAME_uk="Аварія" TYPE="0" MODE="1" DEF="" HIDE="0" POS="1"/>
<fld F_ID="d_alarm" ID="alrm_md" NAME="Alarm mode" NAME_ru="Режим аварии" NAME_uk="Режим аварії"
TYPE="3" MODE="0" DEF="" HIDE="0" POS="2"/>
<fld F_ID="d_alarm" ID="alrm_mess" NAME="Alarm message" NAME_ru="Сообщ. аварии" NAME_uk="Повід. аварії"
TYPE="0" MODE="0" DEF="" HIDE="0" POS="3"/>
</tbl>-->
</node>
<node id="mod_Siemens">
<!--
<tbl id="DAQ">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
PRM_BD="test2prm" PERIOD="1000" PRIOR="0" CIF_DEV="0" ADDR="5" ASINC_WR="0"/>
</tbl>
<tbl id="test2prm">
<fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" TMPL="S7.ai_man"/>
</tbl>-->
</node>
<node id="mod_SNMP">
<!--
<tbl id="DAQ">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk=""
ENABLE="1" START="1" PRM_BD="test2prm" PERIOD="1000" PRIOR="0" ADDR="localhost" COMM="public" PATTR_LIM="20"/>
</tbl>
<tbl id="test2prm">
<fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" OID_LS="system"/>
</tbl>-->
</node>
<node id="mod_ModBus">
<!--
<tbl id="DAQ">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
PRM_BD="test2prm" PERIOD="1000" PRIOR="0" TRANSP="Sockets" ADDR="exlar.diya.org" NODE="1"/>
</tbl>
<tbl id="test2prm">
<fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1"
ATTR_LS="321:0:tst:Test"/>
</tbl>-->
</node>
<node id="mod_DAQGate">
<!--
<tbl id="DAQ">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
PRM_BD="test2prm" PERIOD="1000" PRIOR="0" SYNCPER="60" STATIONS="loop" CNTRPRM="System.AutoDA"/>
</tbl>-->
</node>
<node id="mod_DCON">
<!--<tbl id="DAQ">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
PRM_BD="test2prm" PERIOD="1" PRIOR="0" ADDR="" REQ_TRY="1"/>
</tbl>
<tbl id="test2prm">
<fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" MOD_TP="0"
MOD_ADDR="1" CRC_CTRL="1"/>
</tbl>-->
</node>
<node id="mod_ICP_DAS">
<!--<tbl id="DAQ">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
PRM_BD="test2prm" PERIOD="1" PRIOR="0" BUS="1" BAUD="115200" LP_PRMS="" REQ_TRY="3"/>
</tbl>
<tbl id="test2prm">
<fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1"
MOD_TP="552985" MOD_ADDR="0" MOD_SLOT="1" MOD_PRMS="0"/>
</tbl>-->
</node>
<node id="mod_OPC_UA">
<!--<tbl id="DAQ">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
PRM_BD="test2prm" SCHEDULE="1" PRIOR="0" SYNCPER="60" ADDR="" EndPoint="opc.tcp://localhost:4841" SecPolicy="None"
SecMessMode="1" Cert="" PvKey="" AttrsLimit="100"/>
</tbl>
<tbl id="test2prm">
<fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" ND_LS=""/>
</tbl>-->
</node>
<node id="mod_SoundCard">
<!--<tbl id="DAQ">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
PRM_BD="test2prm" CARD="" SMPL_RATE="8000" SMPL_TYPE="1"/>
</tbl>
<tbl id="test2prm">
<fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" CHANNEL="0"/>
</tbl>-->
</node>
</node>
<node id="sub_Archive">
<prm id="MessBufSize">1000</prm>
<prm id="MessPeriod">5</prm>
<prm id="ValPeriod">1000</prm>
<prm id="ValPriority">10</prm>
<!--
<tbl id="Archive_mess_proc">
<fld
ID="StatErrors"
MODUL="FSArch"
NAME="Errors"
NAME_ru="Ошибки"
NAME_uk="Помилки"
DESCR="Local errors\' archive"
DESCR_ru="Архив локальных ощибок"
DESCR_uk="Архів локальних помилок"
START="1"
CATEG="/DemoStation*"
LEVEL="4"
ADDR="ARCHIVES/MESS/stError/"/>
<fld
ID="NetRequsts"
MODUL="FSArch"
NAME="Net requests"
NAME_ru="Сетевые запросы"
NAME_uk="Мережеві запити"
DESCR="Requests to server through transport Sockets."
DESCR_ru="Запросы к серверу через транспорт Sockets."
DESCR_uk="Запити до сервера через транспорт Sockets."
START="1"
CATEG="/DemoStation/Transport/Sockets*"
LEVEL="1"
ADDR="ARCHIVES/MESS/Net/"/>
</tbl>
<tbl id="Archive_val_proc">
<fld
ID="1h"
MODUL="FSArch"
NAME="1hour"
NAME_ru="1час"
NAME_uk="1год"
DESCR="Averaging for hour"
DESCR_ru="Усреднение за час"
DESCR_uk="Усереднення за годину"
START="1"
ADDR="ARCHIVES/VAL/1h/"
V_PER="360"
A_PER="60"/>
</tbl>
<tbl id="Archive_val">
<fld
ID="test1"
NAME="Test 1"
NAME_ru="Тест 1"
NAME_uk="Тест 1"
DESCR="Test 1"
DESCR_ru="Тест 1"
DESCR_uk="Тест 1"
START="1"
VTYPE="1"
BPER="1"
BSIZE="200"
BHGRD="1"
BHRES="0"
SrcMode="0"
Source=""
ArchS=""/>
</tbl>-->
</node>
<node id="sub_Protocol">
</node>
<node id="sub_UI">
<node id="mod_QTStarter">
<prm id="StartMod">QTCfg</prm>
</node>
<node id="mod_WebCfg">
<prm id="SessTimeLife">20</prm>
</node>
<node id="mod_VCAEngine">
<!--
<tbl id="LIB">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk=""
DB_TBL="wlib_test2" ICO="" USER="root" GRP="UI" PERMIT="436"/>
</tbl>
<tbl id="wlib_test2">
<fld ID="test2" ICO="" PARENT="/wlb_originals/wdg_Box" PROC="" PROC_ru="" PROC_uk="" PROC_PER="-1"
USER="root" GRP="UI" PERMIT="436"/>
</tbl>
<tbl id="wlib_test2_io">
<fld IDW="test2" ID="name" IO_VAL="Test 2" IO_VAL_ru="Тест 2" IO_VAL_uk="Тест 2" SELF_FLG=""
CFG_TMPL="" CFG_TMPL_ru="" CFG_TMPL_uk="" CFG_VAL=""/>
<fld IDW="test2" ID="dscr" IO_VAL="Test module 2" IO_VAL_ru="Тест модуля 2" IO_VAL_uk="Тест модуля 2" SELF_FLG=""
CFG_TMPL="" CFG_TMPL_ru="" CFG_TMPL_uk="" CFG_VAL=""/>
</tbl>
<tbl id="PRJ">
<fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" DB_TBL="prj_test2"
ICO="" USER="root" GRP="UI" PERMIT="436"/>
</tbl>
<tbl id="prj_test2">
<fld OWNER="/test2" ID="pg1" ICO="" PARENT="/wlb_originals/wdg_Box" PROC="" PROC_ru="" PROC_uk="" PROC_PER="-1"
USER="root" GRP="UI" PERMIT="436" FLGS="1"/>
<fld OWNER="/test2/pg1" ID="pg2" ICO="" PARENT="/wlb_originals/wdg_Box" PROC="" PROC_ru="" PROC_uk="" PROC_PER="-1"
USER="root" GRP="UI" PERMIT="436" FLGS="0"/>
</tbl>
<tbl id="prj_test2_incl">
<fld IDW="/prj_test2/pg_pg1" ID="wdg1" PARENT="/wlb_originals/wdg_Box"/>
</tbl>-->
</node>
</node>
<node id="sub_Special">
<node id="mod_SystemTests">
<prm id="Param" on="0" per="5" name="LogicLev.experiment.F3"/>
<prm id="XML" on="0" per="10" file="/etc/oscada.xml"/>
<prm id="Mess" on="0" per="10" categ="" arhtor="DBArch.test3" depth="10"/>
<prm id="SOAttach" on="0" per="20" name="../../lib/openscada/daq_LogicLev.so" mode="0" full="1"/>
<prm id="Val" on="0" per="1" name="LogicLev.experiment.F3.var" arch_len="5" arch_per="1000000"/>
<prm id="Val" on="0" per="1" name="System.AutoDA.CPULoad.load" arch_len="10" arch_per="1000000"/>
<prm id="DB" on="0" per="10" type="MySQL" addr="server.diya.org;roman;123456;oscadaTest" table="test" size="1000"/>
<prm id="DB" on="0" per="10" type="DBF" addr="./DATA/DBF" table="test.dbf" size="1000"/>
<prm id="DB" on="0" per="10" type="SQLite" addr="./DATA/test.db" table="test" size="1000"/>
<prm id="DB" on="0" per="10" type="FireBird" addr="server.diya.org:/var/tmp/test.fdb;roman;123456" table="test" size="1000"/>
<prm id="TrOut" on="0" per="1" addr="TCP:127.0.0.1:10001" type="Sockets" req="time"/>
<prm id="TrOut" on="0" per="1" addr="UDP:127.0.0.1:10001" type="Sockets" req="time"/>
<prm id="TrOut" on="0" per="1" addr="UNIX:./oscada" type="Sockets" req="time"/>
<prm id="TrOut" on="0" per="1" addr="UDP:127.0.0.1:daytime" type="Sockets" req="time"/>
<prm id="SysContrLang" on="0" per="10" path="/Archive/FSArch/mess_StatErrors/%2fprm%2fst"/>
<prm id="ValBuf" on="0" per="5"/>
<prm id="Archive" on="0" per="30" arch="test1" period="1000000"/>
<prm id="Base64Code" on="0" per="10"/>
</node>
</node>
</station>
</OpenSCADA>
Рассмотрим детальнее структуру конфигурационного файла. Один конфигурационный файл может содержать конфигурацию нескольких станций в секциях <station id="AGLKS"/>. Атрибутом указывается идентификатор станции. Использование той или иной секции станции, при вызове, указывается параметром командной строки --station=AGLKS. Секция станции непосредственно содержит параметры станции и секции подсистем. Параметры конфигурации секции записываются в виде <prm id="StName">AGLKS</prm>. Где в атрибуте <id> указывается идентификатор атрибута, а в теле тега указывается значение параметра "AGLKS". Перечень доступных параметров и их описание для станции и всех остальных секций можно получить в консоли, посредством вызова OpenSCADA с параметром --help.
Секции подсистем (<node id="sub_DAQ" />) содержат параметры подсистемы, секции модулей и секции таблиц отражения данных баз данных в конфигурационном файле. Секции модулей (<node id="mod_DiamondBoards" />) содержат индивидуальные параметры модулей и секции таблиц отражения данных баз данных в конфигурационном файле.
Секции таблиц отражения данных баз данных предназначены для размещения в конфигурационном файле записей таблиц БД для компонентов OpenSCADA. Рассмотрим таблицу входящих транспортов "Transport_in" подсистемы транспорты (<node id="sub_Transport">) из примера конфигурационного файла выше. Таблица содержит две записи с полями: ID, MODULE, NAME, DESCRIPT, ADDR, PROT, START. После загрузки с такой секцией и вообще без БД в подсистеме "Транспорты" модуля "Sockets" появятся два входных транспорта. Форматы структур таблиц основных компонентов включены в демонстрационные конфигурационные файлы. За деталями структуры БД нужно обращаться к документации соответствующих модулей или просто сохранить объект в конфигурационом файле.
Результат вызова команды: # ./openscada_AGLKS --help