1 Введение
Релиз OpenSCADA, открытой SCADA(Supervisory control and data acquisition) системы, версии 0.9 является стабильным промышленным релизом продолжительной поддержки (LTS).
Основной целью релиза является предоставление обновленной и стабильной платформы построения решений комплексных систем автоматизации и других смежных решений для сообщества пользователей и разработчиков свободного программного обеспечения. Также, релиз предназначен стать актуальным и прочным фундаментом в построении коммерческих решений.
Релиз является следующей версией стабильной ветви для которого, в течении продолжительного времени, предоставляется техническая поддержка от разработчиков и обеспечивается выпуск исправлений в виде публичных сборок для основных и стабильных окружений Linux, а также оперативных сборок для владельцев пакетов технической поддержки. Жизненный цикл предыдущего релизу 0.8.0 LTS прекращается его последним обновлением, непосредственно перед первыми сборками пакетов 0.9 LTS.
Именно на этой версии осуществляется окончательный переход на схему разработки Work/LTS, т.е., разработка осуществляется в рамках рабочей версии и на её основе периодически выпускаются стабильные релизы, которые, в свою очередь и параллельно разработке, обновляются путём обратного портирования совместимых изменений из рабочей версии. Инициирующий переход произошёл в 2013 году, когда текущей стабильной версией определено 0.8.0 LTS, а рабочей 0.9 Work. На данный момент, стабильной версией становится анонсированная 0.9 LTS, а рабочей 1 Work.
В целом, новая стабильная версия является результатом шести лет работы с разработки, внедрения в различные решения, стабилизации и эксплуатации OpenSCADA в её рабочей ветви, которая на данный момент выпускается текущей стабильной. Всё это время обновления для 0.8.0 LTS продолжали выпускаться и что будет осуществляться для анонсированной 0.9 LTS.
Этот документ является обобщение протокола изменений (ChangeLog), начиная с нулевой ревизии предыдущей LTS версии, через её обновления и заканчивая текущей. Документ призван коротко и наглядно осветить новые возможности OpenSCADA. Детально ознакомиться с изменениями можно в файле "ChangeLog" дистрибутивных пакетов или из первоисточника: http://oscada.org/svn/tags/openscada_0.9/ChangeLog.
1.1 Общая информация
Проект OpenSCADA основан Савоченко Романом в 2003 году как свободную реализация Системы Диспетчерского Контроля и Сбора Данных (SCADA) или Человеко Машинный Интерфейс (HMI), на основе её фундаментального проектирования в течении 2002 года и опыта использования и разработки коммерческой SCADA-системы до этого.
SCADA или HMI системы в целом предназначены и используются для осуществления человеком оперативного контроля за работой сложного и ответственного технологического оборудования и процессов различных производственных предприятий.
На время анонса 0.9 LTS, OpenSCADA является развитой SCADA/HMI системой, которая довольно широко используется как по прямому назначению, так, благодаря своей гибкости, и во многих смежных областях, и которая с уверенностью может называться более обобщённо — динамическая система работы с данными реального времени.
Номер стабильной версии OpenSCADA меньше единицы только из-за того, что её целью была заявлена многоплатформенность, достичь которой в запланированном объёме планируется следующим стабильным релизом с номером 1. В целом, целями OpenSCADA являются:
- открытость — в основном GPLv2;
- масштабируемость, гибкость, расширяемость — модульность и внутренняя динамичность;
- исполняемая избыточность — резервирование;
- доступность — открытые исходные тексты; автоматическая сборка архивов, пакетов, живых дисков, ...; многоязычность; динамическая многоязычность; сборка и исполнение на Linux окружениях широкого возрастного диапазона, от 2002 года (2009-ALTLinux 6, LP8x81, Fedora 12; 2012-Debian 7) по современные;
- надёжность — практическое применение, быстрое решение проблем;
- безопасность — распределение прав, SSL;
- многоплатформенность — x86_32, x86_64, ARM, Web, Android, QNX (предадаптировано), MS Windows (запланировано);
- единый, унифицированных, удобный и развитый интерфейс пользователя — Qt, Web, прозрачное и многоуровневое удалённое управление;
- широкий спектр источников данных — универсальные, платы DAQ и низкоуровневые шины, созданные в окружении OpenSCADA.
1.2 Применение
К актуальным отраслям применения, где известно хотя-бы одно внедрение и с коротким перечнем которых от участников проекта можно ознакомиться по этой ссылке, относятся:
С некоторыми ограничениями и доработками, в основном во внутреннем окружении пользователя, OpenSCADA может использоваться и в таких отраслях:
- управление ресурсами предприятия (ERP);
- Geo-локация и отслеживание положения;
- торговые системы;
- медицинские диагностические системы;
- бухгалтерский учёт;
- билинговые системы.
2 Результаты предыдущего релизу 0.8.0 LTS
Релиз 0.8.0 LTS выпущен в апреле 2012 года и в течении этих шести лет он претерпел 20 обновлений, которыми, в целом, исправлено более 500 ошибок и добавлено множество усовершенствований, которые не нарушают совместимости библиотечных БД и конфигурации.
Конфигурация и библиотечные БД 0.8.0 LTS были в целом заморожены, ввиду больших несовместимых изменений в 0.9 Work, для методов запуска OpenSCADA, и несовершенство распространение библиотечных БД на момент выпуска 0.8.0 LTS. Поэтому, обновление и переход на версию 0.9 LTS будет нетривиальным, хотя в 0.9 LTS предусмотрено всё возможное для упрощения этой процедуры. Обновление-же 0.9 LTS до запланированной в будущем 1 LTS уже не будет таким сложным и фактически может превратиться исключительно в формальное изменение версии рабочей ветви, поскольку теперь планируется обновление всего, включая и библиотечные БД.
3 Плановые задачи релиза
Развитие OpenSCADA, после предыдущей LTS версии и в рамках рабочей ветви, в основном осуществлялось путём глубокой стабилизации и через практическую адаптацию с элементами расширения существующего функционала, нацеленные на предоставление стабильного и надёжного окружения автоматизации промышленных и смежных задач, а соответственно и не существовало чётко определённого плана. Но за три года до этого релиза такой план появился и составил следующие задачи, что видно из общего плана развития:
- Полная ревизия основной документации и подготовка анонса этого релиза.
- Адаптация к работе на программной платформе "Android".
- Перенос базы знаний OpenSCADA и Wiki-ресурса документирования на новый движок с унификацией структуры под многоязычность с приоритетом: Английский, Украинский, Российский; и генерация автономной документации по её изменению.
- Ревизия, актуализация и некоторое расширение Web-модулей OpenSCADA.
- Расширение и адаптация OpenSCADA к прямой работе с низкоуровневыми шинами и устройствами вроде 1Wire, I2C и реализация проекта умного дома в собственной квартире.
- Формальное создание и документирование проекта дистрибутива Linux автоматизации с OpenSCADA.
- Создание автоматизированной системы сборки пакетов OpenSCADA.
- Перенос серверной инфраструктуры OpenSCADA на собственное оборудование и канал интернета.
- DAQ.OPC_UA: Упрощение, увеличение функциональности и перенос протокольного кода в отдельную LGPL v3 библиотеку.
Эти задачи выполнены и некоторые детали около них приведены далее.
4 Общесистемные свойства
Новая стабильная версия OpenSCADA получила заметные общесистемные расширения, приобрела большей стабильности в работе и увеличение продуктивности, а также получила заметные усовершенствования графического интерфейса и окружения около неё, вроде: расширенной настройки, документации, доступной прямо из программы (offline и online), и которая значительным образом пересмотрена и актуализирована.
Основная часть документации проекта перенесена на новую Wiki, на основе MediaWiki, и значительный объём этой части был отревизирован и переведен на три языка — Английский, Украинский, Российский. Для переноса была создана процедура конвертации статей из диалекта движка WackoWiki на MediaWiki, которая была полностью написана на внутреннем языке программирования OpenSCADA и которую многократно использовано для переноса большого объёма старой Wiki. Формат автономной (offline) документации был изменён со статичных PDF-файлов, которые не обновлялись после предыдущей LTS версии, на HTML-файлы, которые динамически генерируются из актуальной базы знаний проекта (Wiki), а также имеют актуальные крос-ссылки между страницами и ссылки на online-документацию, для исключительно внешних материалов. Генерация offline-документации также производится специально написанной процедурой на внутреннем языке OpenSCADA, что, вместе с процедурой конвертации Wiki-диалекта и комплексного тестирования релиза OpenSCADA, является ярким показателем мощности и текущего уровня развитости внутреннего языка OpenSCADA.
В рамках старой Wiki, после выпуска 0.8.0 LTS были добавлены и обновлены некоторые документы, а с переносом на новую Wiki, кроме ревизии и перевода основной части документации, была осуществлена общая унификацию её структуры из соображений: многоязычности (Английского как первичного языка), логичности организации, удобства перевода и возможности убрать дублирование статей с официальным сайтом, которые сейчас просто используются из Wiki. Отдельно отметим значительно-расширенные главные документы:
Первичный язык (Английский) был полностью отревизирован в оригинальных сообщениях программы и во многом для основных статей документации-Wiki OpenSCADA, что на данное время делает OpenSCADA адекватно воспринимаемой для аудитории, которая не понимает исходных языков — Украинского или Российского. И, вместе с реализацией в полном объёме механизма динамического перевода, делает возможным построение на основе OpenSCADA динамично многоязыковых интерфейсов пользователя, что Вы можете кроме всего прочего посмотреть на публично доступном Web-интерфейсе динамических моделей ТП: АГЛКС, Котёл.
Рабочей версией, в основе этой стабильной, впервые было определено понятие проекту OpenSCADA и реализован сценарий командной строки для запуска и создания проектов OpenSCADA. Непосредственно перед выпуском этой версии, понятие проекта OpenSCADA было окончательно закреплено за директорий с данными отдельного проекта и конфигурационным файлом OpenSCADA, а реализация менеджера проекта была интегрировано непосредственно в OpenSCADA. Соответственно, эта LTS версия имеет развитое понятие менеджера проектов, что позволяет гибко с ними работать и исключить опасную возможность многократного запуска с общими данными одного проекту.
Рабочей версией, также, внедрено изменение версий модулей по изменению в коде модуля и непосредственно перед их выгрузкой в репозиторию исходных текстов, а соответственно, версии модулей OpenSCADA этого релиза наглядно отражают общий уровень их развитости и стабильности.
Живые диски дистрибутива Linux автоматизации проекта OpenSCADA.
В процессе осуществления работ над рабочей ветвью, в основе этой стабильной, было внедрено формирование репозиториев пакетов дистрибутивов Linux со сборками OpenSCADA, которые до этого предоставлялись только как отдельные пакеты. Что заметно упростило развёртывание OpenSCADA и содержание её актуальной. Затем был создан автоматических сборщик этих пакетов, который на данный момент насчитывает до 100 целей, и что значительно упростило выпуск обновлений как для рабочей ветви так и для этой стабильной. Соответственно, к этой LTS версии предоставляются сборки пакетов для основных окружений Linux и вся историю публичных обновлений будет сохранена.
К пакетам сборок OpenSCADA предоставляются также и сборки живых дисков быстрого ознакомления и развёртывания OpenSCADA вместе с системным окружением. Которые до этого момента получили формальное основание в виде Linux дистрибутива автоматизации проекта OpenSCADA.
Основной сервер OpenSCADA.
Сборки и пакеты OpenSCADA сопровождаются рядом открытого и свободного материала внутреннего окружения программы, а именно, это: наработки слоя сбора и обработки данных, элементы графического представления и целые-комплексные проекты моделей ТП. Эти материалы предоставляются в виде файлов БД SQLite и включают:
- Библиотеки функций (OscadaLibs), "LibsDB/OscadaLibs.db" — содержит все наработки проекта OpenSCADA в слое сбора и обработки данных включая элементы источников данных пользовательского протокола.
- СВУ: Главные библиотеки (vcaBase), "LibsDB/vcaBase.db" — содержит основные элементы графического представления и элементы мнемосхем проекта OpenSCADA.
- СВУ: Тесты (vcaTest), "LibsDB/vcaTest.db" — содержит элементы тестов примитивов графического представления.
- СВУ: Библиотека электро-элементов мнемосхем пользовательского интерфейса (vcaElectroEls), "LibsDB/vcaElectroEls.db" — содержит элементы графического представления компонентов электрических схем.
Хостинг проекта в целом и материалов 0.9 LTS в частности, был перенесен на собственный сервер проекта, где дополнительно были развёрнуты: демонстрационные Web-интерфейсы моделей OpenSCADA, проект мониторинга сервера и умного дома на основе OpenSCADA и сборщик пакетов репозиториев OpenSCADA.
4.1 Внутренние
Разрешающая способность внутренних данных целого типа окружения OpenSCADA увеличена до 64 разрядов. В целом-же, внутренние данные OpenSCADA, с резервированием значения ошибки (EVAL) для каждого, унифицированы общими типами: логическое, целое, реальное, строка и объект. Что в первую очередь касается источников данных.
В ядро OpenSCADA, собственный протокол и все узлы что работают с удалёнными станциями OpenSCADA; добавлена возможность "поднятия" узлов OpenSCADA, которые находятся за другими узлами и, как правило, в другой сети. Что в целом позволяет централизовано управлять сетью станций OpenSCADA на любом уровне иерархии.
4.2 Усовершенствования и адаптация для различных платформ
Эта версия OpenSCADA получила углублённую поддержку и способность к адаптации для различных платформ. Что в основном случилось благодаря адаптации для работы на программной платформе Android и восстановления сборки и работы с ucLibC, и что планируется использовать в дальнейшей адаптации для работы на программных платформах QNX и MS Windows.
Работа на одноплатных ПК была расширена платами Raspberry Pi и Orange Pi.
Поддержка Linux смартфорнов Nokia дополнена последним, основанным на MeeGo 1.2, это — Nokia N9. Или это было обновление поддержки Nokia N950.
Кроме непосредственной работы (нативно) на различных платформах, был значительно расширен Web-интерфейс, который сейчас реализует все общие возможности концепции среды визуализации и управления (СВУ).
4.3 Оптимизация, стабилизация и продуктивность
Значительной стабилизации ядра OpenSCADA, и программы в целом, достигнуто через унификацию контроля внутренних ресурсов и расширения возможностей отладки пользователем. В общем, пользовательская диагностика и отладка расширена:
- общим включением-выключением отладки и целевым контролем узлов отладки;
- особенной отладкой объектов контролеров источников данных;
- особенной отладкой исполнения проектов СВУ;
- формированием углублённой статистики исполнения динамических объектов OpenSCADA, таких как: объекты контроллеров источников данных и их параметров, входных и выходных транспортов, сеансов СВУ с детализацией до виджетов;
- протоколирование входного и выходного трафика транспортов.
Глубокой и всесторонней стабилизации претерпели почти все модули OpenSCADA и многие были оптимизированы, из которых особенно нужно отметить:
- Все модули БД — добавлена обработка и проверка ошибок БД или СУБД, а также выдача сообщений про эти ошибки в случае пользовательской загрузки и записи; увеличена производительность (до порядка) БД поддерживающих SQL, через реализацию режима предзагрузки сканирующего запроса;
- Вычислитель на основе Java-подобного языка (DAQ.JavaLikeCalc) — увеличена производительность через: сохранение контекста исполнения функции, предзагрузку постоянных и прямой доступ к строке.
- Архиватор на БД (Archive.DBArch) — значительно оптимизирована запись и чтение БД, а именно это: групповая запись нескольких архивов в одну таблицу и чтение блоками (кратными десяти) в одном запросе.
- Все транспорты — в целом увеличена производительность.
- Рабочий пользовательский интерфейс (WEB) (UI.WebVision) — увеличена чувствительность интерфейса использованием асинхронных запросов в общем цикле обновления.
Резервирование OpenSCADA станций.
Надёжность резервируемой станции в масштабе комплексного решения, точнее сохранение данных истории, была усовершенствована расширением механизма резервирования, который потенциально предусматривает резервирование любой подсистемы и реализует сейчас резервирование подсистем "Сбор данных" и "Архивы-История".
И, для программы в целом, был выполнен ряд формальных всесторонних тестов, которые были предварительно расширены во внутренней процедуре комплексного тестирования релиза OpenSCADA. В результате этих тестов было выявлено несколько ошибок, которые исправлены.
4.4 Сбор данных
Пользовательская объектная модель ядра OpenSCADA.
Учитывая ключевую роль сбора данных в программах такого роду, эта функция, в лице подсистемы "Сбор данных" и её модулей, получила значительные усовершенствования, из которых особенно нужно отметить: смещение акцента в расширении поддерживаемых источников данных из реализации отдельных модулей подсистемы "Сбор данных" на системном языке "C/C++", на их реализацию в окружении OpenSCADA и на её внутреннем языке — логический уровень OpenSCADA. Т.е., на логическом уровне OpenSCADA, может и реализуется все, что: для доступа к данным использует сеть, не требует использования специфических библиотек и функций и не является очень сложным. На данный момент, таким образом реализовано:
Низкоуровневые устройства подключенный к Raspberry Pi.
OpenSCADA на LCD экране Raspberry Pi.
- Отправка SMS сообщений (SMS) и электронных писем (SMTP).
- Источник Бесперебойного Питания (UPS), как объект данных с атрибутами и значениями.
- Простые сенсоры и датчики:
- Елемер TM510x;
- EDWARDS TURBOMOLECULAR PUMPS (SCU750);
- Sycon Multi Drop Protocol (SMDP);
- Блок питания турбо-молекулярного насоса (TMP-xx03);
- Измерение температуры IT-3 (IT3);
- IVE-452HS-02;
- OPTRIS CT/CTL;
- CTR 100, 101.
- Компьютер теплового счётчика VKT7.
- IEC-60870-104.
- Тестовые реализации и примеры: DCON, OWEN.
- Шина "One Wire" с помощью {DS9097,DS9097U} (1W_{DS9097,DS9097}) для чипов: DS1820, DS1820/DS18S20/DS1920, DS1822, DS2413, DS2408, DS2450, DS2438.
- Шина I2C: PCF8591, PCF8574, BMP180, DS3231, AT24C{32|64}.
- Общие порты ВВ (GPIO): DHT11,22 (AM23XX). GPIO|I2C: 1602A(HD44780).
Учитывая рост роли логического уровня OpenSCADA, выросли и требования к гибкости модели данных источников данных и в целом, что было удовлетворено:
- завершением покрытия внутренней модели данных всеми функциями, характерными для области применения;
- добавлением иерархичности к параметрам объектов контроллеров источников данных;
- добавлением возможности произвольного и динамического формирования модели данных — набору атрибутов параметров.
Внутренний язык программирования OpenSCADA приобрёл значительные усовершенствования и, сейчас, удовлетворяет всем требования отраслей применения OpenSCADA. Многие из этих усовершенствований попали в предыдущую версию 0.8.0 LTS, а ряд из них не мог туда попасть из-за нарушения обратной совместимости или недостаточной стабильности на то время. Из этих, существенных усовершенствований, нужно ещё раз отметить: увеличение разрешающей способности данных внутреннего окружения OpenSCADA целого типа до 64 разрядов и сохранение контекста исполнения внутренних процедур.
4.5 Графическое окружение
Диалог выбора проектов OpenSCADA.
Пользовательский контроль вида интерфейса Qt.
В целом, графическое окружение получило значительное развитие и главным из них стало расширение модуля запуска Qt-интерфейса, как основы для остальных локальных. В первую очередь, этот модуль и ядро OpenSCADA адаптированы для возможности запуска библиотеки графической среды Qt в основном потоке программы, что исключило много проблем, связанных с исполнением в неглавном потоке, а также обеспечена работа с версией 5 этой библиотеки. Во вторых, этот модуль взял на себя роль интерфейса выбора проектов OpenSCADA при её запуске и переключении, а также создание новых. И в третьих, ввиду его первичности к запуску Qt, он получил функцию управления видом программы независимо от графического окружения и возможность его запуска-закрытия в системный лоток. Что в целом сделало возможным настройку OpenSCADA под персональные требования пользователя и адаптировать её к очень специфическим окружениям вроде Android.
Заметных усовершенствований получили модули конфигурации Qt и Web, где особенно нужно отметить:
- Конфигуратор-Qt (UI.QTCfg): осуществление запросов к удалённым станциям в отдельном потоке от потока Qt, что сделало его удобнее и более прогнозируемым и что даже, вместе с одним из обновлений, попало в предыдущую стабильную версию 0.8.0 LTS.
- Конфигуратор-WEB (UI.WebCfgD): в целом, был полностью обновлен на предмет интерфейса, который сейчас является более динамическим, удобным и может быть расширен темами.
Заметных усовершенствований также получила среда визуализации и управления (СВУ), в составе всех её модулей:
- Движок СВУ и модули визуализаторов вообще (UI.VCAEngine):
- позволяет осуществлять полноценную-горячую разработку, т.е. — редактирование проекту СВУ на момент его исполнения сеансами;
- оригинальные сообщения интерфейса являются полностью откорректированными, грамматически и орфографически корректными для Английского языка;
- предоставлено ряд дополнительных видов примитива "Элементы формы", "Диаграмма" и расширено примитив "Text" отображением "HTML";
- предоставлено механизм специфических для визуализатора атрибутов виджетов, что позволило раскрыть и использовать их индивидуальные свойства;
- новый-гибкий механизм сообщений пользователя про внештатные события в контролируемом системой процессе, который предусматривает возможность свободного формирования пользовательских извещателей с нужными свойствами, как: моно-тонный сигнал, синтез речи.
- Визуализатор-Qt (UI.Vision):
- заметно улучшена работа исполнения удалённых интерфейсов и обеспечено осуществление запросов к удалённой станции в отдельном потоке от потока Qt, что упростило удалённую разработку с параллельным исполнением проекта;
- формирование примитива "Документ" может осуществляться с помощью WebKit.
- Визуализатор-WEB (UI.WebVision):
- унифицирован, оптимизирован и расширен использованием CSS3;
- предоставлена реализацию всех элементов-примитивов унифицированного интерфейса;
- осуществляется масштабирование до доступного пространства окна браузера;
- увеличена производительность работы и чувствительность интерфейса, через использование исключительно асинхронного механизма при обновлении.
Все Web-модули, в целом, получили возможность изменения вида посредством тем, через общесистемные интерфейсы модуля протокола HTTP и его механизмы обработки запросов и формирования ответов. Также, все они получили поддержку динамического перевода интерфейса, что особенно актуально для многопользовательских Web-интерфейсов и с чем Вы можете ознакомиться на демонстрационных Web-интерфейсах моделей OpenSCADA: АГЛКС, Котел. Добавлен также механизм разделения доступа по страницам, который, кроме всего прочего, позволяет разграничить доступ к Web-модулям вообще.
5 Новые и значительно обновленные модули
В новой версии были добавлены новые модули и значительным образом обновлен ряд существующих:
- Добавлены новые модули:
- MMS(IEC-9506) (DAQ.MMS) — модуль поддержки обмена данных по протоколу "Manufacturing Message Specification (MMS, IEC-9506)".
- Comedi (DAQ.Comedi) — модуль поддержки источников данных реального времени (библиотека "Comedi"), которые основаны на платах сбора данных различных производителей и устанавливаются на шинах: ISA, PCI, PCMCIA и USB.
- SMH2Gi (DAQ.SMH2Gi) — модуль реализации доступа к аппаратным модулям источников данных ПЛК Segnetics SMH2Gi,SMH4 для "MC", "MR", а также взаимодействия с оригинальным окружением "SMLogix".
- Fastwel IO (DAQ.Fastwel) — модуль обмена данными с аппаратными модулями Fastwel IO.
- FT3 (АПСТМ) (DAQ.FT3) — модуль обмена данными с контроллерами АПСТМ, АСДКУ, СУАП.
- GPIO (DAQ.GPIO) — модуль доступа к GPIO одноплатных ПК вроде Raspberry Pi, Orange Pi и другие.
- Вычислитель на основе Java-подобного языка (DAQ.JavaLikeCalc) расширен: поддержкой внутренних функций, динамическим переводом сообщений и многими другими функциями интерфейса пользовательского программирования в целом.
- Шлюз источников данных (DAQ.DAQGate) расширен шлюзованием сообщений, связанных с выбранным источником данных.
- Сбор данных ОС (DAQ.System) расширен источниками данных: "Файловая Система", "ИБП", "QSensor" и возможностью отделения медленных источников от быстрых.
- ModBus ({DAQ,Protocol}.ModBus) расширен поддержкой строки, как последовательности значений регистров.
- Клиент DCON (DAQ.DCON) значительно расширен поддержкой специфических модулей.
-
Роли OpenSCADA как OPC-UA сервер.
OPC-UA (DAQ.OPC_UA) значительно расширен публикацией и поддержкой "кусков" в клиентской части сервиса, специфический код протокола выделен в библиотеку.
- Оборудование ICP_DAS (DAQ.ICP_DAS) значительно расширен, а фактически полностью переписан, поддержкой всех присутствующих плат сбора данных от фирмы ICP_DAS для серии I8k, I-87k, на шине ISA и унифицированные типы для стандартных модулей серии I7k.
- Siemens S7 ПЛК (DAQ.Siemens) значительно расширен собственной реализацией ISO-TSAP.
- Diamond платы сбора данных (DAQ.DiamondBoards) значительно расширен, а фактически полностью переписан, поддержкой всех присутствующих плат сбора данных от фирмы Diamond Systems.
- Устройства АСКУ (DAQ.AMRDevs) реализована поддержка счётчика Контар (МЗТА).
- Все модули БД значительно расширены динамическим переводом.
- Архиватор на БД (Archive.DBArch) расширен архивацией нескольких архивов в одну таблицу и восстановлением перечня архивов из информации в БД.
- Архиватор на ФС (Archive.FSArch) добавлена поддержка промежуточных типов "Int16", "Int32", "Int64", "Float", "Double" и дополнен абсолютным ограничением размера архива на диске.
- Все модули транспортов расширены режимом пулинга входных транспортов и протоколов.
- Сокеты (DAQ.Sockets) расширен поддержкой шины RAWCAN и инициативным подключением входного транспорта.
- Последовательный интерфейс (Transport.Serial) расширен поддержкой низкоуровневой шины I2C; специальными пользовательскими функциями последовательного интерфейса: "sendbreak", "TS", "DR", "DCD", "RI"; расширенным управлением RTS для RS-485.
- Слой безопасных сокетов (Transport.SSL) расширен поддержкой: TLSv1.1, TLSv1.2, DTLSv1.
- Собственный протокол программы (Protocol.SelfSystem) расширен иерархическим и многоуровневым направлением запросов на внешние хосты.
- HTTP (Protocol.HTTP) расширен адаптивностью к интерфейсам пользователя в системных диалогах и предоставлением общего API построения HTTP-интерфейсов как для пользователя, так и модулям за ним.
- Программный конфигуратор (Qt) (UI.QTCfg) запросы интерфейса управления OpenSCADA вынесены в отдельный поток и улучшена реализация элементов контроля.
- Программный конфигуратор (Динамический WEB) (UI.WebCfgD) расширен новым дизайном с использованием CSS3 и возможностей современных WEB-браузеров.
- Концепция и движок среды визуализации и управления (UI.VCAEngine) расширен: поддержкой специфических для визуализатора атрибутов виджетов, реализацией нового-гибкого механизма уведомления пользователя, фоновым (в отдельном потоке) исполнением задачи формирования документов, увеличением количества трендов на одном кадре до 100 и поддержкой логарифмической шкалы примитива "Диаграмма".
- Рабочий пользовательский интерфейс (Qt) (UI.Vision) расширен: для работы в сети через сервер визуализации; реализацией группы специфических этого визуализатора атрибутов; реализацией видов "Дерево", "Таблица" и расширением вида "Кнопка", примитива "Элементы формы"; реализацией вида "XY" примитива "Диаграмма"; значительным рефакторингом кода примитива "Элементарная фигура".
- Рабочий пользовательский интерфейс (WEB) (UI.WebVision) расширен использованием CSS3 и возможностей современных браузеров, а именно: добавлено масштабирование к доступному пространству окна браузера, реализованы все примитивы унифицированного интерфейса.
- Библиотека функций системного API среды пользовательского программирования (Special.FLibSYS) расширен функциями и объектами: "floatExtract", "md5", "tmSleep", объект "IO"; значительно расширены существующие функции и объекты: "dbReqSQL", "FFT", "strParse", "strDec4Bin".
6 Выводы
По пути к новому релизу 0.9 LTS промышленного назначения осуществлена большая работу по стабилизации, расширению функциональных возможностей, а также расширению адаптационных возможностей к работе на альтернативных платформах. Всё это в целом ещё больше расширило границы полноценного применения OpenSCADA на всех уровнях систем промышленной автоматизации и смежных направлениях автоматизации и автоматики.
LTS версии OpenSCADA не являются пустым звуком, они реально поддерживаются всё время, до следующей LTS версии, и поддержка этой версии ещё будет расширена сервисными обновлениями. Также, будет осуществлёно смещение акцента и политики внедрения LTS версии, которая до этого рекомендовалась к обновлению конфигураций с замороженными библиотечными БД, на приоритет в использовании на широком спектре новых решений.
Предадаптация OpenSCADA к работе на QNX.
В появлении новой промышленной версии OpenSCADA 0.9 LTS приняли участие:
- Роман Савоченко: основной объём работ по разработке, тестированию, сборке, документированию и переводу программы и документации тремя языками.
- Максим Кочетков: реализация модулей DAQ.Fastwel, DAQ.FT3; расширение модуля Transport.Sockets поддержкой RAWCAN и модуля Transport.Serial расширенным управлением RTS для RS-485.
- Арсен Закоян: реализация поддержки счётчиков электроэнергии "Меркурий 200" и "Меркурий 230".
- Руслан Ярмолюк: реализация поддержки счётчика электроэнергии NIK 2303.
- Алмаз Каримов: расширение модуля реализации протокола DCON.
- Аркадий Кисель: реализация поддержки I2C сенсора температуры, барометрического давления и влажности BME280.
- Константин (IrmIngeneer): поддержка сборки OpenSCADA на дистрибутиве Linux Gentoo.
- Сергей Дорошка: предварительная адаптация OpenSCADA к работе на QNX.
- Организации, которые содействовали наиболее значительному усовершенствованию OpenSCADA через её интеграцию в собственные системы управления:
- Proviron Holding NV: приобретение пакетов технической поддержки для общей поддержки, исправления и улучшения реализации протокола Siemens ISO-TSAP(ProfiNet), некоторых наработок около Raspberry Pi, 2014, 2016-2018.
- Лаборатория вакуумных технологий: "Вакуумная технологическая установка", 2011-2018, и финансирование оборудования сервера OpenSCADA, 2014.
- Оптима: "Система Автоматизации Метрополитена", 2016.
- Вектор: приобретение пакетов технической поддержки для исправления и улучшения реализации OPC-UA в работе с разными OPC-UA клиентами и серверами, 2015-2016.
- Краматорсктеплоэнерго+ДІЯ: "САУ шаровых барабанных мельниц ШБМ 287\410 котлоагрегата №8 БКЗ 160–100 ПТ", 2015, та "САУ Фосфатирования, Амминирования и Гидразина котлоагрегатов БКЗ 160–100 ПТ", 2014. В качестве ПЛК использован ICP-DAS LP-8781 с OpenSCADA в роли среды исполнения ПЛК.
- Хартрон: "Система Контроля Реактивности (СКР) Ядерной Подкритической Установки (ЯПУ)", 2013-2015.
- Много других организаций и отдельных пользователей, которые пожелали остаться анонимными, через приобретение технической поддержки и услуг, конструктивные отзывы внедрения и эксплуатации.
Последующие усилия разработки будут направлены на:
- Завершение ревизии основной документации, в основном по модулям и библиотекам.
- Чёткое определение и обновление политики предоставления коммерческих услуг вокруг проекта OpenSCADA:
- пересмотр и обновление условий пакетов технической поддержки;
- политика и организация сборок обновлений к стабильной ветви: сохранение истории всех публичных обновлений и организация сервисных;
- дистрибуция исключительно коммерческих сборок с публичными демонстрационными на примере пакетов для Android — разработка и формирование механизма контроля за сроком пакета технической поддержки и демонстрационного режиму.
- Освоение и адаптацию к отрасли "Управление ресурсами предприятия (ERP)" с направленностью на:
- создание интерфейса управления ресурсами на сервере проекта;
- создание общего интерфейса контроля задач и их финансирования, с организацией разработчиков к привлечению исполнения этих задач и технической поддержки.
- Расширение функций применения в отраслях "Умный дом", "Домовая автоматика" и "Бытовые роботы".
- Адаптацию к работе в окружении операционных систем QNX и MS Windows.
7 Обновления
7.1 [8.04.2020] ПЕРВОЕ обновление
- Состояние: Стадия 3 — финал и после-релизовые задания: Реализовать сервисные обновления при первом исправлении ошибок.
Общий процесс выпуска, пользователям для оценки ваших ожиданий и разработчикам для напоминания задач:
1. Неделя подготовки и сборки:
- Анонсирование начала процесса выпуска:
- Объединение изменений Рабочей (Work) версии, или копирование целиком дерева Рабочей ветви, в LTS ветвь-дерево.
- Внесение некоторых изменений, специфических для LTS, на предмет поднятия версий:
- обновление configure.ac на предмет версии выпуска-обновления и библиотеки ядра;
- обновление data/*.spec и data/{debian,debian_mod}/changelog на предмет нового номера версии и дополнения протокола изменений файлов новыми записями выпуска-обновления;
- обновление изображения заставки src/moduls/ui/QTStarter/images/splash.png редактированием файла источника data/icons_src/splash.xcf.
- Формирование-дополнение ПротоколаИзменений LTS изменениями из ПротоколаИзменений Work, группируя изменения по размещению и сортируя их по состоянию исправления и уровню, с комбинированием новых возможностей в одном элементе и без удаления любых отличных изменений.
- Копирование значительных изменений из сформированного ПротоколаИзменений LTS на соответствующую страницу релиза-обновления, беря изменения с уровнем более или равные "!!".
- Перевод страниц релиза-обновления, обновление "Сделать (ToDo)" и "Дорожная карта (RoadMap)".
- Генерация актуальной внесетевой документации используя сервисную процедуру "EXT: Off-line documentation".
- Применение-выгрузка изменений LTS дерева в репозиторий и сборка этого.
- Анонсирование релиза-обновления.
2. Неделя тестирования и после-сборки:
- Горячее тестирование сборок релиза.
- Завершение и исправления перевода ПротоколаИзменений и документации.
- Генерация актуальной внесетевой документации используя сервисную процедуру "EXT: Off-line documentation".
- Применение-выгрузка исправлений релиза в репозиторий и сборка этого на предмет второй-конечной сборки.
3. Финал и после-релизовые задания:
- Ожидание релиза Ubuntu 20.04 23 Апреля, после чего обновить корневые файловые системы (chroots) и пересобрать пакеты.
- Ожидание релиза TDE 14.0.8, после чего собрать собственные исправленные пакеты и пересобрать ISO-образы Linux Автоматизации обновления.
- Реализовать сервисные обновления при первом исправлении ошибок.
Обновление осуществлено после 1.5 года от релиза 0.9 LTS, соответственно оно стоит 10 обновлений, поскольку им исправлено более 250 ошибок и добавлено множество усовершенствований, которые целиком вы можете почитать в протоколе изменений обновления.
Ключевыми свойствами обновления является:
- значительное расширение и стабилизация Web-интерфейса в течении практической эксплуатации в большом распределённом решении, построенном на основе модуля UI.WebVision; также расширение и стабилизация горячей разработки в течении множественного исполнения разрабатываемого проекта;
- тестирование, исправление и расширение резервирования в части сообщений, также благодаря практической эксплуатации в большом распределённом и ещё резервированном решении, в части обще-системного кода и модуля DAQ.ModBus;
- полная реструктуризация, усовершенствование и дополнение библиотек OpenSCADA в SQLite файлах;
- общее улучшение документации, дополнение документацией всех библиотек и ревизия большинства документации модулей.
7.1.1 OpenSCADA библиотеки и проекты
- FIX:DB.LibsDB.{OscadaLibs,vcaBase}: Обновление перевода.
- FIX:JavaLikeCalc.doc,doc: Библиотека пользовательского интерфейса "Документы" и JavaLikeCalc "Библиотека отчётов и документов" отревизировано, улучшено, дополнено, документировано и документацию добавлена в offline.
- FIX:doc: {docUsersSet,docAlarmsRep,docMessRep}: Поле "Параметр" переименовано в "Источник", в процессе глобальной унификации структуры сообщений нарушений функции alarmSet().
- Дополнено реализацией "Годовой отчёт месячных значений (docRepYear)" с функцией ввода значений в ручном режиме, поддержкой сохранения ручных значений в архиве сообщений, их отображения в таблице и диаграмме.
- {doc,docDin,docRep2WorkSh(переименованный docRepSm2),docAlarmsRep,docRepInstVals(переименованный docGasNodeMgn),docMessRep,docUsersSet, docRepDay(переименованный docGasNodeDayA),docRepMonth(переименованный docGasNodeMonthA),docRepYear(переименованный docResourcesYear)}: выполнено JavaLikeCalc перевод в tr().
- {docRepInstVals,docRep2WorkSh,docRepDay,docRepMonth}: Значительным образом переписано, улучшено и сделано повторно-используемым, позволив подключение DAQ-параметров.
- docMessRep: Дополнено обработкой удалённых станций только как дополнительный источник и всегда.
- JavaLikeCalc.doc: Дополнено реализацией построения "Диаграммы (diagram)" в SVG.
- PrescrTempl,prescr: Библиотеку интерфейса пользователя и шаблонную библиотеку "Рецепты" отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
- PrescrTempl: Дополнено шаблоном "Менеджер", перенесенного из библиотеки контролеров.
- prescr: Элементы библиотеки расширены линковкой БД и автоматическим созданием таблиц команд и программ.
- DB.LibsDB.vcaElectroEls: Библиотеку интерфейса пользователя "Элементы электрики" отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
- Дополнено четырьмя унифицированными элементами: "Ключ, унифицированный (keyUnif)", "Переключатель, унифицированный (swUnif)", "Состояние общее, унифицированное (stGenUnif)", "Состояние области, унифицированное (stAreaUnif)".
- FIX:DB.LibsDB.OscadaLibs:
- Обновлено на предмет некоторых сообщений.
- FIX:base: Библиотеку шаблонов "Основная библиотека" отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
- {anUnif,anUnifSt,manInUnif,digAlarm,codeState,pidUnif,pidUnifImp,SNMP,UPS}: Переведено на унифицированный механизм формирования и контроля нарушений.
- Дополнено шаблоном "initConsAssignTrs" обработки выходных транспортов инициативных подключений Сокетов для любых типов объектов источников, вроде DAQ-модули, контроллеры и параметры логического уровня.
- Дополнено шаблоном "codeState" формирования состояния по коду.
- Дополнено реализацией сложного уведомителя в шаблоне "ntf", отдельная JavaLikeCalc функция и объекты пользовательских протоколов "SMS" и "SMTP" помечены устарелыми.
- Дополнено шаблоном "UPS", перенесено из библиотеки "Промышленные устройства".
- FIX:DevLib: Шаблонная библиотека является отделённой частью оригинальной библиотеки "Устройства" с названием "Промышленные устройства", которую отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
- FIX:IEC60870: Дополнено отдельным временем "tmPoolAll" периодичности полного опроса.
- Дополнено поддержкой пакетов M_ME_TF_1, M_ME_NC_1, расширено поддержкой SQ-режима, проверено M_ME_TF_1 и M_ME_NC_1, M_ME_NB_1 в SQ-режиме, AI установлено в вещественный тип.
- Дополнено опцией "syncTimePLC" контроля синхронизации ПЛК.
- Дополнено правильной реализацией DCON в шаблонах DCON_Prt, DCON_Prt_DI, DCON_Prt_AO, DCON_Prt_DO, объект пользовательского протокола "DCON" удалён.
- Дополнено полнофункциональной реализацией протокола OWEN в части сбора данных.
- Дополнено реализацией DNP3 и её испытано с outstation-demo из opendnp3.
- Дополнено реализацией модулей счётчиков Pulsar-M (pulsarM).
- Дополнено реализацией сканера ModBus, как шаблон "ModBusScan".
- LowDevLib: Шаблонная библиотека является отделённой частью оригинальной библиотеки "Устройства" с названием "Низкоуровневые устройства", которую отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
- FIX:{1W_DS9097,1W_DS9097U}: Исправлено определение семейства устройства как шаблон 0x7F, обнаружено на последних DS2413 с первым байтом 0xBA.
- Дополнено реализацией шаблона "MAX6675", низкоуровневого SPI Конвертора K-Термопар-в-Цыфру Компенсации-Холодных-Спаев.
- Дополнено реализацией шаблона "SHT3x", низкоуровневого сенсора влажности.
- Дополнено реализацией шаблона ADS111x(ADS101x) и MCP4725, низкоуровневых I2C-чипов.
- FIX:JavaLikeCalc.techApp: JavaLikeCalc библиотеку "Технологические аппараты" документировано и документация добавлена в offline. Все Кириллические символы удалено из идентификаторов моделей и все тексты откорректировано.
- tests: Библиотека шаблонов "Тесты" переименована из библиотеки "S7".
- JavaLikeCalc.servProc: JavaLikeCalc библиотеку "Сервисные процедуры" отревизировано, несколько улучшено, дополнено, документировано и документация добавлена в offline.
- docOffLine: Значительно расширено детализацией сообщений про ошибки и размещением незавершённых страниц в аргументе "pagesCur" для продолжения перерывов.
- JavaLikeCalc.regEl: JavaLikeCalc библиотеку "Элементы регулирования" документировано и документация добавлена в offline.
- FIX:DB.LibsDB.vcaBase:
- FIX: Полная и значительная очистка от Кириллических символов и усовершенствование оригинальных идентификаторов и сообщений, с переименованием их на Английский язык.
- Большинство стандартных кадров и виджетов адаптировано к стилям и создано стиль "Светлый" для всех проектов.
- FIX:Main: Библиотеку интерфейсов пользователя "Основные элементы" отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
- FIX:{alarmsAct,alarmsSt}:
- Расширено поддержкой квитации-подтверждения, комментариями и пользовательским полями.
- Поле "Параметр (prm)" переименовано в "Источник" где размещено все удалённые и локальные источники.
- RootPgSo: Усовершенствованно динамическим созданием объектов сигнализации, количество которых ограничено только общей длиной названий объектов сигнализации и их двумя рядами. Поддерживается также генерация кнопок объектов сигнализации справа от логотипа. Типы отображения также унифицировано идентификаторами "view[1..6]", когда пользователь может их назначить в собственный способ. Совместимость с оригинальными названиями видов сохранено для существующих проектов!
- Дополнено:
- панелью-окном контроля "Вычисление параметра графика (graphCalc)";
- объектным виджетом "Свойства объекта (objProps)";
- кадром нарушений "Нарушения — отчёт (alarmsStReport)";
- виджетом "Метка изображением (ImgLab)";
- кадром "Менеджер пользователей (userManager)".
- grph_panel: Дополнено независимой кнопкой переключения на время курсора вместо непрямого переключения при смещении глубины.
- ElViewGraph: Размер шрифта названия уменьшен с 15 до 11 и цвет тренда отображаемых элементов по умолчанию установлен в "gray".
- Кадры рецептов "prescrEdit", "prescrRun" и "prescrRunSimple" вынесено в новую библиотеку "Рецепты (prescr)".
- cntrRegul: Толщину трендов увеличено до 2 пикселей.
- FIX:mnEls: Библиотеку элементов интерфейса пользователя "Элементы мнемосхемы" документировано и документация добавлена в offline.
- FIX:Model.{AGLKS,Boiler}: Значительно обновлено согласно общим изменениям в библиотеках.
- FIX: Значительно очищено и все оригинальные идентификаторы переименованы Английским языком, в процессе ревизии документации.
- FIX: AGLKS.vca,Boiler.St: Адаптировано к новым изменениям основной страницы.
- Создан стиль "Светлый" для всех проектов. Стили переведены на схему прямого исполнения стилей при их наличии вместо "Нет стиля" и добавлен стиль "Типовой".
- FIX:Model.AGLKS:
- FIX:St:
- FSArch.1m: Удалены странные и временные архиваторы: FSArch.{NetRequsts,test,StatErrors}, DBArch.test и добавлены актуальнные: FSArch.{alarms,actions,SYS}, DBArch.SYS.
- FIX:vca: Перепривязаны аналоговые параметры и графики.
7.1.2 API
!!!!:Изменения:
- SYS: Типовой конструктор ResMtx установлен в true для "isRecurs", поскольку это общая ситуация.
- Большинство функций добавления в контейнер узлов расширено возвратом результирующего идентификатора/имени созданного узла для: chldAdd(), TSecurity::{usrAdd(),grpAdd()}, TTypeBD::open(), TTypeTransport::{inAdd(),outAdd()}, TValue.chldAdd(), DAQ.{TController::add(),TParameter::add(),BlockCalc.blkAdd()}, TTypeArchivator::{messAdd(),valAdd()}, TArchiveS::valAdd(), UI.VCAEngine::{wlbAdd(),prjAdd(),WLib.add(),Project.add(),Project.Page.pageAdd()}, UI.WebUser.uPgAdd().
- TFld::Selected везде переименован в TFld::Selectable.
- Вариант специальной функции strMess() с ограничением размера результирующего сообщения удален и заменен функцией strEncode() с типом TSYS::Limit.
- chldList() и chldPresent() сделаны виртуальными.
- DAQ,Special: Атрибут "run_st" в TPrmTmplLib и TSpecial переименован в runSt.
- Archives: TArchiveS::messPut() очищено от аргумента "force".
- Protocols.HTTP: Функции пользовательского API pgAccess(), pgCreator() перенесены из TProtocol в TProtocolIn.
- Transports.In: Функция protocol() переименована в protocols() и удалена protocolFull().
Дополнения:
- SYS: Добавлен общий механизм замков через контейнер замков, функция commonLock().
- TConfig,*: Функции API пользователя для конфигурации TConfig::cfg() и TConfig::cfgSet() расширены контролем прав.
- Дополнено функциями TCfg::toDefault() и TConfig::cfgToDefault() сброса конфигурационного контекста к типовому.
- Объект TFunction дополнен признаком изменённости процедуры isChangedProg(), и флажок TFld::Selectable и функция ioAdd() дополнены результатом позиции добавленного ВВ.
- Запрос Интерфейса Управления "load" расширен определением выбранной БД в атрибуте "force", для осуществления такой операции над конкретным узлом.
- XMLNode: Функция получения атрибутов attr() расширена опциональным аргументом определения присутствия.
- "Массив (Array)" пространства пользователя расширен функциями indexOf() и lastIndexOf().
- Функция API пользователя SYS.fileRead() расширена аргументами смещения и размера блока чтения.
- Функция API пользователя strEncode() дополнена поддержкой вариантов "ToLower" и "Limit".
- API пользователя дополнено функцией strFromCharUTF() формирования строки из UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE.
- Дополнено определением периодичности сервисного задания SERV_TASK_PER=10.
- API пользователя дополнено функцией SYS.fileSize().
- Добавлена функция str2atime() для конвертации времени в строке во время от эпохи UNIX с поддержкой GMT.
- TError дополнено названиями кодов ошибок в перечислении "Codes", которые везде использованы.
- Специальные названия архивов дополнено названием ALRM_ARCH_CH_NM ("<alarmsChange>"), для простой смены присутствующих нарушений.
- Ограничения дополнены USER_ITS_LIMIT (1000000) для ограничения количества элементов вроде пользовательских массивов из DAQ.JavaLikeCalc.
- DB: Добавлен контроль закрытия транзакций в ядре OpenSCADA функциями trTm_ClsOnOpen(), trTm_ClsOnReq() и trPr_ClsTask().
- Добавлен контроль процесса пере-включения объектов БД функцией disabledByUser().
- Дополнено конфигурацией "Время жизни открытых таблиц", для закрытия неактивных таблиц функцией tblLifeTime().
- Атрибут TBD::mEn перенесён в защищённое пространство.
- Транспорты:
- In: Дополнено виртуальными функциями keepAliveReqs(), keepAliveTm() для правильного KeepAlive на Web.
- Out: Дополнено сервисом закрытия выходных транспортов согласно временем жизни (неактивности), сервисной функцией outLifeTime().
- Расширено полем общего контроля попыток в функции attempts().
- Унифицировано контролем времени последнего запроса в функции lstReqTm().
- Добавлена функция outAddrHelp() для получения общей помощи по адресу модулей выходных транспортов.
- Protocol.HTTP: Расширено функцией пользовательского API setUser() для изменения автентифицированного пользователя.
- DAQ: TController::alarmSet() расширено аргументом "force" для принуждения установки нарушений на объектах контроллеров в резервировании.
- DAQ-параметры дополнены функцией пользовательского API alarmSet() и функцией vlSetRednt() унифицированной записи значений в резервировании.
- TDAQS::rdRestDtTm() расширено возвратом double вместо float.
- Дополнено функцией пользовательского API daqAt().
- Функцию пользовательского API funcCall() расширено аргументом "err".
- JavaLikeCalc: Функции пользовательского API charAt() и charCodeAt() расширено поддержкой UTF. Функции пользовательского API расширено isNaN() для bool, integer, real, string (особенно для проверки чисел в строке).
- Архивы:
- Объекты TMArchivator и TArchiveS дополнено функцией redntTm() и rdTm() для получения последнего времени резервирования архивов сообщений.
- TArchiveS::rdRestDtOverTm() расширено возвратом double вместо float.
- Архивы значений дополнено общей опцией autoIdMode() режима формирования Идентификатора автоматически создаваемых архивов с вариантами перечисления AutoIdMode::{BothPrmAttrId,OnlyPrmId,OnlyAttrId}.
- Val: Добавлены функции API пользователя getVals() и setVals() для реализации общего механизма доступа к архивам/истории в массиве и с фиксированной периодичностью.
- UI: Декларацию контекстной документации из описания некоторых узлов унифицировано функцией TUIS::docKeyGet().
- VCAEngine: Добавлена функция пользовательского API уровня сеанса this.ownerSess().uiCmd(). Виджет исполнения дополнен функцией API пользователя this.attrList() для получения перечня атрибутов виджета.
7.1.3 Система
- FIX: Сообщения исходного кода и документация программы:
- TMess: Дополнено очисткой переменной окружения LC_ALL и установкой "LANG" ясли пусто, для предотвращения переопределения LC_NUMERIC=C в конце концов.
- FIX:.,*: Исправлено множество оригинальных сообщений исходного кода также в течении документирования большинства модулей.
- FIX:DAQ.JavaLikeCalc: Исправлено перевод JavaLikeCalc кода функцией tr() в создании таблицы перевода "Trs" и записей там в простом режиме (один язык).
- Контекстная документация:
- Внесетевая документация дополнена некоторыми модулями OpenSCADA и большинством библиотек внутренних процедур и графических элементов. Файл общих CSS-стилей внесетевой документации "doc/en/files/doc.css" улучшено выключением прозрачного фонового цвета и некоторыми свойствами выбора языка.
- Унифицировано декларацией из описания некоторых узлов в функции TUIS::docKeyGet() и добавлены узлы для этого:
- DAQ-шаблоны и JavaLikeCalc библиотеки;
- СВУ-библиотеки в UI.VCAEngine и UI.Vision.
- UI: TUIS::docGet() дополнено кодом определения LTS сборок и использования замороженной LTS документации на OpenSCADA файл-сервере.
- FIX:DAQ.JavaLikeCalc,UI.VCAEngine: Исправлена декларация внесетевой документации для "User_API".
- FIX: Сборка:
- FIX:configure.ac: Версия библиотеки ядра увеличена до 3:7:0 и версия программы увеличена до 0.9.1.
- Дополнено корневыми файловыми системами (chroots) Debian 10, CentOs 8 и Ubuntu 20.04 для сборки OpenSCADA.
- Исходные тексты значительно почищены на предмет предупреждений сборки из GCC 9 (CentOs 8).
- UI.{QTCfg,Vision}: Адаптировано к сборке в окружении Debian 10 на предмет Qt5.11.3, GCC8 и ошибки около конфликта макроса message() в StdLibC++ через Qt5.
- Android: Изучено поведение использования переменной окружения QT_SCALE_FACTOR на Android, которая установлена в 1.5 и удален типовой шрифт "Helvetica,12,-1" вместе с CSS-правилами QScrollBar.
- Модульная версия подсистемы "Специальные" увеличена до 12; подсистемы "БД", "DAQ", "Архивы" и "UI" увеличена до 13; подсистемы "Транспорты" увеличена до 15.
- FIX: Потоковость, задания, реальное время и замки:
- Некоторые общие ресурсы данных dataRes() заменены собственными ресурсами, в основном из-за наблюдения проблем блокирования в Protocol.HTTP и DAQ.ModBus.
- FIX: Добавлен механизм общих замков через контейнер замков, функция commonLock().
- FIX: Transport.{Sockets,SSL}: Использовано для системных функций вроде getaddrinfo(), которые не являются многопотоковыми.
- Планирование задач дополнено фазированием их вызова, что делает нагрузку на процессор ровной.
- FIX: Ожидание функции TCntrNode::nodeDis() исправлено для нулевого времени и функция chldDel() установлена в отсутствие ожидания по умолчанию.
- FIX: Исправлена негативная приоритетность политики "BATCH".
- Archive,DAQ.Controller: Для текущего времени сообщений и значений в основном использовано TSYS::curTime()/1000000 вместо time(NULL) поскольку время сообщений и значений в микросекундах и помечено TSYS::curTime().
- FIX: Резервирование:
- .,UI.{QTCfg,Vision,WebCfg,WebCfgD}: Функция "Передача локальных первичных команд" резервированных систем унифицирована и расширена полным перемещением в TCntrNode::cntrCmd(), итак, функция на данное время работает для любых вызовов также из окружения программирования пользователя.
- Archives,DAQ.DAQGate: Обработка верхней границы времени сообщений в резервировании и DAQGate изменена на использование последнего сообщения для повтора его запроса дважды, чтобы предотвратить потере сообщений на границе.
- FIX: Резервирование и DAQ.DAQGate восстановлены в записи больших архивных блоков значений, в основном в восстановлении участков архива значений.
- Первое получение нарушений в резервировании сообщений включено только при наличии архиваторов сообщений в резерве.
- Размещение сообщений в архиваторах процедурой резервирования TMArchivator::redntDataUpdate() изменено на использование функции put(), для осуществления этой операции автоматически для всех полученных сообщений под замком.
- DAQ,DAQ.*: Запись значений в резервировании унифицировано функцией vlSetRednt(). Сервис "TValue::get:/serv/attr" расширен несколько лишним запросом последнего запрошенного значения для предотвращения EVAL там при потере соединения.
- Функция strEncode() дополнена вариантом "Limit" для ограничения размера строки с учётом переменчивости UTF-8, и следующие элементы переведены на неё, вместо удалённого ограничивающего варианта функции strMess(): ключи TConfig, ВВ DAQ-шаблонов, DB.SQLite, UI.QTCfg.
- FIX: Конфигурация:
- TConfig,TCfg: Ключевые поля дополнены ограничением их размера перед обрезанием на стороне БД.
- *: Функции добавления дополнены обработкой формирования идентификатора, или названия, и ограничения их в размере, возвратом результирующего названия инициатора, с использованием расширения функции узла chldAdd() до прямого возврата идентификатора и простого удаления нового узла для одинаковых.
- DAQ: Идентификаторы ВВ Логического Уровня DAQ-шаблонов расширены ограничением размера до 1.5*OBJ_ID_SZ=30 символов и дополнены их обрезанием при создании.
- Транспорты: Размер Идентификатора выходных транспортов установлен в OBJ_ID_SZ*2, поскольку они могут комбинироваться из обычного идентификатора узла и некоторого префикса, в автоматическом режиме.
- Дополнено функцией установки полей TCfg в типовое значение, для предотвращения загрузке значений предыдущих записей в отсутствующие поля.
- TConfig,*: Функции пользовательского API для конфигурации cfg() и cfgSet() расширены контролем доступа.
- Загрузка из выбранной БД улучшено предварительной проверкой включения в функции TSYS::chkSelDB().
- TCntrNode,DAQ,DAQ.JavaLikeCalc: Дополнено функцией load__() для обработки некоторых действий в конце загрузки.
- Интерфейс Управления:
- *: Унифицировано на предмет контроля модификации объектов узлов и очищено лишние модификации, переносом модификации из контекста исполнения под опцию "modifCalc".
- .,UI.{QTCfg,WebCfgD}: Таблицы расширены отдельной помощью по колонкам и ячейкам.
- Транспорты: Таблица внешних хостов OpenSCADA расширена контекстной помощью к ячейке адреса транспорта, используя функцию outAddrHelp().
- DAQ-шаблоны и все их реализации дополнены функцией создания атрибутов выбора из второй и третьей строки шаблонного поля "Значение", TFunction::IO дополнен флагом TFld::Selectable.
- Завершена унифицированная реализацию DAQ-шаблонов — TPrmTempl::Impl, и такие элементы мигрированы и адаптированы к ней: DAQ.{JavaLikeCalc,ModBus,LogicLev,Siemens}, Protocol.{ModBus,UserProtocol}, UI.WebUser.
- FIX:DAQ,Archive.DBArch: Реализован копирующий конструктор TElem для исправления проблем в Archive.DBArch и многих групп-таблиц в групповом табличном режиме.
- Function,DAQ.{JavaLikeCalc,LogicLev,ModBus,Siemens}: Расширено слежением за сменой программы функции и на предмет гарячего перезапуска исполняемых процедур, установкой флага "f_start".
- TMess,XMLNode: Дополнено функцией setUTF8(), формирования UTF-8 из их кодов, взято из XMLNode для использования в других местах.
7.1.4 БД
- FIX:*: Функция сброса конфигурационного контекста cfgToDefault() использована в начале функции dataSeek() и fieldSeek(), поскольку это обязательная операция, как минимум для конфигурационного файла, и должна также осуществляться для конфигурации в БД относительно новых полей.
- Дополнено контролем закрытия транзакций в ядре OpenSCADA, в сервисной задаче для таймаута > 10 секунд или в отдельной на БД задаче быстрого закрытия транзакций общих СУБД. Для чего добавлена функция trTm_ClsOnOpen(), trTm_ClsOnReq() и trPr_ClsTask().
- Объекты БД дополнены восстановлением их включения после потери подключения (или другой причины) для предусмотренных к включению и не выключенных пользователем, с помощью disabledByUser().
- Дополнено конфигурацией "Время жизни открытых таблиц, секунд", для закрытия неактивных таблиц.
- FIX:{SQLite,MySQL,PostgreSQL,FireBird}:
- FIX:{MySQL,PostgreSQL,FireBird}: Усовершенствовано и проверено горячее восстановление потерянных подключений и без потери данных.
- FIX:FireBird: Восстановлено основную работу в запросе первичных ключей и адаптировано к FireBird версии 3.
- FIX:MySQL: Решено с аварийным завершением во встроенном переподключении (по MYSQL_OPT_RECONNECT), который заменён собственным и горячим переподключением. Исправлена ошибка "BLOB/TEXT can't have a default value (1)" на современных версиях сервера MariaDB, полным удалением DEFAULT для TEXT.
- SQLite: Дополнено корректной обработкой блокирования файлов БД SQLite, при доступе к общим библиотекам из различных процессов.
7.1.5 Сбор Данных
- TController::alarmSet(): Расширено имплементацией концепции тригерования нарушений, которая предусматривает также пропуск нарушений в буфер с целью очистки только при наличии нарушений.
- Глобально унифицировано и полностью описано в документации на предмет сообщений из объектов контроллеров и DAQ-параметров, когда параметр-источник в сообщении дополняется именем объекта контроллера.
- FIX: Изменено на использование полного ID-пути параметра, для предотвращения коллизиям в нарушениях от параметров с одинаковыми идентификаторами, но различными источниками.
- FIX:*: Свойство period() заранее актуализировано, при смене конфигурации "SCHEDULE", для обеспечения корректной периодичности данных архивов.
- Расширено ранним включением библиотек шаблонов в процессе загрузки, изначально для транспортных протоколов основанных на DAQ-шаблонах.
- FIX:ModBus:
- FIX: Режим "Асинхронная запись" восстановлен и проверен на записи после восстановления подключения, для использования в предотвращении потерь. Асинхронная запись перенесена на после фазы запроса с подавлением-задержкой изменения записанных значений в атрибутах до очищения буфера записи.
- FIX: Исправлена работа в режиме резервирования.
- FIX: Общая функция upVal() поделена на две функции upValStd() и upValLog() для отдельного обновления типов параметров сначала "Стандартный" и "Логический" тип на конец, для случаев использования данных "Стандартного" типа параметров в "Логическом".
- Расширено работой с ошибочным или пустым транспортом подключений, чтобы обеспечить его смену из внешних процедур.
- Расширено флагом "s" строгого запроса сложных данных.
- FIX:JavaLikeCalc: Расширено попыткой восстановления исполнения предыдущей процедуры в случае ошибок в новой, в основном из DAQ-шаблонов.
- FIX: Исправлено аварийное завершение при горячей компиляции, в основном при возврате к корректной процедуре после компиляции ошибочной, в случае использования процедурой внутренних функций, возможно и внешних также, из-за отсутствия очистки "fPrmst". Все эти очистки унифицированы в функциях buildClear(), workClear().
- Установлено в остановку функции при смене источника программы, для применения изменений.
- FIX: Предотвращено рекурсивные вызовы, что наблюдалось на рекурсивном создании виджетов в UI.VCAEngine.
- Siemens: Расширен прямым определением типа данных адреса. LibnoDave обновлен к 0.8.5.1.
- DAQGate: Расширен опцией и функцией размещения различных удалённых контроллеров в виртуальных параметрах.
7.1.6 Архивы-История
- FIX:Сообщения:
- /serv/mess: Усовершенствовано во вставке, относительно независимой записи в архив и чисто для обновления присутствующих нарушений.
- Сообщения макросов "message", "mess_info", ... к функции Mess->put() перенаправлено на запись в буфер, для предотвращения прямой записи в архиваторы.
- TArchiveS::messPut() очищено от аргумента "force".
- FIX:Значения:
- TVArchive::getVals(): Усовершенствовано обработку несвободных буферов (с фиксированной периодичностью) относительно запроса данных из буфера и различных архиваторов, используя промежуточный буферный массив, который проигрывается в конце.
- FIX: Усовершенствовано обработку ограничения независимо для буфера, архиваторов и их периодичности, для работы запросов данных на большом интервале и высокой периодичности.
- FIX: TValBuf.get() переключено из генерации исключений на возврат EVAL при отсутствии запрошенных данных.
- Архиваторы значений дополнены общей опцией "Режим формирования ID автоматически создаваемых архивов" с выбором из режимов: "Оба ID параметра и атрибута", "Только ID параметра", "Только ID атрибута". Для возможности контроля наименования автоматических архивов.
- TVArchive::{setVals(),setVal()}: Доступ к функциям записи в архив ограничено только пользователям в группе "Архив".
- FIX:FSArch: Режим сообщений в XML дополнен кешем позиций.
- FIX: Архивация сообщений значительно усовершенствована и исправлена относительно размещения нескольких различных сообщений на одно время.
- FIX: Исправлено относительно удаления info.db и его обработки, используя адрес БД как уникальную сущность вместо ограниченного идентификатора БД, который сейчас именуется через индексацию одинаковых.
- FIX: Создание каталога архива перенесено на начало, до блокирования и создания info.db.
- FIX: Исправлена архивация дублированных сообщений в режиме предотвращения дубликатам - переписано.
- FIX:DBArch:
- FIX: Исправлено включение архивов значений в архиваторы для негруппового типа архивации.
- FIX: Окончательно исправлен запрос одиночных значений архиву, после неполного исправления от 2018-02-23 только для данных архіватора в периодичности 1 секунда.
- Адаптировано к работе только в режиме прямой записи архива, для группового режима архивов и относительно обновления целевой информации при записи.
7.1.7 Транспорты
- .,*: Расширено поддержкой выбора многих протоколов и функция protocol() переименована в protocols().
- Дополнено сервисом закрытия выходных транспортов по времени жизни (неактивности) и функцией outLifeTime(), унифицировано относительно контроля времени последнего запроса функцией lstReqTm().
- FIX:Serial: Исправлен режим "Модем" выходного транспорта, корректной обработкой результата функции ResMtx::tryLock(). Поле управления потоком перенесено в поле опций из-за необходимости прямого отключения некоторой опцией вроде -RS485.
- FIX:Sockets,SSL: Расширено поддержкой IPv6 как для входных, так и выходных транспортов, используя getaddrinfo().
- Дополнено обработкой (подключением) всех IP-адресов, полученных из символического, особенно для выходных транспортов.
- Выходные транспорты дополнены прямым определением нескольких адресов хостов.
- Выходные транспорты усовершенствовано в использовании попыток после получения ошибки запроса "Время чтения истекло.".
- FIX:Sockets: Исправлена обработка выходных транспортов с адресом "SOCK:{N}" от инициативных подключений, относительно очистки адреса установкой в "SOCK:-1", чем предотвращая возможность перезапуска с использованием уже закрытого описателя сокета, но возможно уже выделенного другой частью программы.
- Адрес входных транспортов в TCP-режиме может быть расширен дополнительными параметрами и сейчас следующим полем после режима является идентифицирующее сообщение инициативного подключения в режимі 2, т.е. этот режим расширен отправкой идентифицирующих сообщений после установки инициативных подключений.
- "TCP:" префикс адреса сделан необязательным-опциональным.
- Режим адреса входного транспорта по умолчанию установлен в 1 (не закрывать, только по параметрам KeepAlive).
- Порт по умолчанию установлен в 10005.
- SSL: Дополнено обработкой NO_*_METHOD для TLS1, TLS1_1, TLS1_2, DTLS1 и прямой поддержкой DTLSv1_2. Порт по умолчанию установлен в 10045.
7.1.8 Транспортные Протоколы
- FIX:HTTP: Дополнено корректной поддержкой KeepAlive, функциями входных транспортов keepAliveTm() и keepAliveReqs(). Расширено таблицей БД "HTTP_AuthSessions" внешних сеансов аутентификации.
- FIX:ModBus: Входная часть расширена использованием DAQ-шаблонов.
- Перечень типов данных таблицы ВВ дополнен типом "Объект".
- Определение варианта протокола по входным запросам несколько улучшено определением отличия вариантов RTU и TCP, через учёт типа транспорта.
- UserProtocol: Расширено поддержкой DAQ-шаблонов.
- SelfSystem: Расширено поддержкой попыток выходных транспортов.
7.1.9 Интерфейс Пользователя
- FIX: TUIS::mimeGet() изменён на предмет поведения определения расширения файла "svg" как "image/svg+xml" для корректного отображения SVG-файлов, и множества таких файлов, на WEB.
- FIX:VCAEngine,Vision,WebVision: Вариант "LineEdit" примитива "FormEl" дополнен видом "Пароль".
- FIX: СВУ-стили переведены на схему включения стилей при их присутствии вместо выключения по "Нет стиля", также исправлено создание новых элементов и в целом.
- VCAEngine,Vision: Вся информацию сведена в поле статуса для виджетов, библиотек и проектов; которые дополнены статусом исполняемой процедуры - наследовано, переопределено.
- FIX:VCAEngine:
- Страницы проектов дополнены типом "Ссылка", для оптимизации потребления памяти на высоко-динамических и высоко-повторяемых страницах, на стороне сеанса проекта. Открытие страниц при исполнении проекта (сеансы) улучшено предотвращением лишнего и двойного открытия и закрытия, что критично для контроля ссылок на страницы.
- Множество мероприятий около редактирования визуальных элементов во время исполнения проекта.
- Исправлено удаление страниц проекта во время исполнения проекта, на предмет предотвращения блокированию объектов и обеспечения их раннего связывания для удаления страниц сеансов вместе со страницами проектов.
- Объекты сеансов переведены на собственную блокировку данных для предотвращения мертвого блокирования в сложных ситуациях, поскольку вызовы стилей используют непрямой parent().
- Оптимизация удалённой разработки:
- информационные сервисы контроля "/prm/cfg/prj", "/page/page" дополнены получением количества дочерних страниц в атрибуте "chPgN" при установке "getChPgN";
- дополнено на предмет предотвращения передачи иконок виджетов в контрольном сервисе "/serv/wlbBr" загрузки полного дерева виджетов, установкой атрибутов "disIconsW", "disIconsCW".
- Сеансы проектов СВУ прибраны, в конце концов, из под контроля модификации режима разработки.
- Добавлено прямое определение специфических для визуализатора атрибутов, маркируя их префиксом "vs_".
- FIX: Команда сеанса проекта "close" сервиса "/serv/pg" принудительно обрабатывается, что актуально для ссылок на страницы.
- FIX: Процедура загрузки СВУ-страниц дополнена очисткой лишних записей и записей унаследованных, но отсутствующих виджетов, в таблице "*_incl".
- FIX: Исправлена работа функции пользовательского API tr() из документов.
- FIX:QTCfg,Vision: Исправлена обработка подсветки синтаксиса текстовых полей путём первичной загрузки правил синтаксису а потом текста, для предотвращения порче текста в отдельных случаях, обнаружено в протоколе обмена транспорта и Qt 5.11.
- Дополнено кнопками принудительной загрузки и сохранения, в меню.
- Улучшено формирование Таблиц на предмет получения доступной ширины из maximumViewportSize().
- FIX:Vision,WebVision: Улучшен контроль лент прокрутки вложенных страниц, для обеспечения их работы отдельно, не двух вместе.
- FIX:ElFigure: Завершена поддержка отражения, реализацией: в целом, черчения Дуги, заполнения в целом и изображением. Заполнение изображением предотвращено от пробелов при доступе поза изображением.
- FIX:Диаграмма:
- FIX:Тренды: Расширено построение шкалы времени, для множества суток с полным скрытием времени, и отображение первого значения слева, используя смещение временной зоны. Дополнено поддержкой больших временных интервалов по месяцам.
- Отключено ограничение точности запрошенных значений архиву, для длинных счётчиков.
- Улучшена удалённая работа на медленных каналах и с периодичностью буфера значений в 10 секунд.
- Text,Media,Box: Расширено отображением курсора активности.
- FormEl: Некоторые виды (Редактирование строки, Редактирование текста, Комбобокс, Список, Дерево, Таблица) расширены отдельным фоном и границей, с помощью специфических пользовательских атрибутов "vs_background", "vs_border".
- Дополнено специфическим пользовательским атрибутом "vs_winTitle" динамического значения заголовка окна.
- FIX:Vision:
- Оптимизация удалённой разработки:
- Дерево проектов переключено на частичную загрузку ветвей и расширение, для улучшения работы на медленных подключениях.
- Дерево виджетов улучшено в работе на медленных подключениях путём отключением загрузки иконок виджетов по пороговому времени полной загрузки дерева более 5 секунд и включения этого для времени менее 0.1 секунды.
- Расширено планированием периода обновления в зависимости от реального качества подключения в режиме исполнения, вроде UI.WebVision.
- FIX: Общие исправления и усовершенствования режимов исполнения окна:
- FIX: Ручное масштабирование окна исполнения (относительно полного экрана или максимизации) улучшено и исправлено в обработке признака isResizeManual.
- FIX: Исправлен запуск в полно-экранном режиме и не полное масштабирование при восстановлении в не нулевую позицию окна.
- FIX:FormEl:
- FIX:Таблица: Улучшена подстройка к использованию максимальной ширины из размера виджета и максимума порта отображения, поскольку только максимум порта может быть тут ещё не инициированным. Окончательное исправление подстройки таблиц, переносом процедуры в сообщения: создать, изменить размер и показать. Исключены случайные падений.
- FIX:Date: Исправлено аварийное завершение при установке конфигурации.
- FIX: Исправлена регулярная замена основной страницы (аварийное завершение) и масштабирование в режиме исполнения.
- FIX: Исправлено исполнение относительно аварийного завершения в закрытии внешних окон при закрытии главного окна.
- FIX: Исправлены диалоги редактирования свойств Страниц/Библиотек и Виджетов относительно:
- предотвращения закрытия по Esc;
- отключения отмены изменений по времени в LineEdit;
- отвязки признака редактируемости от видимости в TextEdit;
- предотвращения потере изменений во вкладке "Обработка";
- предупреждения про изменение наследованной вычислительной процедуры.
- Контроль за фокусом переписан в специфичный около СВУ-виджетов контроль, а не Qt-виджетов, что похоже на UI.WebVision и что предотвращает некоторые проблемы.
- ElFigure: Редактирование фигур переключено в нормальный режим, без какой-нибудь трансформации (поворота и отражения).
- FIX:WebVision:
- FIX:Основное функционирование:
- FIX: JS функция servSet() записи на сервер переключена в синхронный режим для предотвращения потерь.
- Унифицирована основная проверка фоновых объектов относительно поддержки опциональных фоновых объектов, для уменьшения общего количества фоновых объектов, где обязательными сейчас являются: "ElFigure", "Диаграмма", "Документ", "FormEl"; и опциональный только "Текст".
- Границу вертикального расширения основного окна установлено в 10% от общего размера и в 50% для уменьшения, для предотвращения миганию на FireFox от примечаний про блокирование внешних окон. Установлено использование-включение встроенного режима масштабирования согласно к window.devicePixelRatio равного 1 на уровне Web-бравзера.
- Значительно улучшено обнаружение потерь подключения для перегрузки основной страницы, в случаях возврата к уже закрытым сеансам в Web-браузере.
- Дополнено реализацией специфического к визуализатору атрибута "userSetVis".
- FIX: Восстановлена перегрузка целого дерева виджетов для восстановления функции удаления отсутствующих виджетов в визуализаторе при их удалении в СВУ-движке.
- FIX: Предотвращены лишние и отдельные запросы содержимого вложенных страниц при запуске.
- FIX: Улучшено поведение контроля фокуса и предотвращены сообщения мыши вне страниц.
- Дополнено контролем кеша страниц по времени жизни и максимальному количеству страниц как на стороне сервера, так и Web-бравзера, итак этот модуль, на данное время, больше подходит для работы в оперативном режиме!
- Контроль сеансов:
- Расширено возможностью ручного закрытия открытых сеансов от административного пользователя.
- FIX: Обычные пользователи исключены от возможности подключения к чужим сеансам.
- FIX: Основной код запроса GET значительно упрощён относительно предотвращения переподключениям к СВУ-сеансам без локальных представителей.
- Дополнено состоянием открытых сеансов на странице контроля, включая подключенный проект и пользователя.
- FIX:Панель статуса:
- Добавлен уровень нарушений с функцией глобальной квитации, отправкой "ws_alarmLev".
- Расширено поддержкой СВУ-стилей в их отображении и изменении.
- FIX: Исправлено в формировании размера панели статуса, обновлении и предотвращении её мигания при обновлении основной страницы.
- FIX:FormEl:
- FIX:{Tree,Table}: исправлен расчёт ширины границы и отступа в конечной геометрии.
- FIX:Tree: Исправлена обработка пустой строки в конце. Дополнено масштабированием изображений дерева управления.
- Расширено установкой визуальных элементов СВУ на предмет атрибута "class" в "Примитив {WPrimitive}" и атрибута "id" в идентификатор виджета вроде "wdg_{id}", для упрощения детальной подстройки.
- FIX:QTStarter: Функция updLookFeel() исправлена на предмет возврата типа "void". Добавлена эмуляцию правой клавиши мыши и контекстного меню при удержании левой клавиши мыши в течении времени, установленного опцией командной строки --simulRightMKeyTm. Это время установлено в 2 секунды для Android.
- FIX:QTCfg:
- FIX: Исправлено применение-принятие забытых изменений редактируемых виджетов при переключении к другому узлу. Элементы TextEdit исправлены относительно определения признака редактирования, который отвязан от видимости.
- Добавлен намёк к группам узлов для команды добавления узла.
- Операции перемещения, в конфигурационной таблице, расширены горячими клавишами "Ctrl+Up" и "Ctrl+Down".
- Оптимизация удалённой работы:
- Предотвращено обновление дерева навигации при выборе любого элемента.
- Замедление цикла периодического обновления после появления диалога занятости.
- Ускорено закрытие окна конфигуратора со многими неактивными OpenSCADA хостами, путём раннего уведомления заданий хостов.
- WebUser: Расширено поддержкой DAQ-шаблонов.
7.1.10 Специальные
- FIX:FLibSYS:
- FIX:IO: write() исправлено относительно получения типового типа данных, получение ошибочных данных сделано безопасным.
- CRC: Завершено использованием нормальных полиномов, входных и выходных относительностей и XOR для выхода.
- VArchObj: Доступ к функции записи в архив ограничен только пользователями в группе "Архив".
8 Ссылки