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-ресурса документирования на новый движок с унификацией структуры под многоязычность с приоритетом: Английский, Украинский, mRussian; и генерация автономной документации по её изменению.
- Ревизия, актуализация и некоторое расширение Web-модулей OpenSCADA.
- Расширение и адаптация OpenSCADA к прямой работе с низкоуровневыми шинами и устройствами вроде 1Wire, I2C и реализация проекта умного дома в собственной квартире.
- Формальное создание и документирование проекта дистрибутива Linux автоматизации с OpenSCADA.
- Создание автоматизированной системы сборки пакетов OpenSCADA.
- Перенос серверной инфраструктуры OpenSCADA на собственное оборудование и канал интернета.
- DAQ.OPC_UA: Упрощение, увеличение функциональности и перенос протокольного кода в отдельную LGPL v3 библиотеку.
Эти задачи выполнены и некоторые детали около них приведены далее.
4 Общесистемные свойства
Новая стабильная версия OpenSCADA получила заметные общесистемные расширения, приобрела большей стабильности в работе и увеличение продуктивности, а также получила заметные усовершенствования графического интерфейса и окружения около неё, вроде: расширенной настройки, документации, доступной прямо из программы (offline и online), и которая значительным образом пересмотрена и актуализирована.
Основная часть документации проекта перенесена на новую Wiki, на основе MediaWiki, и значительный объём этой части был отревизирован и переведен на три языка — Английский, Украинский, mRussian. Для переноса была создана процедура конвертации статей из диалекта движка 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 адекватно воспринимаемой для аудитории, которая не понимает исходных языков — Украинского или mRussian. И, вместе с реализацией в полном объёме механизма динамического перевода, делает возможным построение на основе 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 [01.01.7532/01.03.2024] СЕДЬМОЕ обновление
Это обновление релиза 0.9 LTS исправляет около 60 ошибок и добавляет ОЧЕНЬ МНОГО улучшений с несколькими значительными-концептуальными, с которыми целиком можно ознакомиться в протоколе изменений обновления.
User significant actions on the update
- DAQ.System: ID of the automaticly generated DA parameters changed to: CPU - "CPU[{N}]", fs - "FS{MP}", hddstat - "DiskSt_{dev}", MEM - "MEM", netstat - "Net_{IF}", sensors - "Sensors", hddsmart - "DiskSMART", ups - "UPS", uptime - "UpTm_{U}".
- => manually relink all the automatically created sources which changed, when you use the Automatic creation mode
- FIX:UI.VCAEngine: Prevented from connection the attribute "focus" of any included widget to the calculation IOs and appended by processing the exceptions of accessing those IOs for missing included widgets.
- => manually replace all static using the "focus" attribute like to if(alarms_focus) alUnSel = 10; in LibsDB.vcaBase.wlb_Main.alarmsSt to the code if(this.alarms.attr("focus")) alUnSel = 10;
Automation Linux distributive of the project OpenSCADA
- appending Debian 12 as the distributive base;
- moving of building the Debian 11,10,9 base to the Debian 12 environment;
- updating TDE to 14.1.1 and next to 14.1.2, with stabilising up to the level of 14.0.13;
- prevents optionally the system tray from show program icons with different WMID but equal names like to BlueMan;
- prevents the very flooding in "~/.xsession-errors" by the debug messages like to "[FIXME] UNCLASSIFIED DEVICE name: ...";
- disabling of using Security Cards for authentication in the kdesktop lock dialog, due to it became unusable;
- HWLib: using in calculation Ah from Wh of the Designed Voltage instead the Current Voltage for accordance with the capacity information on the battery; prevented from freezing in the Hardware Manager;
- KRDC, KRFB: restoring the normal functioning from 14.0.13;
- KXKB-KLayouts: Fixing regressions in loss-clean the system keyboard layouts;
- TDESVN: preventing crashes at accessing DB from KPart;
- Krusader: fixing of unpacking *.tar.xz and *.txz, so completing of implementation the XZ support there;
- KMix: adaption the mixers dynamic;
- KMilo: restoring the brightness control after its breakage;
- QuickLauncher: it is just ignore empty items, so they will be removed after the configuration updating;
- TDM: disabling the authentication by a Security Card to prevent hangs at the exit;
- KOrganizer: improving the attachments dialogue for pointing only file with naming the attachment item from the file name and inline by default; improving the categories editing dialogue for notifying the underlying selecting dialogue about categories changing;
- TDEPowerSave: prevents of resetting the widget of displaying values the batteries since their become to show empty bar and -1; commented the SLOT slotHelpContents() due to its missing; prevents appearing the false inactivity dialogue to suspend just after awakening, which is appeared especially often on notebooks in work from the battery;
- KPackage: optimisation of the memory consumption in way of reading "apt-cache dumpavail" result through an temporary file but not through memory, that is the memory consumption on Debian 12 decreased from ~900MB to ~450MB;
- TDEPrint: fixing of translation of names of groups of the printing properties;
- translation to Ukrainian: knmap, knutclient, konversation, tdenetworkmanager.
Main WWW-resources, documentation of the project and subprojects
New and significantly updated parts
- OpenSCADA Core: 3:13:0 => 3:14:0
- (Unification the building with adaption ..., Refactoring and unifying the Transports subsystem ..., Control for big memory consumption), Messages Translation — fixes of the conceptual changes of the previous updates)
- OpenSCADA "Transport" subsystem: 19 => 20
- (Refactoring and unifying the Transports subsystem ...)
- OpenSCADA "DAQ" subsystem: 14 => 15
- (Unification of conception the parameter types)
- (Complete refactoring and expanding for ...)
- DAQ.LogicLev: 2.7 => 2.9
- DAQ.DAQGate: 2.11 => 2.13
- DAQ.ModBus: 3.6 => 3.8
- DAQ.OPC_UA: 2.6 => 2.8
- DAQ.JavaLikeCalc: 5.5 => 5.6
- DAQ.Siemens: 4.4 => 4.5
- DAQ.AMRDevs: 0.7 => 0.8
- Transport.SSL: 3.4 => 4.5
- (Expanding by support of the initiative connections, adaption to OpenSSL 1.1 and more)
- Transport.Sockets: 4.5 => 4.8
- Transport.Serial: 2.6 => 2.7
- Protocol.SelfSystem: 1.10 => 2.0
- (Significant reviewing and fixing in the external connections implementation and more)
- (Unification the building with adaption to Qt6, QtWebEngine, QtMultimediaEngine, ...)
- UI.QTStarter: 5.14 => 6.0
- (Unification the building with adaption to Qt6, QtWebEngine, QtMultimediaEngine, ...)
- UI.VCAEngine: 7.11 => 7.13
- UI.Vision: 8.6 => 9.2
- (Unification the building with adaption to Qt6, QtWebEngine, QtMultimediaEngine, ...)
- UI.WebCfgD: 2.4 => 2.5
- UI.WebVision: 6.8 => 6.10
- LibsDB.OscadaLibs.DevLib: 2.6 => 3.0
- (Appending by many templates with documenting)
- LibsDB.OscadaLibs.Main: 2.0 => 2.2
- (Appending by several templates with documenting)
- LibsDB.vcaBase.Main: 2.0 => 2.1
- (Appending by several widgets with documenting)
- storeHouse: 1.3 => 1.4
- grpGraph, grpGraph10: 1.5 => 1.6
- ElViewGraph: 1.4 => 1.5
CONCEPTUAL > Unification the building with adaption to Debian 12, Qt6, QtWebEngine, QtMultimediaEngine, OpenSSL3, MIPS
- FIX: Finished in true building with the core library only in static:
- configure.ac: the configuration option --enable-CoreLibStatic expanded for definition the AM_CONDITIONAL(CoreLibStatic) and the environment variable LIB_MOD;
- moduls/*/*/Makefile.am: appended by the option --tag=disable-shared and expanded by using the environment variable LIB_MOD;
- src_call/Makefile.am: expanded by the AM_CONDITIONAL(CoreLibStatic) specific processing for static linking the core library with all included modules.
- configure.ac,acinclude.m4: Cleaned from the deprecated macroses in AutoConf 2.70:
- AC_HELP_STRING renamed to AS_HELP_STRING;
- AM_CONFIG_HEADER renamed to AC_CONFIG_HEADER;
- AC_LIBTOOL_DLOPEN replaced by LT_INIT([dlopen]);
- AX_PTHREAD replaced by AC_SEARCH_LIBS(pthread, [pthread_create])
- commented for AC_PROG_LIBTOOL, AM_PROG_LIBTOOL, AC_HEADER_STDC, AC_HEADER_TIME, AC_TYPE_SIGNAL, AC_ISC_POSIX.
- acinclude.m4,DAQ.OPC_UA.libOPC_UA,Transport.SSL,Special.FLibSYS: Cleaned from deprecated functions in OpenSSL 1.1 (API 3.0):
- acinclude.m4: testing function of the macro AX_LIB_OpenSSL() and AX_LIB_OpenSSL_opt() for libcrypto replaced from MD5_Init() to BIO_new(); testing function of the macro AX_LIB_OpenSSL() for libssl replaced from SSL_free() to SSL_new();
- OPC_UA.libOPC_UA: UA::symmetricEncrypt() and UA::symmetricDecrypt() merged to UA::symmetricCrypt() and switched for using EVP_CipherInit() and EVP_CipherUpdate() instead AES_cbc_encrypt() for new versions;
- using RSA_public_encrypt() moved to EVP_PKEY_encrypt() and RSA_private_decrypt() moved to EVP_PKEY_decrypt() for new versions.
- Transport.SSL,Special.FLibSYS: using of MD5() moved to EVP_DigestInit_ex(), EVP_DigestUpdate(), EVP_DigestFinal_ex() for new versions.
- configure.ac: In appending Qt6 that is appended by Qt6Sensors, Qt6WebEngineWidgets, Qt6MultimediaWidgets.
- Appended by checking Qt5WebEngineWidgets and Qt5MultimediaWidgets for support in UI.Vision.
- Appended by checking the declarations-functions clock_nanosleep, pthread_rwlock_timedwrlock, newlocale for very pure environments of MIPS with UCLibC.
- The parameters --disable-WebKit and --disable-Phonon renamed to --disable-QtWebEngine and --disable-QtMultimediaEngine respectively.
- The generic variables QtWebKit_{CFLAGS,LIBS} and phonon_{CFLAGS,LIBS} renamed to QtWebEngine_{CFLAGS,LIBS} and QtMultimediaEngine_{CFLAGS,LIBS} respectively.
- Most of the corresponding messages were improved.
- Appended by checking the header pthread.h.
- acinclude.m4: The AutoConf macro AX_LIB_Qt expanded by Qt6 support and improved in MOC and RCC detection for Qt5.
- data/{debian,debian_mod}/compat: The level was risen up to 7 for default building at modern Debian distributives.
- data/{debian,debian_mod}/control: Appended by the dependency variants qt6-base-dev, qt6-webengine-dev, qt6-multimedia-dev and qtwebengine5-dev, qtmultimedia5-dev. Appended by the dependency variant libsensors-dev to libsensors4-dev.
- ResRW::{resRequestW,resRequestR}(): Appended of using the timed version at the definition HAVE_DECL_PTHREAD_RWLOCK_TIMEDWRLOCK.
- TSYS::atime2str(),SYS.strftime(): Appended of using the localized data at the definition HAVE_DECL_NEWLOCALE.
- TSYS::{sysSleep,taskSleep}(): Appended of using the clocked sleep at the definition HAVE_DECL_CLOCK_NANOSLEEP.
- Control Interface of the main page appended by hiding the tab "Translations" and the language fields at missing the internationalisation in whole.
- TMess,TModule: The HAVE_LIBINTL_H checking replaced by "#if HAVE_LIBINTL_H", that is checking for 1.
- Transports.SSL: Adapted to new functions of OpenSSL 1.1 (API 3.0) with treating deprecated ones.
- UI.{QTStarter,QTCfg,Vision}: Adapting for building with Qt6, including adapting to Qt6WebEngine and Qt6Multimedia:
- QLayout::{setMargin,margin}() replaced by QLayout::{setContentsMargins,getContentsMargins}();
- QVariant(char*) replaced by QVariant(QString);
- the QMouseEvent constructor replaced by one with the global position;
- QRegExp replaced by the OpenSCADA's variant TRegExp for functions of replacing and testing or by the direct checking;
- the QComboBox signal activated(const QString&), currentIndexChanged(const QString&) replaced by activated(int), currentIndexChanged(int) respectively;
- the QSignalMapper signal mapped(QWidget*) replaced by mappedObject(QObject*);
- QPalette::Background replaced by QPalette::Window and Qt::MidButton by Qt::MiddleButton;
- QFileDialog::setReadOnly() replaced by setOption();
- QApplication::desktop() replaced by QScreen;
- QAction::parentWidget() replaced by parent();
- QVariant::type() renamed to typeId(), QMouseEvent::{pos,globalPos}() renamed to {position,globalPosition}(), QDateTime::{setTime_t,fromTime_t,toTime_t}() renamed to {setSecsSinceEpoch,fromSecsSinceEpoch,toSecsSinceEpoch}();
- appended by renaming functions for different Qt versions with help the macro-definitions in different files and for: typeId() to type(), position() to pos(), globalPosition() to globalPos(), setSecsSinceEpoch() to setTime_t(), fromSecsSinceEpoch() to fromTime_t(), toSecsSinceEpoch() to toTime_t(), mappedObject() to mapped(), setSource() to setMedia(), setVolume() to audioOutput()->setVolume(), setMedia() to setSource(), state() to playbackState();
- appended for support QRegularExpression instead QRegExp in Qt6;
- the QMouseEvent property mouseBtHold splitted on two QPointF: mouseBtHoldPos, mouseBtHoldPosG;
- the keyboard combination separator "+" replaced by "|", that is "Qt::SHIFT|Qt::Key_F1";
- the event QEvent::KeyRelease in LineEdit apply replaced by QEvent::KeyPress;
- QTStarter: the generic library lib_qtgen appended by the function winFit() of specific windows fitting on mobile systems in common; appended by the attribute Qt::AA_ShareOpenGLContexts before the Qt application object for QtWebEngine work on Qt6;
- Vision: adaption to Qt WebEngineWidgets instead WebKit and to Qt MultimediaWidgets instead Phonon, and the primitive Document split for force using QTextBrowser in the development mode. Restored in new action items of the library widgets appearance by placing the new actions to Menu before ToolBar.
CONCEPTUAL > Refactoring and unifying the Transports subsystem in the additional parameters management and expanding in using the connection time parameters for registering configuration parameters of external sources
- the container configuration field "A_PRMS" of the additional parameters moved to the core library from the modules;
- appended by functions TTransportS::{prm,cntrCmdPrm}(), {TTransportIn,TTransportOut}::prm() with common implementation the additional parameters;
- conPrm() expanded by support the configuration parameters of external sources like to protocols and it extended to the input part, also as for the User API;
- conPrm() appended by an argument of the default value and what used in all transport modules;
- clearConPrm() expanded by clearing single parameter and only from external sources;
- setConPrm() was removed after implementing this feature in conPrm() and some modules was updated for that: DAQ.AMRDevs, Protocol.SelfSystem;
- Protocol.SelfSystem is the first protocol who is used now the configuration parameters in transport;
- the output transports appended by a link to an input transport, who created the output one, and it is used for holding here the configuration parameters of external sources;
- all configuration of the associated output transports are set hidden;
- control of the additional parameters moved in own tab "Additional (aprm)" with a function of resetting their values;
- marking the input and output transports as modified set only at the configuration fields real change.
CONCEPTUAL > Control for big memory consumption
- SYS: TCntrNode::cntrCmd() in processing the primary commands of the Control Interface appended by their generic logging to control actions caused the big memory consumption.
- FIX:DAQ: JavaLikeCalc: The strings concatenation operation appended by the limit checking on limUserFile_SZ(10M).
- System: Appended by DA Process as an interface to Linux processes in control their memory usage.
- FIX:Archives: The requests TVArchEl::getVals() and "TValue:get:/serv/attr" appended of limiting the requesting depth in limUserIts_N (1e6) items to prevent for big memory consumption.
- FIX: The Control Interface request "TValue:get:/serv/attr" fixed in limit calculation of the function getVals().
- FIX:.,FSArch: The values archiving appended by limiting the writing operations at limUserIts_N (1e6) entries for tracing of consuming all memory in some cases.
CONCEPTUAL > Messages Translation (fixes of the conceptual changes of the previous updates)
- FIX:SYS,DB: TMess::translGet() fixed in detecting the system prestored messages at setting empty translation messages and the function TMess::translGetU() fixed in cleaning service zero symbols in non dynamic translation modes.
- DB: TTable::fieldSQLSet() adapted to clearing the message base and all translations at zeroing a translation, for clear messages edition in the dynamic translation mode and from non base language.
- SYS,DB.{SQLite,MySQL,PostgreSQL,FireBird},Protocol.HTTP: The messages translation adapted mostly for language codes more of 2 (two) symbols.
- Protocol.HTTP,UI.{WebUser,WebVision}: Finished in adapting for dynamic translation the station name with unification the User API function pgCreator() for using language from objFuncCall().
- Protocol.HTTP: Path from TSYS::ico() used for obtaining translated icons.
- SYS,UI.{Vision,WebVision}: The function TSYS::atime2str() appended by the date translation and it is used in building the time scale of the primitive Diagram of VCA.
- FIX:DB: Allowed in true writing of user changes in the Dynamic Translation Mode on non Base Language, by early checking for dynamic data.
- FIX:DAQ: The DAQ-Templates finished in adapting to translation string type values at their editing and using in the Template Configuration Tab and fixed-adapted to the dynamic translation in using the IO names.
- FIX:DAQGate: Fixed in the values sending of the translatable fields not in the internal translation structure.
- Protocol: HTTP: Adapted for dynamic translation the station name and processing encoded file names of images.
- UserProtocol: Fixed-adapted for the dynamic translation of the IO names.
- FIX:UI.VCAEngine: Templates fixed-adapted to the dynamic translation in using the configuration template of the attributes.
- FIX:UI.WebUser: Fixed in translation the page name in the index.
- FIX:UI.WebVision: Fixed in dynamic translation the user name on the index page.
OpenSCADA libraries and projects
- data/{oscada_plc.xml,oscada_server.xml,oscada_start.xml,ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}}: Cleared in the input transport description and the transports appended by the port group: 10002,10003,10004 for WEB and 10005,10006,10007 for CNTR.
- LibsDB.{OscadaLibs.flb_Controller.test,vcaBase.prj_archBrowser.IDW},ModelsDB.AGLKS.St.{OPC_UA.test,Archive.{MemInfo_use,CPULoad_load}},ModelsDB.Boiler.St.Archive.{MemInfo_use,CPULoad_load}: Adapted to renaming DAQ.System.AutoDA.CPULoad and DAQ.System.AutoDA.MemInfo to DAQ.System.AutoDA.CPU and DAQ.System.AutoDA.MEM.
- FIX:ModelsDB.AGLKS.St: The input SSL transports set by the port group 10042,10043,10044 for WEB and 10045,10046,10047 for CNTR.
- FIX:WebUser.test: restored in the text before unification the translation.
- DAQGate.test: Updated for the parameter cache.
- LogLevPrm.gen: All parameter objects set for "alDelay" in 1, to prevent the alarm messages at the exiting.
- Sockets.{testRelease,testRelease1,testRelease2}: disabled by default.
- LibsDB.OscadaLibs:
- tmplib_DevLib: The library appended by the templates with documenting:
- from VPF: Incubator, VSE002, "FF LE-03MB CT (FF_LE)", "Ergomera 625(ergomera625)";
- from Blue Star Group: "Goboy 1M (Goboy1M)", "AutoPILOT PRO Flow Computers (AutoPILOT)", "AutoPILOT OLD Flow Computers (AutoPILOT_old)", "Corrector BK (CorBK)", "Tancy Data (TDS)", "UltraMag", "Enron, Daniel (enronDaniel)", FlowGAS.
- tmplib_base: Appended by a new template for WebUser "HTTP File Server (fileServerHTTP)" with implementing the HTTP File Server in OpenSCADA, currently that is only reading resources with support partiality; and the new templates "Weather (weather)", "Disk SMART (DiskSMART)".
- digAlarm,manInUnif,anUnif,pidUnifImp,anUnifSt,pidUnif,codeState,SNMP,UPS: The NAME IO set to the type "String (translate)" and the DESCR IO to the type "Text (translate)".
- tmplib_LowDevLib: Appended by the template "BT: ATORCH UC96".
- RDTech: Nondouble commands set to send the command twicely for stable applying by the device, postcommand delay set to 0.2 and moved in common.
- tmplib_base.ntf: Expanded by a possibility of specifying messages to exclude from the notification.
- LibsDB.vcaBase:
- wlb_Main: The library appended by the widget "Weather (weather)" with documenting.
- storeHouse: Expanded by creating the item edition form in the main frame after hiding the main table and other.
- FIX: Prevented of <EVAL> for <NULL> cells in the item report.
- FIX: Guaranteed in filling the report dialogs by generating the opening events from the procedure.
- FIX: Fixed in early setting the vertical position for the data table at changing the user.
- The text fields of the single-item report were cleared from the left margin for texts.
- The reports appended by processing the links as the external ones.
- Expanded by processing ID (index) also as other standard fields "NAME", "DSCR" — to control the field visibility.
- Appended of resetting filters at the page restart or user change.
- The whole-table report appended of limiting cells' text in 30 symbols, that is like to the edition table.
- The item report appended by hiding empty fields.
- Appended of updating the selection context of the form items at change such item value.
- grpGraph: Procedure rewrote for unification to work with different elements, so for use in all derivative frames like to grpGraph10.
- grpGraph10: Switched to inheritance from grpGraph.
- FIX:alarmsSt: Fixed in the alarms_focus variable accessing after removing of forcing the "focus" attribute, which replaced by this.alarms.attr("focus").
- tmplSO: Some cleaned for items of the ResultGraph page.
- ResultGraph: The attribute "grpName" set to the "String (translate)" type.
- ElViewGraph: Appended of reading the default-static properties for clearing to them.
- wlb_doc:
- FIX:docRepInstVals: Restored in translation values of title and parameter's dimension, name.
- FIX:docUsersSet: Appended by encoding the value fields also, due to there can be not just digits now.
- LibsDB.vcaTest: Finished in renaming CPULoad to CPU and MemInfo to MEM.
API
!!!!:Changes:
- SYS: ico() appended by an argument of obtaining the file path.
- strLabEnum() appended by an argument "onlyDec" for enumerating one digit.
- Removed sysClk(), clkCalc(), shrtCnt(), HZ().
- TError: Removed for DB_TrRemoved.
- TMess: labStorRemGenStor() renamed to labStorRem(), labStor() cleaned for arguments.
- TElem: fldList() set to const.
- TFld: TFld(): Type of the argument vals, nSel changed from "const char *" to "const string&". Removed for selValS(), selValI(), selValR(), selValB(), selNm(), selVl2Nm(), selNm2VlS(), selNm2VlI(), selNm2VlR(), selNm2VlB().
- TCfg,TVal: Removed getSEL() and setSEL().
- TCntrNode: isModify() set to constant, save() added by an argument of the maximum error level.
- DAQ: TController::id() set to const.
- Transports:
- TTransportIn,TTransportOut: Moved to the protected section for logLen(), setLogLen(), pushLogMess(). Removed for logItLim(), setLogItLim().
- TTransportOut: Merged for conPrm() and setConPrm() to one conPrm(), also for UserAPI ones. clearConPrm() expanded by an argument of specifying identifier or group of cleaned parameters.
- TTransportIn::associateTrO(): expanded by support the different stages ATrStg_Create, ATrStg_Proc.
Appends:
- SYS: The new definition DB_GEN "<gen>".
- Appended sysClk(), setSysClk() for receiving the CPU frequency from DAQ.System.
- The sysTm() function appended by arguments for detection of time jumps after suspending.
- TMess: The new function labStorFromCode() of names the specific storages.
- TElem: Appended by the function contN() of obtaining for counter of the connected containers.
- DAQ: TVal: Appended by the function setTime() and by a new flag AttrFlg::NoSave for preventing of marking as modified at the attribute change.
- TController: Appended by tbl() for tables of the parameter types.
- UI: User API appended by SYS.UI.mimeGet() of obtaining the MIME type from the file name.
- Transports: The new definition STR_A_PRM "prms", STR_A_PRM_CFGP "CFG:".
- TTransportS: The new functions prm(), cntrCmdPrm() of common processing transport parameters.
- TTransportIn: Appended by the function prm(), conPrm(), clearConPrm(). Appended by the UserAPI function conPrm() and setConPrm() (for compatibility) and in accordance with ones in TTransportOut.
SYS
- Building:
- configure.ac: Core library version risen to 3:14:0 and the program version risen to 0.9.7. The module version of the subsystem "DAQ" risen to 15, "Transports" risen to 20.
- Appended for building to Debian 12 and Ubuntu 24.04 LTS.
- FIX:DB,Transports,DAQ.BFN,UI.VCAEngine: Adapted for checking the TBDS::dataDel() success result to prevent hangs here on RO storages with fixing function TTable::fieldSQLDel() for true checking the function success.
- .,DAQ.{DAQGate,DCON,DiamondBoards,ICP_DAS,LogicLev,ModBus,OPC_UA,Siemens,SoundCard,System},Protocol.{ModBus,OPC_UA},UI.VCAEngine: Simplified significantly in support the selectable types, making that optional and with support the dynamic translation. Allowed also for specifying only list of values.
- .,Archive.DBArch,DAQ.{BFN,JavaLikeCalc,ModBus,OPC_UA},Protocol.UserProtocol,UI.{VCAEngine,Vision,WebUser}: The Generic Storage renamed from "*.*" to "<gen>":
- with naming the specific storages as "Generic Storage" and "Configuration File" everywhere through the new function TMess::labStorFromCode();
- appended by the definition DB_GEN "<gen>", which used everywhere instead "*.*";
- all generic fields like to "Archiver DB" renamed to "Storage";
- TMess::labStorRemGenStor() renamed to TMess::labStorRem() and appended by information about all object storages.
- .,DAQ.{BlockCalc,Comedi,DiamondBoards,FT3,Fastwel,ICP_DAS,SNMP},Protocol.{ModBus,UserProtocol},UI.{VCAEngine,Vision,WebCfg,WebCfgD,WebUser}: std::string::substr() replaced by std::string::find() in places with static obtaining data for comparing, what is clearer, safer and mostly faster for short strings.
- .,UI.{VCAEngine,Vision}: Improved for messaging the warnings at saving.
- TCntrNode::cntrCmd() in processing the primary commands of the Control Interface appended by their generic logging.
- FIX:TCfg::setS() in the variant with RqFlg appended of locking the critical sections at accessing the container TVariant and appended by notification, only on the data stages and without the returning back.
DAQ
- .,*: Moved in the DAQ sources to fix table names of different parameter types and adapted to the unified conception the parameter types, that is the configuration fields are hidden now when their are standard ones and it scheduled to be cleaned in whole in v1.0.
- FIX: TValFunc::get{S,I,R,B}() appended by code of casting the object TVarObj with EVAL/null converting.
- System: Completely refactored and expanded for:
- expanding the CPU DA by CPU information and frequency from different sources, including CPUFreq with the control;
- appending a new DA Power as an interface to Linux Power and DA Process as an interface to Linux processes;
- Sensors>DA appended by support of the directly accessible sensors "/sys/devices/virtual/thermal/*/temp" and /sys/devices/virtual/hwmon/*/temp*;
- unification the DA interface calls DA::init(), DA::deInit(), DA::makeActiveDA() with moving most DA modules to call the unified code and implementing for them only the unified function dList();
- the DA interface class appended by the new signs: isDynamic(), hasSubTypes();
- appending a mode of the data generic updating from the Service Cycle and the Controller DA Task, by the new function updGen();
- ID of the automaticly generated DA parameters changed to: CPU - "CPU[{N}]", fs - "FS{MP}", hddstat - "DiskSt_{dev}", MEM - "MEM", netstat - "Net_{IF}", sensors - "Sensors", hddsmart - "DiskSMART", ups - "UPS", uptime - "UpTm_{U}";
- switched to the soft mode of parameters automatic creation, that is you allowed to create the source parameters automatically, save forcibly need ones and next switch to the manual mode, than preventing continued scanning.
- FIX:DAQGate: Time of the requesting archive increased for 1 (one) microsecond to prevent of spare values requesting and their direct rewriting to the archives.
- Improved in work with remote host without the time sync:
- the values can be in future up to one hour;
- the remote host timestamp everywhere used at the archive presence even in the tag "<vl>";
- appended of detection the remote host time for its display and using in timestamp the changed values.
- FIX:LogicLev: Significant improving the Parameter Reflection mode in:
- dynamic creation and removing attributes;
- disabling at the error enabling with missing the source parameter with removing all attributes;
- the selection changed to not editable;
- measuring the processing time.
- OPC_UA: Appended by support the asynchronous writing like to DAQ.ModBus.
- AMRDevs: Adapted in the Kontar part to the new conception of the associated output transports for the input ones.
Archives-History
- FIX: The message archivers are prevented from resetting the buffer position of the last read message since we get doubling the messages at each updating the subsystem, which is often for updation the value archive connections, and especially at missing the resource lock.
- FIX: The Control Interface request "TValue:get:/serv/attr" fixed in expanding to equivalent archivers.
Transports
- Sockets,SSL: Appended for support by the port group in the input transports, that is connection to first free. The input transports appended by a configuration field of properties of the initiative connection and the associated output transports.
- SSL:
- Expanded by support of the initiative connections:
- SSL connection code of TSocketOut::{start,stop}() moved to static ones TSocketOut::{connectSSL,disconnectSSL}() for using in the input transport;
- SSL connection code of TSocketIn::Task() moved to TSocketIn::{start,stop}();
- removed for support the SSL algorithms and versions specifying in the mode due to that removing in the OpenSSL library and that was not used mostly, so there used only TLS_{client,server}_method() for new libraries (> 1.1) and SSLv23_{client,server}_method() for old ones.
- FIX: TSocketOut::messIO() prevented from hang at endlessly reading by BIO_read() after the socket closing, by checking errno for EAGAIN.
- The SSL context moved to the generic module object separately for input (ctxIn) and output (ctxOut) parts and the ciphers information was added for:
- the generic module object by SSL_CTX_get_ciphers();
- input-server transport status for SSL_get_shared_ciphers(), SSL_get_client_ciphers() and SSL_get1_supported_ciphers() or SSL_get_ciphers();
- output-client status for SSL_get1_supported_ciphers() or SSL_get_ciphers().
- The input and output transports appended by control MSS and the input transports appended by control the system input buffer, both taken from Transport.Sockets.
Transport Protocols
- FIX:SelfSystem: Significantly reviewed and fixed in the external connections implementation, appended by checking limit the header size. Fixed in double request packing of the output transports at second tries of reconnection or reauth.
User Interface
- VCAEngine,Vision,WebVision: Appended by support of data built-in to resource marked attributes, primarily for the source attribute of the Media primitive.
- FIX:Vision: Adapted for obtaining named list of the storages.
- FIX:VCAEngine: Prevented from connection the attribute "focus" of any included widget to the calculation IOs and appended by processing the exceptions of accessing those IOs for missing included widgets. FIX: Attr::setS() improved in the critical section processing.
- FIX:WebVision: Appended of implementation the user fields in the status bar.
7.1.1 Service updates
7.2 [01.01.7531/01.03.2023] ШЕСТОЕ обновление
Это обновление релиза 0.9 LTS исправляет около 70 ошибок и добавляет МНОЖЕСТВО улучшений с несколькими значительными-концептуальными, с которыми целиком можно ознакомиться в протоколе изменений обновления.
Automation Linux distributive of the project OpenSCADA
- updating TDE to 14.0.13 and 14.1.0 — adaption all patches-fixes and for Debian 11 only;
- initial appending the Calendar System from the World Creation at which year 2023 is 7531;
- fixing KDesktop, TDE HW Manager, noatun, TDESVN, basket, KGpg, KPDF, disabling thumbnails for video, than appending the new patched packages "tdelibs-trinity", "tdebase-trinity", "tdegraphics-trinity", "tdesvn-trinity" and "basket-trinity" to the distributive collection;
- some improving and updating KCalc, holiday_ua, korganizer;
- complete translation to Ukrainian for KDiff3 and showfoto;
- packages building with own patches for Debian 11,10,9,8,7 before adaption the release TDE 14.1.0;
- switching the Debian 9 base to the archive repository, after its official archiving;
- appending the Debian 11,10,9 distributives by packages of RHVoice — Speech synthesizer with many voices for ten languages;
- translation the subproject page to Ukrainian.
Main WWW-resources, documentation of the project and subprojects
New and significantly updated parts
- OpenSCADA Core: 3:12:0 => 3:13:0
- (Productivity optimisation of the VCA interface, Unification the associated output transports to the input one AND the generic output transport connection, Messages Translation — fixes of the conceptual changes of the previous update)
- OpenSCADA "Transport" subsystem: 18 => 19
- (Unification the associated output transports to the input one AND the generic output transport connection)
- DAQ.DAQGate: 2.9 => 2.12
- DAQ.JavaLikeCalc: 5.4 => 5.6
- DAQ.LogicLev: 2.6 => 2.7
- {DAQ,Protocol}.ModBus: 3.4 => 3.7, 2.9 => 2.10
- Archive.FSArch: 3.7 => 3.8
- Transport.Sockets: 4.3 => 4.5
- (Unification the associated output transports to the input one AND the generic output transport connection)
- Protocol.SelfSystem: 1.9 => 1.10
- Protocol.UserProtocol: 1.5 => 1.6
- BD.PostgreSQL: 3.0 => 3.1
- UI.QTStarter: 5.12 => 5.14
- UI.QTCfg: 5.9 => 5.13
- UI.VCAEngine: 7.8 => 7.11
- (Productivity optimisation of the VCA interface)
- UI.Vision: 8.0 => 8.6
- UI.WebCfgD: 2.3 => 2.5
- UI.WebVision: 6.6 => 6.8
- LibsDB.OscadaLibs.LowDevLib: 1.4 => 1.5
- LibsDB.OscadaLibs.base.initConAssociateTrs: 1.1 => 1.2
- LibsDB.vcaBase.Main
- RootPgSo: 2.5 => 2.6
- storeHouse: 1.1 => 1.3
- {grpGraph,grpGraph10}: 1.4 => 1.5
- grpCadr: 1.2 => 1.3
- ElCadr: 1.2 => 1.4
- ElViewGraph: 1.3 => 1.4
- ResultGraphEl: 1.1 => 1.2
- anShow: 1.2 => 1.3
- anShow1: 1.3 => 1.4
- TextLab: 1.1 => 1.2
- ImgLab: 1.1 => 1.2
- LibsDB.vcaBase.mnEls
- El_Kran_Sh: 1.1 => 1.2
- Compressor: 1.1 => 1.2
- El_Kran_polozh: 1.0 => 1.1
- LibsDB.vcaBase.doc
- docAlarmsRep: 1.6 => 1.7
- docRepDay: 3.1 => 3.2
- docRepMonth: 3.1 => 3.2
- docRepYear: 1.2 => 1.3
- docUsersSet: 1.7 => 1.8
- docDin: 1.2 => 1.3
CONCEPTUAL > Productivity optimisation of the VCA interface
- FXI:UI.VCAEngine:
- Adapted to work in very big processing periods and disabling the periodic processing in whole:
- fixed in obtaining the period from the owner session widget;
- appended by setting the session side period with the User API function calcPer() of the session side widget, expanded by specifying the special period values: PerVal_Sess(0), PerVal_Parent(-1), PerVal_UserMin(PerVal_Dis(-2)), PerVal_SessDef(-3);
- "Period of the calculation" renamed to the "Periodic processing" and the renamed field is specified as a generic parameter, that moved to the main configuration tab and appended by the page widgets of the project and child widget of the library widget;
- the session object appended by the User API function period(), what returns the session processing period;
- the processing period was clarified in the session widget status.
- Change of the attribute "alarmSt" appended by accompaniation the new event "ws_alarmChange".
- UI.Vision: Adapted for renaming "Period of the calculation" to the "Periodic processing" and for moving to the main configuration tab. The previous field in the "Processing" tab is set to be hidden at that missing in the VCA model.
- LibsDB.vcaBase,ModelsDB.{AGLKS.vca,Boiler.St}: The VCA projects set to the calculation period 250 ms. Calculation of the control group of the VCA projects set to 1000 ms.
- LibsDB.vcaBase:
- wlb_Main.RootPgSo: Adapted to work in very big processing periods and disabling the periodic processing in whole:
- appended by continuing the immediately cycles before the container page opening at the start and after navigation, using the new event "usr_calc";
- appended by switching to the fast cycle at alarm blink, using the new function calcPer();
- switched to the processing period 1000 ms.
- wlb_Main.ElCadr: Adapted to work in very big processing periods and disabling the periodic processing in whole:
- appended by continuing the immediately cycles using the new event "usr_calc";
- appended by switching to the fast cycle at alarm blink, using the new function calcPer();
- switched to the processing period -1 (parent).
- wlb_Main.{grpGraph,grpGraph10}: Adapted to work in very big processing periods and disabling the periodic processing in whole:
- appended by continuing the immediately cycles using the new event "usr_calc";
- switched to the processing period -1 (parent);
- tracing period of the Diagram primitive linked also to the Widget period.
- wlb_Main.ElViewCadr: Adapted to work in very big processing periods and disabling the periodic processing in whole:
- appended by switching to the fast cycle at cursor blink, using the new function calcPer();
- switched to the processing period -1 (parent);
- tracing period of the Diagram primitive linked also to the Widget period.
- wlb_Main.storeHouse: Adapted to work in very big processing periods and disabling the periodic processing in whole:
- switched to the processing period -2 (disabled);
- appended by continuing the immediately cycles using the new event "usr_calc".
- wlb_Main.ElViewGraph: Adapted to work in very big processing periods:
- appended by continuing the immediately cycles in waiting the values appear, using the new event "usr_calc";
- appended by switching to the fast cycle at cursor blink, using the new function calcPer();
- the calculation set in 2000 ms due to need of that updating at the trend cursor changing.
- wlb_Main.grph_panel: Appended by storing the tracing period of the linked Diagram primitive. Switched to the processing period -1 (parent).
- wlb_Main.{grpCadr,ResultGraphEl}: Adapted to work in very big processing periods and disabling the periodic processing in whole:
- switched to the processing period -1 (parent);
- tracing period of the Diagram primitive linked also to the Widget period.
- wlb_Main.{TextLab,ImgLab},wlb_mnEls.{El_Kran_polozh,El_Kran_Sh,Compressor}: Adapted to work in very big processing periods and disabling the periodic processing in whole:
- appended by switching to the fast cycle at cursor blink, using the new function calcPer();
- switched to the processing period -1 (parent).
- wlb_Main.{anShow,anShow1}: switched to the processing period -1 (parent) and appended by switching to the fast cycle (500 ms) at focus and alarm blink.
- wlb_doc.{docRepDay,docRepMonth}, wlb_Main.{graphSelPrm,doc_panel,accept,treeSelect,cntrPaspExt}, wlb_Main.{ViewCadr,ResultGraph}: Switched to the processing period -1 (parent).
- wlb_doc.{docDin,docAlarmsRep}: Switched to the processing period -2 (disabled).
- wlb_doc.docRepMonth: Excluded from execution at stopping.
- wlb_doc.docRepYear: Appended by one immediately cycle after f_start, using the new event "usr_calc". Disabled for the periodic processing.
- wlb_Main.userManager: Disabled in the periodic processing.
CONCEPTUAL > Unification the associated output transports to the input one AND the generic output transport connection
- FIX: Unification the associated output transports processing of the input Sockets transport for:
- Transport:
- the function TTransportIn::assTrO() renamed to TTransportIn::associateTrO() and expanded by creation new transports at the first and next removing for stopped ones, and the just created transports appended by reading the initial connection ID with it registering in the connection parameter "initConID";
- the new function TTransportIn::associateTr() and its UserAPI variant SYS.Transport["Modul"]["in_Transp"].associateTr() of obtaining the output transport object at its Connection ID;
- the associated output transports from an input one appended by removing at the inactivity at the TTransportIn::keepAliveTm();
- the new UserAPI function SYS.Transport["Modul"]["in_Transp"].associateTrsList() as a correct naming variant to assTrsList();
- the output transport object appended by the UserAPI functions conPrm() and setConPrm() of accessing the connection parameters;
- changing the name template in "inA_ID_N" of the associated output transports to the input one;
- FIX:Sockets: the input transports prevented at spare socket closing in the initiative mode; the new initiative connection limit checking moved to the main limits checking part.
- LibsDB.OscadaLibs: tmplib_base.initConsAssignTrs: Renamed to initConAssociateTrs and adapted to use the function conPrm("initConID") and associateTrsList().
- The generic output transport connection:
- Transports:
- the new function TTransportS::outAt() and its UserAPI variant SYS.Transport.outAt() of the output transport generic obtaining from the unified address;
- TTransportS::extHost() moved to use TTransportS::outAt().
- Transport,UI.{QTCfg,WebCfgD}: The field "Transport" of the external hosts table expanded for specifying the transport address in the unified-common form and expanded by the selection specifying per item with support such behaviour in the common configurators.
- DAQ.ModBus: The first one what moved to use the unified connection to the output transport.
- LibsDB.OscadaLibs: tmplib_DevLib.mbBase: Switched to use TTransportS::outAt().
CONCEPTUAL > Messages Translation (fixes of the conceptual changes of the previous update)
- FIX:SYS:
- FIX: Prevented from propagating the base language column of the translations table "Tr" in the SINGLE translation mode and the base language.
- FIX: The string EVal value "<EVAL>" appended as not translated one to prevent that translation in VCAEngine for NULL DB values.
- FIX: The static messages translation function improved in omitting empty messages for the binary strings with only zero symbols.
- TFunction::operator=() finished in adaption to the IO name translation.
- Writing to the configuration in XML prevented in doubling the translated field for the configuration contexts.
- FIX:DB:
- FIX: The translation prevented from propagating the base language column in the SINGLE translation mode for already translated DBs, by appending for different detection the translated DBs in whole and the translated column presence.
- FIX: Fixed for the DB syntax error at cleaning the translation fields equal to the base.
- FIX: Fixed in writing untranslated strings, by clearing all translation and writing to base.
- FIX: Prevented in the DBs service termination, as the transactions closing, at some wrong DB presence.
- FIX: The translation setting prevented in setting double messages to the base messages; what completing not translation "<EVAL>".
- FIX: Absence the flag TFld::TransltText means as the translation complete missing for that field.
- FIX: The Translation Manager:
- FIX: prevented in the marked base changing to a human readable form at all, since that used as a key;
- the notification about fixes was moved to pass them for the user through the expanded Control Interface warnings;
- the flag "chkAndFix" split to "chkAndFix" and "chkAndFixMB";
- the translation configuration fields TrPassN, TrChkAndFix, TrChkAndFixMB moved to the dynamic variables due to there is no need of their store;
- the translation mark "<<<Unmatched sources>>>" renamed to "<<<SEVERAL VARIANTS>>>".
- FIX:DAQ::ParamTmpl:
- FIX: Fixed for the IO name edition in the non basic mode of the dynamic translation.
- FIX: Fixed in the flag IO::TransltText processing for strings.
- FIX: The service request "list:/DAQ/{MOD}/{CNTR}/prm_{PRM}[/prm_{PRM}]/%2fserv%2fattr" fixed in the attribute name translation.
- FIX:Transports,UI.{QTCfg,Vision,WebCfgD}: The function TTransportS::extHostList() appended by an argument "lang" to receive translated names of remote hosts.
- FIX:Protocol.ModBus: Fixed-adapted in the IO name dynamic translation.
- FIX:UI:
- FIX:VCAEngine: The dynamic translation of tr() fixed in the translation loss after the translation cache cleaning and placing the spare messages to the project's table "Trs".
- FIX:WebUser: Fixed-adapted for the dynamic translation of the IO names.
OpenSCADA libraries and projects
- FIX:LibsDB.OscadaLibs:
- The library tmplib_LowDevLib appended by the template "BT: RDTech UM24C, UM25C and UM34C (RDTech)".
- The library tmplib_DevLib appended by the template "Slot LTD devices (SLOT)".
- FIX:LibsDB.vcaBase:
- wlb_Main.storeHouse: Significantly expanded by: implementation the procedures support for the logical columns; implementation the report of all visible table and a selected record.
- wlb_Main.RootPgSo: The "Notification: type 2 (TextSpeech) (notify2)" method expanded by the RHVoice support and appended by the builtin syntax highlight for BASH. The "Notification: type 1 (Buzzer) (notify1)" method rewrote for the long samples playback in the background, that is with control the sample playing stop and restarting only in the case. Appended also by the syntax highlight.
- FIX:wlb_doc.docRepDay: Some improved and appended by: the columns grouping in the header, string values direct reading, colors disable in the table at EVAL scale.
- wlb_doc.docUsersSet: Added by the "Message category (messCat)" configuration.
API
!!!!:Changes:
- SYS,UI.{QTCfg,WebCfgD}: The Control Requests code TError::Core_CntrWarning expanded for the warning messages pass in the attribute "mtxt" with the main data storing.
- SYS:
- The functions TSYS::id(), TSYS::name() and TSYS::user() were set as constant.
- The definitions SEC_XT, SEC_WR, SEC_RD moved from the file tsecurity.h to tcntrnode.h and used there also.
- ctrChkNode() cleaned for the argument "warn" due to the response attribute "force" is deprecated.
- The Control Interface request "chlds:/{nPath}/%2fobj" appended by not creating the empty icon tags "ico".
- NSTR_BUF_LEN(50) split to CFG_A_LEN (100) for using in the maximum attribute size of the configuration cell in XML.
- The argument "init" removed from setIcoDir(), setDocDir(), setLang() during moving under the generic clearing mechanism.
- Appending the enumeration MdfSYSFlds by the fields: MDF_Name, MDF_MESS, MDF_TR, MDF_DBG, MDF_RD.
- The TSYS::ShieldSimb encoding of the function TSYS::strEncode() renamed to TSYS::ShieldSymb, moved to the function TSYS::strDecode() and in TSYS::strEncode() appended by the common one. And the UserAPI function SYS.strDecode() appended by the decoding method "ShieldSymb".
- DB: The Control Interface request "call:/BD/{MOD}/{DB}/%2fserv%2fSQL" appended by processing the "intoTrans" attribute as EVAL at missing and clearing the request text in the response.
- DAQ::Value: The service request "get:/serv/attr" of the Control Interface prevented from clearing the "el" subtags at missing the representing attribute, them value is set to EVAL for true mark that as processed in DAQ.DAQGate and don't continue them request in each cycle.
- Archives-History: The value archive link type "Passive param. attribute (TVArchive::PassiveAttr)" renamed to "DAQ attribute (TVArchive::DAQAttr)". The value archive link type "Active param. attribute" renamed to "Active DAQ attribute" with that mark as DEPRECATED.
- Transports: The function TTransportIn::assTrO() renamed to TTransportIn::associateTrO(). The TTransportOut::isNetwork() virtual function sign moved to the TTypeTransport object with linking the old one to new one, for marking all module as the network one.
- UI.VCAEngine: The Control Interface request "get:/UI/VCAEngine/%2fserv%2fwlbBr" appended by not creating the empty icon tags "ico". The request "connect:/serv/sess" appended by the attribute "onlyMy" for connection only to own sessions, and the request "get:/ses/ses" appended by the same attribute for listing only own ones.
Appends:
- SYS:
- The new function TSYS::ico() of the icon obtaining.
- Names of the security standard permissions appended by _W_W_W(0222).
- TError: expanded by new constructors with the "const string &" type arguments for no limiting strings and the convenience.
- TRegExp:
- Appended by a new option 'U' (ungreedy) of the greedy mode toggle, together the User API method "ungreedy".
- Appended by the function mode(), the argument "mode" in setPattern() and the enumeration "Mode" with the items: MD_8, MD_16, MD_32, MD_WCHAR, MD_SAVE.
- The search() function of the object appended by an argument "length" of the measured block size return.
- XMLNode: The loading flags appended by the no flag item LD_NO.
- TMess: Appended by the common label labStdOutTrs() for address format of the unified output transport function.
- DAQ:
- The DAQ item linking functions expanded by the base node specifying in the attribute "ndBase", for: ctrListPrmAttr(), daqAt(), prmAt(), attrAt().
- The object TPrmTempl::Impl appended by the new function archAttrs() of updating-archiving attributes of the LogicalLevel.
- Archives-History: The value archive object TVArchive appended by declaration the enumeration ServReqDtMode for the Control Interface request "get:/Archive/va_{ARCH}/%2fserv%2fval".
- Transports:
- The new function TTransportIn::associateTr() and its UserAPI variant SYS.Transport["Modul"]["in_Transp"].associateTr().
- The new function TTransportS::outAt() and its UserAPI variant SYS.Transport.outAt().
- The new UserAPI function SYS.Transport["Modul"]["in_Transp"].associateTrsList() as a correct naming variant to assTrsList().
- The output transport object appended by the UserAPI functions conPrm() and setConPrm() of accessing the connection parameters.
- The function TTransportS::extHostList() appended by an argument "lang" to receive translated names of remote hosts.
- The "in_" and "out_" prefix moved to the definitions STR_IN_PREF and STR_OUT_PREF respectively.
- The TTransportS object appended by the enumeration LogType with the items: LTP_BinaryText, LTP_Binary, LTP_Text.
- UI.VCAEngine:
- Appended by setting the session side period with the User API function calcPer() of the session side widget, expanded by specifying the special values: PerVal_Sess(0), PerVal_Parent(-1), PerVal_UserMin(PerVal_Dis(-2)), PerVal_SessDef(-3).
- The session object appended by the User API function period(), returning the session periodic processing.
- The attribute "alarmSt" change appended by accompaniation by the new event "ws_alarmChange".
SYS
- FIX:Building:
- FIX:configure.ac: Core library version risen to 3:13:0 and the program version risen to 0.9.6. The module version of the subsystem "Transport" risen to 19.
- FIX:Debian: Improving and fixing the DEB-packages signing for all repositories.
- *: Most close(), iconv_close(), dlclose(), pclose() functions appended by checking the result and warning at problems.
- *: All system (SYS) configuration parameters adapted for true handling the default value.
- .,DAQ.JavaLikeCalc: Getting help from the second line for the Control Interface appended in: description of the element fields (TFld) with DAQ-values; name of function IOs (TFunction) with links and attributes builder of the DAQ Logical Level.
- FIX: Rewrote the function TCntrNode::nodeAt() to prevent of call the virtual chldAt() under the lock mChM, so preventing some dead locks in the virtual definitions of chldAt().
- Revised for all templates in the folders =Tmpl=.
- FIX: The tab "Station" of the main page of the OpenSCADA Control Interface appended by the system time information and commonly restructured.
- FIX:data/openscada-proj.in:
- Expanded by the new environment variable OSCD_TAR_Args of defining extra tar arguments like to --exclude and it was set to the default value "--exclude=lock --exclude=ARCHIVES".
- FIX: Fixed in description and using the environment variables OSCD_TAR_ComprPrg and OSCD_BackLim.
- During unification the common project icon obtaining through using the project name and ID there performed:
- the Base Language Name used also for obtaining the icon, so now checked: The Translated Name, the Base Language Name, ID;
- the icon obtaining mechanism moved in a new separated function TSYS::ico().
- TRegExp: Appended by the 16 and 32 modes support by the pcre16 and pcre32 libraries respectively and only for the search() function currently.
DB
- FIX:.,PostgreSQL: Processing the table emptiness some softened during problems in DB.PostgreSQL about that, that is no exception generated now.
- FIX:PostgreSQL: Switched to the standard way of detection the missing Tables with them creation at "toCreate" and the exceptions generating else, so preventing the message "Table is empty.".
DAQ
- The Logical Level linking appended by a form of the address representing as the prefixed path "prm:/node/node", so with support of the relative addressing at "." and "..":
- the DAQ item linking functions expanded by the base node specifying in the attribute "ndBase", for: ctrListPrmAttr(), daqAt(), prmAt(), attrAt();
- the implementation object TPrmTempl::Impl of the Logical Level of the DAQ-template expanded for the new linking support.
- FIX: Setting the LogicalLevel links prevented from cleaning all the string after the space at the link constants "val:".
- ModBus: Appended by the option "e" for the register endian switch to LE for generic and BE for strings. The string extension of the registers appended by the input charset conversion. Appended by the parameter "Omit cycles for read back of written" for control such feature apart from the asynchronous writing.
- FIX:DAQGate:
- FIX: The message categories in catsPat() of obtaining the data source messages of the Controller Object switched to generate own detailed rules of the regular expression from the specified remote controllers — to prevent very redundant messages obtaining.
- FIX: Improved-fixed in the Controller Alarm status formation for multiple stations, when ALARM it is at missing connection of all stations.
- The sync() function of the controller object rewrote completely in the "Removing remotely missed parameters" section for:
- processing the parameter's representing stations: removing completely for missing stations and parameters with no station;
- removing disabled parameters and the logical containers at the flag "Allow the automatic removal of parameters and attributes".
- The function TMdContr::messSet() of the DAQ related messages setting adapted to support attributes in the parameter address for significant attributes of the generic-container parameters, that is needed for the messages transmission from the up stations to the down ones.
- JavaLikeCalc: Expansion-finishing the object's cycle implementation "for({var} in {obj}) {body of the loop}" by the possibility of pointing as the Object <obj> of the included ones through the properties or from the results. The constant values appended by "null" as a synonym to EVAL (EVAL_REAL).
- OPC_UA: Finished in the writing support through custom flags of the Standard mode and the type obtaining from IO for the Logical mode.
Archives-History
- .,DAQ.{LogicLev,ModBus,OPC_UA}: Finished the unification of archiving at the Logical Level sources when used only the direct-passive archiving:
- the object TPrmTempl::Impl appended by the new function archAttrs() of updating-archiving attributes of the LogicalLevel;
- the value archive link type "Passive param. attribute (TVArchive::PassiveAttr)" renamed to "DAQ attribute (TVArchive::DAQAttr)";
- the value archive link type "Active param. attribute" renamed to "Active DAQ attribute" with that mark as DEPRECATED.
- The "Messages" tab appended by a function of automatic clearing old Alarms from the Active Alarms Table at the specified days depth.
- FIX:FSArch:
- FIX: Prevented for access to files[iA] in ModVArchEl::setValsProc() outside the lock using the read-lock switching.
- FIX: Prevented for access to "files" in ModMArch::checkArchivator() outside the lock.
- FIX: Files accessing locks completely revised for including the packing/unpacking, new files creation, removing old ones under the WR lock space including also the conditions checking. Also removed for the relocks in cycles and at indexes.
Transports
- FIX: The output transports appended by the force stopping at the object system disable-disconnection, not in destructors what is late then there can be lost the socket handlers.
- The IO log of the transports appended by the data modes "Binary & Text", "Binary", "Text", and by it writing to a file for very big ones at pointing the log size -1.
- FIX:Sockets: Fixed in processing the not complete writing for the Input part, when the message cuts on the TCP transmitter buffer size. The input buffer size of the Input part bound to the hardware receiver buffer size control and the internal one just frozen to the standard string buffer length since that is not critical and need no control.
Transport Protocols
- FIX:SelfSystem: Significantly reviewed and fixed in the external-output connections implementation, appended by checking limit the header size.
- ModBus: Appended by the option "e" for the register endian switch to LE for generic and BE for strings.
- HTTP: Appended by the HTTP Attributes of disabling the WEBBrowser Cache in whole: "Cache-Control: no-cache, no-store, must-revalidate", "Pragma: no-cache", "Expires: 0".
- UserProtocol: The input part expanded by a possibility of schedule the user procedures call in the service cycle, for the background processing of some data; the Object's attribute "This (this)" was appended here also.
User Interface
- QTStarter,QTCfg,Vision: The common Syntax Highlighter in SnthHgl::rule() switched to the main work using PCRE in TRegExp, since that is 5 TIMES FASTER and very richer comparing to QRegExp; and QRegExp left to be automatically enabled at missing the PCRE 32/16 libraries. The Qt-generic library (lib_qtgen) appended by the static-external functions getFont() and getColor() from UI.Vision and by the object SnthHgl from UI.Vision and UI.QTCfg.
- QTCfg,WebCfgD: Unified in notification the errors of the Control Interface during improvement the code TError::Core_CntrWarning and QMessageBox appended of the detailed text at the message longer for 255.
- QTStarter: Appended by the display sessions control, that is the sessions restore.
- QTCfg: Appended by the Favorite pages implementation. The image element appended by a function of clearing the image completely.
- FIX:Vision:
- FIX: All control requests "<info>" appended by checking the child nodes presence to prevent crashes in some cases.
- Appended by the possibility of call remote station interfaces by selecting the remote station in a dialog, for what the user selection dialog was expanded.
- The text areas with the syntax highlighting appended by the builtin variant.
- The image elements (icons) of the item dialogs appended by a button menu with the functions: Save, Load, Clear.
- The Widget Attributes edition table appended by the multiline edition for the "Name" column and the context help loading for that.
- The popup menu of the project, the project pages, the widget libraries and the library widgets in appending widgets from the libraries removed for limit of the libraries here in 20 items by moving all them to a new separated menu item "... from the Library".
- FIX:VCAEngine:
- Icons of the projects and the widget libraries switched to download the common project icon at missing local.
- The widget libraries adapted to interhost copying.
- FIX: The Document primitive generation appended by limiting the repeating blocks size in limUserFile_SZ (10MB).
- FIX: Fixed in the correct treating of the project pages and the library widgets with initially wrong parent addresses, for don't remove child widgets and change them parent at pointing the correct parent address.
- FIX:WebVision:
- Appended by the export implementation for the "Document - HTML,CSV" and "Table CSV".
- Appended by the printing implementation for the "Document" and "Main Page".
- The type Table of the primitive FormEl added by tearing off the table header at big tables scrolling down.
- FIX: The type Table of the primitive FormEl improved and fixed for:
- setting the CSS property "white-space" to "pre-wrap";
- setting the color changes under the selected cells;
- preventing the focus loss just after entry to the cell editing;
- fixing the boolean value setting at entry to the cell editing;
- the table refitting at growing the column string length.
- The included pages closing set after several (4) row appears — to prevent of closing all pages at fast navigation;
- Improved in processing the connections of the ordinal users to own VCA-sessions.
- WebUser: Expanded by a possibility of schedule the user procedures call in the service cycle, for the background processing of some data.
7.2.1 Service updates
7.3 [22.12.7529/22.02.2022] ПЯТОЕ обновление
Это обновление релиза 0.9 LTS исправляет около 50 ошибок и добавляет МНОЖЕСТВО улучшений с несколькими значительными-концептуальными, с которыми целиком можно ознакомиться в протоколе изменений обновления.
Significant actions of the developer of the OpenSCADA modules on the update
- FIX:SYS.TMess: Type of labStor(), labSecCRON(), labSecCRONsel(), labTaskPrior(), labMessCat() changed to "string".
- => obligatory revise of using the label functions since the compiler mayn't to say an error in functions like to printf(), TSYS::strMess() but that module will be crashed.
Automation Linux distributive of the project OpenSCADA
- appending Debian 11 as the distributive base;
- moving of building the Debian 10,9 base to the Debian 11 environment, then expanding the installer variants;
- updating TDE to 14.0.11 and next 14.0.12;
- fixing the plymouth problems, then the installations are safe now and "/var/boot.log" doesn't grow;
- fixing Digikam, TDEPim, KArm and kdiff3, than appending the new patched packages "tdepim-trinity", "digikam-trinity" and kdiff3-trinity to the distributive collection.
Main WWW-resources of the project — Site
- significant changes in the Site common interface:
- the Wiki-pages call in IFRAME appended for a waiting screen and an animated image of representing the loading wait; the opened pages vertical size was precisely fitted also at three attempts;
- the content window horizontal size limited in 1000 pixels;
- moving the vertical submenu of the main menu from the static left position to the call at an options button on the left of the main menu;
- moving to the top right for the service panel with buttons of the language select, call the print variant and the Google-search field;
- dividing twice the top logo image;
- the Google-search field: width expanding, moving up and hide under a search icon.
- changing the registration conditions and rules on the OpenSCADA site;
- the registration module finished in the translation to Ukrainian and enabled for acknowledge the new users registration by the site administrator.
New and significantly updated parts
- OpenSCADA Core: 3:11:0 => 3:12:0
- (Common Conception of the Data Storage, Messages Translation, Message Sublevels {Main}[0...9] and Unification for the User Messages Transferring)
- OpenSCADA "BD", "DAQ" subsystems: 14 => 15, 13 => 14
- (Significant Unification the Common SQL-code in the OpenSCADA Core)
- (redundancy and the messages transferring, asynchronous writing mode implementation)
- DAQ.JavaLikeCalc: 5.1 => 5.4
- DAQ.Siemens: 4.2 => 4.4
- {DAQ,Protocol}.ModBus: 3.3 => 3.4, 2.8 => 2.9
- {DAQ,Protocol}.OPC_UA: 2.5 => 2.6, 2.1 => 2.2
- Archive.FSArch: 3.6 => 3.7
- Archive.DBArch: 3.0 => 3.1
- Transport.SSL: 3.3 => 3.4
- (pointing the certificates and the key directly from an external file with the input transports restarting at it change)
- Protocol.HTTP: 3.6 => 3.8
- Protocol.UserProtocol: 1.4 => 1.5
- BD.DBGate: 1.0 => 1.1
- BD.SQLite: 3.0 => 4.0
- BD.MySQL: 3.5 => 4.0
- BD.PostgreSQL: 2.5 => 3.0
- BD.FireBird: 2.5 => 3.0
- UI.QTStarter: 5.10 => 5.12
- UI.QTCfg: 5.6 => 5.9
- UI.WebCfg: 1.8 => 2.0
- UI.WebCfgD: 2.1 => 2.3
- UI.VCAEngine: 7.1 => 7.8
- (finishing of implementing the changes obtaining in the runtime mode by the clocking cycles through)
- (early opening the restored and specified pages in the init procedure)
- UI.WebUser: 1.4 => 1.5
- UI.WebVision: 6.2 => 6.6
- LibsDB.OscadaLibs.base.anUnif: 2.1 => 2.4
- LibsDB.OscadaLibs.base.anUnifSt: 1.2 => 1.3
- LibsDB.OscadaLibs.base.digAlarm: 1.2 => 1.3
- LibsDB.OscadaLibs.base.codeState: 1.3 => 1.4
- LibsDB.OscadaLibs.servProc.docOffLine: 1.2 => 1.3
- LibsDB.OscadaLibs.Controller.test: 1.1 => 1.2
- LibsDB.vcaBase.Main
- alarmsAct: 1.1 => 1.3
- alarmsSt: 1.2 => 1.4
- RootPgSo: 2.4 => 2.5
- ElCadr: 1.1 => 1.2
- TextLab,ImgLab: 1.0 => 1.1
- graphSelPrm: 1.4 => 1.5
- objProps: 1.1 => 1.2
- cntrRegul: 1.1 => 1.2
- storeHouse: 1.0 => 1.1
- LibsDB.vcaBase.mnEls.El_Kran_Sh,Compressor: 1.0 => 1.1
- LibsDB.vcaBase.doc
- docAlarmsRep: 1.5 => 1.6
- docUsersSet: 1.5 => 1.7
CONCEPTUAL > Common Conception of the Data Storage
- the Conception is commonly unified in the direct storage specification and definition the Generic Storage "*.*" as a combination of the Configuration File and the work Data Base, when the Configuration File is the priority one for accessing the allowed data and the work Data Base for new data.
- TBDS::{dataSeek,dataGet,dataSet,dataDel,genDBGet,genDBSet}() moved to the bit flags TBDS::ReqGenFlg;
- the TBDS::dbList() moved to the bit flags TBDS::DBLsFlg;
- TCntrNode appended of the functions storage() and setStorage() for tracking the availability of node data in different storages and offer a queue of the storages for the mechanism of sequentially removing duplicates, and they also used in the object functions DB(), fullDB(), setDB();
- the objects are adapted for tracking the multiple storages and are appended of the sequentially removing duplicates: Security.{User,Group}, Transport.{Input,Output}, DAQ.{Controller,TemplateLib}, Archives.{VArchive,VArchiver,MArchiver}, DAQ.JavaLikeCalc.Lib, Protocol.{ModBus,OPC_UA,UserProtocol}.*, UI.WebUser.Page, UI.{VCAEngine,Vision}.{WdgLib,Proj};
- the generic parameters accessing functions TBDS::genDBGet() and TBDS::genPrmSet() moved under the new storage conception using TBDS::dataGet() and TBDS::dataSet() respectively, and renamed to genPrmGet() and genPrmSet() everywhere;
- the objects moved to use the new function dataDelTbl(): DAQ.{TController,TPrmTmplLib,JavaLikeCalc,LogicLev,BlockCalc,ModBus,Siemens,OPC_UA}, Archive.DBArch, UI.{VCAEngine,Vision}.{WdgLib,Proj};
- the functions moved and used everywhere as static ones: TBDS::{dbList,dataSeek,dataGet,dataSet,dataDel,dataDelTbl}();
- the spare storage addresses with tables were shortened to the standard storage address with the table name unification, where the previous not standard names leave to be edited up to the 1.0 release, for the objects: SYS, DAQ.{TemplateLib,JavaLikeCalc.Lib}, UI.{VCAEngine,Vision}.{WdgLib,Proj};
- switched to select only DBs: Archive.DBArch, Protocol.HTTP;
- the root object of the DB subsystem TTypeBD appended of the DB priority base [0...9] in the generic storages list and the Data Base object TBD appended of the configuration field "Priority in list" to control order of the databases from TBDS::dbList(), than control the loading order;
- the "Work DB" configuration field changing disabled on the modification marking of all nodes;
CONFIGURATION FILE
- the configuration parameters and tables implementing in the common context of the TBDS::data{Seek,Get,Set}() functions;
REFACTORING THE TCntrNode FLAGS
- TCntrNode::{chldDel,nodeDis}() moved to direct use the new TCntrNode::EnDisFlag;
- the flags TCntrNode::{NodeRemove,NodeRemoveOnlyStor} used everywhere of the function postDisable() checking and chldDel() call.
CONCEPTUAL > Significant Unification the Common SQL-code in the OpenSCADA Core
- unification the table structure control by the structure item object TTable::TStrIt;
- refactored, initially on SQLite, in the request lists form in the separate list variables;
- common SQL-code moving to the functions: fieldSQLSeek(), fieldSQLGet(), fieldSQLSet(), fieldSQLDel();
- declaration in the core for the service definitions, methods and functions to the common SQL-code: SEEK_PRELOAD_LIM, tblStrct, seekSess, connRes, fieldFix(), getSQLVal(), setSQLVal();
- the fieldFix() appended an argument "langLs" of specifiyng need languages instead the argument "trPresent";
- propagating in such way of the last MULTILANGUAGE support code in DB.SQLite.
CONCEPTUAL > Messages Translation
TFunction::IO object appended the flag IO::TransltText of marking the translate String IO directly:
- the types "String (translate)" and "Text (translate)" appended in: template object of DAQ-Parameter, TFunction object of DAQ.JavaLikeCalc, UI-Attributes of UI.VCAEngine;
- the flag TFld::TransltText used in: value getting of TValue of DAQ-Atributes, DAQ-Attributes translation of DAQ.{LogicLev,ModBus,OPC_UA,Siemens}, UI-Attributes translation of UI.VCAEngine;
- set to the type "String (translate)" for: the field "colDscrCustNames" of wlb_Main.{alarmsAct,alarmsSt}.
Expanding by the language for the execution environment of the user functions of the OpenSCADA object, for functions like to strftime():
- the object TCntrNodeObj, the function TCntrNode::objFuncCall() and TConfig::objFunc() expanded in the argument "user" renaming to "user_lang" with pointing language in the second line;
- DAQ.JavaLikeCalc: the TCntrNodeObj execution appended of the language;
- SYS.strftime() appended of execution from the pointed language-locale.
TUIS,UI.{QTCfg,Vision}: docGet() expanded by the language in the second line.
FIX: The "Translations" tab expansion and fixing for:
- the option "check for mismatch (TrChkUnMatch)" renamed to "check/fix (TrChkAndFix)" and expanded of the translation fixing functions: by propagation the translations to empty sources, clearing the double to base translations, merging the base messages as the translations;
- information of the non matching was appended in the second message text;
- the translation management table appended of the user functions "Split item" and "Remove from Trs";
- the translation status appended of the short labels "SINGLELANGUAGE", "MULTILANGUAGE", "MULTILANGUAGE-DYNAMIC"; the message index; size of the cache and the translation context;
- the base language configuration field of the MULTILANGUAGE modes expanded by list the project locales separated by ";".
FIX: Expansion the Data Messages Translation in the tree modes: SINGLELANGUAGE, MULTILANGUAGE and MULTILANGUAGE-DYNAMIC:
- the user language obtaining unified in the function lang2Code(), expanded by the arguments "user" and "onlyUser";
- the lang2CodeBase() function separated to the common one langBase() and appended the function langToLocale() of obtaining the complete locale at language from langBase();
- the language field of the objects TSYS, TUser appended of the selection list from langBase();
- FIX: the TMess::mRes lock renamed to TMess::trMessIdxRes and limited in use only for TMess::trMessIdx;
- the translation cache significant extending and unification:
- in the new TMess object's functions translCacheGet(), translCacheSet(), translCacheLimits() and the own lock trMessCacheRes;
- extended by the message category for caching the system translations and users;
- the cache limiting also appended by the time limit variable "limCacheIts_TM" for what it checked in the service task.
- appended for the translation context at the new function TMess::trCtx() and the object TrCtxAlloc for handling the context registration as user and language bound to the call thread:
- TCntrNode::cntrCmd(), Protocol.HTTP, UI.{Vision,WebVision,WebUser,WebCfg,WebCfgD} attached to use the translation context.
- synchronized in the system prestored and the dynamic-data setting messages;
- the DB type-module objects were appended by the specific information field "Features" of specifying the supported by DB features;
- FIX: complete disabling the translation and registering in the message index at the loading for generic TConfig nodes with the JavaLikeCalc procedure text and a deprecated flag of enabling that procedure whole translation;
- UI.QTCfg: the tree update enabled for the root page updation through the reconnection and the tree update at the user change; enabled for using the system language in the SINGLETRANSLATION mode for remote connections;
- FIX:UI.VCAEngine: the project styles moved under a new storing table "{DB_TBL}_stls" and its structure with translation;
- UI.{WebCfg,WebCfgD}: Generically adapted to the dynamic translation in the MULTILANGUAGE-DYNAMIC mode, using the HTTP-variable "lang", the user language and browser language;
- the How to "Create multi language project" document was created.
- PRIMARY PROJECT OBJECTS
- implemented for the base message and its translations mark as fuzzy - "<!>" in the text end at changing, and warning the translation removing;
- accessing the dynamic translation moved under the new functions trD()->TMess::translGet() and trDSet()->TMess::translSet(): TArchives,TDAQ,TTypeDAQ,TController,TParamContr,TFunction,TPrmTmpl,TTransports,DAQ.{BlockCalc,JavaLikeCalc};
- appended in the dynamic translation for:
- DAQ-attributes name-description postranslation after the system translation and translation in the context help;
- DAQ-attributes translation in the UserAPI functions: get(), set(), descr();
- DAQ.JavaLikeCalc: names setting part of the execution form moved to itself;
- Protocol;{ModBus,OPC_UA,UserProtocol},UI.{VCAEngine,WebUser}.
- adapted commonly to the new changing conception in the MULTILANGUAGE-DYNAMIC mode through "{base}\000{lang}\000{mess}";
- appended and used for a new function translIdxCacheUpd() of updating the operative translation messages' index and cache in the MULTILANGUAGE-DYNAMIC mode for the SET command;
- appended of the translation copy in the SQL INSERT command and for the MULTILANGUAGE-DYNAMIC mode;
- the configuration file appended of the MULTILANGUAGE-DYNAMIC mode support.
- INDIVIDUAL MESSAGES - "Trs"
- UI.VCAEngine: appended of changing the storage just after the widget procedure compile for placing of the dynamic messages translation to the project storage;
- the transitive dynamic translation prevented in appending the table "Trs" for messages available in other sources, so checking the message index before;
- appended for filtering the messages for they translatability before registering.
- LibsDB.vcaBase:
- wlb_Main.ElViewGraph: enabled for the transitive translation in the tooltip and for the parameter description;
- wlb_Main.objProps: enabled for the transitive dynamic translation;
- wlb_Main.storeHouse: significantly expanded for the specific fields, ordering the columns, appending of the highlighting rules for column values with filter index or list, fixed in whole work.
- SYSTEM MESSAGES
- implemented for a function of prestoring system messages translation trS(), where the base message just return with the catalogue information, that is "{base}\000{cat}" and what is translated really in the call _() — in the background there is used Mess->I18N(), but for the specific language code mess_PreSave="<PSV>";
- the system translation function TMess::I18N() was attached to the messages cache;
- the TFld and IO objects expanded in work with the prestoring system messages;
- module info fields adapted to the MULTILANGUAGE-DYNAMIC mode;
- adaption to the postranslation for the User API function TConfig::cfg() in the translatable strings;
- UI.{QTCfg,Vision}: adapted to the control items obtain in language of the user and update the main window interface language at it change;
- UI.Vision: appended in updation the toolbars at the user change, what also adapted for the dynamic translation; all development dialogs adapted for the dynamic translation.
- UI.{QTStarter,QTCfg,Vision}: appended for the system Qt-messages translation relating to the selected user language, through the common application property "lang" for the Qt-translation reimplemented function QTranslator::translate(), and then the language commonly switched by the last interface and for all opened; the Starter Menu set for dynamic translation and updating.
CONCEPTUAL > Message Sublevels {Main}[0...9] and Unification for the User Messages Transferring
- generic adaption to sublevels {Main}[0...9] of the main message levels [0...7];
- DAQ,DAQ.DAQGate: the function TController::messSet() appended of the messages transferring from the top to the down, so sinking down, making the function virtual one and redefine that in DAQGate, and defining also the new OpenSCADA control service request of the TController object "set:/serv/mess";
- DAQ: specified for the DAQ-transparency messages in the category form "{TP}{ModId}:{CntrId}[.{prm}][:{spec}]", appended of such messages creation function TController::messSet() and the User API functions SYS.DAQ["Modul"]["Controller"].messSet(), SYS.DAQ["Modul"]["Controller"]["Parameter"].messSet();
- LibsDB.vcaBase:
- wlb_Main.{ElCadr,TextLab,ImgLab,cntrRegul},mnEls.{El_Kran_Sh,Compressor}: adapted for the user action messages forming by the new DAQ-function messSet() with the unified category structure for transferring between OpenSCADA stations of different levels;
- wlb_Main.{alarmsAct,alarmsSt}: adapted to process of sublevels of the main levels with coloring all the levels; expanded by the new user field "Type" as name of the alarm level from the new configuration attribute "types";
- wlb_doc.{docUsersSet,docAlarmsRep}: appended in the DAQGate source complete scanning for whole transferring hierarchy;
- wlb_Main.alarmsSt,wlb_doc.{docMessRep,docAlarmsRep}: adapted to the transferred messages by DAQGate;
- wlb_Main.{alarmsSt,alarmsAct},wlb_doc.docMessRep: improved in the DAQGate source complete scanning for whole transferring hierarchy, also for user actions (OP);
- wlb_Main.TextLab: optionally enabled for the transitive translation in the status text which often comes from some DAQ-source.
OpenSCADA libraries and projects
- FIX:LibsDB.{OscadaLibs,vcaBase,vcaTest},{AGLKS,Boiler}.*: Appended, cleaned and fixed for the multilanguage messages by applying the new translation fixing mechanisms.
- LibsDB.vcaBase,AGLKS.vca,Boiler.St: All project styles moved under a new storing table and its structure with translation.
- FIX:LibsDB.vcaBase:
- FIX:wlb_Main.{alarmsAct,alarmsSt}: The default sorting at the field of the alarm time set back to "1" as not default descending order. wlb_Main.alarmsAct: Appended for the field "messCat" of specifying the alarm categories.
- wlb_Main.{ElViewGraph,graphSelPrm}: Adapted to reset the trend item color to the default styled at setting that to empty; appended of the empty color processing as the default one also taken from the style.
- FIX:wlb_Main.RootPgSo: Appended of complete updating at the user change, but language also can be changed, and the language.
- LibsDB.OscadaLibs: The "DB" field content and the table base ID of UserFuncLibs.{techApp,servProc,Controller} renamed to the standard one "flb_techApp", "flb_servProc", "flb_Controller" respectively.
- tmplib_base.{anUnif,anUnifSt,digAlarm,codeState}: Adapted to the syntax highlight builtin of the input preprocessing procedure.
- tmplib_base.digAlarm: Expanded in the common attribute DESCR using for the specific parameters redefinition by the new fields "CustomFlds".
- tmplib_base.anUnif: Expanded in the common attribute DESCR using for the specific parameters redefinition by the new fields "CustomFlds" and "CustomAlarms". Appended of the user procedure option "toSave" of force saving the object at the exit.
- flb_servProc.docOffLine: Expanded for the index page accessing from any other pages.
API
!!!!:Changes:
- SYS: TCntrNode::{chldDel,nodeDis}() moved to direct use the new TCntrNode::EnDisFlag: NodeNoFlg, NodeRemove, NodeRemoveOnlyStor; and the space after > 0x100(TCntrNode::NodeSpecific) was reserved for the node specific, where the TParamContr::EnDisFlag set only to NodeRemove_NoArch and Widget::EnDisFlag set only to Widget::{NodeRemove_NoDelMark,NoContainer}. TCntrNode::Flag items renamed SelfModify->Modified, SelfModifyS->ModifiedS, SelfSaveForceOnChild->SaveForceOnChild.
- Storage object's functions DB(), fullDB() and setDB() expanded of the argument "qTop".
- The subsystem name moved to the function subName() call and which set "virtual" and "constant", also as subVer() and subId().
- The description field type of the TFld object and the name field of the IO object changed to "string".
- Result of TCntrNode::nodeNameSYSM() changed to "string".
- TMess: The lang2CodeBase() function separated to the common one langBase() and appended the function langToLocale() of obtaining the complete locale at language from langBase().
- The function lang2Code() expanded by the arguments "user" and "onlyUser".
- I18N() changed in the arguments for "const string &mess" the first and mLang moved to the second, it result changed to "string", also for TModule::I18N(), and updated all definitions _().
- The data translation functions (short definitions) renamed to trD_L(), trD_U(), trD_LU(), trDSet_L(), trDSet_U(), trDSet_LU().
- Removed for I18Ns().
- labStorGen() merged to labStor() and that labels labStor(), labSecCRON(), labSecCRONsel(), labTaskPrior(), labMessCat() type changed to "string"; appended of the label labStorGen().
- lang2Code() and lang2CodeBase() renamed to langCode() and langCodeBase() respectively for starting the adaption to the language code more than 2 symbols.
- Security: The static method "pHashMagic" moved to the definition SEC_HASH_MAGIC.
- DB: The functions TBDS::{open,close}() renamed to TBDS::{tblOpen,tblClose}() and set to static ones.
- TBDS::{dataSeek,dataGet,dataSet,dataDel,genDBGet,genDBSet}() moved to the bit flags TBDS::ReqGenFlg (renamed from TBDS::ReqGen): NoFlg, NoException, OnlyCfg, UseTranslation (renamed from ReqGen::UseTranslation), UseCache, UseAllKeys.
- TBDS::dbList() moved to the bit flags TBDS::DBLsFlg: LsNoFlg, LsCheckSel, LsInclGenFirst.
- The functions moved as static ones: TBDS::{dbList,dataSeek,dataGet,dataSet,dataDel,dataDelTbl}(), TBDS::{fullDBSYS,fullDB}().
- The generic parameters accessing functions TBDS::genDBGet() and TBDS::genPrmSet() renamed to genPrmGet() and genPrmSet() everywhere.
- DAQ: TTypeDAQ::compileFuncSynthHighl() renamed to TTypeDAQ::compileFuncSnthHgl() in a way of the name unification.
- Archives-History: Definitions of the archive specific names renamed for BUF_ARCH_NM, ALRM_ARCH_NM, ALRM_ARCH_CH_NM to ARCH_BUF, ARCH_ALRM, ARCH_ALRM_CH; and appended for ARCH_NOALRM ("<noalarms>").
Appends:
- SYS: The global short functions appended of s2l() and s2u().
- Appended of a new function strParseEnd() of parsing the separated string from the end.
- The function pathLev() appended of a new argument of position the offset to the next token begin and what also appended in the UserAPI function parsePath() of DAQ.JavaLikeCalc.
- TCntrNode appended of the functions storage() and setStorage() for tracking the availability of node data. TCntrNode::Flag appended of the item LoadForcibly. TCntrNode::modif() and TCntrNode::modifG() appended of a new argument "forceLoad".
- The time limit variable "limCacheIts_TM" appended for the cache limiting.
- The common encoding function strEncode() and the User API one appended the variant "ShieldBin" of shield the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F].
- TMess: Appended for a function of checking the messages for them translatability — isMessTranslable().
- Appended for functions of managing the translation cache: translCacheGet(), translCacheSet(), translCacheLimits() and the own lock trMessCacheRes. Appended for a function translIdxCacheUpd() of updating the operative translation messages' index and cache, and functions translItSplit(), translItRemTrs() of the items splitting and removing from Trs.
- Appended for the translation context at the new function trCtx() and the object TrCtxAlloc for handling.
- Appended for the data translation trD()->translGet() and trDSet()->translSet().
- Appended for the prestoring system messages translation trS(), as an other link to I18N().
- Appended for the function messLevelTest().
- The TMess::Type structure appended of an item "MaxLev" of the maximum message types/levels specifying.
- The TMess definitions appended of mess_PreSave="<PSV>" and mess_TrModifMark="<!>".
- XMLNode: Appended of the new saving option BinShield(0x400) for controllable shield the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F].
- TConfig,TCfg: Expanded for new parameters TConfig::{trcSet,setTrcSet}(), TCfg::{isSet,setIsSet}() of detection the configuration field changing and using in the partial DB-loading instead toDefault(); and TConfig::{noTransl,setNoTransl}() for global setting the structure default translation. TCfg::setExtVal() function appended an argument "toOne".
- TError: codes appended of: DB_TrRemoved (22) for mark the translation removing in DB, DB_ReadOnly (23) introduced by SQLite at the unification process, Core_NoNode (5) of the TCntrNode missing, Tr_ErrTransport (12) for the transport errors mark, Tr_ErrResponse (13) and Tr_ErrDevice (14) for more specific transport errors.
- DB: The TBDS::realDBName() appended of the back conversion argument.
- The static methods of TBDS appended of the new function dbPart() of getting the storage address parts and appended of a new function dataDelTbl() of the common tables removing, also in the Configuration File.
- Appended for the structure item object TTable::TStrIt.
- Common SQL-code moving to the new functions: TTable::fieldSQLSeek(), TTable::fieldSQLGet(), TTable::fieldSQLSet(), TTable::fieldSQLDel(); with the flags TTable::SQLReqFlag: SQLNoFlg, SQLOrderForSeek, SQLFirstSkipForSeek.
- Declaration in the core for the service definitions, methods and functions to the common SQL-code: SEEK_PRELOAD_LIM, tblStrct, seekSess, connRes, fieldFix(), getSQLVal(), setSQLVal().
- Appended of the list priority specifying functions TBD::lsPr(), TBD::setLsPr() and virtual one TTypeBD::lsPr().
- Appended of the DB features specifying virtual function TTypeBD::features().
- DAQ: TFunction::IO object's structure IO::IOFlgs appended the flag IO::TransltText of marking the translate String IO directly.
- The function {TController,TParameter}::messSet() appended of the messages transferring from the top to the down, and also the User API functions SYS.DAQ["Modul"]["Controller"].messSet(), SYS.DAQ["Modul"]["Controller"]["Parameter"].messSet().
- The TCntrNodeObj appended of the function lang() obtained from the second line of the common method mUserLang.
- The User API functions appended of the function funcSnthHgl() in the DAQ module object and for obtaining the syntax highlight rules of the module and language.
- Archives-History: Appended of the function "void TArchives::messPut( const TMess::SRec &rec, const string &arch = "" )" variant.
- Transports: Appended of the new function extHostSeek().
- UI: Appended of the Configuration File option "FontSnthHglCode" and the corresponded functions TUIS::fontSnthHglCode() and TUIS::setFontSnthHglCode().
- VCAEngine:
- The User API functions mime() and mimeSet() appended of the correct equivalents resource() and resourceSet().
- The Project object appended a Control Interface service request "read:/serv/access", of checking the read access.
- The Control Interface service request "get:/prm/cfg/prj" appended an option "noName" for preventing the project name request.
SYS
- FIX:Building: configure.ac: Core library version risen to 3:12:0 and the program version risen to 0.9.5.
- The module version of the subsystem "BD" risen to 15, the subsystem "DAQ" risen to 14.
- The Debian 11 root file systems (chroots) are appended for build OpenSCADA; appended for build to Ubuntu 22.04 LTS and Debian 11 ARM64; and Maemo 5 (Nokia N900) removed since the compiler crashes now constantly in several places.
- data/*.xml: The TBDS Generic parameter "SYSStPref" removed.
- SYS,data/ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}: The configuration parameter "Lang2CodeBase" renamed to "LangBase" with support "Lang2CodeBase" up to the 1.0 release.
- The source code messages and program documentation:
- .,DAQ.DAQGate: The messages redundancy and messages transferring in DAQ.DAQGate limited for depth of the requesting messages up to the restoring time or one hour.
- The archivers redundancy and DAQ.DAQGate switched in the initial messages requesting to:
- request the active alarms;
- request the archive in deep and up to the alarms requesting time, without the alarms activation;
- ordinal-periodic request of the last messages, without the alarms activation.
- Protocol.HTTP,UI.{WebCfg,WebCfgD,WebUser,WebVision}: Appended of the previous user detection to mark that actions for HTTP-modules with moving the previous user authentication session closing after successful the new one.
- All the HTTP-modules adapted to the user field in the HTTP-functions with the previous user in the second line.
- FIX:WebVision: The previous user is used now for detection of the user change between the ordinal users and for single session, than prevent to create new sessions.
- Expanding the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F] shielding:
- XMLNode: Appended of the new saving option BinShield(0x400) for controllable shield the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F], what is significant for the WebBrowsers.
- UI.{WebCfgD,WebVision}: Appended of encoding the XML traffic for the binary symbols shielding using the new option "BinShield".
- FIX: strParse() rewrote and tested in processing the group symbols merging at the scan; and strParse(), strLine(), pathLev() in position the offset to the next token begin and limiting in the down for 0; and pathLevEnd() in positioning the offset to the next token end and limited in the up for the size. TModSchedul::chkAllowMod(),UI.QTCfg,Protocol.HTTP: switched in use TSYS::pathLevEnd() and TSYS::pathLev() in the new behaviour.
- Force loading appended of the errors suppression for not modified nodes before that operation.
- .,DB,DAQ: The global configuration context copying mechanism (interstation) appended for the marking link to the last setting operation object, to easy postmarks setting.
- DAQ: As a postmark to the saving DAQ-parameter object there appended the attribute "prmTp" with the parameter type, which is used next in true detection the parameter type changing at the following loading.
- .,UI.{QTCfg,WebCfgD}: The OpenSCADA Control Interface for Tables expanded by the user commands.
DB
- FIX: The TBD object appended an internal flag "mIsFirst" of control the object first enable and what used to prevent of the table "Trs" registering at each enable-connection-reconnection.
- FIX: The TBDS::dataDel() fixed-appended in removing multiple items and appended of removing the empty table nodes of the Configuration File.
DAQ
- FIX: The controller objects manual start defined for some specific hot doings of the object enabling, when the doing was prevented from call twice at the normal start:
- DAQGate: resync the remote source data at the sync period >= 0;
- ModBus: force reformation of the acquisition blocks;
- OPC_UA: force reformation of the monitored items list;
- Siemens: force reformation of the acquisition blocks.
- The "Return" type IO of the TFunction object was set to ReadOnly in the manual execution tab.
- FIX:DAQGate: Appended of the asynchronous writing mode implementation. The configuration field of the remote stations selection moved in simple combobox. The controller object status appended of the counters of read/archive's/wrote values, read messages and the writing buffer status.
- FIX: Fixed in reusing parameters with empty address for included ones and appended for clearing the address at the parameters copy.
- FIX: Unified in the sync commonly and fixed in the attributes sync, with preventing in constantly sync of the missed on remote host parameters.
- FIX:JavaLikeCalc: Prevented in some resources lock of the library function at its program change, when performed the program compile at disabled function.
- Siemens: Appended of the new option "Maximum size of the request block, bytes" of specifying the maximum requesting block.
Transports
- The UpRiseLev stations splited in the requesting transport per the first host of the "reforwardHost" address, than preventing the common connection hung at long connection to very far reforward missing station.
- SSL: Both input and output parts appended of the possibility to point the certificates and the key directly from an external file. Appended for reloading the certificates file of the input transport at it change by the transport reconnect.
Transport Protocols
- FIX:HTTP: Fixed in reading the "accept-language" HTTP variable only as the two symbol language code, then the common interface is translated also now on FireFox who sends there the country code also.
- FIX:SelfSystem: In the input part switched to load the whole input message before checking the auth information, then preventing for strange error messages "Error the command format." for the message tail.
User Interface
- VCAEngine,Vision,WebVision: The "openlist:/serv/pg" control request appended in the attribute "pgGrp" (group) of the opened page for detection several pages open in one container then open last one and close previous ones, to prevent mostly the included pages all close and allow of specifying-override the need pages open.
- Vision: Refactored also for early opening the restored and specified pages in the init procedure.
- QTStarter,WebVision,WebCfgD: Qt part, in the generic Qt Library, and Web appended for the table edition text apply at Enter and new line at Ctrl+Enter.
- FIX:QTCfg,Vision: Prevented from hangs at stopping from a termination signal, from the console mostly, since locking the main Qt thread in modStop() without qApp->processEvents().
- QTCfg: The text fields appended of checking and activation the builtin syntax highlight rules from the XML-tag "SnthHgl". The Tables appended of finding for pointed strings.
- VCAEngine:
- Finishing of implementing the changes obtaining in the runtime mode by the clocking cycles through, after observing the race condition on the attributes changing, which cause to do not update the value on visualizers:
- rewrote for the modification control mechanism;
- specifying the forming and fixed cycles;
- reducing the main calculation clock to uint16;
- dividing the changes clock value of attributes and the widget commonly to the forming (uint16) and the fixed (uint16) = uint32;
- processing the changes clock value both at the modification and reading-checking;
- support of reloading the main calculation clock and clearing the old changes clock value;
- preventing the empty cycles for the common widgets requesting;
- removed for code of the previous slide current mark mechanism of the attributes changing detection with the doubles.
- The Widget copy operation appended of copying the used widget resources (the Image type now only), and in that way there performed.
- FIX: The "<deleted>" mark setting for the removed inherited included widgets moved to the save function of the container widget, since that is lost at the copy operations and now you can easy undo/redo such widgets removing.
- FIX: Fixed in the mime data copy at the widget libraries and the projects copy, moving the copy to the copy save, with expanding the mime operations for work with completely specified DBs.
- FIX: Prevented in the attribute values inheriting for the output links, then do not write to DAQ the obviously wrong values at the hot edition of running projects and their items.
- FIX:Vision: Fixed, or finished the implementation, for UNDO/REDO the removing operation of the inherited included Widgets of the Project Pages.
- Adjusted in the focus policy to the UI.WebVision way and appended the focus force clearing at lost, to prevent the widget focus return at window activation, so you can use now the event "ws_FocusIn" in opening external subwindows.
- The child widgets selection conception at the visual editing of the development mode was unified and fixed in a new part "Visual editing" of the UI.Vision module documentation.
- Requesting of the widget attributes' values of the developed widget moved to a single big request, than the remote development is become much faster.
- FIX:WebVision: The session methods mUser and mUserOrig moved under the data mutex lock, due to there can be crashes at active user manipulations.
- FIX: The view "Combo" of the type "Line" and the types "List" and "Combo" appended of creation value items missed in the selection list.
- FIX: The popup windows of the calendar and editable combo appended of the geometry check than preventing the main window overflow; and the popup windows closing moved completely at a mouse button press outward the window, together other popup menus.
- FIX: Improved and fixed in usability the view Table of the primitive FormEl and mostly in the text edition: true width fitting and minimum height setting to 40 pixels, FIX: fixed in specifying the column sorting value "0" as ascending-default and "1" as descending from the top, like to the UI.Vision behaviour and the numbers (integer,float) sort-comparing was implemented separately.
- Appended for the FrontEnd status display in the session status field with that requesting-scheduling at display the field.
7.3.1 Service updates
7.4 [14.04.7529/14.06.2021] ЧЕТВЁРТОЕ обновление
Это обновление релиза 0.9 LTS исправляет около 45 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
Важные действия пользователя по обновлению
- FIX:SYS: Общее конфигурационное поле "WorkDir" предотвращено от маркирования как модифицированное при переключении проекта, чем и от сохранения в конфигурационном файле, но отсутствует механизм автоматического удаления этого поля из конфигурационного файла старых проектов.
- => удалите вручную общее конфигурационное поле "WorkDir" если оно появилось там ошибочно и вы имеете проблемы использования каталогов чужих проектов этим проектом.
Новые и значительно обновленные части
- Ядро OpenSCADA: 3:9:0 => 3:10:0
- (ревизия механизма переводов)
- Подсистема "Транспорты" OpenSCADA: 17 => 18
- {DAQ,Protocol}.OPC_UA,libOPC_UA: 1.7 => 2.1, 1.10 => 2.1, 1.2 => 2.1
- (дополнено реализацией сервиса Publish, поддержкой кусков (CHUNKS) на клиентской части Сбора Данных и общим пересмотром кода в этом процессе)
- DAQ.ModBus: 2.12 => 3.1
- DAQ.DAQGate: 2.2 => 2.3
- DAQ.Siemens: 3.5 => 3.6
- Transport.Sockets: 4.2 => 4.3
- Transport.Serial: 2.5 => 2.6
- Transport.SSL: 3.2 => 3.3
- UI.WebCfgD: 1.5 => 2.0
- UI.VCAEngine: 6.9 => 7.1
- UI.QTStarter: 5.8 => 5.9
- UI.QTCfg: 5.1 => 5.4
- (общий пересмотр и переделка таблиц)
- (общий пересмотр и переделка таблиц в Qt в целом и вида Таблица примитива FormEl СВУ)
- (общий пересмотр и переделка таблиц вида Таблица примитива FormEl СВУ)
- LibsDB.OscadaLibs.DevLib.IEC62056: 1.0 => 1.1
- LibsDB.vcaBase.Main: 2.0 => 2.1
- storeHouse: 1.0
- RootPgSo: 2.3 => 2.4
OpenSCADA библиотеки и проекты
- LibsDB.vcaBase,AGLKS.vca: Main.RootPgSo: Дополнено на предмет:
- виджета "alarms" на основе примитива "Протокол" с возможностью включить/выключить;
- добавления опциональной функции возврата к типовому пользователю после определённого времени неактивности в атрибуте "defUser";
- переключено на неотносительный алгоритм вычисления вертикальной позиции и высоты главной мнемосхемы.
- LibsDB.OscadaLibs: DevLib.IEC62056: Переписано в синхронный режим (запрос-ответ) для работы нескольких устройств на одной последовательной шине.
- LibsDB.vcaBase:
- Библиотека "Основная" дополнена новой страницей реализации "Склада (storeHouse)".
- Main.RootPgSo: Периодичность исполнения кадра поднята до 1000 миллисекунд после добавления ранней обработки событий. Значительным образом переключено с клавиатурных последовательностей "Ctrl+?" на "CtrlAlt+?".
- AGLKS.vca: Страница проекта /prj_AGLKS/pg_so/pg_4/pg_mn/pg_1 переименована в /prj_AGLKS/pg_so/pg_4/pg_mn/pg_CM101, как с другими.
API
!!!!:Изменения:
- SYS: Функцию TSYS::curTime() дополнено аргументом определения источника часов с использованием функции clock_gettime(). Определение EVAL_RFlt дополнено суффиксом "f".
- Mess: Функция перевода TMess::translSet() дополнена аргументом "srcFltr" фильтрации по источникам.
- Транспорты: Функция протокола ВВ pushLogMess() дополнена аргументами "data" и "dataDir".
Дополнения:
- Mess: Блокирование данных отделено от блокирования всех сообщений в dtRes.
- SYS: Функции API пользователя дополнены функцией lang() быстрого получения системного языка.
- Дополнено функцией TSYS::curTimeN().
- .,DAQ.{LogicLev,ModBus,Siemens}: Дополнено и использовано глобальную постоянную DAQ_APER_FRQ представления частоты апериодических вызовов, вроде f_start, периодических процессов.
- Безопасность: Объект пользователя дополнен функцией Пользовательского API auth() для аутентификации по паролю.
- Транспорты: Входные и выходные объекты транспортов дополнены атрибутами протокола ВВ: "mLogLstDt", "mLogLstDtTm".
- DAQ: Объект DAQ-параметра дополнен информационным полем метки времени изменения с его максимальным значением на объекте контроллера, с помощью нового конфигурационного поля БД "TIMESTAMP" объекта параметра.
Система
- FIX:Сборка:configure.ac: Версия библиотеки ядра увеличена до 3:10:0 и версия программы увеличена до 0.9.4.
- Сообщения исходного кода и документация программы:
- rom_as@oscada.org заменено на roman@oscada.org везде в исходниках.
- Документ "Modules/OPC_UA" целиком отревизирован для версии модулей 2.1 и перевода.
- Вкладка "Переводы" несколько отревизирована, дополнена актуальным статусом, дополнена контекстной помощью и менеджер переводов дополнен на предмет:
- ограничения времени формирования таблицы в prmInterf_TM (7 секунд);
- конфигурационного поля пропуска количества верхних сообщений;
- установки перевода только для фильтрованных источников;
- проверки содержимого на совпадение только для фильтрованных источников;
- пропуск ошибок отсутствия источников.
- Функция перевода TMess::translSet() предотвращена от распространения групповых сообщений, изменённых не из менеджера перевода.
- FIX:.,BD.LDAP,Archive.{DBArch,FSArch},DAQ.{ModBus,MMS},{DAQ,Protocol}.OPC_UA,UI.Vision: Несколько очищено от предупреждений сборки.
- FIX: Определение EVAL_RFlt дополнено суффиксом "f" для предотвращения ошибочного сравнения double EVAL_RFlt с сохранённым float значением, исправляет работу архиватора Archive.FSArch с типами значений float при выявлении EVAL.
- FIX:Mess: Блокирование данных отделено от блокирования всех сообщений в dtRes для предотвращения конкурентным блокировкам при активной работе с переводами. Атрибуты mLang2CodeBase, mLang2Code переключены на это новое блокирование.
- data/openscada-proj.in: Переключено на ссылку содержимого Пользовательской LibsDB на системные библиотеки, с содержимым только на чтение, вместо копирования.
Сбор Данных
- ModBus,Siemens: Переключено, в формирование значения "f_frq", на использование информации реального исполнения задачи.
- {DAQ,Protocol}.OPC_UA.{.,libOPC_UA} : Дополнено реализацией сервиса Publish, поддержкой кусков (CHUNKS) на клиентской части Сбора Данных и общим пересмотром кода в процессе этого:
- КЛИЕНТ:
- добавление атрибутов (элементов мониторинга) перенесено из attrPrc() непосредственно в enable() и которая запускается при запуске объекта контроллера
- ... и обработка элементов улучшена обновлением описания, флагов и связывания;
- сбор данных унифицирован обработкой в функции параметра upVal()
- ... и запроса значений функцией объекта контроллера getValMIt() с поддержкой Массивов
- ... чем вплотную подготовлено для встраивание логического типа параметров;
- объекты параметров Сбора Данных автивированы для включения других параметров;
- установка и удаление EVAL ко всем атрибутам проверено во всех режимах;
- структурные переменные, в просмотрщике выбора DAQ-параметра, разрешены для выбора их элементов отдельно;
- разбор перечня переменных DAQ-параметров установлен в полный разбор с пропуском пустых строк;
- объект DAQ-контроллера дополнен закрытием сеанса и безопасного канала при его останове;
- общий статус объекта контроллера дополнен детализированной информацией на предмет использованного канала безопасности, сеанса, подписки и обрабатываемыми элементами мониторинга;
- блокирование запроса переименовано в resOPC.
- СЕРВЕР:
- объект OPC-UA Сервера дополнен вкладкой общего статуса сервера с информацией на предмет активности каналов безопасности;
- объект Узла EndPoint дополнен общим статусом с информацией на предмет активности сеансов и подписок, а также периодичностью и временем исполнения задачи подписок.
- БИБЛИОТЕКА:
- унифицировано и определено типовое значение времени жизни канала безопасности, которое установлено в 300000 мс;
- типовой LifeTimeCounter подписок установлен в 2400;
- объект NodeId дополнен функцией прямого сравнения operator==();
- функция XML_N::childClear() дополнена результатом возврата того самого объекта XML_N для объединения;
- функция curTime() дополнена аргументом определения источника часов с использованием функции clock_gettime();
- короткие функции дополнены str2int() и str2uint();
- некоторые поля переименованы: publInterv в publInterval, cntrLifeTime в lifetimeCnt, cntrKeepAlive в maxKeepAliveCnt, maxNotPerPubl в maxNtfPerPubl, en в publEn;
- исправление слова "POOL" на "POLL".
- БИБЛИОТЕКА_КЛИЕНТ:
- Client::reqService() дополнен мета-командой "CloseALL" закрытия текущего сеанса и каналу безопасности;
- функция обработки клиентских сервисов protIO() адаптирована к работе в асинхронном режиме (не запрос);
- функция Client::messIO() расширена аргументом таймаута с определением также режима запроса;
- запись в канал и чтение из него отделено в обработке MSG пакетов;
- адаптация сообщений безопасности к работе со смешанным входным буфером;
- перенос основного сервисного запроса "OPN" под обработку сообщений из-за отправки обновлений в середине Publish активности.
- реализован сервис Publish на стороне клиента:
- объект "Client" дополнен реализацией подобъекта "Subscr" (но сохраняется в Client::SClntSess) с функциями: activate(), monitoredItemAdd() и monitoredItemDel();
- объект "Client" дополнен функцией poll() с:
- унификацией чтения значений в обоих режимах Read и Publish;
- проверкой потери всех Publish запросов в течении OpcUa_ClntPublishResentCntr(2) попыток-времени сохранения живым;
- восстановления пула Publish.
- объект Client::Subscr::MonitItem добавлен как представитель элементов мониторинга с доступом из под общего блокирования клиентских ресурсов;
- сервисные запросы дополнены реализацией, включая обработку ответов: CreateSubscription, DeleteSubscriptions, CreateMonitoredItems, Publish, Poll;
- реализовано и проверено в поддержке безопасных политик по Publish;
- целевой пул Publish запросов на подписку установлено в виртуальной функции publishReqsPool() с типовым значением 2.
- дополнено реализацией кусков (CHUNKS) как в запросах, так и ответах;
- целиком отревизировано и очищено общую функцию запроса reqService() от дубликатов аргументов и параметров:
- дополнено восстановлением сеансов при переподключении канала безопасности;
- унифицировано очистку текущего сеанса и канала безопасности.
- объект клиента дополнен общим блокированием ресурсов mtxData;
- свойство сообщения "timeoutHint" установлено в 0 для всех сообщений;
- запрос Read возвращён к "плоскому" запросу с ограничением только в CHUNKS;
- ошибка OpcUa_BadSecureChannelIdInvalid добавлена к очистке канала безопасности;
- Client::SClntSess::{sessOpen,lstMessReq} переименован в {secChnlOpenTm,secLstMessReqTm}
- ... и предотвращён от очистки и восстановления сеанса и канала безопасности;
- дополнено отладочными сообщениями ошибок запросов.
- БИБЛИОТЕКА_СЕРВЕР:
- серверная часть адаптирована к работе с UAExpert 1.5 на предмет: установки атрибута AId_Descr DAQ-значения в тип OpcUa_LocalizedText, добавления декларации целочисленного типа OpcUa_IntAuto и OpcUa_UIntAuto;
- обработка подписок возвращена к их обработке в отдельной задаче и функции subScrCycle() на предмет:
- правильного расчёта всех таймаутов для выключения;
- обработки периодичности подписки и публикации;
- проверки состояния связанных сеансов и каналов безопасности на предмет закрытия подписок.
- но публикация оставлена на обработку в активности входного канала и функции Server::EP::publishCall() с предотвращением обработки Publish для ошибочных и чужих Подписок, через проверку inPrtId, sesTokId и isSecCnlAct;
- унификация Сеанса на предмет: связывания сеансов с каналами безопасности переключено на один вместо массива, проверку сеанса всех сообщений дополнено предотвращением использования чужих подключений;
- не последние куски пакета переключены на отправку прямо, чтобы не добавлять к одному TCP-пакету;
- EP::mtxData блокирование переключено в PTHREAD_MUTEX_RECURSIVE;
- каналы безопасности ограничены колчеством OpcUa_SecCnlLimit(10) и очередь публикаций количеством OpcUa_ServerMaxPublishQueue(10);
- EP::secSize() переименовано в EP::secN() и добавлено EP::sessN(), EP::subscrN() и chnlList();
- Server.SecCnl.{TokenId,TokenIdPrev} переименовано в Server.SecCnl.{tokenId,tokenIdPrev}.
- ModBus: Выходная часть RTU варианта протокола дополнена ранним прерыванием ожидания пакетов стандартных функций [ERR,1...6,15,16], что увеличивает общую пропускную способность вдвое.
- ВВ параметров Логического Уровня включено в перевод, для не связанных строк и так как в DAQ.LogicLev.
- Разбор атрибутов Сбора Данных переключено на использование TSYS::strLine() и TSYS::strParse(), чем разрешено символ ':' в названии и пустые строки в тексте.
- DAQGate: Режимы синхронизации дополнены режимом предотвращения синхронизации вообще для объектов сохранённых в кеше, путём разрешения значения -1 конфигурационного поля "Периодичность синхронизации с удалённой станцией, секунд".
Архивы-История
- FIX:FSArch: Критически исправлено обработку файлов архива значений, при попытке записи их ИД в нулевую строку.
- DBArch: Архиваторы сообщений дополнены конфигурационным полем "Уникальные и недублирующие сообщения только за временем и категорией".
- FIX: Исправлено падение при обработке групп архиватора значений из-за неочистки связывания конфигурации полей таблицы (TConfig) под блокированием и неблокирование функции ModVArch::grpLimits() в reqRes.
Транспорты
- Протокол ВВ, во входной и выходной части, расширен и дополнен:
- комбинированием данных пакетов с одинаковым направлением и адресом данных в течении prmWait_TM (5 секунд);
- микросекундную часть времени зафиксировано в 6(шести) символах;
- сообщения данных дополнены символом направления;
- ограничением размера одного блока обработки, новым конфигурационным полем;
- значительным повышением производительности через использование предопределённого буфера.
- FIX:Serial: Выходной транспорт исправлен в ожидании между запросами на предмет обработки reqRetrMult*wCharTm как миллисекунды.
- FIX:Sockets: Обнаружено ошибку "Обрыв канала (32)" при записи, после отключения сервера, поэтому попытки переподключения установлены в 2 по (kz <= 0).
Интерфейс Пользователя
- FIX:Общий пересмотр и переделка таблиц в Qt и Web в целом и вида Таблица примитива FormEl СВУ:
- QTStarter,QTCfg,Vision: Общий библиотечный класс TableDelegate значительным образом улучшено в работе на QTCfg и Vision:
- дополнено собственными пользовательскими ролями SelectRole, TextLimRole и OneLineString;
- отображение ячеек дополнено фоновым цветом через чтение-применение общих ролей;
- числовые типы (целое и реальное) дополнены принудительным центрированием;
- строковые типы дополнены опциями выравнивания и заворачивания слов с ролями Qt::TextAlignmentRole;
- дополнено поддержкой визуального ограничения длинных текстов собственной ролью TextLimRole и типовое значение установлено в 300 символов через дополнительное переопределение sizeHint().
- FIX: Вид "Таблица" примитива "FormEl":
- VCAEngine,QTStarter,Vision,WebVision: Дополнено новым типом ячейки 't'-текст, в основном для возможности подтверждения редактирования типа 's'-строка нажатием Enter.
- VCAEngine,Vision,WebVision: Дополнено опцией "prec" пространства колонки, строки и ячейки для контроля точности реальных значений; и реализацией атрибута "align" колонки и ячейки.
- WebVision,Vision: Дополнено переключением таблиц в предотвращение двойному хранению исходного содержимого при его размере более чем 10000.
- FIX:Vision: Использование общего делегата таблицы с возможностью многострочного редактирования.
- Усовершенствовано отображение колонок, строк и ячеек при обновлении и в целом:
- ограничением визуального размера содержимого ячейки 300 символами и высоты строк в 70% от общего размера таблицы;
- более точным выравниванием ширины колонок;
- подстройкой в режиме разработки, а также при видимости вертикального заголовка;
- плотным заполнением таблицы через учёт размера видимой полосы вертикальной прокрутки;
- подстройкой только после полного изменения размера таблицы, чем также допуская ручное изменение колонок и для предоставления такой-правильной подстройки всегда.
- Реализовано "лёгкую" обработку изменения ширины и обновления:
- "лёгкое" редактирование без переподстройки колонок при каждом обновлении, только при: появлении первой строки, изменения количества колонок и изменения заголовка колонки, изменении шрифта и изменении размера;
- применение фиксированной ширины колонки и учёт высоты строк с ограничениями независимо от значения общего атрибута "colsWdthFit";
- установка значения, раннее изменение размера и подстройка таблицы, перенесены в пространство наличия содержимого таблицы и после сортирования.
- Функцию экспорта во время исполнения дополнено экспортом вида Таблица примитива "FormEl" в CSV.
- Усовершенствовано отображение колонок, строк и ячеек при обновлении и в целом:
- реализацией режима не подстройки (отсутствие атрибута "colsWdthFit"), с использованием режима автоматического размещения таблицы для вычисления фиксированной ширины и последующего переключения в фиксированный режим размещения таблицы;
- многострочным редактированием текста ячеек в полную ширину и высоту ячейки, с применением редактирования по Ctrl+Enter;
- вид строчных ячеек ограничен 300 символами;
- отображение логических ячеек изображением состояния TRUE;
- ячейки таблицы, в режиме редактирования, разрешены к вызову контекстного меню системы-браузера.
- Реализовано "лёгкую" обработку изменения ширины и обновления:
- обнаружение изменения таблицы и обновление переключено в режим не сохранения исходного содержимого дважды;
- предотвращено от полного обновления при модификации атрибута "value".
- Дополнено поддержкой сортировки по колонкам. Установка в сортировку по первой видимой колонке при включении сортировки.
- WebCfgD: Расширение таблицы на предмет:
- большое видимое содержимое текста ограничено 300 символами;
- строковый тип разрешён для многострочного редактирования используя TEXTAREA;
- тип данных "bool" отображено изображением, не "On" или "Off";
- центрирование содержимого логического, чисел, времени и выбора;
- упрощение редактирования содержимого таблицы для типов время, число и строка, путём удаления кнопок применения и прокручивания.
- QTStarter,QTCfg,Vision: Начат перенос общего Qt-кода Qt-модулей OpenSCADA в файлы новой библиотеки lib_qtgen.*, которая размещена в каталоге модуля QTStarter и привязано во всех Qt-модулях, и это осуществлено для: внешней icoSize(), colorAdjToBack() и TableDelegate.
- VCAEngine:
- Дополнено, и включено как опция сборки, на предмет механизма маркирования изменения атрибутов без дубликатов, путём запроса предыдущих-завершенных циклов, чем также предотвращая необходимости выявления дубликатов в визуализаторах и сохранению большого исходного содержимого.
- Исполнение проектов улучшено при смене родителя обрабатываемых страниц на лету.
- Исполнение задач сеансов дополнено ранним исполнением, при наличии событий.
- FIX: СВУ-стили исправлены при доступе к пустым полям, которые не загружаются.
- Страницу "Диагностика" СВУ-проектов адаптировано к отображению сообщений уровня отладки при включении отладки.
- Информацию исполнения сеанса проекта дополнено реальной периодичностью, полученной из задачи, которую также использовано при формировании значения атрибута "f_frq" процедуры.
- Vision: Диалоги свойств "Виджеты" и "Проекты / Библиотеки виджетов" дополнены собственной строкой статуса и кнопкой вызова контекстной документации. Виджеты TextEdit переключены на собственную строку статуса диалогов свойств, на предмет позиции курсора и что выключено во Всплывающей Подсказке. Виджет редактирования текста кода диалога свойств "Виджеты" дополнен восстановлением позиции курсора после применения или отмены.
- FIX:WebVision: Дополнен обнаружением исчезания сеанса исполнения проекта и возвратом ошибки, в общем запросе "pgOpenList", и сброса счётчика вычислений "tmCnt".
- Клавиатурный фокус и события значительным образом усовершенствованы на предмет гарантии работы этого в целом через:
- установку атрибута "tabindex" для всех активных виджетов и специфично для FormEl — непосредственно в элементы формы;
- дополнения вычислением числа "tabindex" как уникальный для целого интерфейса, чем предотвращая скачки фокуса;
- обработки события onfocus на предмет установки собственного фокуса в setFocus();
- вид Кнопка примитива FormEl дополнен обработкой клавиатурных событий нажатия и отпускания по клавишам Space и Enter;
- примитив Диаграмма упрощён путём удаления лишнего элемента тега A;
- FIX: Исправлено переключение фокуса при клацанье на кнопках с изображениями.
- FIX: Исправлено проверку удаленных виджетов для всех и главной страницы.
- FIX: Исправлено наконец размножение лишних DIV элементов при смене страницы в контейнере страниц.
- FIX: Предотвращение зацикливанию при наличии Web-сеанса, но отсутствии соответствующего СВУ-сеанса.
- FIX:WebCfgD: Целиком отревизировано и расширено на предмет:
- переноса всех действий внутренних инструментов на реализацию кнопками и размер панели инструментов установлен с 25 в 30 пикселей;
- удаления фильтрации-изменения размера изображений кнопок инструментов на стороне сервера;
- установки расстояния между иконкой страницы и заголовком в 10 пикселей;
- полного обновления контролированной страницы после смены размера окна;
- расширения поля общего редактирования текста TEXTAREA применением и отменой из клавиатуры;
- привязки функции обновления хостов к двойному клацанью мышей на общем пространстве области дерева;
- FIX: исправления функции обновления хостов на предмет выявления элементов дублированных хостов;
- FIX: принудительного обозначения актуальных-выбранных элементов в дереве контроля после его разворачивания;
- удаления nodeText() и setNodeText() путём непосредственного использования "innerText" и "textContent".
7.4.1 Сервисные обновления
7.5 [20.10.7528/20.12.2020] ТРЕТЬЕ обновление
Это обновление релиза 0.9 LTS исправляет около 40 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
Linux Дистрибутив Автоматизации проекта OpenSCADA
- пакеты "tdelibs" и "tdebase" были удалены из-за применения этих исправлений в главной и стабильной ветви TDE;
- исправленные пакеты "tdemultimedia-trinity", "tdenetwork-trinity" и "tdeutils-trinity" были пересобраны;
- собрано новый исправленный пакет "tde-i18n-uk-trinity";
- перед сборкой пакетов была изменена схема формирования версий пакетов этого дистрибутива из "{+1}:14.0.9-0" на "4:14.0.9-{+1}" с целью предотвращения заморозки этих пакетов в следующих версиях TDE; и главный репозиторий пакетов TDE Живых Дисков переключен на ветвь "r14.0.x" вместо предварительной стабильной, которая также присутствует, но закомментирована;
- перед этим релизом, в TDE Weblate завершен перевод Украинским языком частей-пакетов TDE: tdelibs, tdebase, tdegraphics, tdenetwork, tdemultimedia, tdepim, tdeadmin, tdeaccessibility, tdeutils, krusader, yakuake, basket; и создан исправленный пакет "tde-i18n-uk-trinity" для перевода отличий ветви "r14.0.x" от главной;
- заплатка к "tdeutils" дополнена комбинацией клавиш с удержанием Ctrl для медленного изменения яркости дисплея к KMilo.
OpenSCADA библиотеки и проекты
- FIX:LibsDB.OscadaLibs: Библиотека DevLib дополнена шаблонами "MTP 4D (MTP4D)" и "ModBus база (mbBase)".
- FIX:LibsDB.vcaBase: Шаблонный проект (tmplSO) очищен от лишних мнемосхем управления рецептами и главная страница дополнена таблицей актуальных сигналов-нарушений. Кадр Main.RootPgSo унифицирован уведомителями только в общих атрибутах для СВУ-сервера и уведомителей Vision, WebVision: notify0, notify1 та notify2.
API
!!!!:Изменения:
- Архивы-История: {TMArchivator,TVArchivator,TVArchive}::DB() установлена в квалификатор постоянной.
- Транспорты.{.,*}: Функция установки таймаутов setTimings() выходных транспортов расширена различием типовых таймаутов для различных протоколов, с помощью аргумента "isDef".
Дополнение:
- SYS.,*:
- Ограничения и параметры пространства системы перенесены в пространство конфигурации пользователя (конфигурационный файл) для некоторого разрешённого диапазона. STD_WAIT_DELAY перенесено в prmWait_DL и изменено в 0.1 секунд. Предыдущие определения ограничений и параметров пространства системы оставлены для совместимости внешних модулей!
- TSYS дополнено функцией taskSendSIGALRM() отправки сигнала прерывания "ALARM" задачам OpenSCADA.
- TValFunc: Дополнено состоянием исполнения функции через функцию isCalc().
- Транспорты: Выходные транспорты расширены обозначением Сетевых транспортов, функцией isNetwork(), также в пользовательском API.
Система
- FIX:Сборка:configure.ac: Версию библиотеки ядра увеличено до 3:9:0 и версию программы увеличено до 0.9.3.
- {DAQ,Протокол}.ModBus:
- подтип "_b" — битовый тип, дополнен перемещением номера бита к полю номера регистра вроде "R_b:123.12";
- дополнено флажком "~" для инверсии порядка регистров комплексных подтипов в некоторых регистрах, вроде "_f";
- флажок "rw" разделён на "r" и "w".
- Модульную версию подсистемы "Транспорты" увеличено до 17.
- FIX: Предотвращено аутентификацию в интерфейсе пользователя готовым хешем пароля.
Сбор Данных
- LogicLev,ModBus,Siemens: Дополнено прерыванием продолжительного исполнения шаблонов при исполнении параметра, с использованием новых функций TValFunc::isCalc() и TSYS::taskSendSIGALRM().
- FIX:LogicLev: Удалено блокирование исполнения "calcRes", которое использовано только в блокировании записи в параметр в течении вычисления и что может быть продолжительным.
Архивы-История
- FIX: Полученные текущие значения, в активном режиме архивирования, принудительно установлено в текущее время, что важно для архивирования динамических атрибутов.
- Конфигурационное поле архива значений "Режим формирования ID автоматически создаваемых архивов" расширено элементом выбора "Все ID контроллера, параметра и атрибута", в процессе расширения ограничения на размер ИД архива значений до 50 символов.
- FIX:DBArch: Исправлено только прямое архивирование значений в групповом режиме и когда тип значений может сбрасываться в Целый тип, как типовой. Архивирование значений в групповом режиме дополнено удалением соответствующей колонки таблицы при удалении архива, для горячего удаления колонок сразу после добавления нового архиву, чем предотвращая раннему разростанию таблицы до ограничений БД.
- FIX:FSArch: Адаптация к размеру ИД архива значений больше чем 20 символов, когда дополнительные 14 символов сохраняются в резервной части (переименованной в "archive_add") заголовка и остальное в названии файла.
Транспорты
- FIX: Функция TTransportIn::assTrO() обработки входных инициативных подключений целиком отревизировано чтобы обеспечить обязательным создание новых подключений в виде нового выходного транспорта, чем предотвращая правильному завершению присутствующих закрытых но не освобождённых выходных транспортов.
- Команды транспортов переименовано из "Исполнение" в "Подключение" и статусы переименованы из "Запущено. " в "Получение данных. " и "Подключено. ", из "Остановлено. " в "Отключено. ".
- FIX:{Sockets,SSL}: Типовые таймауты возвращены в "10:1".
Транспортные Протоколы
- HTTP:
- Дополнено динамическим названием печенья (cookies) и Пользовательским пространством ИД, где название печенья "oscd_UID" и использовано Пользовательское пространство ИД при работе с общей таблицей сеансов аутентификации, и название печенья "oscd_UID_{PrjNm}" при работе без этого.
- FIX: POST выходной функции outMess() с множеством частей предотвращён от размещения конечного разделителя и улучшено в формировании "Content-Disposition".
- Улучшено генерацию ИД пользователя генерацией различных ИД для различных процессов, ограниченное в 1e6, и дополнено случайным и конфигурируемым Пользовательским пространством ИД [0...99] * 1e6, использованным в работе с таблицей общих сеансов аутентификации.
- SelfSystem: Специфические таймауты выходного транспорта установлены в "20:2".
- ModBus: Специфические таймауты выходного транспорту установлены в "5:0.1" для Сетевых транспортов — isNetwork() и варианта протокола "RTU".
Интерфейс Пользователя
- FIX: TUIS::docKeyGet() исправлено на предмет утечки пользовательских объектов массивов.
- VCAEngine,WebVision,Vision: Примитив "Media" дополнен типом "Audio" и тип "Полное видео" переименован в "Видео", который также имплементирован в WebVision и Vision.
- QTCfg,Vision: Дополнен функцией подстройки цветов текста к фоновому цвету — colorAdjToBack(), которую использовано в коррекции цветов подсветки синтаксиса, и других динамических цветов, к смене палитры.
- VCAEngine,Vision: Расширено реализацией уведомлений в процессе их внедрения в WebVision, на предмет:
- использования стандартного пути получения уведомлений через активацию соответствующих атрибутов;
- расширение ntfReg() использованием отрицательного типа для обработки всех типов, в основном очистки, и некоторой унификации кода;
- расширение получением типа ресурса;
- дополнение уведомителей флажком "notifyServ" включения уведомления на стороне СВУ-сервера;
- дополнено, на стороне СВУ-сервера, полем "resStatic" прямого определения ресурса (не динамическое);
- дополнение контекста процедуры уведомления двумя переменными "resTp" и "prcID".
- FIX:UI.QTStarter: Дополнено периодическим обновлением диалога запуска в перечне проектов.
- FIX:VCAEngine: Исправлено падение при установке ссылки виджета в "prm". Сервис запроса ресурса "get:/wdg/res", Widget::resourceGet() и {WidgetLib,Project}::mimeDataGet() дополнено запросом частей ресурса, в основном для больших медиа файлов.
- FIX:Vision: Дополнено проигрыванием уведомлений внутренним проигрывателем на Phonon и не в отдельной задаче уведомителя. Вызов saveState() перемещён из деструктора окна разработки в событие закрытия, поскольку была помечена проблема сохранения пустого контекста после проигрывания некоторого медиа.
- FIX:WebVision:
- Имплементация поддержки уведомлений.
- Имплементация загрузки частей ресурсов, для больших медиа, HTTP параметром "Range: bytes=".
- FIX: Исправлено лишнюю очистку кеша страницы на предмет виджетов из страниц с общим названием к странице которая удаляется.
- WebUser: Адаптировано к работе с POST и содержимым в теле.
7.5.1 Сервисные обновления
7.6 [17.06.7528/17.08.2020] ВТОРОЕ обновление
Это обновление релиза 0.9 LTS исправляет около 60 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
Linux Дистрибутив Автоматизации проекта OpenSCADA
- Завершено усовершенствование KMix в работе с PulseAudio, путём его динамизации патчем "kmix-UpdMixersForChangeAndChMaster.patch".
- KRfb (VNC-сервер) был исправлен на предмет аварийного завершения и завершена реализация набора дополнительных клавиш к основной клавиатурной раскладке, в основном Кириллицы, но также и дополнительных UTF символов.
- Завершено обновление перевода проекта Окружения Рабочего Стола Trinity на Украинский для частей: tdelibs, tdebase, tdenetwork, tdemultimedia, tdepim (в основном), krusader, yakuake.
OpenSCADA библиотеки и проекты
- LibsDB.OscadaLibs: Библиотеку Устройств дополнено реализацией протокола IEC-62056 (DevLib.IEC62056). Внесетевая документация дополнена документом "СОГЛАШЕНИЕ О ТЕХНИЧЕСКОЙ ПОДДЕРЖКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ "OpenSCADA" версии 2 и нового модуля DB.DBGate.
- FIX:LibsDB.vcaBase.Main.alarmsSt: Несколько исправлено на предмет оригинальных сообщений и "quietation" целиком заменено на "confirmation". Восстановлено предотвращение дублированных записей новых нарушений в той самой категории.
API
!!!!:Изменения:
- SYS: Унифицированы статусы станции в функциях isRunning(), isFinalKill() и stopSignal(). TCfg::setReqKey() дополнен новым аргументом "treatDep".
- DB: dataSeek(),dataGet(),dataSet(): Расширены аргументом локального конфигурационного контекста "localCfgCtx";
- *,DB: TBDS::dataSeek() и TTable::fieldSeek() переключены на реализацию кеша сканирования в соответствующих модулях.
Дополнения:
- TMess,DB,DB.{SQLite,MySQL,PostgreSQL,FireBird}: TMess дополнено функцией обнаружения перевода конфигурации translCfg(), которую использовано во всех модулях БД и в dataSet().
- SYS: Дополнено функциями доступа к глобальному конфигурационному контексту cfgCtx() и setCfgCtx().
- Загрузка и сохранение конфигурации дополнена собственным блокированием TSYS->cfgLoadSaveM().
- Дополнено функцией pathLevEnd() обработки путей с конца.
- TRegExp: Дополнено функцией getPattern().
- TFld: Дополнено комбинированным строковым вариантом поля длины - lenS().
SYS
- FIX: Building:
- FIX:configure.ac: Core library version risen to 3:8:0 and the program version risen to 0.9.2.
- Modules version of the subsystem "BD" risen to 14, of the subsystem "Transport" risen to 16.
- data/ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}: The input Sockets' transports unified in the names "WEB" and "CNTR".
- data/ModelsDB/AGLKS/St.sql: The input SSL transports unified in the names "WEB" and "CNTR" and updated for the KeepAlive timeout setting in 60 and for the SSL-certificate.
- data/{oscada_start,oscada_server,oscada_plc}.xml:
- The input WWW-transports are unified, where "WEB_1" renamed to "WEB" and "WEB_2" removed.
- Appended for the disabled DB-entries of the standard OpenSCADA libraries.
- /oscada_start.xml: Appended for the disabled input transports "WEB" and "CNTR". Appended for the value archivers FSArch.{SYS,alarms,actions} and message archivers FSArch.{1s,1m,1h}.
- FIX:data/openscada-proj.in,UI.QTStarter: Implementation the builtin backuping.
- FIX:data/openscada-proj.in: Appended for the commands "backup", "backupRestore", "backupList" to implement the project backups.
- UI.QTStarter: Appended for the backup commands call from the project manager - list of the projects.
- .,DB,DAQ.{LogicLev,ModBus,Siemens},UI.{QTCfg,WebCfgD}: Implementation the interstation copying mechanism of the control interface nodes.
- .,UI.QTStarter: OpenSCADA starting with a module as the GUI in the main thread significantly refactored for:
- early registration the GUI module in the main thread directly by that module itself and in postEnable() function;
- adaption the function perSYSCall() to use for update the GUI module in the main thread, its splash mostly, during the program starting and stopping (from the service task) and at the configuration loading (for switch to the starting splash);
- enabling the messages dynamic display for the main thread execution mode;
- unification of the splash display for the both modes.
- .,Protocol.SelfSystem,DAQ.AMRDevs: Client accessing of the OpenSCADA control interface expanded by the multiple authentication, what prevents of using direct requests of the OpenSCADA control interface with the authentication in each the request, often for UI.Vision.
- FIX:TRegExp: The patterns processing fixed appending the end symbol treating, so preventing TController::alarmSet() collisions in the objects strict detection.
- FIX:LibsDB.OscadaLibs.doc.diagram,UI.{Vision,WebVision}: Prevented from the value scale double adjustment for the percent scale and appended for the value range expanding.
- FIX: The function TCntrNode::isModify() processing for the children allowed only for nodes in the state "Enabled".
БД
- Создан новый модуль "DBGate".
- FIX: TBDS::dataSet() расширено установкой только ключей и видимых элементов, как у других БД. Дополнено сменой-сохранением определённых элементов в конфигурационном файле вместо полного сохранения всех их в типовой БД.
- FIX: Исправлен первый ошибочный запуск объектов БД на предмет последующих попыток запуска.
- FIX: Загрузка БД предотвращена от двойной загрузки из конфигурационного файла и БД, относительно одинаковых записей.
- Объект TBD дополнен поддержкой сервисных контрольных запросов "call": "/serv/SQL", "/serv/fieldStruct", "/serv/fieldSeek", "/serv/fieldGet", "/serv/fieldSet", "/serv/fieldDel".
- FIX:SQLite: Обнаружена и исправлена потеря данных при конкурентном доступе, когда генерируется непринципиальная ошибка неактивированности транзакции "cannot commit - no transaction is active (1)", которая, однако, прерывает запись данных.
Сбор Данных
- FIX: JavaLikeCalc: Исполнение внутренних функций дополнено сохранением контекста общих-собственных регистров, в двух вариантах, первично для поддержки рекурсии.
Транспорты
- Выходные транспорты унифицированы созданием параметров подключения, с помощью conPrm(), вместо прямых prm1() и prm2().
- Удалён конфигурационный параметр "START" выходных транспортов, как лишний и для предотвращения продолжительного запуска.
- FIX:Sockets,SSL: Для предотвращения многоразового исполнения запросов высокой нагрузки и продолжительного контроля, выходные транспорты переключены на:
- типовую конфигурацию для Попыток=1, Таймауты="30:2";
- для потери подключений количество попыток установлено в 2;
- для ошибок "Исчерпано время" подключение также пере-подключается, кроме типа SOCK_FORCE.
Транспортные Протоколы
- FIX:ModBus: Выходные запросы TCP-варианта дополнены проверкой Идентификатора Транзакции пакетов ответа.
- FIX:SelfSystem: Выходная часть расширена проверкой соответствия ответов запросам, по названию тега запроса. Дополнено кодированием специальных символов пользователя и пароля, и пустой пароль кодируется как "<EMPTY>".
Интерфейс Пользователя
- Vision,WebVision: Свойство специфическое для визуализатора "userSetVis" дополнено реализацией пароля после прямо указанного пользователя и для применения со всеми пользователями.
- FIX:QTStarter: Стандартная-системная заставка запуска/останова обновлена и дополнена информацией про программу (также пользовательские заставки) и проект OpenSCADA, включая иконку проекта. Контекстное меню списка проектов дополнено пунктом удаления не исполняемых проектов.
- FIX:QTCfg: Дополнен слежением за сменой страницы с индикацией в дереве навигации и с прокруткой к текущему элементу.
- FIX:VCAEngine: Предотвращено аварийное завершение на больших конфигурациях с продолжительным закрытием сеансов исполнения во время доступа к наследникам виджета (mHerit), добавлением ResRW блокирования "mHeritRes". Свойство "Перевод" процедур виджетов целиком перенесено под прямой доступ и видимость установлена только при наличии процедуры, также как видимость области текста процедуры и периодичности вычисления от выбора языка.
- FIX:Vision: Существенно унифицирована процедура аутентификации и смены пользователя в UserStBar::userSel() и объект диалога "DlgUser".
- FIX:WebVision: Унифицирована имплементация примитива "Кнопка": переносом специфических кнопок под <button></button> и добавлением соответствующих CSS-стилей для типового и нажатого состояния с отличной границей и полупрозрачным изображением. Исправлена, в конце концов, проблема закрытия всех страниц контейнера основных страниц с заморозкой последней потерянной страницы при быстром переключении. Дополнено пользовательскими CSS правилами интерфейса.
7.6.1 Сервисные обновления
7.7 [08.02.7528/08.04.2020] ПЕРВОЕ обновление
Обновление осуществлено после 1.5 года от релиза 0.9 LTS, соответственно оно стоит 10 обновлений, поскольку им исправлено более 250 ошибок и добавлено множество усовершенствований, которые целиком вы можете почитать в протоколе изменений обновления.
Ключевыми свойствами обновления является:
- значительное расширение и стабилизация Web-интерфейса в течении практической эксплуатации в большом распределённом решении, построенном на основе модуля UI.WebVision; также расширение и стабилизация горячей разработки в течении множественного исполнения разрабатываемого проекта;
- тестирование, исправление и расширение резервирования в части сообщений, также благодаря практической эксплуатации в большом распределённом и ещё резервированном решении, в части обще-системного кода и модуля DAQ.ModBus;
- полная реструктуризация, усовершенствование и дополнение библиотек OpenSCADA в SQLite файлах;
- общее улучшение документации, дополнение документацией всех библиотек и ревизия большинства документации модулей.
7.7.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.7.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.7.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.7.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.7.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.7.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.7.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.7.8 Транспортные Протоколы
- FIX:HTTP: Дополнено корректной поддержкой KeepAlive, функциями входных транспортов keepAliveTm() и keepAliveReqs(). Расширено таблицей БД "HTTP_AuthSessions" внешних сеансов аутентификации.
- FIX:ModBus: Входная часть расширена использованием DAQ-шаблонов.
- Перечень типов данных таблицы ВВ дополнен типом "Объект".
- Определение варианта протокола по входным запросам несколько улучшено определением отличия вариантов RTU и TCP, через учёт типа транспорта.
- UserProtocol: Расширено поддержкой DAQ-шаблонов.
- SelfSystem: Расширено поддержкой попыток выходных транспортов.
7.7.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.7.10 Специальные
- FIX:FLibSYS:
- FIX:IO: write() исправлено относительно получения типового типа данных, получение ошибочных данных сделано безопасным.
- CRC: Завершено использованием нормальных полиномов, входных и выходных относительностей и XOR для выхода.
- VArchObj: Доступ к функции записи в архив ограничен только пользователями в группе "Архив".
7.7.11 Сервисные обновления
8 Ссылки