OpenSCADA

Документы/Часто задаваемые вопросы

This page is a translated version of the page Documents/FAQ and the translation is 100% complete.

English • ‎российский • ‎українська

Contents

1 Политические и концептуальные

Q: OpenSCADA непонятна и сложна в освоении. Почему так, и есть ли инструкции быстрого старта и продвинутого "Как сделать ..."?
Re: OpenSCADA тщательно прописана, предельно структурирована и формализована. Однако впечатления непонимания и сложности ожидаемы. Исходя из целей проекта, программа является предельно модульной, а значит вариантов конфигурации и использования очень много. С одной стороны это усложняет восприятие, но с другой — повышает шансы "охвата" именно Вашей специализированной задачи. Кроме того, нужно всегда помнить, что сложное и непонятно всё неизвестное, которое действительно совсем необязательно является таким. И этот психологический барьер нужно преодолевать при каждом освоении нового. Руководство по быстрому старту существует и доступно здесь, а расширенный "Как сделать ..." также тут..

Q: Работает ли OpenSCADA в операционной системе QNX, FreeBSD, MS Windows?
Re: OpenSCADA разрабатывается по принципам многоплатформенности, основываясь на признанном мировом стандарте POSIX и многоплатформенных библиотеках. Однако, ввиду ограниченности ресурсов и интересами автора и разработчиков, проект ведётся только в ОС Linux. Дальнейшая адаптация к другим платформам запланирована после выпуска версии 0.9 и на данный момент OpenSCADA работает на аппаратных платформах x86, x86_64, ARM и программной платформе Android. Поддержка той или иной платформы будет зависеть от заинтересованности сообщества и наличия отдельного мантейнера для аппаратно-программной платформы.

Q: Возможно ли управлять OpenSCADA посредством обычного WEB-браузера?
Re: Да, возможно. Для конфигурации OpenSCADA из WEB-браузера созданы модули UI.WebCfg и UI.WebCfgD; для исполнения интерфейсов оператора создан модуль UI.WebVision и для создания пользовательских HTML страниц создан модуль UI.WebUser. Которые вызываются модулем Protocol.HTTP, подсистемы "Транспортные Протоколы".

Q: Допускает ли программа добавление/удаление/обновление модулей на ходу (без остановки)?
Re: Данная возможность предусмотрена программой и обеспечивается подсистемой "Управление модулями". Фактически, обновление модулей может происходить автоматически, после обнаружения новой версии модуля.

2 Архитектурные, использование и короткие "Как сделать ..."

2.1 Ядро OpenSCADA

Q: Каким образом реализуется многоязыковая поддержка? Могу ли я выполнить локализацию на свой родной язык?
Re: Многоязыковая поддержка реализована на основе стандарта интернационализации I18n. И файлы интернационализации модулей отделены от файла интернационализации ядра программы, что обеспечивает полноценную поддержку независимого распространения и разработки модулей к OpenSCADA. Перевод программы в целом и модулей в отдельности может быть выполнен независимо от наличия исходных текстов. Для перевода достаточно получить *.po или *.pot файлы нужного компонента и в обычном текстовом редакторе, или специализированной программе, выполнить перевод сообщений в файлах с английского на нужный язык. Актуальные файлы вы можете получить из репозитория исходных текстов проекта в каталоге "src/po" ядра программы и каталогах "src/moduls/{subsys}/{module}/po" модулей, а по завершению предложить результаты нового перевода для включения в репозиторий исходных текстов, написав в форум проекта или прямо автору и главному разработчику проекта. PO-файлы не используются программой непосредственно, поэтому для быстрой проверки результата перевода и исправления ошибок форматирования можете воспользоваться командой $ msgfmt -vo [openscada|oscd_{ModId}].mo {lang}.po и поместить полученный MO-файл [openscada|oscd_{ModId}].mo в каталоге "/usr/share/locale/{lang}/LC_MESSAGES" актуальной инсталляции OpenSCADA для языка lang.

