1 Введение
Релиз OpenSCADA, открытой SCADA(Supervisory control and data acquisition) системы, версии 0.9 является стабильным промышленным релизом продолжительной поддержки (LTS).
Основной целью релиза является предоставление обновленной и стабильной платформы построения решений комплексных систем автоматизации и других смежных решений для сообщества пользователей и разработчиков свободного программного обеспечения. Также, релиз предназначен стать актуальным и прочным фундаментом в построении коммерческих решений.
Релиз является следующей версией стабильной ветви для которого, в течении продолжительного времени, предоставляется техническая поддержка от разработчиков и обеспечивается выпуск исправлений в виде публичных сборок для основных и стабильных окружений Linux, а также оперативных сборок для владельцев пакетов технической поддержки. Жизненный цикл предыдущего релизу 0.8.0 LTS прекращается его последним обновлением, непосредственно перед первыми сборками пакетов 0.9 LTS.
Именно на этой версии осуществляется окончательный переход на схему разработки Work/LTS, т.е., разработка осуществляется в рамках рабочей версии и на её основе периодически выпускаются стабильные релизы, которые, в свою очередь и параллельно разработке, обновляются путём обратного портирования совместимых изменений из рабочей версии. Инициирующий переход произошёл в 2013 году, когда текущей стабильной версией определено 0.8.0 LTS, а рабочей 0.9 Work. На данный момент, стабильной версией становится анонсированная 0.9 LTS, а рабочей 1 Work.
В целом, новая стабильная версия является результатом шести лет работы с разработки, внедрения в различные решения, стабилизации и эксплуатации OpenSCADA в её рабочей ветви, которая на данный момент выпускается текущей стабильной. Всё это время обновления для 0.8.0 LTS продолжали выпускаться и что будет осуществляться для анонсированной 0.9 LTS.
Этот документ является обобщение протокола изменений (ChangeLog), начиная с нулевой ревизии предыдущей LTS версии, через её обновления и заканчивая текущей. Документ призван коротко и наглядно осветить новые возможности OpenSCADA. Детально ознакомиться с изменениями можно в файле "ChangeLog" дистрибутивных пакетов или из первоисточника: http://oscada.org/svn/tags/openscada_0.9/ChangeLog.
1.1 Общая информация
Проект OpenSCADA основан Савоченко Романом в 2003 году как свободную реализация Системы Диспетчерского Контроля и Сбора Данных (SCADA) или Человеко Машинный Интерфейс (HMI), на основе её фундаментального проектирования в течении 2002 года и опыта использования и разработки коммерческой SCADA-системы до этого.
SCADA или HMI системы в целом предназначены и используются для осуществления человеком оперативного контроля за работой сложного и ответственного технологического оборудования и процессов различных производственных предприятий.
На время анонса 0.9 LTS, OpenSCADA является развитой SCADA/HMI системой, которая довольно широко используется как по прямому назначению, так, благодаря своей гибкости, и во многих смежных областях, и которая с уверенностью может называться более обобщённо — динамическая система работы с данными реального времени.
Номер стабильной версии OpenSCADA меньше единицы только из-за того, что её целью была заявлена многоплатформенность, достичь которой в запланированном объёме планируется следующим стабильным релизом с номером 1. В целом, целями OpenSCADA являются:
- открытость — в основном GPLv2;
- масштабируемость, гибкость, расширяемость — модульность и внутренняя динамичность;
- исполняемая избыточность — резервирование;
- доступность — открытые исходные тексты; автоматическая сборка архивов, пакетов, живых дисков, ...; многоязычность; динамическая многоязычность; сборка и исполнение на Linux окружениях широкого возрастного диапазона, от 2002 года (2009-ALTLinux 6, LP8x81, Fedora 12; 2012-Debian 7) по современные;
- надёжность — практическое применение, быстрое решение проблем;
- безопасность — распределение прав, SSL;
- многоплатформенность — x86_32, x86_64, ARM, Web, Android, QNX (предадаптировано), MS Windows (запланировано);
- единый, унифицированных, удобный и развитый интерфейс пользователя — Qt, Web, прозрачное и многоуровневое удалённое управление;
- широкий спектр источников данных — универсальные, платы DAQ и низкоуровневые шины, созданные в окружении OpenSCADA.
1.2 Применение
К актуальным отраслям применения, где известно хотя-бы одно внедрение и с коротким перечнем которых от участников проекта можно ознакомиться по этой ссылке, относятся:
С некоторыми ограничениями и доработками, в основном во внутреннем окружении пользователя, OpenSCADA может использоваться и в таких отраслях:
- управление ресурсами предприятия (ERP);
- Geo-локация и отслеживание положения;
- торговые системы;
- медицинские диагностические системы;
- бухгалтерский учёт;
- билинговые системы.
2 Результаты предыдущего релизу 0.8.0 LTS
Релиз 0.8.0 LTS выпущен в апреле 2012 года и в течении этих шести лет он претерпел 20 обновлений, которыми, в целом, исправлено более 500 ошибок и добавлено множество усовершенствований, которые не нарушают совместимости библиотечных БД и конфигурации.
Конфигурация и библиотечные БД 0.8.0 LTS были в целом заморожены, ввиду больших несовместимых изменений в 0.9 Work, для методов запуска OpenSCADA, и несовершенство распространение библиотечных БД на момент выпуска 0.8.0 LTS. Поэтому, обновление и переход на версию 0.9 LTS будет нетривиальным, хотя в 0.9 LTS предусмотрено всё возможное для упрощения этой процедуры. Обновление-же 0.9 LTS до запланированной в будущем 1 LTS уже не будет таким сложным и фактически может превратиться исключительно в формальное изменение версии рабочей ветви, поскольку теперь планируется обновление всего, включая и библиотечные БД.
3 Плановые задачи релиза
Развитие OpenSCADA, после предыдущей LTS версии и в рамках рабочей ветви, в основном осуществлялось путём глубокой стабилизации и через практическую адаптацию с элементами расширения существующего функционала, нацеленные на предоставление стабильного и надёжного окружения автоматизации промышленных и смежных задач, а соответственно и не существовало чётко определённого плана. Но за три года до этого релиза такой план появился и составил следующие задачи, что видно из общего плана развития:
- Полная ревизия основной документации и подготовка анонса этого релиза.
- Адаптация к работе на программной платформе "Android".
- Перенос базы знаний OpenSCADA и Wiki-ресурса документирования на новый движок с унификацией структуры под многоязычность с приоритетом: Английский, Украинский, Российский; и генерация автономной документации по её изменению.
- Ревизия, актуализация и некоторое расширение Web-модулей OpenSCADA.
- Расширение и адаптация OpenSCADA к прямой работе с низкоуровневыми шинами и устройствами вроде 1Wire, I2C и реализация проекта умного дома в собственной квартире.
- Формальное создание и документирование проекта дистрибутива Linux автоматизации с OpenSCADA.
- Создание автоматизированной системы сборки пакетов OpenSCADA.
- Перенос серверной инфраструктуры OpenSCADA на собственное оборудование и канал интернета.
- DAQ.OPC_UA: Упрощение, увеличение функциональности и перенос протокольного кода в отдельную LGPL v3 библиотеку.
Эти задачи выполнены и некоторые детали около них приведены далее.
4 Общесистемные свойства
Новая стабильная версия OpenSCADA получила заметные общесистемные расширения, приобрела большей стабильности в работе и увеличение продуктивности, а также получила заметные усовершенствования графического интерфейса и окружения около неё, вроде: расширенной настройки, документации, доступной прямо из программы (offline и online), и которая значительным образом пересмотрена и актуализирована.
Основная часть документации проекта перенесена на новую Wiki, на основе MediaWiki, и значительный объём этой части был отревизирован и переведен на три языка — Английский, Украинский, Российский. Для переноса была создана процедура конвертации статей из диалекта движка WackoWiki на MediaWiki, которая была полностью написана на внутреннем языке программирования OpenSCADA и которую многократно использовано для переноса большого объёма старой Wiki. Формат автономной (offline) документации был изменён со статичных PDF-файлов, которые не обновлялись после предыдущей LTS версии, на HTML-файлы, которые динамически генерируются из актуальной базы знаний проекта (Wiki), а также имеют актуальные крос-ссылки между страницами и ссылки на online-документацию, для исключительно внешних материалов. Генерация offline-документации также производится специально написанной процедурой на внутреннем языке OpenSCADA, что, вместе с процедурой конвертации Wiki-диалекта и комплексного тестирования релиза OpenSCADA, является ярким показателем мощности и текущего уровня развитости внутреннего языка OpenSCADA.
В рамках старой Wiki, после выпуска 0.8.0 LTS были добавлены и обновлены некоторые документы, а с переносом на новую Wiki, кроме ревизии и перевода основной части документации, была осуществлена общая унификацию её структуры из соображений: многоязычности (Английского как первичного языка), логичности организации, удобства перевода и возможности убрать дублирование статей с официальным сайтом, которые сейчас просто используются из Wiki. Отдельно отметим значительно-расширенные главные документы:
Первичный язык (Английский) был полностью отревизирован в оригинальных сообщениях программы и во многом для основных статей документации-Wiki OpenSCADA, что на данное время делает OpenSCADA адекватно воспринимаемой для аудитории, которая не понимает исходных языков — Украинского или Российского. И, вместе с реализацией в полном объёме механизма динамического перевода, делает возможным построение на основе OpenSCADA динамично многоязыковых интерфейсов пользователя, что Вы можете кроме всего прочего посмотреть на публично доступном Web-интерфейсе динамических моделей ТП: АГЛКС, Котёл.
Рабочей версией, в основе этой стабильной, впервые было определено понятие проекту OpenSCADA и реализован сценарий командной строки для запуска и создания проектов OpenSCADA. Непосредственно перед выпуском этой версии, понятие проекта OpenSCADA было окончательно закреплено за директорий с данными отдельного проекта и конфигурационным файлом OpenSCADA, а реализация менеджера проекта была интегрировано непосредственно в OpenSCADA. Соответственно, эта LTS версия имеет развитое понятие менеджера проектов, что позволяет гибко с ними работать и исключить опасную возможность многократного запуска с общими данными одного проекту.
Рабочей версией, также, внедрено изменение версий модулей по изменению в коде модуля и непосредственно перед их выгрузкой в репозиторию исходных текстов, а соответственно, версии модулей OpenSCADA этого релиза наглядно отражают общий уровень их развитости и стабильности.
Живые диски дистрибутива Linux автоматизации проекта OpenSCADA.
В процессе осуществления работ над рабочей ветвью, в основе этой стабильной, было внедрено формирование репозиториев пакетов дистрибутивов Linux со сборками OpenSCADA, которые до этого предоставлялись только как отдельные пакеты. Что заметно упростило развёртывание OpenSCADA и содержание её актуальной. Затем был создан автоматических сборщик этих пакетов, который на данный момент насчитывает до 100 целей, и что значительно упростило выпуск обновлений как для рабочей ветви так и для этой стабильной. Соответственно, к этой LTS версии предоставляются сборки пакетов для основных окружений Linux и вся историю публичных обновлений будет сохранена.
К пакетам сборок OpenSCADA предоставляются также и сборки живых дисков быстрого ознакомления и развёртывания OpenSCADA вместе с системным окружением. Которые до этого момента получили формальное основание в виде Linux дистрибутива автоматизации проекта OpenSCADA.
Основной сервер OpenSCADA.
Сборки и пакеты OpenSCADA сопровождаются рядом открытого и свободного материала внутреннего окружения программы, а именно, это: наработки слоя сбора и обработки данных, элементы графического представления и целые-комплексные проекты моделей ТП. Эти материалы предоставляются в виде файлов БД SQLite и включают:
- Библиотеки функций (OscadaLibs), "LibsDB/OscadaLibs.db" — содержит все наработки проекта OpenSCADA в слое сбора и обработки данных включая элементы источников данных пользовательского протокола.
- СВУ: Главные библиотеки (vcaBase), "LibsDB/vcaBase.db" — содержит основные элементы графического представления и элементы мнемосхем проекта OpenSCADA.
- СВУ: Тесты (vcaTest), "LibsDB/vcaTest.db" — содержит элементы тестов примитивов графического представления.
- СВУ: Библиотека электро-элементов мнемосхем пользовательского интерфейса (vcaElectroEls), "LibsDB/vcaElectroEls.db" — содержит элементы графического представления компонентов электрических схем.
Хостинг проекта в целом и материалов 0.9 LTS в частности, был перенесен на собственный сервер проекта, где дополнительно были развёрнуты: демонстрационные Web-интерфейсы моделей OpenSCADA, проект мониторинга сервера и умного дома на основе OpenSCADA и сборщик пакетов репозиториев OpenSCADA.
4.1 Внутренние
Разрешающая способность внутренних данных целого типа окружения OpenSCADA увеличена до 64 разрядов. В целом-же, внутренние данные OpenSCADA, с резервированием значения ошибки (EVAL) для каждого, унифицированы общими типами: логическое, целое, реальное, строка и объект. Что в первую очередь касается источников данных.
В ядро OpenSCADA, собственный протокол и все узлы что работают с удалёнными станциями OpenSCADA; добавлена возможность "поднятия" узлов OpenSCADA, которые находятся за другими узлами и, как правило, в другой сети. Что в целом позволяет централизовано управлять сетью станций OpenSCADA на любом уровне иерархии.
4.2 Усовершенствования и адаптация для различных платформ
Эта версия OpenSCADA получила углублённую поддержку и способность к адаптации для различных платформ. Что в основном случилось благодаря адаптации для работы на программной платформе Android и восстановления сборки и работы с ucLibC, и что планируется использовать в дальнейшей адаптации для работы на программных платформах QNX и MS Windows.
Работа на одноплатных ПК была расширена платами Raspberry Pi и Orange Pi.
Поддержка Linux смартфорнов Nokia дополнена последним, основанным на MeeGo 1.2, это — Nokia N9. Или это было обновление поддержки Nokia N950.
Кроме непосредственной работы (нативно) на различных платформах, был значительно расширен Web-интерфейс, который сейчас реализует все общие возможности концепции среды визуализации и управления (СВУ).
4.3 Оптимизация, стабилизация и продуктивность
Значительной стабилизации ядра OpenSCADA, и программы в целом, достигнуто через унификацию контроля внутренних ресурсов и расширения возможностей отладки пользователем. В общем, пользовательская диагностика и отладка расширена:
- общим включением-выключением отладки и целевым контролем узлов отладки;
- особенной отладкой объектов контролеров источников данных;
- особенной отладкой исполнения проектов СВУ;
- формированием углублённой статистики исполнения динамических объектов OpenSCADA, таких как: объекты контроллеров источников данных и их параметров, входных и выходных транспортов, сеансов СВУ с детализацией до виджетов;
- протоколирование входного и выходного трафика транспортов.
Глубокой и всесторонней стабилизации претерпели почти все модули OpenSCADA и многие были оптимизированы, из которых особенно нужно отметить:
- Все модули БД — добавлена обработка и проверка ошибок БД или СУБД, а также выдача сообщений про эти ошибки в случае пользовательской загрузки и записи; увеличена производительность (до порядка) БД поддерживающих SQL, через реализацию режима предзагрузки сканирующего запроса;
- Вычислитель на основе Java-подобного языка (DAQ.JavaLikeCalc) — увеличена производительность через: сохранение контекста исполнения функции, предзагрузку постоянных и прямой доступ к строке.
- Архиватор на БД (Archive.DBArch) — значительно оптимизирована запись и чтение БД, а именно это: групповая запись нескольких архивов в одну таблицу и чтение блоками (кратными десяти) в одном запросе.
- Все транспорты — в целом увеличена производительность.
- Рабочий пользовательский интерфейс (WEB) (UI.WebVision) — увеличена чувствительность интерфейса использованием асинхронных запросов в общем цикле обновления.
Резервирование OpenSCADA станций.
Надёжность резервируемой станции в масштабе комплексного решения, точнее сохранение данных истории, была усовершенствована расширением механизма резервирования, который потенциально предусматривает резервирование любой подсистемы и реализует сейчас резервирование подсистем "Сбор данных" и "Архивы-История".
И, для программы в целом, был выполнен ряд формальных всесторонних тестов, которые были предварительно расширены во внутренней процедуре комплексного тестирования релиза OpenSCADA. В результате этих тестов было выявлено несколько ошибок, которые исправлены.
4.4 Сбор данных
Пользовательская объектная модель ядра OpenSCADA.
Учитывая ключевую роль сбора данных в программах такого роду, эта функция, в лице подсистемы "Сбор данных" и её модулей, получила значительные усовершенствования, из которых особенно нужно отметить: смещение акцента в расширении поддерживаемых источников данных из реализации отдельных модулей подсистемы "Сбор данных" на системном языке "C/C++", на их реализацию в окружении OpenSCADA и на её внутреннем языке — логический уровень OpenSCADA. Т.е., на логическом уровне OpenSCADA, может и реализуется все, что: для доступа к данным использует сеть, не требует использования специфических библиотек и функций и не является очень сложным. На данный момент, таким образом реализовано:
Низкоуровневые устройства подключенный к Raspberry Pi.
OpenSCADA на LCD экране Raspberry Pi.
- Отправка SMS сообщений (SMS) и электронных писем (SMTP).
- Источник Бесперебойного Питания (UPS), как объект данных с атрибутами и значениями.
- Простые сенсоры и датчики:
- Елемер TM510x;
- EDWARDS TURBOMOLECULAR PUMPS (SCU750);
- Sycon Multi Drop Protocol (SMDP);
- Блок питания турбо-молекулярного насоса (TMP-xx03);
- Измерение температуры IT-3 (IT3);
- IVE-452HS-02;
- OPTRIS CT/CTL;
- CTR 100, 101.
- Компьютер теплового счётчика VKT7.
- IEC-60870-104.
- Тестовые реализации и примеры: DCON, OWEN.
- Шина "One Wire" с помощью {DS9097,DS9097U} (1W_{DS9097,DS9097}) для чипов: DS1820, DS1820/DS18S20/DS1920, DS1822, DS2413, DS2408, DS2450, DS2438.
- Шина I2C: PCF8591, PCF8574, BMP180, DS3231, AT24C{32|64}.
- Общие порты ВВ (GPIO): DHT11,22 (AM23XX). GPIO|I2C: 1602A(HD44780).
Учитывая рост роли логического уровня OpenSCADA, выросли и требования к гибкости модели данных источников данных и в целом, что было удовлетворено:
- завершением покрытия внутренней модели данных всеми функциями, характерными для области применения;
- добавлением иерархичности к параметрам объектов контроллеров источников данных;
- добавлением возможности произвольного и динамического формирования модели данных — набору атрибутов параметров.
Внутренний язык программирования OpenSCADA приобрёл значительные усовершенствования и, сейчас, удовлетворяет всем требования отраслей применения OpenSCADA. Многие из этих усовершенствований попали в предыдущую версию 0.8.0 LTS, а ряд из них не мог туда попасть из-за нарушения обратной совместимости или недостаточной стабильности на то время. Из этих, существенных усовершенствований, нужно ещё раз отметить: увеличение разрешающей способности данных внутреннего окружения OpenSCADA целого типа до 64 разрядов и сохранение контекста исполнения внутренних процедур.
4.5 Графическое окружение
Диалог выбора проектов OpenSCADA.
Пользовательский контроль вида интерфейса Qt.
В целом, графическое окружение получило значительное развитие и главным из них стало расширение модуля запуска Qt-интерфейса, как основы для остальных локальных. В первую очередь, этот модуль и ядро OpenSCADA адаптированы для возможности запуска библиотеки графической среды Qt в основном потоке программы, что исключило много проблем, связанных с исполнением в неглавном потоке, а также обеспечена работа с версией 5 этой библиотеки. Во вторых, этот модуль взял на себя роль интерфейса выбора проектов OpenSCADA при её запуске и переключении, а также создание новых. И в третьих, ввиду его первичности к запуску Qt, он получил функцию управления видом программы независимо от графического окружения и возможность его запуска-закрытия в системный лоток. Что в целом сделало возможным настройку OpenSCADA под персональные требования пользователя и адаптировать её к очень специфическим окружениям вроде Android.
Заметных усовершенствований получили модули конфигурации Qt и Web, где особенно нужно отметить:
- Конфигуратор-Qt (UI.QTCfg): осуществление запросов к удалённым станциям в отдельном потоке от потока Qt, что сделало его удобнее и более прогнозируемым и что даже, вместе с одним из обновлений, попало в предыдущую стабильную версию 0.8.0 LTS.
- Конфигуратор-WEB (UI.WebCfgD): в целом, был полностью обновлен на предмет интерфейса, который сейчас является более динамическим, удобным и может быть расширен темами.
Заметных усовершенствований также получила среда визуализации и управления (СВУ), в составе всех её модулей:
- Движок СВУ и модули визуализаторов вообще (UI.VCAEngine):
- позволяет осуществлять полноценную-горячую разработку, т.е. — редактирование проекту СВУ на момент его исполнения сеансами;
- оригинальные сообщения интерфейса являются полностью откорректированными, грамматически и орфографически корректными для Английского языка;
- предоставлено ряд дополнительных видов примитива "Элементы формы", "Диаграмма" и расширено примитив "Text" отображением "HTML";
- предоставлено механизм специфических для визуализатора атрибутов виджетов, что позволило раскрыть и использовать их индивидуальные свойства;
- новый-гибкий механизм сообщений пользователя про внештатные события в контролируемом системой процессе, который предусматривает возможность свободного формирования пользовательских извещателей с нужными свойствами, как: моно-тонный сигнал, синтез речи.
- Визуализатор-Qt (UI.Vision):
- заметно улучшена работа исполнения удалённых интерфейсов и обеспечено осуществление запросов к удалённой станции в отдельном потоке от потока Qt, что упростило удалённую разработку с параллельным исполнением проекта;
- формирование примитива "Документ" может осуществляться с помощью WebKit.
- Визуализатор-WEB (UI.WebVision):
- унифицирован, оптимизирован и расширен использованием CSS3;
- предоставлена реализацию всех элементов-примитивов унифицированного интерфейса;
- осуществляется масштабирование до доступного пространства окна браузера;
- увеличена производительность работы и чувствительность интерфейса, через использование исключительно асинхронного механизма при обновлении.
Все Web-модули, в целом, получили возможность изменения вида посредством тем, через общесистемные интерфейсы модуля протокола HTTP и его механизмы обработки запросов и формирования ответов. Также, все они получили поддержку динамического перевода интерфейса, что особенно актуально для многопользовательских Web-интерфейсов и с чем Вы можете ознакомиться на демонстрационных Web-интерфейсах моделей OpenSCADA: АГЛКС, Котел. Добавлен также механизм разделения доступа по страницам, который, кроме всего прочего, позволяет разграничить доступ к Web-модулям вообще.
5 Новые и значительно обновленные модули
В новой версии были добавлены новые модули и значительным образом обновлен ряд существующих:
- Добавлены новые модули:
- MMS(IEC-9506) (DAQ.MMS) — модуль поддержки обмена данных по протоколу "Manufacturing Message Specification (MMS, IEC-9506)".
- Comedi (DAQ.Comedi) — модуль поддержки источников данных реального времени (библиотека "Comedi"), которые основаны на платах сбора данных различных производителей и устанавливаются на шинах: ISA, PCI, PCMCIA и USB.
- SMH2Gi (DAQ.SMH2Gi) — модуль реализации доступа к аппаратным модулям источников данных ПЛК Segnetics SMH2Gi,SMH4 для "MC", "MR", а также взаимодействия с оригинальным окружением "SMLogix".
- Fastwel IO (DAQ.Fastwel) — модуль обмена данными с аппаратными модулями Fastwel IO.
- FT3 (АПСТМ) (DAQ.FT3) — модуль обмена данными с контроллерами АПСТМ, АСДКУ, СУАП.
- GPIO (DAQ.GPIO) — модуль доступа к GPIO одноплатных ПК вроде Raspberry Pi, Orange Pi и другие.
- Вычислитель на основе Java-подобного языка (DAQ.JavaLikeCalc) расширен: поддержкой внутренних функций, динамическим переводом сообщений и многими другими функциями интерфейса пользовательского программирования в целом.
- Шлюз источников данных (DAQ.DAQGate) расширен шлюзованием сообщений, связанных с выбранным источником данных.
- Сбор данных ОС (DAQ.System) расширен источниками данных: "Файловая Система", "ИБП", "QSensor" и возможностью отделения медленных источников от быстрых.
- ModBus ({DAQ,Protocol}.ModBus) расширен поддержкой строки, как последовательности значений регистров.
- Клиент DCON (DAQ.DCON) значительно расширен поддержкой специфических модулей.
-
Роли OpenSCADA как OPC-UA сервер.
OPC-UA (DAQ.OPC_UA) значительно расширен публикацией и поддержкой "кусков" в клиентской части сервиса, специфический код протокола выделен в библиотеку.
- Оборудование ICP_DAS (DAQ.ICP_DAS) значительно расширен, а фактически полностью переписан, поддержкой всех присутствующих плат сбора данных от фирмы ICP_DAS для серии I8k, I-87k, на шине ISA и унифицированные типы для стандартных модулей серии I7k.
- Siemens S7 ПЛК (DAQ.Siemens) значительно расширен собственной реализацией ISO-TSAP.
- Diamond платы сбора данных (DAQ.DiamondBoards) значительно расширен, а фактически полностью переписан, поддержкой всех присутствующих плат сбора данных от фирмы Diamond Systems.
- Устройства АСКУ (DAQ.AMRDevs) реализована поддержка счётчика Контар (МЗТА).
- Все модули БД значительно расширены динамическим переводом.
- Архиватор на БД (Archive.DBArch) расширен архивацией нескольких архивов в одну таблицу и восстановлением перечня архивов из информации в БД.
- Архиватор на ФС (Archive.FSArch) добавлена поддержка промежуточных типов "Int16", "Int32", "Int64", "Float", "Double" и дополнен абсолютным ограничением размера архива на диске.
- Все модули транспортов расширены режимом пулинга входных транспортов и протоколов.
- Сокеты (DAQ.Sockets) расширен поддержкой шины RAWCAN и инициативным подключением входного транспорта.
- Последовательный интерфейс (Transport.Serial) расширен поддержкой низкоуровневой шины I2C; специальными пользовательскими функциями последовательного интерфейса: "sendbreak", "TS", "DR", "DCD", "RI"; расширенным управлением RTS для RS-485.
- Слой безопасных сокетов (Transport.SSL) расширен поддержкой: TLSv1.1, TLSv1.2, DTLSv1.
- Собственный протокол программы (Protocol.SelfSystem) расширен иерархическим и многоуровневым направлением запросов на внешние хосты.
- HTTP (Protocol.HTTP) расширен адаптивностью к интерфейсам пользователя в системных диалогах и предоставлением общего API построения HTTP-интерфейсов как для пользователя, так и модулям за ним.
- Программный конфигуратор (Qt) (UI.QTCfg) запросы интерфейса управления OpenSCADA вынесены в отдельный поток и улучшена реализация элементов контроля.
- Программный конфигуратор (Динамический WEB) (UI.WebCfgD) расширен новым дизайном с использованием CSS3 и возможностей современных WEB-браузеров.
- Концепция и движок среды визуализации и управления (UI.VCAEngine) расширен: поддержкой специфических для визуализатора атрибутов виджетов, реализацией нового-гибкого механизма уведомления пользователя, фоновым (в отдельном потоке) исполнением задачи формирования документов, увеличением количества трендов на одном кадре до 100 и поддержкой логарифмической шкалы примитива "Диаграмма".
- Рабочий пользовательский интерфейс (Qt) (UI.Vision) расширен: для работы в сети через сервер визуализации; реализацией группы специфических этого визуализатора атрибутов; реализацией видов "Дерево", "Таблица" и расширением вида "Кнопка", примитива "Элементы формы"; реализацией вида "XY" примитива "Диаграмма"; значительным рефакторингом кода примитива "Элементарная фигура".
- Рабочий пользовательский интерфейс (WEB) (UI.WebVision) расширен использованием CSS3 и возможностей современных браузеров, а именно: добавлено масштабирование к доступному пространству окна браузера, реализованы все примитивы унифицированного интерфейса.
- Библиотека функций системного API среды пользовательского программирования (Special.FLibSYS) расширен функциями и объектами: "floatExtract", "md5", "tmSleep", объект "IO"; значительно расширены существующие функции и объекты: "dbReqSQL", "FFT", "strParse", "strDec4Bin".
6 Выводы
По пути к новому релизу 0.9 LTS промышленного назначения осуществлена большая работу по стабилизации, расширению функциональных возможностей, а также расширению адаптационных возможностей к работе на альтернативных платформах. Всё это в целом ещё больше расширило границы полноценного применения OpenSCADA на всех уровнях систем промышленной автоматизации и смежных направлениях автоматизации и автоматики.
LTS версии OpenSCADA не являются пустым звуком, они реально поддерживаются всё время, до следующей LTS версии, и поддержка этой версии ещё будет расширена сервисными обновлениями. Также, будет осуществлёно смещение акцента и политики внедрения LTS версии, которая до этого рекомендовалась к обновлению конфигураций с замороженными библиотечными БД, на приоритет в использовании на широком спектре новых решений.
Предадаптация OpenSCADA к работе на QNX.
В появлении новой промышленной версии OpenSCADA 0.9 LTS приняли участие:
- Роман Савоченко: основной объём работ по разработке, тестированию, сборке, документированию и переводу программы и документации тремя языками.
- Максим Кочетков: реализация модулей DAQ.Fastwel, DAQ.FT3; расширение модуля Transport.Sockets поддержкой RAWCAN и модуля Transport.Serial расширенным управлением RTS для RS-485.
- Арсен Закоян: реализация поддержки счётчиков электроэнергии "Меркурий 200" и "Меркурий 230".
- Руслан Ярмолюк: реализация поддержки счётчика электроэнергии NIK 2303.
- Алмаз Каримов: расширение модуля реализации протокола DCON.
- Аркадий Кисель: реализация поддержки I2C сенсора температуры, барометрического давления и влажности BME280.
- Константин (IrmIngeneer): поддержка сборки OpenSCADA на дистрибутиве Linux Gentoo.
- Сергей Дорошка: предварительная адаптация OpenSCADA к работе на QNX.
- Организации, которые содействовали наиболее значительному усовершенствованию OpenSCADA через её интеграцию в собственные системы управления:
- Proviron Holding NV: приобретение пакетов технической поддержки для общей поддержки, исправления и улучшения реализации протокола Siemens ISO-TSAP(ProfiNet), некоторых наработок около Raspberry Pi, 2014, 2016-2018.
- Лаборатория вакуумных технологий: "Вакуумная технологическая установка", 2011-2018, и финансирование оборудования сервера OpenSCADA, 2014.
- Оптима: "Система Автоматизации Метрополитена", 2016.
- Вектор: приобретение пакетов технической поддержки для исправления и улучшения реализации OPC-UA в работе с разными OPC-UA клиентами и серверами, 2015-2016.
- Краматорсктеплоэнерго+ДІЯ: "САУ шаровых барабанных мельниц ШБМ 287\410 котлоагрегата №8 БКЗ 160–100 ПТ", 2015, та "САУ Фосфатирования, Амминирования и Гидразина котлоагрегатов БКЗ 160–100 ПТ", 2014. В качестве ПЛК использован ICP-DAS LP-8781 с OpenSCADA в роли среды исполнения ПЛК.
- Хартрон: "Система Контроля Реактивности (СКР) Ядерной Подкритической Установки (ЯПУ)", 2013-2015.
- Много других организаций и отдельных пользователей, которые пожелали остаться анонимными, через приобретение технической поддержки и услуг, конструктивные отзывы внедрения и эксплуатации.
Последующие усилия разработки будут направлены на:
- Завершение ревизии основной документации, в основном по модулям и библиотекам.
- Чёткое определение и обновление политики предоставления коммерческих услуг вокруг проекта OpenSCADA:
- пересмотр и обновление условий пакетов технической поддержки;
- политика и организация сборок обновлений к стабильной ветви: сохранение истории всех публичных обновлений и организация сервисных;
- дистрибуция исключительно коммерческих сборок с публичными демонстрационными на примере пакетов для Android — разработка и формирование механизма контроля за сроком пакета технической поддержки и демонстрационного режиму.
- Освоение и адаптацию к отрасли "Управление ресурсами предприятия (ERP)" с направленностью на:
- создание интерфейса управления ресурсами на сервере проекта;
- создание общего интерфейса контроля задач и их финансирования, с организацией разработчиков к привлечению исполнения этих задач и технической поддержки.
- Расширение функций применения в отраслях "Умный дом", "Домовая автоматика" и "Бытовые роботы".
- Адаптацию к работе в окружении операционных систем QNX и MS Windows.
7 Обновления
7.1 [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.2 [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.2.1 Сервисные обновления
7.3 [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().
Система
- FIX: Сборка:
- FIX:configure.ac: Версия библиотеки ядра увеличена до 3:8:0 и версия программы увеличена до 0.9.2.
- Модульную версию подсистемы "БД" увеличено до 14, подсистемы "Транспорты" увеличено до 16.
- data/ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}: Входные транспорты Сокетов унифицированы в названиях "WEB" и "CNTR".
- data/ModelsDB/AGLKS/St.sql: Входные транспорты SSL унифицированы в названиях "WEB" и "CNTR" и обновлены установкой KeepAlive таймаута в 60 и SSL-сертификата.
- data/{oscada_start,oscada_server,oscada_plc}.xml:
- Входные WWW-транспорты унифицированы, где "WEB_1" переименован в "WEB" и удалён "WEB_2".
- Дополнено выключенными записями БД стандартных библиотек OpenSCADA.
- /oscada_start.xml: Дополнено выключенными входными транспортами "WEB" и "CNTR". Дополнено архиваторами значений FSArch.{SYS,alarms,actions} и архиваторами сообщений FSArch.{1s,1m,1h}.
- FIX:data/openscada-proj.in,UI.QTStarter: Реализация встроенного резервирования.
- FIX:data/openscada-proj.in: Дополнено командами "backup", "backupRestore", "backupList" реализации резервирования проектов.
- UI.QTStarter: Дополнено вызовом команд резервирования из менеджера проектов - перечня проектов.
- .,DB,DAQ.{LogicLev,ModBus,Siemens},UI.{QTCfg,WebCfgD}: Реализация механизма междустанционного копирования узлов интерфейса управления.
- .,UI.QTStarter: Запуск OpenSCADA с GUI модулем в основном потоке значительно пересмотрен на предмет:
- ранней регистрации GUI модуля в основном потоке непосредственно самим этим модулем и в функции postEnable();
- адаптации функции perSYSCall() к использованию при обновлении GUI модуля в основном потоке, в основном его заставки (сплеша), в течении запуска и останова (из сервисной задачи) и при загрузке конфигурации (для переключения на заставку запуску);
- включения динамического отображения сообщений для режима исполнения в основном потоке;
- унификации отображения заставки в обоих режимах.
- .,Protocol.SelfSystem,DAQ.AMRDevs: Доступ клиента к интерфейсу управления OpenSCADA расширен множественной аутентификацией, что исключает использование прямых запросов к интерфейсу управления OpenSCADA с аутентификацией в каждом запросе, часто в UI.Vision.
- FIX:TRegExp: Исправлена обработка шаблонов, добавлением обработки символа окончания, таким образом предотвращая коллизии чёткого определения объектов в TController::alarmSet().
- FIX:LibsDB.OscadaLibs.doc.diagram,UI.{Vision,WebVision}: Предотвращено двойную подстройку шкалы значений для процентной шкалы и дополнено расширением диапазона значений.
- FIX: Обработка предков в функции TCntrNode::isModify() разрешено только для узлов в состоянии "Включено".
БД
- Создан новый модуль "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.3.1 Сервисные обновления
7.4 [08.04.2020] ПЕРВОЕ обновление
Обновление осуществлено после 1.5 года от релиза 0.9 LTS, соответственно оно стоит 10 обновлений, поскольку им исправлено более 250 ошибок и добавлено множество усовершенствований, которые целиком вы можете почитать в протоколе изменений обновления.
Ключевыми свойствами обновления является:
- значительное расширение и стабилизация Web-интерфейса в течении практической эксплуатации в большом распределённом решении, построенном на основе модуля UI.WebVision; также расширение и стабилизация горячей разработки в течении множественного исполнения разрабатываемого проекта;
- тестирование, исправление и расширение резервирования в части сообщений, также благодаря практической эксплуатации в большом распределённом и ещё резервированном решении, в части обще-системного кода и модуля DAQ.ModBus;
- полная реструктуризация, усовершенствование и дополнение библиотек OpenSCADA в SQLite файлах;
- общее улучшение документации, дополнение документацией всех библиотек и ревизия большинства документации модулей.
7.4.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.4.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.4.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.4.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.4.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.4.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.4.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.4.8 Транспортные Протоколы
- FIX:HTTP: Дополнено корректной поддержкой KeepAlive, функциями входных транспортов keepAliveTm() и keepAliveReqs(). Расширено таблицей БД "HTTP_AuthSessions" внешних сеансов аутентификации.
- FIX:ModBus: Входная часть расширена использованием DAQ-шаблонов.
- Перечень типов данных таблицы ВВ дополнен типом "Объект".
- Определение варианта протокола по входным запросам несколько улучшено определением отличия вариантов RTU и TCP, через учёт типа транспорта.
- UserProtocol: Расширено поддержкой DAQ-шаблонов.
- SelfSystem: Расширено поддержкой попыток выходных транспортов.
7.4.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.4.10 Специальные
- FIX:FLibSYS:
- FIX:IO: write() исправлено относительно получения типового типа данных, получение ошибочных данных сделано безопасным.
- CRC: Завершено использованием нормальных полиномов, входных и выходных относительностей и XOR для выхода.
- VArchObj: Доступ к функции записи в архив ограничен только пользователями в группе "Архив".
7.4.11 Сервисные обновления
8 Ссылки