From OpenSCADAWiki
Jump to: navigation, search
This page is a translated version of the page Documents/FAQ and the translation is 96% complete.

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

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: Данная возможность предусмотрена программой и обеспечивается подсистемой "Управление модулями". Фактически, обновление модулей может происходить автоматически, после обнаружения новой версии модуля.

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

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

2.1 Ядро OpenSCADA

Q: Каким образом реализуется многоязыковая поддержка? Могу ли я выполнить локализацию на свой родной язык?
Re: Многоязыковая поддержка реализована на основе стандарта интернационализации I18n. Причём файлы интернационализации модулей отделены от файла интернационализации ядра программы. Это обеспечивает полноценную поддержку независимого распространения и разработки модулей к OpenSCADA. Перевод программы в целом и модулей в отдельности может быть выполнен независимо от наличия её исходных текстов. Для перевода достаточно получить *.po или *.pot файлы нужного компонента и в обычном текстовом редакторе выполнить перевод сообщений в файлах с английского на нужный язык. Актуальные файлы Вы можете получить из репозитория исходных текстов проекта.

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():
SYS.cntrReq(SYS.XMLNode("save").setAttr("path",this.nodePath()+"/%2fobj"));
  • Если атрибут шаблона со счётчиком архивируется тогда при старте параметра Вы можете получить последнее значение из этого архива, например, так:
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: Потоковый и пакетный сбор данных работает в связке с архивом и его буфером. Т.е. источник, получив пакет/блок данных, непосредственно помещает его в архив атрибута параметра или же берет пакет с буфера архива при потоковом выводе.

Q: Can I export archived data (history) to a different format, say — CSV, Excel?
Re: In general, you can export archived data, and here are three features, that is: location, formats and export mode. Since the end user for whom this data is being formed is the user of the end visual interface — operator, the built-in export function is provided by these interfaces for the data primitives of the diagram and the document where you can export to CSV, image file and HTML. With regard to other data formats, especially closed and one-platform formats, such as Excel, then their export can be implemented by a user procedure through the common user interface of the visualization as a direct formation, if the format is simple, and the call of the external transformation utility, if available. Exports generally can be in two modes: interactive and flowing. It is the interactive mode embedded in the user interface and it involves determining the range and quality of data (the primitives data) as the limiting factors of the advisable execution time of this operation. The flowing mode provides a background, possibly even with the main processes, exporting both current data and local archive data and is often used to export to a database table with the desired structure. Exporting from the developer environment, like the flowing mode, do not have embedded functions, except for experimental ones such as WAV exports. This can, if necessary, be implemented by service procedure or part of the code of the main process for the flowing mode.

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

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

  • Создать подключение к визуальному серверу или ПЛК, как станции OpenSCADA, на странице транспортов любого конфигуратора OpenSCADA, в режиме "Системный". Если Вы также установите режим "Пользовательский" то после обновления дерева навигации Вы сможете контролировать удалённую станцию с этого конфигуратора и пользователя.
  • Выбрать на странице визуализатора любого конфигуратора OpenSCADA: новое подключение, пользователя запуска, пароль пользователя этой удалённой станции и проекта(ов) для их автоматического исполнения, иначе Вы получите режим разработки. Следующий запуск модуля UI.Vision должен привести к установлению подключения к удалённому серверу визуализации или ПЛК с разработкой или исполнения их проектов.

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

  • Обеспечьте специфические для системы мероприятия запуска самой OpenSCADA с вашим проектом. Тут Вы должны предварительно создать или найти иконку рабочего стола вашего проекта в OpenSCADA из менеджера проектов OpenSCADA и скопировать или разместить её в каталоге или перечне программ, которые запускаются автоматически вашим окружением рабочего стола. Детали смотрите в документации на соответствующее окружение рабочего стола.
  • Выберите запуск модуля UI.Vision с общим запуском OpenSCADA, в поле "Модули Qt для запуска" модуля UI.QTStarter из любого конфигуратора OpenSCADA.
  • Выберите Ваш проект СВУ для его автоматического исполнения, в поле "Перечень проектов для запуска" модуля UI.Vision из любого конфигуратора OpenSCADA. Тут мы также рекомендуем установить для исполнения проекта пользователя, отличного от системного, естественно с правами на этот проект.

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

3 Проблемы

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

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".