Q: Могу ли я создать свой собственный модуль для какой либо подсистемы?
Re: Да, конечно. Для помощи в этом создан документ, где практически полностью описана архитектура ядра, его функции и API модулей различных подсистем. Дополнительно создано руководство по созданию модулей к OpenSCADA и для каждой подсистемы создан модуль-шаблон, взяв за основу который можно быстро создать собственный модуль.

Q: Как организовывается разделение доступа?
Re: Используется схема безопасности подобная UNIX OC. Так, нужные компоненты имеют владельца, принадлежат группам и содержат триаду доступа "rwxrwxrwx". Кроме того, данный механизм безопасности внедрён в интерфейс управления OpenSCADA, который в свою очередь пронизывает всю программу.

Q: Каким образом в OpenSCADA можно реализовывать межмодульные связи?
Re: Межмодульные связи могут быть следующих типов:

Q: Как OpenSCADA собрать из исходных текстов?
Re: Сборка любого программного проекта из исходных текстов, на системном языке вроде C/C++ и сложностью выше среднего, является нетривиальной задачей, особенно для специфических окружений и окружений для которых ещё не выполнена адаптация. Для решения этой задачи нужна соответствующая подготовка и предварительный опыт сборки. Если есть возможность получить OpenSCADA собранной и в виде готовых пакетов под ваше окружение, то обязательно ею воспользуйтесь! Если же нет пакетов под ваше окружение или Вы сознательно желаете собрать программу из исходных текстов под адаптированное окружение то воспользуйтесь руководством для сборки из исходных текстов. Адаптация к сборке и работе в других окружениях является значительно более нетривиальной задачей, особенно для окружений очень далёких от POSIX или понятия меж-платформенной совместимости вообще, является отдельным под-проектом OpenSCADA и предусматривает продолжительный процесс вроде адаптации к Android, поэтому не нужно её путать с простой сборкой под адаптированное окружение!

2.2 БД

Q: Могу ли я получить данные непосредственно из БД?
Re: Да, Вы можете. Для баз данных (БД), которые поддерживают SQL, Вы можете использовать функцию SQLReq() к соответствующей БД. В общем и для не SQL баз данных Вы можете использовать API доступа к слою баз данных OpenSCADA в функциях таблицы БД fieldStruct(), fieldSeek(), fieldGet(), fieldSet(), fieldDel().

2.3 Физический и логический-виртуальный сбор данных

Q: Где и как выполнять дополнительную логическую обработку атрибутов параметров, включая логическое связывание в одном объекте?
Re: Любая математическая обработка атрибутов параметров может производится в вычислительных объектах контроллеров (модулях подсистемы "Сбор данных"), например, в блочном вычислительном контроллере (DAQ.BlockCalc) и объекте контроллера на основе Java-подобного языка (DAQ.JavaLikeCalc). Кроме того, обработка может выполняться на логическом уровне параметров (DAQ.LogicLev) в модулях подсистемы "Сбор данных", специально для этого предусмотренных (работающих по шаблонам параметров) или содержащих встроенную реализацию механизма шаблонов параметров. Т.е. пользователь может формировать параметры с нужной ему структурой и алгоритмом пост-обработки, формируя логически связанные объекты. Часть обработки может выполняться в СВУ, непосредственно при визуализации (UI.VCAEngine). Про сбор данных в целом смотрите в документе.

Q: Где проверяются шкалы параметров и различные уставки сигнализации?
Re: Проверка шкал и уставок может реализовываться самим контроллером, с сигнализацией через соответствующие атрибуты параметров, а также на логическом уровне параметров, для "сырых" источников данных. Кроме того, данный анализ может производится непосредственно в среде визуализации и управления (СВУ).

Q: Могу ли я получить (прочитать и записать) значение атрибута параметра сбора данных, например, из процедуры пользовательского интерфейса?
Re: Основным интерфейсом обмена значениями параметров сбора данных с элементами или атрибутами соответствующей части OpenSCADA является статичное связывание, которое является самым быстрым. Однако внутренний язык и динамическая объектная модель узлов OpenSCADA позволяет Вам осуществлять динамический доступ к объектам атрибутов параметров сбора данных, например, Вы можете получить значение атрибута функцией get().

