Contents
1 Политические и концептуальные
Q: OpenSCADA непонятна и сложна в освоении. Почему так, и есть ли инструкции быстрого старта и продвинутого "Как выполнить ..."?
Re: OpenSCADA тщательно прописана, предельно структурирована и формализована. Однако впечатления непонимания и сложности ожидаемы. Исходя из целей проекта, программа является предельно модульной, а значит вариантов конфигурации и использования очень много. С одной стороны это усложняет восприятие, но с другой — повышает шансы "охвата" именно Вашей специализированной задачи. Кроме того, нужно всегда помнить, что сложное и непонятно всё неизвестное, которое действительно совсем необязательно является таким. И этот психологический барьер нужно преодолевать при каждом освоении нового. Руководство по быстрому старту существует и доступно здесь, а расширенный "Как выполнить ..." также тут..
Q: Работает ли OpenSCADA в операционной системе QNX, FreeBSD, MS Windows?
Re: OpenSCADA разрабатывается по принципам многоплатформенности, основываясь на признанном мировом стандарте POSIX и многоплатформенных библиотеках. Однако, ввиду ограниченности ресурсов и интересами автора и разработчиков, проект ведётся только в ОС Linux. Дальнейшая адаптация к другим платформам запланирована после выпуска версии 1.0 и на данный момент 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: Межмодульные связи могут быть следующих типов:
- Стандартный интерфейс доступа — производится посредством виртуального интерфейса модульных подсистем.
- Расширенный интерфейс доступа — предусматривает экспорт функций внешнего интерфейса модулем экспортёром и последующее подключение модуля импортёра к этим функциям с помощью функций объекта "TModule::modFunc()".
- Пользовательские функции — любой компонент программы может регистрировать свои пользовательские функции ("TCntrNode::objFuncCall()"), которые в последствии могут быть использованы в окружении пользовательского программирования OpenSCADA.
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: Действительно, иногда может понадобиться сохранение и затем восстановление, в основном при перезапуске, некоторых модифицированных динамических данных вроде счётчиков пробега оборудования. В целом, обработку такого рода источников данных и оборудования нужно осуществлять на логическом уровне подсистемы "Сбор данных", а реализовать её можно многими путями, предусматривающими сохранение данных на некотором хранилище и последующее их восстановление, однако наиболее известные способы это:
- Периодическое, или при завершении, сохранение контекста параметров шаблона с помощью запроса пользовательского API OpenSCADA через cntrReq(), где "force" для принудительного сохранения немодифицированных параметров:
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;
}
- Создание специальной таблицы БД и запись/чтение этих данных прямо в эту таблицу посредством SQL-запросов через SQLReq().
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. Обычно, для синтеза речи нужен соответствующий синтезатор с поддержкой нужного языка, вроде RHVoice, festival, espeak. Для проигрывания синтезированного звука вам не нужны специфические инструменты в типовом окружении. Однако, для специфических окружений, нужна программа play, которая обычно содержится в пакете sox, но для точного определения зависимостей смотрите в соответствующих процедурах внешних методов уведомления.
Q: Как я могу быстро и корректно изменить соотношение сторон экрана визуального интерфейса пользователя на другое, например, на 16:9?
Re: Да, основной интерфейс пользователя OpenSCADA, основанный на концепции объектов сигнализации и её корневой странице, приспособлен и разработан под соотношение сторон 4:3. Для общих проектов СВУ запланирована реализация соответствующих стилей на разные соотношения сторон однако мнемосхемы должны оставаться неизменными. Т.е. для ручной, быстрой и корректной смены соотношения сторон Вы, на данный момент, должны выполнить следующее, в дереве проекта СВУ:
- Установить, или умножить оригинальное, атрибут "Геометрия: x масштаб" (geomX) в значение (16/9)/(4/3) = 1.333, для:
- корневой страницы;
- всех шаблонных страниц вроде "Группы графиков", только для страниц использованных как шаблоны;
- всех страниц документов и панелей управления, индивидуально.
- Из-за того, что страницы мнемосхем редко допускают изменение оригинального соотношения сторон, ввиду использования правильных фигур вроде окружности и квадратов, мы вынуждены разрабатывать эти кадры с начала и в размере [900*1.333 x 550] = [1199 x 550].
Q: How can I connect the visualiser UI.Vision to a remote visualisation server or PLC with such function?
Re: Yes, you are allowed for creation of visualiser servers and PLCs based on the module UI.VCAEngine with all VCA-data of the user visualisation projects on them and obliviously with OpenSCADA installed there. Next you are allowed for a connection to the remote visualisation servers or PLCs by the module UI.Vision for locally developing and visualisation of the remote user visualisation projects. The detailed instruction you can get in the Quick Start manual's part "Connecting and using remote and background configurations" and here you have get a short instruction. This short instruction also usable to get remote control of the visualiser servers and PLCs. To do that you must follow next procedure on a client station with the module UI.Vision and any configuration include pure-empty one:
- Create a connection to the visualiser server or PLC as an OpenSCADA station on the transports page of any OpenSCADA configurator, in the "System" mode. If you will set also the "User" mode you will be allowed to control the remote station from the configurator and user, after the navigation tree updating.
- Select on the visualiser page of any OpenSCADA configurator: a new connection, start user, user's password of the remote station and a project or projects for their automatic execution, else you will get in the developing mode. Next starting of the module UI.Vision should cause establishing of the remote connection to the visualiser server or PLC with their projects developing or execution. For querying the station together user and password at the module generic call you can select the connection-station "<Select>", useful at presence of many control stations and for opening several of them simultaneously.
Q: Как я могу автоматически запустить OpenSCADA с соответствующим оперативным интерфейсом пользователя — проектом диспетчерского контроля?
Re: Конечно, после завершения процесса разработки, Вы должны обеспечить запуск программы вместе с запуском операционной системы и полно-экранное исполнение результирующего оперативного интерфейса пользователя. Для этого Вы должны следовать процедуре:
- Обеспечьте специфические для системы мероприятия запуска самой OpenSCADA с вашим проектом. Тут Вы должны предварительно создать или найти иконку рабочего стола вашего проекта в OpenSCADA из менеджера проектов OpenSCADA и скопировать или разместить её в каталоге или перечне программ, которые запускаются автоматически вашим окружением рабочего стола. Детали смотрите в документации на соответствующее окружение рабочего стола.
- Выберите запуск модуля UI.Vision с общим запуском OpenSCADA, в поле "Модули Qt для запуска" модуля UI.QTStarter из любого конфигуратора OpenSCADA.
- Выберите Ваш проект СВУ для его автоматического исполнения, в поле "Перечень проектов для запуска" модуля UI.Vision из любого конфигуратора OpenSCADA. Тут мы также рекомендуем установить для исполнения проекта пользователя, отличного от системного, естественно с правами на этот проект.
Q: May I adjust my project for some specific branding?
Re: Most visible branding by the end user is placed in the end user VCA interface but you may want also in some adjustment the splash image, icons and so on:
- icon in the right upper of the frame "Root page (SO)" — just upload your image in the project resources as "logo", in the preferred size 110x55 pixels (2x1);
- icon of the project window-page in it runtime — just upload your project icon, in the preferred size 128x128 pixels or clean up that for use the common project icon image (see below) which can be translated — dependently from current interface language;
- the project starting splash image — prepare a representative image in the preferred size 600x300 and place it to the project's folder of icons with the name "{ProjectID}_splash.[png|gif|jpg|jpeg]" for both start and exit splash and "{ProjectID}_splash_exit.[png|gif|jpg|jpeg]" for the exit splash;
- the project common icon image for the navigation tree of the OpenSCADA configurators — prepare a representative image in the preferred size 128x128 and place it to the project's folder of icons with the name "{ProjectName}.[png|gif|jpg|jpeg]", where ProjectName can be whether the language specific one or on the Basic Language for whole cases or even both if your project is the multilanguage one.
Q: Оперативный интерфейс оператора запускается на весь экран и я не могу его закрыть для получения доступа к системному окружению рабочего стола!
Re: Конечно, OpenSCADA защищает систему контроля от закрытия и непривилегированного доступа к системному окружению рабочего стола. Т.е. для получения доступа к системному окружению рабочего стола Вы должны быть привилегированным пользователем, изменить пользователя интерфейса на свою учётную запись и в появившемся глобальном меню осуществить нужное: выключить полно-экранный режим, закрыть или выйти из программы. Если глобальное меню не появляется то Вы имеете проблемное окружение рабочего пространства, вроде Unity, которое "отрывает" меню окна; соответственно, предварительно отключите эту функцию окружения!
Q: Я могу легко подключать аналоговые сигналы для построения трендов примитивом Диаграмма, но использование тут дискретных-логических сигналов не является таким очевидным...
Re: Да, примитив Диаграмма разработан в основном для аналоговых сигналов, но вы можете также использовать тут дискретные-логические сигналы как аналоговые с двумя состояниями [0,1], т.е. их натуральная шкала это [0...1] и если вы подключите один сигнал в автоматической-натуральной шкале, то получите его на весь экран, с заполненными полосами для состояния ПРАВДА (TRUE). Но это не очень удобно и вы не сможете объединить его с другими аналоговыми или дискретными-логичными сигналами даже в полупрозрачном цвете, т.е. вы должны вручную указать шкалу для позиционирования полосы дискретного-логического сигнала в необходимой части экрана. Некоторые примеры шкал:
- [0...5] — вы делите экран по вертикали на пять полос и отображаете сигнал внизу;
- [-4...1] — вы делите экран по вертикали на пять полос и отображаете сигнал вверху;
- [-2...3] — вы делите экран по вертикали на пять полос и отображаете сигнал в центре;
- [0...10] — вы делите экран по вертикали на десять полос и отображаете сигнал внизу.
Q: I have a very busy system with many OpenSCADA processes working through the Web interface and I want to decrease the server loading and speed up all those interfaces.
Re: Yes, by default OpenSCADA interface designed for work in some fast enough carrying-live period (100 ms) which suitable mostly for active local Qt-interfaces of the module UI.Vision with high reactivity and on fast enough networks at working with the visualisation server. But currently you can tune your interface to achieve the loading decrease in times:
- the first and an obviously step that is to increase the carrying-life period in the VCA Project configuration, where you can set the "Period of the calculation" in a value up to 500 ms for active local Qt-interfaces of the module UI.Vision and up to 1000 ms for not fast Web-interfaces of the module UI.WebVision;
- the second step that is to set the dynamic data updating period depending on what you mean as enough often or disable the periodic updating in whole by setting the period in -2; and do that for the main-root page in the Widget configuration of your project tree; the same you can do for all panels placed in the group "Control panels (control)" of the project logical structure from the same main-root page, setting the needing period for the group itself;
- the third step that is deepening to your dynamic widgets-cadres adaption for work on big periodicity without loss the reactivity like to the already adapted ones from the standard library as the main-root page and Analog show; and the adaption mostly means:
- sending user events at need of rapid updation in the next life cycle after the events processing;
- controlling the widget execution period depending on the activity situation like to blinking the selection cursor and the alarm colors.
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-графики.