Q: Как я могу сохранить-восстановить модифицированные данные на логическом уровне?
Re: Действительно, иногда может понадобиться сохранение и затем восстановление, в основном при перезапуске, некоторых модифицированных динамических данных вроде счётчиков пробега оборудования. В целом, обработку такого рода источников данных и оборудования нужно осуществлять на логическом уровне подсистемы "Сбор данных", а реализовать её можно многими путями, предусматривающими сохранение данных на некотором хранилище и последующее их восстановление, однако наиболее известные способы это:

SYS.cntrReq(SYS.XMLNode("save").setAttr("path",this.nodePath()+"/%2fobj").setAttr("force","1"));
if(f_start)    prevArchRestore = false;
if(!prevArchRestore && (archEnd=this.cntr.arch().end("FSArch.1s"))) {
    SYS.messInfo("testArch", "val="+this.cntr.arch().getVal(archEnd)+"; "
               "val1="+this.cntr.arch().getVal(archEnd,false,"FSArch.1s")+"; "
               "val2="+this.cntr.get(archEnd/1000000,archEnd%1000000));
    cntr = this.cntr.arch().getVal(archEnd);
    prevArchRestore = true;
}

Q: Возможно ли, и каким образом, реализуется резервирование параметров?
Re: Как и любая пост-обработка, резервирование параметров осуществляется логическим уровнем путём создания шаблона параметра, реализующего возможность в одном параметре описывать несколько однотипных датчиков, которые будут иметь собственные атрибуты значений. Результирующее значение будет помещаться в обобщающий атрибут значения.

2.4 Архивирование-история и Нарушения

Q: Каким образом определяется цикличность архивирования значений?
Re: Архивирование является независимой от контроллеров и параметров задачей и выполняется она модульной подсистемой "Архивы-История". Что и как архивировать определяется индивидуально для каждого атрибута параметра. Предусмотрены два режима архивирования: пассивный и активный. Пассивное архивирование определяется цикличностью получения данных у контроллера — циклом модуля сбора данных. Активное архивирование обеспечивается задачей подсистемы архивирования и независимо от цикла и способа сбора данных модулем "DAQ".

Q: В процессе разработки-наладки у меня остаются несоответствующие активные нарушения. Что с ними делать?
Re: Да, учитывая, что нарушения в таблицу активных нарушений часто попадают-формируются пользовательскими процедурами, то "залипание" их там может случаться. Соответственно, вы можете просто перезапустить проект OpenSCADA или удалить-снять такие нарушения в главной вкладке "Сообщения" страницы подсистемы "Архивы-История": выбираете уровень нарушений "Информация (1[X]), НАРУШЕНИЕ", устанавливаете размер в 0, после чего в таблице сообщений должны быть все актуальные нарушения, отдельные из которых можно убрать через контекстное меню, а всё видимое кнопкой под таблицей; для большой группы нарушений, и не всех, можете установить их чёткие характеристики времени, уровня и категории, чтобы увидеть в таблица, а соответственно "снять" сразу все необходимые.

Q: Возможна ли работа с потоковыми данными?
Re: Потоковый и пакетный сбор данных работает в связке с архивом и его буфером. Т.е. источник, получив пакет/блок данных, непосредственно помещает его в архив атрибута параметра или же берет пакет с буфера архива при потоковом выводе.

Q: Могу ли я осуществить экспорт архивных данных (истории) в другой формат, скажем — CSV, Excel?
Re: В целом, экспортировать архивные данные Вы можете и тут есть три особенности, а именно: место, форматы и режим экспорта. Поскольку конечным пользователем, для которого эти данные формируются, является пользователь конечного интерфейса визуализации — оператор, то встроенная функция экспорта предоставляется этими интерфейсами для данных примитивов диаграммы и документа, где можно осуществить экспорт в CSV, файл изображения и HTML. Что касается других форматов данных, особенно закрытых и одноплатформенных вроде Excel, то экспорт в них может быть реализован пользовательской процедурой через общий интерфейс визуализации пользователя как прямым формированием, если формат простой, так и вызовом внешней утилиты преобразования, если она доступна. Экспорт в целом может осуществляться в двух режимах: интерактивном и потоковом. Именно интерактивный режим встроен в интерфейс пользователя и он предусматривает указание диапазона и качества данных (данных примитивов), как ограничивающих факторов целесообразного времени исполнения этой операции. Потоковый режим предусматривает фоновое, возможно даже вместе с основными процессами, осуществление экспорта как текущих данных так и данных локальных архивов и часто используется для экспорта в таблицу БД с нужной структурой. Экспорт из окружения разработки, как и потоковый режим, встроенными функциями не предусматривается, кроме экспериментальных вроде экспорта в WAV. Это, при необходимости, может быть реализовано сервисной процедурой или частью кода основного процесса для потокового режима.

2.5 Интерфейс конечного пользователя

Q: Каким образом осуществляется речевая сигнализация и что нужно для её работы?
Re: Речевая сигнализация, как и иные методы сигнализации, является элементом подсистемы "Пользовательские интерфейсы" и осуществляется в модулях среды визуализации и управления (СВУ), а именно: в движке СВУ UI.VCAEngine и в визуализаторах UI.Vision и UI.WebVision. Обычно, для синтеза речи нужен соответствующий синтезатор с поддержкой нужного языка, вроде "festival" и "espeak". Для проигрывания синтезированного звука вам не нужны специфические инструменты в типовом окружении. Однако, для специфических окружений, нужна программа play, которая обычно содержится в пакете sox, но для точного определения зависимостей смотрите в соответствующих процедурах внешних методов уведомления.

Q: Как я могу быстро и корректно изменить соотношение сторон экрана визуального интерфейса пользователя на другое, например, на 16:9?
Re: Да, основной интерфейс пользователя OpenSCADA, основанный на концепции объектов сигнализации и её корневой странице, приспособлен и разработан под соотношение сторон 4:3. Для общих проектов СВУ запланирована реализация соответствующих стилей на разные соотношения сторон однако мнемосхемы должны оставаться неизменными. Т.е. для ручной, быстрой и корректной смены соотношения сторон Вы, на данный момент, должны выполнить следующее, в дереве проекта СВУ:

Q: Как я могу подключить визуализатор UI.Vision к удаленному серверу визуализации или к ПЛК с этой функцией?
Re: Да, Вы можете создавать сервера визуализации и ПЛК, основанные на модуле UI.VCAEngine со всеми данными СВУ проектов визуализации пользователя на них и очевидно с установленной там OpenSCADA. Впоследствии Вы можете подключаться к этим удалённым серверам визуализации и ПЛК с помощью модуля UI.Vision для локальной разработки и визуализации удалённых проектов визуализации пользователя. Детальную инструкцию Вы можете получить в разделе "Подключение и использование удалённых и фоновых конфигураций" руководства по Быстрому Старту и тут Вы получите короткую инструкцию. Эта короткая инструкция также полезна для получения удалённого контроля серверов визуализации и ПЛК! Для осуществления этого, на клиентской станции Вы должны следовать процедуре, с модулем UI.Vision и с любой конфигурацией включая и пустую:

Q: Как я могу автоматически запустить OpenSCADA с соответствующим оперативным интерфейсом пользователя — проектом диспетчерского контроля?
Re: Конечно, после завершения процесса разработки, Вы должны обеспечить запуск программы вместе с запуском операционной системы и полно-экранное исполнение результирующего оперативного интерфейса пользователя. Для этого Вы должны следовать процедуре:

Q: Могу ли я подстроить мой проект под несколько специфическое оформление (брендинг)?
Re: Большинство визуального оформления (брендинга) конечного пользователя размещено в конечном интерфейсе СВУ пользователя, однако вы можете также захотеть подстроить изображение заставки, иконки и подобное:

Q: Оперативный интерфейс оператора запускается на весь экран и я не могу его закрыть для получения доступа к системному окружению рабочего стола!
Re: Конечно, OpenSCADA защищает систему контроля от закрытия и непривилегированного доступа к системному окружению рабочего стола. Т.е. для получения доступа к системному окружению рабочего стола Вы должны быть привилегированным пользователем, изменить пользователя интерфейса на свою учётную запись и в появившемся глобальном меню осуществить нужное: выключить полно-экранный режим, закрыть или выйти из программы. Если глобальное меню не появляется то Вы имеете проблемное окружение рабочего пространства, вроде Unity, которое "отрывает" меню окна; соответственно отключите эту функцию окружения!

Q: Я могу легко подключать аналоговые сигналы для построения трендов примитивом Диаграмма, но использование тут дискретных-логических сигналов не является таким очевидным...
Re: Да, примитив Диаграмма разработан в основном для аналоговых сигналов, но вы можете также использовать тут дискретные-логические сигналы как аналоговые с двумя состояниями [0,1], т.е. их натуральная шкала это [0...1] и если вы подключите один сигнал в автоматической-натуральной шкале, то получите его на весь экран, с заполненными полосами для состояния ПРАВДА (TRUE). Но это не очень удобно и вы не сможете объединить его с другими аналоговыми или дискретными-логичными сигналами даже в полупрозрачном цвете, т.е. вы должны вручную указать шкалу для позиционирования полосы дискретного-логического сигнала в необходимой части экрана. Некоторые примеры шкал:

3 Проблемы (актуально, окружение, исправлено)

Q: Почему я потерял дробную часть у всех загруженных значениях вещественного типа?
Re: Вы используете локаль, отличную от "C" или общего Английского, и устанавливаете её прямо переменной окружения "LC_NUMERIC" или её общим вариантом "LC_ALL", что приводит к использованию в функциях вроде atof() и sprintf() символа разделителя дробной части отличного от "." (точка), часто это "," (запятая).

!> Т.е., никогда не устанавливайте переменных окружения "LC_NUMERIC" и "LC_ALL" прямо поскольку они переопределяют корректную установке "LC_NUMERIC" в "C", в середине! Для изменения языка программы используйте только переменные "LANG" и "LANGUAGE", которых всегда достаточно.
+> На данный момент проблема полностью исключена, путём проверки и очистки переменной окружения "LC_ALL"!

Q: "Нет доступа для создания политики реального времени для '****'. Создан поток по умолчанию!"
Re: Такое сообщение OpenSCADA формирует при попытке установить для потока-задачи политику реального времени, по приоритету больше 0, в случае запуска от обычного пользователя.

+> Потенциально такие права можно предоставить путём редактирования файла "/etc/security/limits.conf" таким образом:
user    hard    nice    -20 
user    soft    nice    -15 
user    hard    rtprio  99 
user    soft    rtprio  90

Q: Я наблюдаю отсутствие всех текстовых меток на графиках (примитив "Диаграмма") интерфейсов модуля UI.WebVision. Почему так?
Re: Такой результат возможен на интерфейсах, построенных на библиотеке GD, и если сама эта библиотека собрана без использования библиотеки FontConfig. На данное время только модуль UI.WebVision использует эту библиотеку для исключительного построения примитивов "Элементарная Фигура" и "Диаграмма".

+> Т.е. для исправления этой проблемы Вы должны установить корректный пакет-сборку библиотеки или собрать библиотеку самостоятельно с FontConfig. На данный момент известен один случай такого сорта проблемы с пакетом "libgd2-noxpm" старых версий дистрибутива Linux Debian, где Вы должны установить корректный пакет "libgd2-xpm".

Q: Я наблюдаю отсутствие SVG-изображений в интерфейсах Qt. Почему так?
Re: Как правило это указывает на отсутствие в системе Qt-модуля для SVG-графики, например, пакет "libqt5svg5" в Linux дистрибутивах на основе Debian.

+> Установите пакет или непосредственно Qt-плагин поддержки SVG-графики.
Documents/FAQ/ru - GFDLFebruary 2022OpenSCADA 1+r2802