Contents
- 1 Введение
- 2 Реализация плановых задач
- 3 Оптимизация, повышение стабильности, устойчивости и производительности системы
- 4 Усовершенствование и стабилизация графической подсистемы
- 5 Формирование, расширение и стабилизация API пользовательского программирования
- 6 Общесистемные расширения
- 7 Публикация решений OpenSCADA
- 8 Заключение
- 9 Обновления
- 9.1 [06.06.2018] ДВАДЦАТОЕ (20) последнее обновление
- 9.2 [29.12.2017] ДЕВЯТНАДЦАТОЕ (19) обновление
- 9.3 [02.07.2017] ВОСЕМНАДЦАТОЕ (18) обновление
- 9.4 [12.02.2017] СЕМНАДЦАТОЕ (17) обновление
- 9.5 [28.06.2016] ШЕСТНАДЦАТОЕ (16) обновление
- 9.6 [28.06.2016] ПЯТНАДЦАТОЕ (15) обновление
- 9.7 [07.11.2015] ЧЕТЫРНАДЦАТОЕ (14) обновление
- 9.8 [14.05.2015] ТРИНАДЦАТОЕ (13) обновление
- 9.9 [27.12.2014] ДВЕНАДЦАТОЕ (12) обновление
- 9.10 [21.07.2014] ОДИНАДЦАТОЕ (11) обновление
- 9.11 [09.05.2014] ДЕСЯТОЕ (10) обновление
- 9.12 [21.12.2013] ДЕВЯТОЕ (9) обновление
- 9.13 [16.09.2013] ВОСЬМОЕ (8) обновление
- 9.14 [11.07.2013] СЕДЬМОЕ (7) обновление
- 9.15 [12.05.2013] ШЕСТОЕ (6) обновление
- 9.16 [02.02.2013] ПЯТОЕ (5) обновление
- 9.17 [13.11.2012] ЧЕТВЁРТОЕ (4) обновление
- 9.18 [08.09.2012] ТРЕТЬЕ (3) обновление
- 9.19 [09.07.2012] ВТОРОЕ (2) обновление
- 9.20 [09.06.2012] ПЕРВОЕ (1) обновление
- 10 Ссылки
1 Введение
Релиз открытой SCADA(Supervisory control and data acquisition) системы версии 0.8.0 является стабильным промышленным релизом продолжительной поддержки (LTS).
Основной целью данного релиза является предоставление сообществу пользователей и разработчиков свободного программного обеспечения (ПО) стабильной платформы для построения решений комплексных систем автоматизации и других смежных решений, а также предоставления коммерческих услуг на основе проекта OpenSCADA.
Данный релиз является следующим стабильным релизом, для которого предоставляется техническая поддержка от разработчиков и для которого планируется выпуск исправлений в течение продолжительного времени. Жизненный цикл предыдущего стабильного релиза 0.7.0 продолжительной поддержки (LTS) будет прекращён в течении месяца после выпуска 0.8.0 последним обновлением.
Данный документ является обработкой(компиляцией) документа "ChangeLog" системы OpenSCADA версии 0.8.0, включая промежуточные рабочие релизы 0.7.1 и 0.7.2, который призван вкратце и наглядно осветить новые возможности системы OpenSCADA. Детально ознакомиться с изменениями можно в файле "ChangeLog" из дистрибутива системы или здесь: http://oscada.org/svn/tags/openscada_0.8.0/ChangeLog.
Ключевыми особенностями данной версии являются:
- Реализация плановых задач.
- Оптимизация, повышение стабильности, устойчивости и производительности системы.
- Усовершенствование и стабилизация графической подсистемы.
- Формирование, расширение и стабилизация API пользовательского программирования.
- Общесистемные расширения.
- Публикация решений OpenSCADA.
Новые и обновленные модули:
- Archive.DBArch (0.9.5) — Добавлены лимиты запроса данных по времени запроса и ещё некоторые расширения.
- Archive.FSArch (1.5.1) — Значительная стабилизация. Множество расширений, в том числе:
- Повышение производительности чтения индексов файлов архивов значений.
- Адаптация хранения и чтения вещественного к ARM FPA.
- Добавлены лимиты запроса данных по времени запроса.
- Добавлен лимит на общий размер файлов архиватора значений.
- DB.MySQL (1.7.1) — Стабилизация. Добавлена возможность указания таймаутов подключения.
- DB.SQLite (1.6.4) — Стабилизация.
- DB.FireBird (0.9.7) — Стабилизация.
- DB.PostgreSQL (0.9.2) — Стабилизация.
- DAQ.DiamondBoards (1.2.5) — Добавлена возможность смены типа параметра. Стабилизация.
- DAQ.System (1.7.5) — Стабилизация. Зависимость от библиотеки "Libsensors" сделана опциональной. Добавлено планирование вызовов по CRON.
- DAQ.BlockCalc (1.6.0) — Стабилизация. Множество расширений, в том числе:
- Добавлена подсветка синтаксиса.
- Добавлено планирование вызовов по CRON.
- Добавлен запускающий и останавливающий вызов блоков.
- Добавлена поддержка объектного типа параметров.
- DAQ.JavaLikeCalc (2.0.0) — Значительная стабилизация. Множество расширений, в том числе:
- Добавлена подсветка синтаксиса.
- Выполнена адаптация к аппаратной архитектуре ARM.
- Добавлена реализация регулярных выражений и ряда расширений API пользователя.
- Добавлена возможность записи символов строки с помощью восьмеричного "\041" и шестнадцатеричного "\x21" числа.
- Добавлен прямой, динамический вызов библиотечных функций.
- Добавлено прямое объединение строковых констант.
- Добавлен условный вызов аргументов выражения (второго аргумента) с логическими операциями ||(OR) и &&(AND).
- Добавлена поддержка объектного типа параметров источника данных.
- DAQ.LogicLev (1.3.0) — Стабилизация. Множество расширений, в том числе:
- Добавлена возможность смены типа параметра.
- Добавлено планирование вызовов по CRON.
- Добавлена поддержка объектного типа параметров.
- DAQ.SNMP (0.7.0) — Значительная стабилизация. Множество расширений, в том числе:
- Реализация полной поддержки клиентской части протокола.
- Добавлена поддержка всех типов значений.
- Добавлена поддержка записи значений.
- Улучшена обработка ошибок.
- Добавлены дополнительные параметры конфигурации подключения.
- Добавлена возможность прямого запроса скаляров.
- DAQ.Siemens (1.4.0) — Значительная стабилизация. Множество расширений, в том числе:
- Версия библиотеки LibnoDave обновлена до 0.8.4.6.
- Добавлено планирование вызовов по CRON.
- Добавлена функция переподключения для "Industrial Ethernet" соединений.
- Добавлен вариант протокола ISO_TCP для S7-200.
- Добавлена поддержка объектного типа параметров.
- Добавлена реализация протокола "ADS".
- Несколько унифицированы ошибки подключения.
- Добавлена возможность установки номера БД и смещения в шестнадцатеричном виде.
- DAQ.ModBus (1.3.0) — Значительная стабилизация. Множество расширений, в том числе:
- Добавлена подсветка синтаксиса списка атрибутов.
- Добавлена поддержка типа параметра "Логический" для работы по шаблону параметра, а также функции пользовательского API для отправки произвольных нестандартных ModBus-запросов из шаблонов.
- Добавлена и использована функция формирования сообщений о нарушениях в контроллере.
- Добавлена поддержка функций групповой записи (0x0F, 0x10).
- Добавлен параметр установки ограничения размера блока групповых запросов.
- Добавлена поддержка объектного типа параметров.
- Размер максимального блока запроса сделан опциональным.
- Добавлена возможность комментирования элементов списка атрибутов стандартного типа параметра посредством символа '#' в начале.
- DAQ.DCON (0.5.1) — Модуль полностью переписан на предмет поддержки смешанных модулей посредством выбора команд запроса. Стабилизация.
- DAQ.ICP_DAS (0.8.0) — Добавлена библиотека API "ICP DAS" libi8k.a для архитектуры ARM и включена возможность сборки модуля для ARM. Сборка по умолчанию отключена для предотвращения попыток сборки на неподходящем ARM окружении. Стабилизация.
- DAQ.DAQGate (0.9.5) — Добавлен кеш параметров для их инициализации при автономной работе. Добавлено планирование вызовов по CRON. Стабилизация.
- DAQ.SoundCard (0.6.2) — Стабилизация.
- DAQ.OPC_UA (0.6.2) — Стабилизация. Добавлена подсветка синтаксиса списка атрибутов. Адаптация хранения и чтения вещественного к ARM FPA.
- DAQ.BFN (0.5.1) — Новый модуль.
- Transport.Sockets (1.5.1) — Значительная стабилизация. Добавлен таймаут повтора запроса исходящего транспорта.
- Transport.SSL (1.0.1) — Стабилизация. Некоторые улучшения.
- Transport.Serial (0.8.0) — Стабилизация. При инициализации порта использованы предыдущие настройки и реализована возможность опускать указание некоторых настроек. Добавлено управление потоком с помощью сигнала RTS для простых преобразователей сигналов RS232->RS485.
- Protocol.ModBus (0.6.4) — Стабилизация. Некоторые улучшения.
- Protocol.OPC_UA (0.6.2) — Стабилизация.
- Protocol.HTTP (1.6.0) — Стабилизация. Множество расширений, в том числе:
- Добавлена поддержка переменной HTTP "Transfer-Encoding=chunked" в исходящем транспорте.
- Добавлена поддержка пользовательских шаблонов для внутреннего содержимого модуля.
- Добавлена генерация сообщений аутентификации пользователей.
- Добавлена поддержка всех основных вариантов завершения строки при разборе HTTP-запроса.
- Protocol.SelfSystem (0.9.5) — Стабилизация.
- Protocol.UserProtocol (0.6.2) — Добавлена подсветка синтаксиса. Стабилизация.
- Special.FLibComplex1 (1.1.0) — Добавлен прямой, динамический вызов библиотечных функций.
- Special.FLibMath (0.6.0) — Добавлен прямой, динамический вызов библиотечных функций.
- Special.FLibSYS (1.0.0) — Добавлен прямой, динамический вызов библиотечных функций.
- Special.SystemTests (1.5.1) — Небольшие улучшения.
- UI.QTStarter (1.7.0) — Стабилизация. Значительные расширения и улучшения.
- UI.QTCfg (2.1.1) — Стабилизация. Значительные расширения и улучшения.
- UI.WebCfg (1.5.6) — Стабилизация.
- UI.WebCfgD (0.8.1) — Стабилизация. Значительные расширения и улучшения.
- UI.VCAEngine (1.3.0) — Стабилизация. Значительные расширения и улучшения.
- UI.Vision (1.3.0) — Стабилизация. Значительные расширения и улучшения.
- UI.WebVision (1.0.1) — Значительная стабилизация. Значительные расширения и улучшения.
- UI.WebUser (0.6.2) — Стабилизация. Добавлена подсветка синтаксиса процедур.
2 Реализация плановых задач
В соответствии с [/Works/RoadMap планом] релиза были выполнены следующие задачи:
- Формирование предоставления коммерческих услуг на основе OpenSCADA. — Выстроена концепция и созданы механизмы предоставления коммерческих услуг разработчиками на основе OpenSCADA (http://oscada.org/ru/uslugi).
- Адаптация системы OpenSCADA для работы на аппаратной платформе ARM. — Осуществлена сборка, адаптация и полномасштабное тестирование OpenSCADA на архитектуре ARM; адаптация и тестирование проводились на интернет планшете фирмы Nokia — N800 (http://wiki.oscada.org/Works/Tests/ARM). Выполнена сборка и адаптация OpenSCADA для сложного (очень старого) программного окружения контроллера LP-5451, а также сборка для контроллера SMH2Gi и смартфонов фирма Nokia: N900, N950, N9. В рамках сборки и адаптации на различные мобильные устройства были выполнены следующие задачи:
- SYS:
- Прототипы функций TMess::put(), TMess::get(), TCntrNode::grpSize(), TCntrNode::grpId(), TCntrNode::grpAt() изменены для исправления использования беззнакового типа "char" на ARM как знакового.
- Выполнена адаптация для сборки с GLibC версии меньше 2.5 (2.3.2).
- TVariant, DAQ.{AMRDevs, OPC_UA}: Исправлен невыравненный доступ к данным.
- DAQ.OPC_UA: Добавлены системные функции floatLE(), floatLErev(), doubleLE(), doubleLErev() для преобразования формата хранения вещественного числа на различных архитектурах.
- Добавлена адаптация к uClibc. Сборка начинается с версии 0.9.32, которая имеет поддержку функций реального времени вроде clock_nanosleep().
- Добавлена проверка и отключение использования "Iconv" и "Intl" (I18N) API.
- Добавлено автоматическое обнаружение и включение параметра конфигурации --enable-CrossCompile для окружения кросс-компиляции.
- Добавлен параметр конфигурации --enable-CoreLibStatic для отключения сборки разделяемой библиотеки ядра OpenSCADA и статической линковки программы вызова-запуска.
- Функция usleep() везде заменена на собственную функцию-обёртку TSYS::sysSleep() по причине отсутствия функции usleep() в uCLibc и доступности её только при специальной конфигурации сборки uClibc. В TSYS::sysSleep() использована nanosleep().
- Функция pthread_yield() заменена на sched_yield().
- DAQ:
- JavaLikeCalc: Виртуальная машина переписана для прямого использования структур команд с целью исключения проблемы выравнивания, а также для некоторого повышения производительности.
- Siemens: Исправлена проблема библиотеки NoDave на предмет глобального вызова команды упаковки структур "#pragma pack(1)".
- ICP_DAS: Добавлена библиотека API "ICP DAS" libi8k.a для архитектуры ARM и включена возможность сборки модуля для ARM.
- Archive:
- Прототипы функций TArchiveS::messPut() и TArchiveS::messGet() изменены для исправления переменной уровня сообщения как знакового числа.
- FSArch:
- Исправлено хранение вещественного числа формата LE в архиве на архитектуре ARM.
- В алгоритме быстрого подсчёта количества битов использовано функцию невыравненного чтения TSYS::getUnalign32().
- Размер поля кодировки в плоском архиве сообщения расширен с 9 до 99 символов.
- UI.QTCfg: Добавлено кратковременное засыпание после закрытия всех окон в функции отключения, с целью предоставить время окончательно разрушиться объектам всех окон и предотвратить падение.
- SYS:
- Реализация механизма откатов изменений редактирования в Vision. — В рамках окна визуального редактирования виджетов реализован многоуровневый механизм отката изменений для всех основных операций: визуальное изменение геометрии, изменение значения атрибута виджета, добавление/удаление виджета, копирование виджета и редактирование виджетов на основе примитива "ElFigure".
3 Оптимизация, повышение стабильности, устойчивости и производительности системы
С момента последнего стабильного релиза в процессе работ над данной версией, а также её практической адаптации, было обнаружено и исправлено в общей сложности более 300 ошибок. В целом была проделана работа по чистке кода от предупреждающих сообщений компилятора, с флагом "-Wall":
- удаление неиспользованных переменных;
- добавление возврата во всех функциях;
- инициализация переменных с возможностью их использования неопределёнными;
- исключение неполной обработки перечислимых типов в операции выбора;
- сравнение знакового с беззнаковым целым.
Перечислим наиболее существенные ошибки, исправление которых значительно отразилось на повышении стабильности:
- Общесистемные:
- Команда сборочной системы "$ make dist" исправлена и адаптирована для корректного создания дистрибутивов OpenSCADA.
- Функция TSYS::cron() для вызова по расписанию неоднократно исправлена.
- Тип переменной для хранения результата функции find() строки везде изменён на корректный "size_t".
- Исправлены внеплановые вызовы по расписанию, связанные с рассинхронизацией значений функций time() и clock_gettime(CLOCK_REALTIME,&sp_tm).
- Исправлена проверка и ожидание потоков на доступность при перекрытии с остановкой предыдущего одноимённого потока.
- Отключено ожидание инициализации для отсоединяемых задач с целью предотвращения зависания на ожидании быстро закрываемых задач.
- Исправлена работа функций невыравненного чтения getUnalign*() на ARM. Проблема обнаружена на PXA270.
- Function: Исключена возможность утечки памяти в случае попытки установить объект в необъектный параметр функции.
- DAQ.ModBus, Transport.Serial, UI.{WebCfg, WebCfgD, WebUser, WebVision}: Исправлено ошибочное использование символа завершения строки '\n' для множества программных платформ UNIX, MAC, DOS/Windows, путём замены на"\x0A" .
- ResString: Для чтения-записи строки использован оборот "string(vl.data(), vl.size())", с целью предотвращения COW алгоритма.
- Function: Исправлена проверка на модификацию при установке значений разных типов IO (Вещественное в Целое).
- Базы данных:
- DB.PostgreSQL: Исправлена обработка адреса БД на предмет определения пустых полей.
- Транспорты и протоколы:
- Transport:
- Исправлена загрузка всех транспортов из БД в случае наличия записей про транспорт, модуль которого отсутствует.
- Исправлено использование беззнакового типа в возврате функций read() и write(). Добавлены ресурсы к счётчикам входных/выходных запросов.
- Включена возможность прерывания исходящего транспорта сигналом на ожидании таймаута. Полезно для прерывания транспорта при выходе/останове.
- Sockets:
- Исправлен пропуск инициализации размера возвратного значения для функции getsockopt().
- Исправлено закрытие клиентского соединения по таймауту времени жизни, для подключений при отсутствии данных.
- Unix-сокет установлен в неблокирующий режим посредством флага O_NONBLOCK. Исправлено формирование сообщений об ошибках для исходящих транспортов.
- Serial: Установлен флаг O_NONBLOCK для функции open() последовательного устройства с целью предотвращения блокирования открытия порта на некоторых USB->RS485 преобразователях.
- Sockets, SSL: Добавлена очистка входного буфера для предотвращения повторного использования на высоколатентных каналах после таймаута.
- Transport, DAQ.{AMRDevs, DCON, ICP_DAS, ModBus, OPC_UA}, Protocol.HTTP: Исправлено использование функции TTransportOut::messIO() при запросе хвоста и получении нулевого ответа.
- Protocol.HTTP, UI.{WebCfg, WebCfgD, WebVision, WebUser}: Исправлен разбор элементов POST-запроса на предмет разбора всех атрибутов каждого элемента.
- Transport:
- Сбор данных и архивы:
- Archive:
- Исправлено использование буфера мягкой сетки с низким и высоким разрешением времени в архивах значений.
- Исправлено вычисление начала архива в функции begin() при пустом буфере.
- FSArch:
- Исправлено создание файлов архива сообщений при помещении множества старых сообщений. Добавлен параметр предотвращения дубликатов.
- Результат функции fgetc() записан в целочисленную переменную вместо символьной, что исправило обнаружение "EOF".
- Исправлено чтение данных из буфера архива в соответствии с размером буфера в алгоритме быстрого вычисления количества битов.
- Исправлено помещение смещения в кеш из алгоритма быстрого вычисления количества битов.
- Исправлена некорректная обработка конца невыравненных блоков быстрого алгоритма подсчёта количества битов.
- Добавлен монопольный ресурс к вызову функции calcVlOff() с целью предотвращения некорректной работы с кешем.
- DAQ:
- System: Исправлено падение при выходе для источника "Hddtemp".
- ModBus: Режим установки значений атрибутов параметров изменён на активный и улучшена обработка ошибок.
- JavaLikeCalc:
- Добавлена проверка индекса при доступе к символу строки по индексу с целью предотвращения выхода за диапазон.
- Исправлено падение функции replace() объекта "RegExp".
- Siemens:
- Исправлено получение и запись значений вещественных типов.
- Исправлено переподключение в случае ошибки.
- Исправлено использование свойства размера целого, вещественного и строкового типов.
- Добавлена очистка связей параметра при его выключении.
- Archive:
- Интерфейсы визуализации:
- VCAEngine:
- Исправлено блокирование сеанса для динамически активных проектов при динамическом доступе к собственным атрибутам виджета.
- Предотвращена возможность потери изменений в сервере визуализации при отображении в визуализаторах путём предварительного сохранения значения тактового счётчика в сервисном запросе "openList".
- Ресурсы атрибутов виджетов сделаны более прозрачными (посредством использования рекурсивного мютекса) и использован один общий ресурс, для сеансов и другого, с целью предотвращения перекрёстного блокирования одной задачи другой.
- Vision, WebVision:
- Повышено разрешение координат всех виджетов до трёх знаков после запятой с целью обеспечения нормального позиционирования на больших масштабах.
- Исправлен доступ за границу вектора при отрисовке графиков примитива "FormEls".
- Исправлено обновление изображения примитива "Элементарная фигура" при изменении масштаба.
- Исправлено обновление примитива "Протокол" по времени и размеру.
- Vision:
- Исправлено падение сеанса для проектов с периодом исполнения более 500 мс.
- Реализована доводка координат фигур примитива "Элементарная фигура" к остатку положения виджета.
- Масштабирование текста примитива "Текст" изменено на изменение размера шрифта вместо масштабирования конечного изображения, что повысило общее качество отображения шрифта.
- WebVision:
- Удалена проверка попадания точек фигур в область отображения примитива "Элементарная фигура". Данная функция переложена на библиотеку GD.
- Исключена возможность падения для примитивов "Diagram" или "ElFigure" в случае передачи некорректных значений атрибутов изображения "xSc" или "ySc" из Web-браузера.
- Исправлено открытие и замена корневой страницы.
- Исправлена обработка масштаба вложенных страниц с учётом масштаба корневой.
- Исправлена очистка хвоста примитива "Протокол".
- VCAEngine:
Оптимизация и повышение производительности:
- SYS:
- Механизм ресурса объекта "ResString" заменён с RW-блокировок на мютекс с целью повысить производительность и сократить потребление памяти.
- TConfig: Объект элемента конфигурации (TCfg) основан на TVariant. Доступ к объекту "TCfg" сделан прозрачным, что позволяет использовать связи без базовых типов.
- Механизм хранения дочерних узлов в карте по ключу "string" изменён на тип ключа "const char*". Все узлы адаптированы к константности идентификатора.
- Archive.FSArch: Обработка индексной таблицы архива значений значительно ускорена посредством использования быстрого алгоритма вычисления количества битов в 32-разрядном целом.
- UI.WebCfgD:
- Добавлено изменение размера иконок на стороне сервера с целью снижения трафика.
- Использован групповой запрос содержимого страниц для значительного повышения производительности на медленных и высоколатентных каналах.
- UI.QTCfg:
- Использован групповой запрос к интерфейсу управления для повышения производительности на медленных и высоколатентных соединениях.
- Исключён многократный запрос элементов выборных колонок таблиц.
- UI.Vision: Повышена производительность отрисовки заполнений примитива "ElFigure".
- UI.VCAEngine:
- Выполнены мероприятия по повышению скорости запуска сеанса проекта в числе:
- Пропущена инициализация базовых атрибутов ввиду их последующего наследования.
- Удален перевод некоторых сообщений времени исполнения сеанса.
- Реализовано включение только нужных страниц при запуске сеанса. Остальные страницы исполняющегося сеанса включаются по мере обращения к ним. Это позволило значительно повысить скорость запуска сеанса, а также уменьшить зависимость скорости запуска от сложности проекта визуализации.
- Реализация архивного режима примитива "Документ" изменена на прямую работу с БД, что позволило расширить глубину архива до 1000000 документов и без ущерба для оперативной памяти.
- Выполнены мероприятия по повышению скорости запуска сеанса проекта в числе:
4 Усовершенствование и стабилизация графической подсистемы
Заметная работа была выполнена в рамках графической подсистемы, а именно в модулях движка СВУ UI.VCAEngine, визуализаторов UI.Vision и UI.WebVision, а также конфигураторах. Внесённые изменения были направленны на стабилизацию, оптимизацию потребления памяти и улучшение пользовательских свойств.
Улучшения графической подсистемы:
- Добавлено API подсветки синтаксиса. На основе данного API подсветка синтаксиса добавлена в:
- DAQ:
- BlockCalc: Подсветка синтаксиса в описании атрибутов параметров.
- JavaLikeCalc: Подсветка синтаксиса к компилятору языка JavaLikeCalc.JavaScript, а также ко всем текстовым полям, использующим этот язык внутри модуля.
- ModBus, OPC_UA: Подсветка синтаксиса списка атрибутов.
- Protocol.UserProtocol: Подсветка синтаксиса к текстам процедур протокола.
- UI:
- QTCfg: Отображение многоуровневой подсветки синтаксиса, передаваемой из модели данных в виде правил регулярных выражений.
- VCAEngine: Подсветка синтаксиса к текстовым атрибутам примитивов виджета, для которых это нужно.
- Vision: Подсветка синтаксиса к текстовым атрибутам примитивов виджета, а также текстам программ виджетов.
- WebUser: Подсветка синтаксиса процедур формирования Web-интерфейса.
- DAQ:
- UI.QTStarter:
- Адаптация для ARM.
- Шрифт сообщение в "сплеше" зафиксирован в размере 10 пикселов для обеспечения единообразного отображения.
- Реализован останов OpenSCADA в случае закрытия последнего окна диалога выбора QT UI-модулей.
- Реализован проброс параметров командной строки QT4 из OpenSCADA (например, --qws и --style в -qws и -style).
- UI.QTCfg:
- Добавлена возможность ручного изменения высоты текстовых и табличных полей. Изменение осуществляется схватыванием и перетаскиванием нижнего края поля.
- Адаптация для ARM.
- Групповой запрос "CntrReqs" использован для запроса контекста страницы.
- Добавлено ограничение на высоту строк таблиц в половину высоты таблицы.
- Введено ограничение на размер диалога ввода и включено адаптивное определение его размера по содержимому.
- У элементов доступных для изменения высоты пользователем для обеспечения работы везде установлен фиксированный стиль "StyledPanel".
- Добавлена функция полнотекстового редактирования текста ячеек таблиц.
- Движок воспроизведения правил подсветки синтаксиса полностью переписан для упрощения и предотвращения скрытых ошибок.
- UI.{VCAEngine, Vision, WebVision}:
- Исправлено обращение за границы массива (вектора) при построении трендов примитива "Диаграмма".
- Добавлено и реализовано свойство ширины графика примитива "Диаграмма".
- Добавлена периодическая проверка дерева виджетов страницы с целью обнаружения факта удаления виджетов путём запроса полного перечня виджетов.
- Реализовано отображение графиков группы графиков примитива "Диаграмма" в шкале значения в случае отличия шкал всех графиков не более чем на 20%.
- Добавлена и реализована возможность выбора режима подтверждения для элементов редактирования строки и текста примитива "Элементы формы".
- Исправлена возможность потери некоторых изменений в модели при отображении их в визуализаторах.
- Добавлено и реализовано свойство количества значений на пиксел в графиках примитива "Диаграмма" с целью управления детализацией экспорта в CSV и т.д.
- Реализована логарифмическая шкала значений для графиков примитива "Диаграмма".
- Добавлено и реализовано свойство сохранения соотношения сторон главной страницы при разворачивании главного окна исполнения сеанса проекта.
- Добавлен новый тип "Полное Видео" в примитиве "Медиа". Для реализации в UI.Vision использован медиа-движок "Phonon".
- Добавлено поле свойств архива "prm{X}prop" в примитиве "Диаграмма", которое заполняется значением доступной глубины и периодичности архива.
- UI.VCAEngine:
- Добавлены специфические свойства к атрибутам примитивов вроде помощи и подсветки синтаксиса.
- Реализовано включение страниц сеанса проекта по надобности с целью повышения скорости запуска и оптимизации использования оперативной памяти.
- Примитив "Документ" переделан для ведения архивов, архивного режима полностью в БД, а также добавлена функция пользовательского API для доступа к элементам архива.
- Добавлена периодическая (30 минут) проверка и закрытие уже неиспользованных (потерянных) сеансов проектов.
- Удалён предыдущий (противоречивый) механизм отката удаления вложенных виджетов и заменён полноценным механизмом откатов в визуализаторе UI.Vision.
- Выполнена оптимизация использования памяти элементами сеанса до 20%.
- Удалена поддержка первой, устаревшей, версии структуры БД среды визуализации.
- Добавлено ограничение на время генерации документов в примитиве "Документ" в 5 секунд.
- Добавлена поддержка типа атрибутов "Объект" и "Текст".
- Отключена принудительная инициализация новых пользовательских атрибутов в EVAL.
- Добавлена контекстная подсказка к атрибутам примитивов виджетов.
- Примитив "Документ" переключен в режим полного разбора XML с целью полноценного сохранения разметки XHTML.
- Добавлена индикация состояния корректности ссылок в виде "(+)" в конце.
- Добавлено перенаправление необработанных событий к странице выше. Это позволяет глобально обрабатывать события на самой верхней странице.
- Добавлена возможность установки связи между виджетами типа "wdg:" как в виде абсолютной, так и относительной формы.
- Добавлена поддержка типа связи "arh:".
- Добавлена поддержка объектного типа параметров источника данных.
- UI.Vision:
- Добавлено отображение помощи по атрибутам виджета.
- Адаптация для ARM.
- Добавлена индикация сообщения о потере соединения с сервером визуализации, а также восстановление при удалённой визуализации.
- Добавлен отдельный полнотекстовый редактор для текстовых атрибутов.
- Добавлена реализация полноценных откатов и повторов изменений при визуальном редактировании виджетов.
- Улучшения в отзывчивости и обновлении изменений в сеансе исполнения проекта: оптимизирована производительность отрисовки примитива "ElFigure", обработка изменения уровня виджета "geomZ".
- Добавлен экспорт в CSV формат из примитивов "Диаграмма" и "Документ".
- Введено ограничение на размер диалогов ввода и включено адаптивное определение их размеров по содержимому.
- Полностью переписан механизм исполнения правил подсветки синтаксиса.
- Добавлено создание нового сеанса после восстановления удалённого подключения и отсутствии предыдущего сеанса.
- Фон окна редактируемого виджета установлен в шаблон QT::Dense7Pattern с целью устранения возможного перекрытия по цвету.
- Добавлена обработка событий выбора виджета при нажатии в области скролинга, но за пределами виджета.
- Примитив "Элементарная фигура":
- Добавлен диалог установки свойств отдельно выбранных фигур.
- Выполнена реорганизация операций из диалога свойств и контекстного меню с динамическими и статическими свойствами.
- В процессе добавления фигуры реализована её отрисовка при перемещении курсора мыши.
- UI.WebVision:
- Добавлена поддержка gif и jpg изображений в элементах примитива "Элементарная фигура".
- Исправлена обработка масштаба вложенных кадров, а также пересмотрен механизм формирования-включения скрола.
- Добавлена функция преобразования изображений на стороне сервера. Функцию преобразования использовано для изменения размера и обесцвечивания изображений неактивных кнопок.
- Реализовано открытие малых окон вложенных страниц в виде DIV-блоков, что решает проблему блокировки и продолжительного открытия внешних окон многими браузерами.
- Главная страница интерфейса отцентрована в окне браузера.
- UI.WebCfgD:
- Уменьшена яркость обесцвеченных-пассивных кнопок.
- Все окна диалогов реализованы в виде DIV-блоков с целью исключить проблемы и задержки в открытии внешних окон различными браузерами.
- Использован групповой запрос содержимого страниц для значительного повышения производительности на медленных и высоколатентных каналах.
- Добавлена информация в строке статуса о текущем пользователе и возможность его смены.
- Выполнена адаптация для работы в полную ширину экрана.
5 Формирование, расширение и стабилизация API пользовательского программирования
Было продолжено формирование объектного API пользовательского программирования, которое предусматривает интеграцию пользовательских функций в дерево объектов системы OpenSCADA. Кроме этого был внесен ряд изменений в существующие библиотеки функций пользовательского API.
В частности были осуществлены следующие изменения:
- SYS:
- Пользовательское API для объекта TArrayObj расширено на предмет возможности использования объектных свойств, если свойства - не числа.
- В дерево объектов OpenSCADA пользовательского API добавлена функция SYS.Security.access() для контроля доступа пользователя OpenSCADA к ресурсам с нужными правами.
- Добавлены функции работы с файлами: SYS.fileRead() и SYS.fileWrite().
- К API объекта "XMLNodeObj" добавлена функция getElementBy() для поиска вложенных узлов по значению атрибута.
- Добавлена функция осуществления кодирования текста между различными символьными кодировками.
- Добавлена функция NodeObj.nodePath().
- SYS, DAQ.JavaLikeCalc: Добавлена реализация поддержки пользовательского API регулярных выражений, основанной на "PCRE", посредством объекта "TRegExp". Реализован интерфейс функций RegExp.exec() и RegExp.test() в стандарте для языка "JavaScript". Для DAQ.JavaLikeCalc реализована "new RegExp()" инициализация для объекта "TRegExp". Для DAQ.JavaLikeCalc реализованы дополнительные функции с использованием "RegExp": int search(); Array match(); Array split(RegExp pat, int limit); string replace(string substr, string str); string replace(RegExp pat, string str).
- TConfig, TBD, TTransportIn, TTransportOut, TUser, TGroup, TPrmTmplLib, TPrmTempl, TParamContr, TController, TVArchive, TVArchivator, TMArchivator: Добавлены функции пользовательского API cfg() и cfgSet() для доступа к конфигурации объектов (хранящейся в БД).
- TFunction, DAQ.JavaLikeCalc: Добавлен объект пользовательского API "TFuncArgObj" для получения аргументов функции.
- DB: Добавлены функции пользовательского API fieldStruct(), fieldSeek(), fieldGet(), fieldSet() и fieldDel() для объекта таблицы, с целью предоставить пользовательский доступ к БД посредством интерфейса БД OpenSCADA.
- DAQ:
- Добавлена функция TController::alarmSet() для генерации типовых нарушений в объекте контроллера модулей подсистемы "Сбор данных".
- Добавлена функция SYS.DAQ["Modul"]["Controller"]["Parameter"]["Attribute"].arch() для прямого обращения к объекту архива, связанного с атрибутом параметра.
- Добавлены функции пользовательского API enable() и start() для прямого контроля за состоянием объекта контроллера.
- JavaLikeCalc:
- Добавлена встроенная функция typeof() для проверки типа значения.
- Для типа данных "null" добавлена функция isEVal(), которая всегда возвращает "true".
- К объектам библиотечных функций добавлена функция пользовательского API call().
- ModBus: Добавлена функция пользовательского API messIO() в объект контроллера "ModBus" с целью предоставления возможности отправки нестандартных ModBus-запросов прямо из шаблона параметра.
- DAQ.JavaLikeCalc, Special.{FLibComplex1, FLibMath, FLibSYS}: Добавлена функция динамического вызова библиотечных функций SYS.DAQ.JavaLikeCalc["lib_{Lib}"].funcId(prms, ...).
- Archive: Добавлены функции пользовательского API status(), end() и begin() для доступа к состоянию и свойствам объекта архиватора сообщений.
- UI.VCAEngine: Добавлена функция пользовательского API wdgAt() для простого подключения к виджету как по абсолютному, так и относительному пути.
6 Общесистемные расширения
В общесистемное API системы OpenSCADA были внесены значительные изменения и расширения с целью общей стабилизации и ввиду общих мероприятий по чистке кода, а также реорганизации дерева исходных текстов:
- SYS:
- Реализована новая структура дерева исходных текстов.
- Все ресурсы проекта перемещены в отдельный архив.
- Для создания архивов исходных текстов и ресурсов можно использовать команды "$ make dist-lzma" и "$ make dist-reslzma".
- Документация выполнена статичной для модулей и поделена по языкам. Для каждого языка документации формируется отдельный пакет. В документации каждого языка создан индексный файл по всему перечню локальной и сетевой документации. Общий перечень локальной документации значительно расширен новыми документами, а также вспомогательной сетевой документацией.
- Добавлены пакеты библиотечных БД "*-LibDB.Main" и "*-LibDB.VCA", помещены в "data/LibsDB".
- Вместо "DemoDB" пакета добавлены пакеты моделей "AGLKS" и "Boiler" помещены в "data/ModelsDB".
- Конфигурационные файлы для построения RPM и DEB пакетов обновлены.
- Зависимость на библиотеку PCRECPP глобально заменена на PCRE.
- Добавлена новая функция TSYS::time2str() для преобразования интервалов времени в строку вроде "1час 23мин 10сек". Эта функция использована везде.
- Добавлена реализация собственного XML-парсера вместо Expat. Собственный XML-парсер решает проблему поддержки различных кодировок, отличных от UTF, а также безопасной обработки ситуации наличия недопустимых для текущей кодировки символов.
- TMess: Общие сообщения интерфейса управления перемещены в одну функцию TMess::lab*.
- Объект хранения строки с ресурсом "ResString" значительно расширен на предмет прозрачного преобразования из/в тип "std::string".
- Добавлена возможность сохранения в конфигурационный файл:
- Добавлен префикс БД "<cfg>" для представления конфигурационного файла в роли источника загрузки/сохранения конфигурации.
- Функции TDBS::dataSeek() и TDBS::dataDel() обновлены для строгой обработки конфигурационного файла.
- Функция chkSelDB() адаптирована для поддержки записи в конфигурационный файл.
- Добавлено сохранение больших и многострочных значений полей конфигурации в текстовом поле отдельного тега конфигурационного файла.
- Тип "long long", обычно 64-рязрядное целое, заменён везде на более определённый "int64_t" на всех архитектурах.
- Объекты потоков OpenSCADA жёстко слинкованы со своим потоком. Добавлена статистика загрузки и вызовов периодичных потоков.
- Реализована возможность проверки загруженных объектов на их отсутствие в БД и удаление. Функция проверки активируется только в случае прямой загрузки из БД.
- Добавлена системная периодическая функция perSYSCall() вызова объектов подсистем и их модулей. Используется для сервисных целей ненагруженных и редких задач модулей и подсистем.
- Функция тестирования выражения по шаблону перемещена в объект "TRegExp".
- XMLNode:
- Полностью удалён код использования XML-парсера "Expat".
- Добавлена возможность загрузки текстовых частей тега в отдельные специальные теги в полном режиме. Предназначено для полного сохранения конфигурации тега.
- Добавлена возможность загрузки и сохранения блоков комментариев в отдельные специальные теги, в полном режиме.
- Добавлена встроенная функция включения генерации дампа памяти (снятия ограничения на размер файла) посредством параметра запуска OpenSCADA --CoreDumpAllow.
- Во все скрипты запуска OpenSCADA добавлена процедура автоматической обработки файла дампа памяти (формирование файла разворота стека — backtrace). Файл дампа памяти ожидается в рабочей директории в виде "core".
- Добавлена возможность включения (встраивания) модулей в библиотеку ядра OpenSCADA.
- Версия модульного API всех подсистем увеличена до 6.
- TConfig, TValFunc, TVal: Хранение строковых конфигурационных полей переведено в объект ресурсной строки "ResString", а затем возвращено с использованием внутреннего ресурса.
- TVariant: Механизм хранения для строки изменён в хранение указателя на массив в "union" с адаптивным механизмом выделения памяти (простая, вплоть до 7 символов хранится статически, а под более память выделяется динамически).
- Сборочная система была значительно обновлена на предмет:
- Добавлена проверка и отключение использования "Iconv" и "Intl" (I18N) API.
- Добавлено автоматическое обнаружение и включение параметра конфигурации --enable-CrossCompile для окружения кросс-компиляции.
- Добавлен параметр конфигурации --enable-CoreLibStatic для отключения сборки разделяемой библиотеки ядра OpenSCADA и статической линковки программы вызова-запуска.
- Добавлена сводная таблица конфигурации, в конце.
- Перемещение кода обработки I18N в файл I18N.mk и включение его непосредственно в Make-файлы, по надобности, на последней стадии конфигурации.
- Добавлен общий макрос AX_MOD_EN() для унифицированного контроля модулей.
- Добавлена установка включаемых файлов (заголовки).
- Добавлен файл openscada.pc для проверки конфигурации OpenSCADA при построении внешних модулей.
- Глобальная версия исходных файлов OpenSCADA изменена в 0.8.0 и версия библиотеки ядра OpenSCADA изменена в 2.0.0.
- Реализация манипуляции объектами через атрибуты параметров:
- Реализована общая поточная безопасность (threadsafe) для объектов пользовательского API: "TVarObj", "TArrayObj" и "XMLNodeObj". Добавлено автоматическое удаление объекта в "AutoHD" при возврате функцией AHDDisConnect() — "true".
- Добавлена обратная сериализация (разбор XML представления объекта) для объектов "TVarObj", "TArrayObj" и "XMLNodeObj". Включено для "TVariant", "TVal", "TValFunc", "UI.VCAEngine.Widget", что позволяет сохранять и загружать значения типа Объект в БД.
- TVal, DAQ.{BlockCalc,JavaLikeCalc,LogicLev,ModBus,Siemens}, UI.VCAEngine: Добавлена поддержка типа значения "Объект". Включено для повсеместного использования.
- DOC:
- Выполнена проверка и исправление Английских текстов в ядре OpenSCADA. Обновлены переводы ядра OpenSCADA на Немецкий, Украинский и Российский языки.
- Выполнена проверка и исправление Английских текстов модулей OpenSCADA. Обновлены переводы модулей OpenSCADA на Немецкий, Украинский и Российский языки.
- Обновлены все основные документы на доступных языках: openscada.pdf, build.pdf, properties.pdf, "OpenSCADA API", "Про OpenSCADA", "Библиотека TechApp", "Quick Start", "WLib Основные", "WLib Элементы мнемосхем".
- Базы данных библиотек:
- В библиотеку основных визуальных элементов добавлено:
- Кадры реализации редактирования и исполнения "Рецептов" — "Пользовательских программ".
- Диалог выбора и конфигурации параметров для кадра "Группа Графиков".
- Добавлены некоторые улучшения в кадр "Группа Графиков" для выбора параметров пользователем и другого.
- В кадр "Группа Графиков" добавлен горизонтальный скрол-бар обзора архивов.
- К комплекту пакета библиотек добавлено библиотеку элементов Электрических схем.
- Кадр главной страницы дополнен механизмом "проигрывания" моделей технологических процессов (ТП).
- Модель промышленного котлоагрегата переведено на Английский и Украинский языки.
- В библиотеку основных визуальных элементов добавлено:
- DB: Добавлено временное ограничение в 5 секунд и поле указания начального смещения для запроса содержимого больших таблиц.
- Transport:
- Добавлена функция TTransportS::traf2str() для преобразования значения счётчика трафика в строку вроде "12.5КиБ".
- Типы форматов исходящих запросов расширены вариантами текста с разным завершением строки: LF, CR, CR/LF.
- DAQ:
- Добавлена возможность выбора типа атрибута шаблона "Объект".
- DiamondBoards, ModBus, LogicLev: Добавлена возможность смены типа параметра для отключенных параметров многотиповых модулей подсистемы "Сбор данных".
- LogicLev, ModBus, Siemens:
- В случае выполнения по расписанию в атрибут "f_frq" записывается время после последнего вычисления в отрицательном значении.
- Добавлены инициализирующие и останавливающие вызовы при включении/выключении параметра.
- Добавлено обновление атрибутов параметра логического типа при изменении типа, флага "ТолькоЧтение" или имени в шаблоне.
- TArchives:
- Добавлена возможность использования регулярных выражений при поиске по категории посредством "/match/"
- DBArch, FSArch: Добавлена временная граница при запросе сообщений из архива.
- Адрес ссылки на атрибут параметра упрощён к виду "DAQMod.Cntr.Prm.attr". Поддержка старых адресов сохранена.
7 Публикация решений OpenSCADA
В процессе осуществления работ над данным релизом на разных конференциях и выставках были представлены решения на основе проекта OpenSCADA:
- FOSS Sea 2011 — на конференции был зачитан доклад о решениях на основе OpenSCADA, а в холе был организован мини-стенд с решениями на основе OpenSCADA вживую.
- Международный инновационный форум 2011 — в составе стенда OOO НИП "ДІЯ" и Днепродзержинского Государственного Университета (ДГТУ) было представлено оборудование и материалы с решениями на основе OpenSCADA.
- 10 Всеукраинская Конференция разработчиков и пользователей свободного ПО — на конференции был зачитан доклад о решениях на основе OpenSCADA, а в холе был организован мини-стенд с решениями на основе OpenSCADA вживую.
- Дни разработчиков QT Qt Developer Days 2011 в Мюнхене и Сан-Франциско: в рамках этих мероприятий в Qt Demo Pavilion состоялась демонстрация OpenSCADA посредством представления решений Динамическая модель парового котла №9 ДМК на ПК и Динамическая модель реального времени Анастасиевской ГЛКС на Nokia N9.
8 Заключение
В процессе создания нового стабильного релиза 0.8.0 промышленного назначения с продолжительным сроком поддержки проделана большая работа по стабилизации, расширению функциональных возможностей, а также адаптации для работы на альтернативных аппаратных платформах (на архитектуре ARM). Всё это в целом позволило расширить рамки полноценного применения OpenSCADA на все уровни систем автоматизации от ПЛК, серверов SCADA-систем и до распределённых систем визуализации.
В появлении новой промышленной версии системы OpenSCADA 0.8.0 активное участие приняли:
- Роман Савоченко: Основной объём работ по разработке, документированию и тестированию.
- Максим Лысенко: Сопровождение и стабилизация примитива "Элементарная фигура" среды визуализации и управления (СВУ), а так-же перевод и обновление большей части документации на Английский язык.
- Ирина Попкова: Перевод и обновление интерфейса системы OpenSCADA и её модулей на Немецкий язык.
- Алмаз Каримов: Расширение модуля поддержки протокола DCON и активное тестирование.
- Алексей Попков: Сборка пакетов для Fedora-based дистрибутивов.
- Многие другие пользователи системы OpenSCADA посредством всестороннего тестирования.
Последующие усилия разработки будут направлены на реализацию программной многоплатформенности, а также расширение функциональности путём создания модулей поддержки новых интерфейсов, в том числе и по схеме авансированной разработки, с распределением затрат реализации на проданные экземпляры (для модулей взаимодействующих с коммерческими системами и интерфейсами). Для реализации централизованного распространения решений, услуг и расширений на основе OpenSCADA планируется создание магазина в рамках главного информационного ресурса OpenSCADA (http://oscada.org).
9 Обновления
9.1 [06.06.2018] ДВАДЦАТОЕ (20) последнее обновление
Это обновление является последним обновлением релиза 0.8 LTS, которое предусматривается в основном как переходное для обновления до 0.9 LTS. Исправлено около 30 ошибок и добавлены некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- SYS.*: Унифицирована помощь по командной строке в функции optDescr() для получения иерархической помощи в строку и дальнейшей её печати в одном месте функции TSYS::load_().
- DAQ.JavaLikeCalc: Функция String.toInt() пользовательского API установлена в основание "10", по умолчанию.
- UI.{VCAEngine,Vision}: Определение "quittance" переименовано в "quietance", от слова "тихо (quiet)", что логично для нарушений, и пользовательское API оставлено совместимым. Перенесена реализация видов "Загрузка", "Сохранение", "Меню" вида "Кнопка" примитива "FormEl" и атрибут "checkable" переименован в "mode"!
- TFunction,TPrmTmpl,DAQ.JavaLikeCalc.FLib: Некоторые свойства интерфейса управления (ID, NAME, DESCR) установлены связанными с конфигурацией БД.
Дополнения:
- SYS:
- Добавлена функция cmdOptPresent() и использована исключительно для проверки наличия параметра.
- DB.DBF,Archive.FSArch,UI.Vision: Добавлен общий контроль за правами создаваемых OpenSCADA файлов, параметром командной строки "--permCrtFiles" и функцией TSYS::permCrtFiles().
- TRegExp: Перенесена реализация признака UTF8, по умолчанию не установлена. Добавлен атрибут "err" к результату массива запроса match().
- Добавлены виртуальные функции TSubSYS::optDescr() и TModule::optDescr() для унификации помощи по командной строке.
- Общие метки дополнены категориями сообщений в функции TMess::labMessCat().
- DAQ.JavaLikeCalc: API пользователя расширено функциями приведения {Boolean,Integer,Real}.{toReal,toInt}().
SYS
- *: Большинство оригинальных сообщений отревизированы и улучшены. Отревизированы все сообщения помощи для командной строки библиотеки ядра и модулей OpenSCADA, на предмет оригинальных текстов и их перевода на Украинский, Российский и Немецкий. "Библиотека шаблона" переименована в "Библиотеки шаблону", "Архивы" переименованы в "Архивы-История", "ID" переименован в "Идентификатор".
- TCntrNode: В качестве таймаута отключения/отсоединения узлов использован стандартный STD_WAIT_TM(10) и при выходе он устанавливается в STD_WAIT_TM*5, вместо DEF_TIMEOUT.
- Добавлен новый аргумент командной строки --consoleCharSet для контроля кодирования консоли, в сообщениях и помощи.
- Добавлен аргумент командной строки --modDir, как копия параметра конфигурационного файла "ModDir".
БД
- {SQLite,MySQL,PostgreSQL,FireBird}: Добавлено создание колонки перевода во время исправления таблицы, для уже частично переведенных таблиц в не многоязыковом режиме.
DAQ
- {TPrmTempl,JavaLikeCalc}: Завершена и проверена реализация класса TPrmTempl::Impl, унификацией использования DAQ шаблонов.
- SNMP: Расширен контролем ошибок подключений на уровне параметра.
Архивы-История
- Копирование объектов архиваторов защищено от копирования поля "ADDR", защищено от запуска и исправлено копирование дополнительных свойств.
- Исправлена загрузка архиваторов по отсутствию некоторых модулей архивов.
- FSArch: Доступ к кешу перемещен под критическую секцию, для предотвращения падениям при высокой нагрузке. Жестко защищено от изменения конфигурационного поля "ADDR" при исполнении, для сообщений и значений. Добавлена процедура проверки дублирования конфигурационного поля "ADDR". Файлы архивов переименованы в формат "%F %H.%M.%S" для возможности их создания на FAT.
- DBArch: Исправлено на предмет запроса одного значения в архиве значений.
Транспорты
- Serial: Добавлено измерение максимального времени символа выходных транспортов в режиме запроса и отладки.
Интерфейс Пользователя
- {VCAEngine,Vision,WebVision}: Примитив "Text" дополнен атрибутом "inHtml" и поддержкой отображения HTML.
- FIX:{QTStarter,QTCfg,Vision}:
- Удаление большинства объектов Qt переведено на использование deleteLater(), для безопасного удаления под вызовом processEvents().
- Размер иконок и шрифтов сделаны адаптируемыми к реальному размеру основного-системного шрифта, с помощью новой функции icoSize(), для: инициирующего размера основного окна, шрифта заголовка, иконок панелей инструментов, иконок дерева навигации, вида дерева навигации, ширины разделителя.
- Изменено формирование меню QTStarter с целью независимого создания действий, из-за проблемы формирования родной панели меню в Unity.
- Удалено принудительное переключение стиля QPlastiqueStyle() (Qt4) или QCommonStyle() (Qt5) благодаря реализации контроля за видом и ощущениями в OpenSCADA.
- {VCAEngine,Vision}: Осуществлены некоторые мероприятия, которые предусматривают полноценную "гарячую" разработку для уже исполняемых и удаленных сеансов:
- Проекты расширены учётом использующих сеансов для "гарячего" включения страниц в сеансах.
- FIX: Защищено атрибут "value" примитива "FormEl" от установки признака модификации при изменении типа.
- FIX: Восстановлено и исправлено гарячее слежение, в сеансах, за изменениями в связях виджетов.
- Реализовано гарячее обновление процедур виджетов в режиме исполнения.
- ElFigure: Некоторые свойства общей части режима разработки перенесены в приватные части.
- QTStarter: Расширен собственным контролем за видом и ощущениями и поддержкой их профилями с таблицы "LookFeel" конфигурационного файла модуля, для: Общий шрифт, Стиль виджетов, Палитра, Стиль CSS.
- QTCfg:
- Исправлена, в основном при закритии, обработка запросов в отдельных потоках и на предмет падений при открытом диалоге предупреждения-ошибки.
- Формирование WhatsThis, ToolTip и StatusTip елемента, унифицировано переносом в одну функцию setHelp().
- Механизм подстройки вертикально-масштабированных елементов сделан: сбрасываемым для предварительного вписывания, более быстрым и точным.
- VCAEngine:
- Защищён от сохранения ещё не включенных элементов по "enableByNeed".
- Улучшен архивный режим примитива "Документ", установкой специфических атрибутов в режим Attr::NotStored. Защищён от предупреждений про отсутствие атрибутов при переключении примитива "Документ" в динамический режим.
- Vision:
- Масштабирование главного окна режима исполнения сделано абсолютным, от оригинального размера окна.
- Виджет InputDlg расширен контролируемым сохранением и восстановлением размера окна, для очень расширяемых окон, например — полноэкранный текстовый редактор.
- WebVision: Реализованы режимы: "Меню", "Загрузка" и "Сохранение" вида "Кнопка" примитива "FormEl".
9.2 [29.12.2017] ДЕВЯТНАДЦАТОЕ (19) обновление
Это обновление релиза 0.8 LTS исправляет около 30 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- SYS.*: Флаг TCfg::TransltText перенесен в TFld::TransltText а также использован вместо TFld::NoStrTransl, который удалён.
- Транспорты: Замок общего доступа к выходному транспорту изменён на мютекс и аргумент "noRes" удалён из функции messIO() для предотвращения неожиданных выходов из критической секции запроса. Объект блокирования ресурса nRes и его функция nodeRes() удалены из объекта входного транспорта.
Дополнения:
- SYS:
- strEncode() расширена режимом "ToLower" для преобразования в нижний регистр.
- Параметры командной строки дополнены предзагрузкой и прямым доступом-модификацией с помощью новой функции cmdOpt(), полное переключение из getCmdOpt() на cmdOpt().
- Бинарное декодирование в strDecode() расширено значением аргумента "<text>" для формирования текстовой части справа.
- XMLNodeObj: Дополнено функцией пользовательского API getElementsBy() — получения перечня узлов XML по имени тега или значению атрибута.
- TArrayObj: arSet() адаптирован для добавления в конец массива по отрицательному индексу.
- DAQ.{AMRDevs,ICP_DAS},Special.FLibSYS: Собственная имплементация функции atof() и strtod() в функции TSYS::str2real() и её короткой ссылке s2r() и для понимания обоих символов отделения дробной части реального числа "." и ",". DAQ.OPC_UA.libOPC_UA: Функция TSYS::str2real() помещена и использована в отдельной библиотеке. Отключена сейчас!
- Транспорты: Добавлен общий протокол ВВ по входным и выходным транспортам, в ядро и все транспортные модули.
- UI.VCAEngine: Дополнен функциями пользователя в пространстве сеанса: reqTm(), reqUser(), userActTm().
SYS
- XMLNode
- Исправление на предмет лишнего резервирования размера строки в кодировании сериализации, что приводило к значительной деградации её производительности, особенно на больших деревьях. ** Это должно значительно повысить производительность сетевого взаимодействия по XML.
Унифицирована и исправлена сериализацию в XHTML на предмет: предотвращения самозавершения тегов для "script", "div; предотвращения кодирования символов "'" и '"' в тексте (также для XML); кодирования UTF8 символа 0xA0 в " ".
- TRegExp исправлен в функции match() на предмет предотвращения зависания и падения.
- Версия библиотеки ядра установлена в 2:6:0. Модульная версия подсистемы "Транспорты" поднята до 10.
- TConfig: Предотвращение рекурсии входа в cfgChange() по флагу mInCfgCh.
- XMLNodeObj,XMLNode: Удаление дочерних узлов осуществлено с конца, для увеличения скорости этой операции.
БД
- Добавлено конфигурабильное ограничение отображения содержимого таблиц, типично это 100 строк.
- {SQLite,MySQL,PostgreSQL,FireBird}: Добавлено ограничение предзагрузки fieldSeek() в 100 записей для предотвращения продолжительного непрерывного подвисания.
Сбор данных
- {DCON,ModBus,Siemens}: Объекты мютекса "enRes" и "reqRes" установлены в рекурсивные, от Алексея Бондарчука.
- SoundCard: Значительно пересмотрен и исправлен для работы с реальным и виртуальным, вроде PulseAudio, оборудованием и проверен на частотах выборки до 192000.
Архивы
- Архиваторы значений и сообщений дополнены измерением максимального времени обработки.
- FSArch: Предотвращена многоразовая упаковка-распаковка файлов. Добавлена проверка и очистка от нулевых архивных файлов. Буферы архивации сообщений и информационных файлов значений сделаны безопаснее на предмет возможного чтения случайных данных.
- DBArch: Дополнен пропуском ошибочных архивов значений.
Транспорты
- {SSL,Sockets}.out: Функциональный замок ресурсов транспортов объединён с reqRes().
- Входные транспорты дополнены измерением текущего и максимального времени запроса к протоколу, в режиме "Отладка (0)". Выходные транспорты дополнены измерением времени отклика, в режиме "Отладка (0)".
Протоколы
- HTTP: Расширен перечнем пользователей, разрешённых к аутентификации. mNoFull переименован в mNotFull.
Интерфейс Пользователя
- {QTCfg,Vision}: Добавлено сохранение и восстановление размера главного окна и главных диалогов (разработка Vision) и свойств разделителей.
- QTCfg: Исправлены вертикально-масштабируемые виджеты "Таблицы" и "Списки" путём их помещения в конец стека виджетов. Предотвращена высокая нагрузка на ожидании ответа диалога прогресса.
- VCAEngine: Обработка различных виджетов с большой периодичностью (в главной задаче сеанса) адаптирована к исполнению в различных фазах чем нагружая основную задачу более равномерно и в целом меньше. Добавлен контроль действий пользователя по временем действия.
- QTStarter: Расширен закрытием (окон) и запуском в системном трее. Значительно пересмотрен на предмет полного создания интерфейса в цикле сообщений Qt exec() и функции WinControl перенесены в StApp, потомка QApplication. Собственное меню QTStarter, с перечнем модулей Qt, унифицировано на предмет статического хранилища действий для расширения меню и панелей инструментов окон Qt модулей и иконки системного трея, помещён также в свойство "menuStarterAddr" главного объекта приложения.
- Vision:
- Добавлена подстройка размера окна под размер главной страницы после возврата с максимизации или полного экрана и запуска в оригинальном размере.
- Создание меню режима исполнения изменено в полный режим, т.е. полное формирование при необходимости и полная очистка при её отсутствии; для предотвращения отображения меню в неактивном режиме в некоторых окружениях вроде Maemo и Unity.
- Добавлен контроль за пользователем режима исполнения с помощью специфического для визуализатора атрибута "userSetVis" главной страницы, расширение виджета статуса пользователя и диалога выбора.
Special
- FLibSYS: VArch::set() расширена записью одного значения в архиватор архива.
9.3 [02.07.2017] ВОСЕМНАДЦАТОЕ (18) обновление
Это обновление релиза 0.8 LTS исправляет около 30 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения
- SYS:
- XMLNode: Функции save() и saveNode() установлены как постоянные.
- XMLNodeObj: Функция API пользователя text() расширена аргументом "full" для комбинирования текста дочерних узлов.
- ModSchedule: Функции ScanDir() и CheckFile() переименованы соответственно в dirScan() и fileCheck().
- Transport.out: Функция API пользователя messIO() расширена для возврата везде строкового типа.
- Special.FLibSYS: Функция API пользователя dbReqSQL() приведена ко свойствам функции SYS.BD["TypeDB"]["DB"].SQLReq().
Дополнения:
- SYS: Функция TMess::getUTF8() добавлена и использована для определения символов UTF-8 в XMLNode::encode(). TCntrNode: Расширен функцией API пользователя "messSys".
- Archive.Value: Функции API пользователя дополнены setVal().
SYS
- Исправлено множество оригинальных сообщений.
- ModSchedule: Закрытие модулей при выходе заменено на первичное закрытие модулей, а уже затем отключение библиотек. Процедура сканирования модулей расширена шаблоном имени модуля в конце пути.
- Значительные изменения в сборочной системе.
- XMLNode: Сериализация была расширена правильной проверкой UTF-8 символов и обработкой " " в функции encode() и парсере, для сущности " ".
- Protocol.HTTP,UI.{WebUser,WebVision}: Добавлена поддержка ACL для контроля за доступом и видимостью элементов индексаторов Web ресурсов.
- Добавлена опцию командной строки "lang".
Сбор данных
- ModBus: Исправлена обработка дублирующих атрибутов стандартных параметров.
- DAQGate: Исправлены запросы к другой станции после удаления предыдущей. Расширено на предмет возможности записи в атрибуты "NAME" и "DESCR".
Архив
- Исправлено на предмет определения нужного архиватора по его периодичности, позволяет корректно выбирать архиватор по периодичности более чем в одну минуту при построении графиков.
- FSArch:
- Исправлено функцию проверки архиваторов на предмет корректной обработки ограничения ёмкости архивации значений путём удаления его архивированных файлов по максимальному количеству.
- Исправлено чтение очень длинных сообщений и предотвращено чтение ошибочных сообщений в целом.
- Расширено для сохранения INFO файлов в стандартный файл БД SQLite в каталоге этого архиватора.
Транспорт
- SSL:
- Исправлены освобождения, в клиентской части, которые приводили к падениям и блокировкам, на предмет отсутствия SSL_free() и освобождения переменных "ctx", "ssl", "conn" при повторном запуске, в выходной части. Широко протестировано на браузерах Chrome, Firefox; на предмет освобождения описателей файлов и в Valgrind.
- Метод "SSLv2" был окончательно удален ввиду его небезопасности и полного удаления из OpenSSL 1.1.
- Функции SSLv3_server_method() и SSLv3_client_method() установлены для выключения по определению OPENSSL_NO_SSL3.
Протокол
- OPC_UA{*.libOPC_UA}: К объекту сервера добавлен ресурс "mtxData", который использован для доступа к контейнеру каналов безопасности.
Интерфейс Пользователя
- {VCAEngine,Vision,WebVision}: Добавлен атрибут "mult" к виду "Список" примитива "FormEl" для возможности выбора нескольких элементов.
- QTStarter: Полностью обновлен с Рабочей ветви.
- QTCfg: Завершена реализацию правильного вписывания масштабируемых вертикально элементов: тексты, таблицы и списки. Исправлена обработка sizeHint() и minimumSizeHint() для элементов "Текст" и "Список".
- VCAEngine: К механизму динамического связывания добавлена проверка связей на активность.
- Vision:
- Добавлена очистка изображений примитиву "Медиа" по установке пустой строки.
- К кодированию в хранилище по TSYS::base64 установлен разделитель "\n".
- Исправлен размер виджетов, которые открываются для редактирования, на больших экранах, эта подстройка сделана условной от отсутствия открытого активного и максимизированного виджета ввиду проблемы в Qt.
- FormEl.Table: Исправлено на предмет свойств колонок. Расширено свойство "width" скрытием этой колонки при значении 0. Использован масштаб по X в конечной ширине колонки.
- WebCfgD:
- Несколько улучшена обработка элемента "Таблица" для большого содержимого и исправлено редактирование ключевых элементов.
- Подстройка к доступному пространству масштабированных вертикально элементов: тексты, таблицы, списки.
- Библиотека GD была заменена фильтрами CSS и сделана опциональной, по --enable-LibGD.
- Несколько улучшено формирование дерева навигации и диалогов, падающей тенью и прозрачным фоном для предотвращения доступа к общему пространству.
- Расширено копирование элементов копированием их в свой корень и через себя.
- Общие улучшения.
- WebVision:
- Исправлена ширина окна контекстного меню.
- Исправлено поведение примитива "Медиа" в не режиме "Вписывать" для предотвращения проблем масштабирования путём полного удаления тега <img>. К изображениям этого примитива добавлено вертикальное выравнивание.
- Исправлено и улучшено формирование диалогов, малых встроенных окон, шрифт заголовка установлен в 12pt.
- Подавлено системное контекстное меню для активных виджетов.
- Исправлена обработка границ и прозрачного фона. Обработка фона примитивов обобщена и осуществляется после обработки самих примитивов и добавлена сама обработка прозрачности-непрозрачности фона в отдельном блоке (div), который создаётся по уровню непрозрачности.
- Примитив "Текст": обработка пробела установлена в "white-space: pre-wrap", добавлена поддержка свойства "wordWrap".
- Вид "Кнопка" примитива "FormEl": исправлен на предмет переноса слов на браузере Chrome, переключен на использования фильтров в отображении неактивных изображений.
- Реализован вид "Панель прокрутки", "Панель проворачивания", "Таблица", "Дерево". Вид "Панель прокрутки" сейчас такой как "Панель проворачивания".
- Вид "Строка" примитива "FormEl" расширен календарём для вариантов по дате.
- Добавлена поддержка специфических визуализатору атрибутов через их активацию.
- Добавлена подстройка размера главной страницы к доступному пространству окна браузера, только в сторону увеличения и с контролем пропорциональности.
- XHTML часть страницы вынесена в отдельный файл подобно части JavaScript. Всё основное в CSS правилах перенесено в XHTML файл.
- Общие улучшения.
9.4 [12.02.2017] СЕМНАДЦАТОЕ (17) обновление
Это обновление релиза 0.8 LTS исправляет около 60 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- SYS: Множество функций установлено как константы, после дополнения некоторых объектов копирующими конструкторами.
- TConfig::cfgChange() дополнена аргументом предыдущего значения конфигурации "pc".
- TVariant: В строковом типе расширена преобладающим использованием STL-строки, кроме полей которые помечены как "stdStringOmit", в основном для TCfg как константа.
- Функции load() и load_() узла расширены аргументом TConfig *cfg для возможности прямой загрузки после сканирующего запроса. Удален аргумент "force" функции узла load() и заменен предварительным вызовом modifG().
- Объект захвата ресурса ЧтенияЗапии "Res" переименован в "ResRW".
- Функция TModule::modFunc(), получения ссылки на экспортированные функции, расширена вызовом без исключений и результатом.
- Функция strNoSpace() расширена контролем обрабатываемых символов и переименована в strTrim(). Обрабатываемые по умолчанию символы установлены в " \n\t\r".
- time2str() и tm2s() астрономического времени переименованы в atime2str() и atm2s() и время начала, соответствующих относительных функций, было изменено с микросекунд на секунды.
- taskSleep(), в аргументе "cron", заменена на чистое (строка) представления для возможности получения начальной точки к обнаруженной смене астрономических часов и соответствующей коррекции цели крона, а также измерения использованного времени для taskUtilizTm().
- TVariant::propClear() расширен на предмет очистки одного указанного свойства.
- taskUtilizTm() расширен аргументом "max" для получения этого максимального значения, и само значение изменено на секунды.
- Добавлена функция taskDescr() для получения ссылки на структуру описания текущего задания.
- DAQ: Вариант "Постоянная", конфигурационного поля шаблона, переименован в "Переменную" а, соответственно, "Публичная постоянная" в "Постоянная".
- Archive: Архиватор значений расширен поддержкой режима аккумуляции, в основном для Archive.DBArch. Атрибут "tm", результирующего массива функции API "getMess", заменён на тип "int".
- Protocol: API входной части приведён к виду рабочей (Work) ветви на предмет добавления функций srcAddr(), setSrcAddr() и изменения mess().
Дополнения:
- SYS: Добавлена системная опцию "clockRT" для выбра часов планирования задач CLOCK_REALTIME иначе это CLOCK_MONOTONIC (по умолчанию сейчас).
- Добавлен объект управления условными переменными "CondVar".
- К объекту TCntrNode добавлена функция mess_sys(), с целью создания системных сообщений с путём этого узла в категории и расположения в начале этого сообщения, с помощью новой функции nodeNameSYSM().
- К объекту TCntrNode добавлена функцию err_sys(), с целью создания объекта ошибки с путём и размещением узла.
- Добавлены функциональные шаблоны fmin() и fmax().
- Для функции strTrim() создан короткий вызов sTrm() и он везде использован.
- TSecurity: Добавлена функция пользовательского API User::groups() и Group::user().
- Добавлена функцию пользовательского API TVal::isCfg().
- DB: Для функции пользовательского API SQLReq() добавлено направление ошибок от исключений на атрибут "err" результирующего массива.
- DAQ.JavaLikeCalc: Список функций строки расширен trim().
- Transport: Функция messIO() пользовательского API расширена размером входного буфера.
- Transport.Serial: Добавлена функцию sendbreak() к пользовательскому API выходного транспорта.
- UI: Расширен функцией mimeGet() для определения типа "mime" по исходной информации, расширению файла и его содержимому.
- Special.FLibSYS: Дополнен функцией вычисления "Message Digest 5 (MD5)" с OpenSSL и функцией floatExtract() для извлечения экспоненты и мантиссы из значения реального типа.
SYS
- TCntrNode: Концепция управления ресурсами заменена на стабилизированную в рабочей (Work) ветви.
- Исправлено множество ошибок и предупреждений из отчёта PVS-Studio, благодаря Максиму Кочеткову.
- Все части адаптированы к новому аргументу "cfg" функций загрузки, предзагрузки dataSeek() и прямой загрузки после сканирующего запроса.
- Новые функции mess_sys(), err_sys() объекта TCntrNode использованы везде в ядре OpenSCADA и модулях.
- Модульная версия подсистем "БД", "DAQ", "Архив", "Транспорт" поднята до 9 и для подсистем "Protocol", "UI" поднята до 8. Версия библиотеки установлена в 2:5:0.
- Функции LibZ переписаны для некоторой унификации и оптимизации использования памяти.
- Адаптировано и несколько исправлено для сборки GCC v6, с C++11 по умолчанию.
- Минимальный уровень сообщений для всех конфигураций установлен в "Информация(1)".
БД
- {.,FireBird,MySQL,PostgreSQL,SQLite}: К функции fieldSeek() и dataSeek() добавлен режим предзагрузки сканирования с целью значительного увеличения производительности тут.
- *: getVal() расширен и унифицирован.
- {SQLite,MySQL,PostgreSQL,FireBird}: Расширены на предмет использования NULL для сохранения/представления общего EVAL.
- PostgreSQL: Объект БД расширен статистикой контроля активности и задержек.
Сбор данных
- Состояние исполнения заданий расширено максимальным временем использования.
- DAQGate: Адаптирован для сохранения назначения параметров по станциями, с целью обеспечить их раннее восстановление без необходимости синхронизации. Добавлен опциональный контроль за автоматическим удалением параметров и атрибутов.
- LogicLev: Установка значения атрибута "f_frq" изменена на реальную частоту, полученную из структуры описания этого задания.
- OPC_UA.libOPC_UA: К серверной части добавлена поддержка кусков. Куски проверены для входных запросов на небезопасных и безопасных подключениях. Исправлено размещение в очереди и дальнейшая обработка запросов публикации, и сообщений в целом, для безопасных подключений и для подтверждения обычных после прямой обработки.
- JavaLikeCalc: Добавлена поддержка динамического связывания с внешними функциями путём: function {nm} = "{addr}"; {nm}();. Вызов объектных функций оптимизирован на предмет прямой передачи имени в команду вызова. Расширен оператором "delete" для освобождения объектов и их свойств.
- System: Расширен источником данных "ФС". Автоматическое создание источников расширено режимами "Быстрые" и "Медленные".
Архив
- Предотвращены лишние записи прямо архиватору в TVArchive::setVals(). getMess() исправлен на предмет двойного вызова функции модуля get(), через использование fmin().
- {.,FSArch}: Добавлена информацию последнего чтения буфера и использование этого свойства в целом исправлено. Предотвращены исключения в archivatorAttach() и остановка объекта архиватора чтобы обеспечить возможность ранньего запуска архива.
- DBArch: Часть архивации сообщений исправлена в "needMeta" и добавлен отказ в доступе к архиватору до удачного получения "meta". Чтение архива значений сделано оптимальным по времени, до десяти раз, через использование ключа "MARK" и сканирующего запроса. Часть архивации значений расширена группировкой архивов в одной таблице, в основном для увеличения производительности.
Транспорт
- К диалогу ручного запроса выходного транспорта добавлен размер входного буфера.
- Serial: Выходной транспорт расширен проверкой и использованием I2C. Контроль потока дополнен режимом RTS переключателя (true/false) и фильтраций эхо.
- Sockets: Чтение ответа выходного транспорта после FD_ISSET в "ложь" расширено путём чтения SO_ERROR сокета и ожиданием прерывание по любой ошибке сокета. Выходной транспорт переключен на две попытки проверки SO_ERROR, на время чтения ответа, чтобы дать некоторое время на чтение через временами продолжительное чтение состояния SO_ERROR.
- SSL: Расширен прямыми методами: TLSv1.1, TLSv1.2, DTLSv1.
Протокол
- SelfSystem: Загрузка XML расширена использованием опций LD_NoTxtSpcRemEnBeg и разрешением пробелов в начале и конце текстовых элементов.
- HTTP: Значительным образом унифицирован для создания сервисных страниц с помощью одной функции pgCreator(). Функция pgCreator() первично реализована как функцию API пользователя модульного объекта HTTP и разрешена для использования в WEB-подмодулях для создания собственных сервисных страниц с общим стилем. Внешние вызовы к WEB подмодулям расширены функциями HTTP_GET(), HTTP_POST() с аргументом TProtocolIn *iprt, а старые вызовы HttpGet(), HttpPost() также продолжают проверяться и поддерживаться. Основной диалог выбора расширен изображениями и контекстной помощью к присутствующим WWW-модулям. Шаблон главной страницы отделён от основного шаблона с целью предоставления полностью специфичной пользователю главной страницы.
Интерфейс Пользователя
- {WebUser,WebVision}: Расширены использованием унифицированного сервисного интерфейса из Protocol.HTTP с помощью pgCreator() и новых функций HTTP_GET, HTTP_POST вызова HTTP.
- QTStarter: Отключен менеджер сеансов X от перезапуска закрытых при выходе программ. Расширен параметром командной строки "--noX11", чтобы позволить отключение Qt.
- QTCfg: Предотвращено опасное обновление отсутствующей страницы в принятии изменений на виджетах страницы которая замещается, "Диалог принятия для предупреждения потери изменений". Использование QMutex и QWaitCondition заменено на ResMtx и CondVar, в основном для предотвращения зависаний при смене времени системы.
- VCAEngine: Блокирование ресурсов FuncM установлено в рекурсивное для предотвращения "мёртвых" блокирований. Время вычисления сеанса расширено максимальным значением. Адаптирован к использованию TUIS::mimeGet().
- Vision: Разрешено объявление специфических для визуализатора атрибутов примитивов и атрибут "sclWin" добавлен и использован для примитива "Диаграмма" с целью масштабирования содержимого трендов, путём отрисовки окна мышей. Для примитива "Диаграмма", в режиме "Тренд", добавлено скольжение мышей по шкале времени. ToolTip и StatusTip виджета установлены для отображения на не полностью прозрачных частях виджета.
- WebVision: Адаптирован к асинхронным вызовам для всех регулярных обновлений с помощью servGet() и также makeEl() адаптирован к этому. Исправлено отображение SVG изображений путём корректной обработки "mime" в UI.VCAEngine и использования TUIS::mimeGet(). Вид "Кнопка" примитива "FormEl": исправлена обработка следующей строки, исправлен на предмет корректного отображения текста и изображения. Для примитива "Текст" установлено "line-height" с целью предотвращения верхнего отступа шрифта и в его представлении для повёрнутых текстов использовано CSS свойство "transform: rotate({X}deg)". Обработка примитива "Media" несколько исправлена на предмет переключения "fit" и изменения масштаба контейнера. Поведение шрифта расширено поддержкой декорации текста "underline" и "line-through".
- WebUser: Семантика функции страницы расширена двумя объектными аргументами "Этот объект" и "Объект протокола".
- WebCfgD: Создан новый дизайн. Адаптация к функциям HTTP_GET, HTTP_POST вызова HTTP и перевод всего на общий построитель страниц HTTP::pgCreator().
9.5 [28.06.2016] ШЕСТНАДЦАТОЕ (16) обновление
Это обновление релиза 0.8 LTS исправляет около 35 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- SYS,Transport,DAQ.DAQGate,UI.{QTCfg,Vision,WebCfgD}: Имплементация поднятия внешних хостов расширением функции extHostList(), перенаправлением запросов функцией cntrIfCmd() и входной частью собственного протокола системы. *: pthread_mutex, MtxAlloc и MtxString перенесено на объект обёртки мютексов ResMtx.
- DAQ: API функций tplE(), tplIOE(), errE() переименовано в elTmpl(), elTmplIO(), elErr().
- Archive: m_start, run_st, m_db переименовано в mStart, runSt, mDB.
Дополнение:
- SYS: Объект блокирования RW ресурсов расширено функциями (синонимами) lock(), tryLock() и unlock().
- Добавлено дополнительный макрос контроля времени FTM2.
- TFunction: Добавлено виртуальные функции prog() и setProg() для контроля через абстрактный объект.
- Расширено функцию API пользователя SYS.sleep() для принятия первого аргумента времени в секундах как вещественного и возможности установки его значения вплоть до наносекунд.
- DB: К БД добавлено захват ресурса таблиц TBD::resTbls.
- DAQ.BlockCalc: К блокам добавлено функции API пользователя cntr(), cfg(), cfgSet().
- Archive: messPut(), messGet() и такие-же функции API пользователя расширены аргументами "arch" для возможности прямого определения опрашиваемых архиваторов.
- Функцию API пользователя messGet() расширено аргументом "upTo", для прямого контроля этого таймаута.
- К функции запроса сообщений добавлено результат, как время остановки обработки. Значительным образом для возможности продолжения от позиции после прерванного по таймауту продолжительного запроса.
- Добавлено глобальный параметр архивации значений для принуждения времени полученных значений к текущему, вместо времени источника.
- К объекту архива значений добавлено параметр заполнения проходных значений предыдущим.
- Transport: К выходному транспорту добавлено время запуска-подключения.
- UI.VCAEngine: К виджету времени исполнения добавлено функции API пользователя mess{Debug,Info,Note,Warning,Err,Crit,Alert,Emerg}() к которым включено время этого виджета как категорию.
- Special.FLibSYS: Функции времени дополнены функцией tmSleep() для предоставления быстрого доступа к короткому сну.
SYS
- Версия библиотеки ядра поднята до 2.4. DB,DAQ,Archive,Transport: Версия типа подсистем поднята до 8.
- TCntrNode: Предотвращено освобождение заблокированных узлов и подключение к отключенным путём соответствующего блокирования ресурса "mUse".
- {DAQ,Transport}.*: Диапазон приоритетов задач расширен до 199 где 100-199 использовано для политики планирования задач SCHED_FIFO.
- Системные конфигурационные поля "workdir", "moddir", "icodir" установлены в только для чтения, в интерфейсе конфигурации, значительным образом для предотвращения ошибочных изменений и возможности их изменения только путём редактирования конфигурационного файла.
- Security: Адаптировано для предотвращения сохранения паролей в открытом виде вместо чего хранится их хеш, для: OpenSCADA хоста (Transports), Protocol.SelfSystem, UI.Vision. Использование crypt_r() включено только для "__USE_GNU" иначе пароли будут сохраняться в открытом виде.
- data/debian: Сервисный скрипт openscada.init перенесен в отдельный пакет openscada-server.
БД
- Все модули БД переписаны для открытия таблиц без исключений в конструкторе.
- FIX:MySQL,SQLite,PostgreSQL: Предотвращено нарушение последовательности запросов "BEGIN;" и "COMMIT;" под большой конкурентной активностью доступа.
- FIX:DB.PostgreSQL: Исправлено на предмет кодирования символов "'" '"' путём замены методом дублирования. FIX: Исправлено зацикливание после неудачной коррекции структуры таблицы.
Сбор данных
- Функцию пользовательского API funcCall() значительным образом расширено на предмет фиксации её результирующей функции для повторного использования и, как следствие, значительного повышения производительности.
- *,LogicLev,ModBus: Добавлено DAQ резервирование динамических атрибутов.
- ModBus,Siemens,DCON: Пропуск реальных запросов на первой и последней итерациях, только исполнение процедур.
- FIX:OPC_UA: Модуль для клиента переименовано в "Клиент OPC-UA" и для сервера в "Сервер OPC-UA".
- Protocol: Разрешена работа в режиме опроса входного транспорта и включена по умолчанию. Сервис "Publish" теперь доступный в LTS!
- FIX:libOPC_UA: Исправлено контроль номера последовательности пакетов, для серверной части, путём отделения от этого значения входных пакетов.
- FIX: Управление номером последовательности клиентской части также унифицировано и исправлено на предмет предотвращения повтора этого значения.
- Добавлено раннюю обработку подтверждений (Acknowledgements) в запросе "Publish".
- Выключено метку времени (TimeStamps) в клиентском запросе "Write", поскольку некоторые клиенты отвечают 0x80730000 (OpcUa_BadWriteNotSupported).
- Удачная адаптация к работе с UAExpert 1.4.
- JavaLikeCalc: Добавлена поддержка определения и вызова вложенных функций. Операции "||" и "&&" формально установлены в одинаковый приоритет. Проверку на предмет ВВ перенесено перед константами для возможности их переопределения. Добавлено постоянную "EVAL", как синоним к EVAL_REAL.
- FIX:Siemens: Исправлено проблему падения во время большого и частого взаимодействия, замену фрагмента (с помощью "assign") везде заменено на "replace". FIX:LibnoDave: gethostbyname() заменено на её потоко-независимый вариант.
- BlockCalc: Добавлено в обработку блоком специальный атрибут "this".
Архив
- messPut() расширен для независимой записи в таблицу нарушений.
- DBArch,FSArch: Разрешен запрос сообщений для одинакового времени начала и конца.
- FIX:FSArch: Добавлена проверка и предотвращение дубликатам с равным временем, категорией, уровнем (в случае параметра "prevDblTmCatLev").
- Расширено на предмет ранней проверки лимитов и этой проверки при ошибках распаковывания, для предотвращения таким образом переполнения хранилищ с плотным ограничением и малым размером.
- В целом исправлено проверку дубликатов. Время в кеше сменено с time_t на int64_t (в микросекундах).
- Получение из XML сделано несколько оптимальнее. Получение из "plain" разрешено для сообщений с временем которое равняется концу.
- FIX:DBArch: Алгоритм получения сообщений переписан для запроса минутами.
- Структуру таблицы значений и сообщений установлено адаптивной и перенесено в объекты TMArchivator и ModVArchEl.
- Добавлено новую опцию архиватора сообщений: "Сохранять время как чистое целое".
- "Размер архива (дней)" для значений и сообщений адаптировано для установки в ноль (<0.1) и выключения таким образом этого ограничения в целом.
- Исключено закрытие использованной таблицы после любого запроса размещения.
Транспорт
- FIX:SSL,Sockets: gethostbyname() и getservbyname() заменены на их многопоточные варианты.
- FIX:Serial,Sockets: На время чтения результата, выходного транспорта, добавлено ожидание данных в случае нуля и/или ошибки EAGAIN. FIX: Исправлено ошибки записи выходного транспорта. Возможные ошибки чтения после ошибочного прерывания select(), с признаком что некоторые данные присутствуют (иногда происходит), унифицировано и лучше настроено под разные режимы запроса и режимы не запроса выходного транспорта.
Протокол
- SelfSystem: Добавлено принудительное обновление аутентификации по атрибуту "rqAuthForce". Добавлено перенаправление запросов хостов по атрибуту "reforwardHost", во входной части.
Интерфейс Пользователя
- VCAEngine,Vision: Разделитель логических групп атрибутов виджетов везде изменено с ":" на ": ", в основном для возможности описания формата значения пользовательских атрибутов с типовым символом разделителя ":". В виде "Таблица" примитива FormEl к корневому тегу "tbl" добавлено атрибут "sortEn" с целью прямой сортировки по колонкам и параметр элемента заголовка "sort" для указания на колонку для сортировки при инициализации.
- FIX:Vision,WebVision: Режим "XY" примитива "Диаграмма" исправлено на предмет выключения построения по сортированным данным по 'X', только согласно иерархической последовательности. Для примитива "Диаграмма" к блоку данных "data:<dt/>" добавлено параметр "Aproximation (aprox)".
- FIX:UI.QTCfg: Обработку статусов внешних хостов значительно улучшено и исправлено. FIX: Таймауты внешних хостов сделаны конфигурабильными, посредством параметра "TmConChk". FIX: Параметры StartUser и StartPath перенесено под захват ресурса типа MtxString.
- FIX:VCAEngine: Добавлено захват функционального ресурса в SesPage::setEnable().
- FIX: setNoTransl() выключено в загрузке атрибутов, в связи с некоторой проблемностью и отсутствия смысла.
- Добавлено принудительное наследование типов связей, независимо от локального изменения этих атрибутов.
- К объекту проекта добавлено свойство "EnableByNeed", для контроля за готовностью этого проекта после старта и предотвращения продолжительного подключения через отложенное включение.
- Предотвращено попытку включения отключенной страницы во время установки нарушения, ввиду наблюдения странных падений тут, только в LTS.
- Добавлено сообщения уведомления времени исполнения: "Пользователь изменён на ...", "Пользователь подключен ...", "Пользователь отключен ...".
- FIX:Vision:
- FIX: Осуществлены очень важные исправления на предмет адаптации к стабильной работе с серверами СВК:
- Атрибуты модуля VCAStation, UserStart, UserPass и UserStBar::{user,pass,VCAStation} перенесено под захват ресурса типа MtxString.
- К обоим частям, исполнения и разработке, добавлено инициирующее подключение с временем таймаута восстановления подключения, с целью обеспечить загрузку ресурсов сервера СВК.
- Обработку информационного диалога про потерю подключения было перенесено к одному запросу (и потоку) из updatePage().
- FIX: Вид "Таблица" примитива "FormEl" значительным образом расширен: глобальными атрибутами таблицы: "hHdrVis", "vHdrVis"; атрибутами строки "colorText", "font"; атрибутами колонки "color", "colorText", "font".
- FIX: Выравнивание страниц, вложенных в контейнер, переписано на предмет отслеживания обновления геометрии виджета и предотвращения появления полос прокрутки в случае несоответствующего выравнивания.
- FIX: Добавлено восстановление палитры к функции visibleCheck для предотвращения артефактов в примитиве FormEl, в конце концов.
- FIX: Сообщения мыши в целом включены для примитива "FormEl" и исправлено некоторые артефакты вроде потери рисок в слайдере.
- FIX: Исправлены проблемы контекстного меню для видов "Список", "Дерево" и "Таблица" примитива "FormEl".
- Запросы к внешним хостам перенесены на использование cntrIfCmd().
- Удалённую аутентификацию расширено на использование аутентификации хоста, по умолчанию, и самого подключения для её проверки.
- Таймаут попыток восстановления подключения к удалённой станции сделано прогрессивным, до указанного значения, и отображение сообщения ошибок осуществляется после значения таймаута в три секунды.
- FIX: Осуществлены очень важные исправления на предмет адаптации к стабильной работе с серверами СВК:
Специальный
- SystemTests: Тесты БД расширены тестом сканирования.
9.6 [28.06.2016] ПЯТНАДЦАТОЕ (15) обновление
Это обновление релиза 0.8 LTS исправляет около 20 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- SYS.TModule: Информационные атрибуты вроде m{Name} переименованы в mMod{Name}. Добавлено функцию modInfoMainSet() и использовано во всех модулях для установки основных информационных атрибутов модуля.
- TProtocolIn, Protocol.UserProtocol, Transport.*, DAQ.{ModBus,OPC_UA}: Установлено сохранение подключенного входного транспорта в протоколе как замкнутого заголовка вместо пути, с целью быстрого доступа, изменено функции API: open(), srcTr(), setSrcTr().
Дополнения:
- SYS: Добавлено объект ResMtx для объединения всех платформо-специфических реализаций мютекса. Добавлено функцию TSYS::taskUtilizTm() для получения использованного времени указанного задания. TElem: Ресурс элементов mResEl изменено с Res на pthread_mutex_t, и разрешено для публичного доступа. Добавлено реализации Функций конвертации специфического для аппаратной платформы порядка байтов, а именно: i16_LE(), i32_LE(), i64_LE(), i16_BE(), i32_BE(), i64_BE(), floatBE(), floatBErev(), doubleBE(), doubleBErev().
- DAQ.{LogicLev,ModBus}: Добавлено функции API пользователя, объекта параметра: attrAdd() и attrDel() для свободного управления атрибутами.
- Transports: Добавлено функцию API пользователя {TrOut}.start() для быстрого контроля состояния выходного транспорта.
- Protocol.{*,UserProtocol},Transport.{Sockets,SSL}: Добавлено функцию Protocol::waitReqTm() для контроля режима пула входного протокола.
SYS
- FIX:TVarObj: Предотвращено возможность двойного освобождения объекта. Исправлено EVAL результат функции TVarObj::propGet().
- Версию библиотеки ядра поднято до 2:3:0. Версию типа подсистем DB, DAQ, Archive, Protocol, Special, Transports, UI поднято до 7.
- Archive.FSArch,DB.DBF,DAQ.{Comedi,SMH2Gi}: Использование readdir_r() переписано для прямого выделения памяти структуры "dirent" и предупреждения проблем на других ОС, вроде QNX.
Сбор данных
- FIX:OPC_UA:
- FIX:libOPC_UA: Все ошибочные пустые строки (-1) заменены на пустой массив (0). FIX: Исправлено зацикливание на пустом перечне сервиса "Read". FIX: Исправлено обработку аутентификации для клиента на предмет сохранения текущего описания конечной точки, с целью дальнейшего получения "policyId" и использования в сервисе аутентификации. К части сервера добавлено новые типовые пространства имен: 2-"http://opcfoundation.org/UA/DI/, 3-"http://PLCopen.org/OpcUa/IEC61131-3/". Добавлено независимый контроль версии libOPC_UA. Добавлено специфичные типы значений OpcUa_IntAuto и OpcUa_UIntAuto для адаптивного выбора типа целого, значительным образом для предоставления целого не исключительно фиксированным int32 (int64). К части клиента, для контроля подключения, добавлено виртуальную функцию connect(), использовано в сервисе "CloseSecureChannel" для закрытия соединения.
- FIX:Клиент: Исправлено отображение кодов статусов для атрибутов контроллеров. Дополнение информации через: applicationUri(), productUri(), applicationName(). Для пустого "browseName", узлом обзора установлено использование "displayName". Исходные тексты тестового клиента несколько очищены и расширены.
- Сервер: Пространство имён OpenSCADA DAQ установлено в индекс 4.
- Siemens: Добавлено и проверено собственную реализацию ISO-TCP, значительным образом благодаря запросу Proviron Holding NV. Добавлено таймаут восстановления. Выполнено значительный пересмотр исходного кода на предмет захвата ресурсов, сообщений про ошибки и другого.
Транспорт
- FIX:{Sockets,Serial,SSL}: Исправлено захват ресурса исходящего транспорта в messIO(), реально захват не удерживался. Реализовано режим пулинга входного протокола. Добавлено поддержку режима не запроса и все модули адаптированы для этого, путём установки аргумента time в значение меньше нуля у функции {TrOut}.messIO().
- Serial: Отключение (остановка транспорта) добавлено для выходного порта в случае результата чтения <= 0, что указывает обычно на потерю устройства.
Протокол
- UserProtocol: Расширено входные запросы попыткой включения, значительным образом для обеспечения использования статических функций в процедурах протокола.
Интерфейс Пользователя
- FIX:UI.{Vision,WebVision}: Исправлено падение во время загрузки данных тренда в случае отсутствия значений (time = 0).
- QTCfg: Прогресбар занятости адаптировано на предмет первичной установки диапазона и его обновления на предмет максимума к текущему.
- Vision: Адаптировано для сборки с libphonon4qt5 и Qt5. Разрешено использование устаревших функций Phonon и Qt5.
9.7 [07.11.2015] ЧЕТЫРНАДЦАТОЕ (14) обновление
Это обновление релиза 0.8 LTS исправляет около 35 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- SYS.TUI: Атрибут run_st переименовано в runSt.
Дополнения:
- SYS: API пользователя для объекта Array расширено функцией sum() с целью суммирования указанных элементов массива. Добавлено функцию API пользователя SYS.fileRemove(string file).
SYS
- FIX: Функцию API пользователя system() исправлено на предмет полного чтения канала с помощью popen, непосредственно до EOF.
- FIX: Исправлено установку, во время проверки многопроцессорности, для пользователя только одного процессора, номер 1, путём получения реального количества процессоров.
- FIX: Загрузку конфигурационного файла и функцию пользователя API load() переписано с целью предотвращения доступа за границы выделенной памяти.
- FIX: Безопасность: создание стандартных пользователей "root", "user" и групп "root", "user" добавлено только после загрузки подсистемы и их отсутствия. Расширено функцию access() на предмет проверки присутствия групы и предотвращения исключений.
- FIX:debian.openscada.init,data.{oscada_ALT.init,oscada_gentoo.init}: Исправлено отсутствие ключевого слова "export" перед LANG=en_US.UTF-8.
- TRegExp: К функции replace() добавлено проверку на ненулевой диапазон с целью предотвращения зависаний.
- Опции командной строки установлено в нечувствительность к регистру: coreDumpAllow, pidFile, h, help, log, messLev, modPath, config, station, statName. Некоторые опции командной строки переименовано и дополнено синонимами: demon + daemon, CoreDumpAllow у coreDumpAllow, pid-file + pidFile, MessLev у messLev, ModPath у modPath, Config у config, Station у station, StatName у statName.
- Версии всех модулей поднято согласно их изменениям и в последствии будут отслеживаться с изменениями.
- debian: Значительным образом очищено на предмет разрешения большинства ошибок и предупреждений lintian. openscada.init: Уровни Default-Start установлено в 2 3 4 для предотвращения автоматического запуска с графическим интерфейсом, по уровню 5.
- Добавлено возможность установки основного набора процессоров в конфигурационном поле, включая информацию про текущий набор процессоров. Такая-же информация про текущий набор процессоров добавлена по потокам задач, на главной вкладке "Задачи".
- Адресацию по свойствам конфигурационного файла установлено в нечувствительность к регистру, для значения атрибута "id", особенно для: Workdir в WorkDir.
БД
- FIX: Исправлено удаление БД из конфигурационного файла установкой "ForceCfg".
Сбор данных
- FIX:{DCON,ModBus}: Исправлено расширение сообщений про ошибки, дополнением различными ошибками попыток.
- FIX:ICP_DAS: Быстрое задание сбора I-8017 переключено на использование TSYS::taskSleep() вместо clock_nanosleep(), с целью предотвращения зависаний в случае переполнения wTm. Исправлено сборку на ARM.
- FIX:DAQGate: Предотвращено возможную потерю архивов путём исключения их удаления с параметрами во время синхронизации. Исправлено для предотвращения потери атрибута SHIFR и других после возобновления параметра, что связано с блокированием после попытки удалить.
- FIX:JavaLikeCalc: Исправлено функцию {Ціле}.toString() на предмет установки знаковым исключительно для базы 10.
- FIX:SoundCard: Предотвращено пропуск освобождения ресурса для невыключенных параметров.
Архив
- FIX: Исправлено установку значения поля "Source" из конфигурационного интерфейса (конфигураторы).
- FIX:{*,FSArch}: prev_val унифицировано к типу double во всех операциях вроде усреднения.
- FIX:FSArch: VFileArch::setVals() переписано для округления целого и реального типов данных с целью предотвращения ошибки тут, доступа к невыделенной памяти.
- Archive.DBArch: Добавлено обратное чтение, при запуске, значений архивов с большой периодичностью, вроде минутных и часовых.
Транспорт
- {Sockets,SSL}: Добавлено статистическую информацию по активным подключениям, включая: файловый дескриптор сокета, адрес хоста клиента, время подключения и последнего запроса, трафик ВВ. Добавлено ограничение по количеству клиентов на хост.
Протокол
- FIX:OPC_UA: Исправлено возможную ошибочную обработку записи сертификата. Файл COPYING библиотеки заменено на содержимое "GNU LESSER GENERAL PUBLIC LICENS" и добавлено файл GPL-3. libOPC_UA дополнено функцией Server::clientAddr() для возможности обнаружения необходимости переустановки и повторного использования безопасного канала.
- FIX:ModBus: Исправлено обработку общего префикса 'i' и строки.
Интерфейс Пользователя
- FIX:{QTCfg,Vision}: Исправлено получение шрифта, из базового типового шрифта (системных шрифт), в подсветке синтаксиса текста и в целом, с помощью Vision::getFont().
- {VCAEngine,Vision}: Добавлено поддержку специфических для визуализатора контрольных атрибутов. Внедрено в UI.Vision специфического атрибута "Елементы статуса пользователя". Удалено устарелый доступ к правам.
- QTCfg:
- FIX: Переписано проверку непринятых изменений на прямой механизм.
- Обработку запросов к хостам перенесено в отдельные потоки и в целом улучшено отклик интерфейса.
- Расширено редактирование полей целых значений адаптивностью в отношении представления dec, hex и oct.
- Виджет просмотра списка перенесено в клас ListView и унаследовано от QListWidget для установки sizeHint() в 5 строк.
- FIX:VCAEngine: Исправлено использование в атрибутах пользователя символа '|' для типов, которые не равны TFld::Integer, TFld::Real и выбора. Значительно обновлено контекстную помощь для атрибутов всех примитивов.
- FIX:Vision: Исправлено сборку для Qt 5.4. Добавлено проверку и уведомление про попытку загрузки mime в выбранный элемент.
Special
- FIX:FLibSYS: VArchObj::FFT(): Предотвращено потенциальное падение. Расширено для проверки на EVAL и замену его на адаптивный последний аргумент <vlOnEVAL>. К результирующему массиву добавлено обєектные атрибуты "bufSize" и "bufEVAL" для возможности контроля качества данных.
9.8 [14.05.2015] ТРИНАДЦАТОЕ (13) обновление
Это обновление релиза 0.8 LTS исправляет около 50 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- SYS: Ресурсы конфигурации отделены в cfgRes(). ModSched: Отделен захват ресурсов в "schM".
- FIX:SYS: Функцию API пользователя SYS.strDecode() исправлено на предмет использования аргумента 2 по умолчанию.
- TCntrNode: Флаги MkDisable, Disable, MkEnable, Enable переименованы в DoDisable, Disabled, DoEnable, Enabled. Режим отложенного удаления окончательно убрано, как флажок NodeShiftDel, удаление последнего аргумента в функции nodeDel() и chldDel().
Дополнения:
- SYS: Добавлено короткую функцию-ссылку rRnd() на TSYS::realRound() (в области имен OSCADA). Добавлено статический вариант функции TSYS::getCmdOpt_() для возможности использования в основной пускающей программе. Объект API пользователя XMLNodeObj расширено функцией clear() для обеспечения быстрой очистки узла от потомков, текста и/или атрибутов.
- TRegExp: расширено опцией 'u' для разрешения UTF-8 символов и установлено её принудительно для локали UTF-8.
- Transport: Объекты API пользователя дополнены функциями: In::{status,addr}, Out::{status,addr,timings}.
- Archive: Объекты API пользователя дополнены функциями: TVArchive::{status,archivatorList,getVal}(), TVArchivator::status().
SYS
- Переключено на сборку с помощью автоматического построителя пакетов OpenSCADA и предоставления сервисных обновлений "0.8.13.{S}" пользователям, подписанным на техническую поддержку, oscada.org/ru/uslugi/tekh-podderzhka/.
- Основную стартовую программу "openscada" значительным образом переписано для обеспечения создания настоящего режима демона: проверка и переключение в режим демона сначала; обработка CoreDumpAllow для оставшегося в работе процесса; проверка и создание PID-файла для рабочего процесса; непосредственно запуск ядра OpenSCADA.
- FIX:TCntrNode: Разрешено предоставление отключенных узлов (Disabled) в их перечне, как и проверку на наличие.
- FIX: Предупреждено падение рано-запущенных функций у load_() DAQ.JavaLikeCalc, по командной строке "openscada --help". Подсистему DAQ установлено в упорядоченную и для определения приоритетного режима модулей добавлено свойство модуля "HighPriority", для размещения их первыми.
- FIX: debian/rules упрощено и унифицировано. Установлено "dh_installinit --no-start" для предотвращения автоматического запуска этого сервиса. debian/control: Добавлено зависимости для сборки с Qt5.
- FIX:Скрипты инициализации:
- FIX:Debian: значительно улучшено, упрощено, адаптировано к PID и исправлено удалением принудительной установки LC_ALL, которая ломала индивидуальную установку LC_NUMERIC=C для отличных от C, POSIX или Английских локалей.
- ALTLinux: значительно улучшено, упрощено, адаптировано к использованию PID и расширено аргументом "--retry TERM/30/KILL/5".
- Gentoo: значительно улучшено, упрощено, адаптировано к использованию PID и очищено.
- RH: значительно улучшено, упрощено, адаптировано к PID и расширено аргументом "-d 30".
- TVarObj: Блокирование ресурсов общих данных объектов API пользователя Res заменено на pthread_mutex_t, а также использовано для подключения к объектам.
- signal() заменено на sigaction() и добавлено восстановление оригинальных обработчиков при разрушении TSYS.
- TArchives,TCntrNode,UI.VCAEngine: Все оставшиеся операции с TArrayObj перенесены на arGet() и arSet().
БД
- FIX:FireBird: Предупреждено исправление таблиц для ключей с типом blr_varying. Шаблон конфигурации AX_LIB_FIREBIRD несколько адаптировано для конфигураций и сборки с заголовками в */include/firebird, как в SuSE, и 64-битными библиотеками, как в Mandriva64.
- MySQL: Смысл поля адреса "имена" изменено на "уставки" (кодирование-сравнение-движок) для добавления во время создания БД и команды SET.
- FIX:PostgreSQL: Добавлено обход проблемы дублирования одних и пропуск других записей в запросе fieldSeek(), путём добавления "ORDER BY" к этому запросу и принудительной их сортировки. Зависимости сборки в макросе AX_LIB_POSTGRESQL несколько исправлены в результате.
- FIX:SQLite: Адаптировано к описанию ключей как порядковой позиции ключа.
Сбор данных
- FIX:ModBus,DAQGate,OPC_UA: Исправлено возврат после условия "!p->enableStat() || !p->owner().startStat()" в функции установки значения, для предотвращения последующей и реальной записи.
- FIX:OPC_UA:
- FIX: libOPC_UA: Сервис TranslateBrowsePathsToNodeIdsRequest исправлено для случая некорректных путей, добавлено дополнительные сообщения отладки.
- FIX: Исправлено ожидание и сборку частей больших сообщений входного протокола.
- FIX: Вход: Исправлено возможное отбрасывание лишних частей запросов после полных запросов, которые не требуют немедленного ответа и не являются ошибочными.
- FIX: Тип OpcUa_Int64 исправлено расширением iN{u}() и oN{u}().
- Добавлено поддержку типа Массив(Array) простых типов, добавлено обработку AId_DataType для типа Array в серверной части.
- Для контроля за ограничениями добавлено вкладку "Данные", добавлено лимит limRetrQueueTm() для контроля времени очереди переотправки.
- К сервису "RepublishRequest" добавлено и использовано ошибку OpcUa_BadMessageNotAvailable.
- Главное целое заменено с OpcUa_Int32 на OpcUa_Int64.
- FIX:Siemens: Версию LibnoDave обновлено до 0.8.5 (последняя от 05/17/13), исправлено приведение указателя к целому путём замены приведения в long.
- ICP_DAS: обновлено libi8k.a и заголовки, сторожевой таймер EnableWDT() для LP-8x81 заменено на EnableSysWDT().
- FIX:JavaLikeCalc: Расширено командами виртуальной машины AddAss, SubAss, MulAss, DivAss для оптимального выполнения операций ++, --, +=, -=, *=, /=, сразу с присвоением; значительным образом для операций с типом данных "Строка" и предупреждения лишнего перевыделения памяти там с каждым добавлением. FIX: Функции виртуальной машины Равно (Equal) и НеРавно (NotEqual) подстроено под возможность корректной обработки неопределённых свойств объекта путём общей обработки как Вещественное для всех типов кроме "Строка". Установлено использование общего временного регистра для бинарных операций типа "a = b+c+d+e;", в значительной степени с целью оптимизации скорости в добавлении строк.
Транспорт
- Sockets: Добавлено свойство MSS для контроля за размером TCP-сегмента на плохих каналах.
Архив
- FIX: Исправлено обработку mLastGet для значений, на предмет исключения записи в нективный буфер.
- FIX:FSArch: Исправлено процедуру ремонта файлов значений для значений фиксированных типов и добавлено наконец код ремонта для нефиксированного типа (как строка). Успешно выполнено всю цепь тестов, всех типов фиксации, для механизма последовательной упаковки и исправления ошибок архивных файлов. Свойство командной строки "copyErrValFiles" заменено наличием каталога "errors" для копирования ошибок сюда.
- FIX: Исправлено обработку удаления файлов за лимитом на предмет удаления свежего-нового файла архива в случае когда их два.
- FIX: Архивацию Строк окончательно исправлено после предыдущего неполного исправления на предмет последнего значения.
- FIX: Добавлено проверку на отсутствие свободного места хранилища для предотвращения зависанию и потере данных сообщений и значений.
- Лимит сообщений в плоском формате расширено до 100000 символов.
- Добавлено вкладку "Файлы" для сообщений и значений с детальной информацией про файлы архива.
Протокол
- SelfSystem: Добавлено свойство ЛимитОдногоХостаПользователя (SingleUserHostLimit) для контроля ограничений и сообщения про ошибку в случае достижения. Расширено статусом - Активные сеансы аутентификации.
- HTTP: Расширено статусом - Активные сеансы аутентификации.
Интерфейс Пользователя
- FIX:VCAEngine,Vision,WebVision:
- FIX: Для примитива "Диаграмма" расширено вариант адреса "data:{XMLNodeData}" на предмет возможности отсутствия "tm", "tm_grnd" и установки их в секундах, по атрибуту 's'. Исправлено назначение загруженных но не добавленных в буфер значений, для вариантов прямой адресации "line:{value}" и "data:{XMLNodeData}".
- FIX: Вид "Кнопка" примитива FormEl адаптирована к масштабированию изображения ко всему размеру виджета и разрешению накрывать всё пространство этого изображения.
- Добавлено поддержку типа "XY" в примитив "Диаграмма", где Y по нечётным и X по чётным параметрам.
- Добавлено правильное масштабирование размера вложенных виджетов по масштабированию крайней точки, для корректной подстройки один к одному на любом масштабе.
- К примитиву ElFigure добавлено атрибут "mirror" с целью предоставления возможности зеркалирования вида примитива. Для UI.Vision внедрено только основные функции и некоторые проблемы с дугой сейчас присутствуют.
- FIX:QTStarter: Для ожидания уничтожения задания UI тайм-аут установлено в 60 секунд и разрешена генерация исключения в случае исчерпания времени уничтожения.
- FIX:QTCfg:
- FIX:LineEdit: Вид "Целое" исправлено на предмет установки разрешённых границ значений [-2147483647:2147483647]
- TextEdit: Установлено принудительный перенос слов, значительным образом для длинных описаний. Добавлено вертикальную подгонку этих полей к полному размеру страницы, для заполненных. Переписано для удаления внутреннего разместителя.
- FIX:VCAEngine:
- FIX: Исправлено ссылку на атрибут виджета из виджета с помощью "wdg:a_XXX" и предотвращено его падение в главном статусе.
- FIX: Операции API пользователя mime() и mimeSet() использовано, проверено и исправлено на предмет редактирования источника примитива "Диаграмма", сохранения в таблице сеанса и отражения результата, для SVG.
- Захват ресурса функции библиотеки виджетов и проекта во время загрузки и включения по потребности для предупреждения многократного входа и выполнения. Предупреждает падение и доступность неполных данных у удалённых исполнителей сеанса проекта.
- FIX:Vision:
- FIX:FormEl: Исправлено случайные отличие между реальным и видимым значением, значительным образом для дискретных видов ComboBox и CheckBox.
- FIX:ElFigure: Предупреждено зависание на нулевой длине между центром и первым радиусом. Временно удалено из scaleRotate() и unScaleRotate() добавление остатка размещения виджета в родительском контейнере для предотвращения в некоторых случаях щелей между заполнениями. Исходные тексты значительным образом почищены, в продолжение. Исправлено некоторые ошибки. Начато реализацию для зеркалирования. Добавлено несколько более разумный контроль за контрольными точками 1 и 2 дуги.
- FIX: Предотвращено двойное освобождение в связи с запоздалым восстановлением пользователя и пароля после смены пользователя на недопустимого для чтения из сеанса проекта.
- FIX: Исправлено удалённое получение перечня проектов и сеансов для удалённого пользователя, в поле пользователя запуска.
- FIX: Разрешённые значения координат ограничено в [-1000000:1000000] в связи с замораживанием обновления фигур в Qt по причине очень больших значений.
- FIX: Удалено принудительные и глобальные текстовые стили "font-weight", "font-style" примитива "Документ" и установлено их только в случае наличия соответствующих свойств в атрибуте шрифта виджета, чтобы обеспечить нормальную работу тегов "<B>" и "<I>".
- FIX: Сообщения "Исчерпано время ожидания" во время попыток восстановления запущенного сеанса, через фоновое ожидание загрузки данных проекта, подавлено и предупреждено закрытие главного окна.
- Печать и экспорт примитива "Документ" разрешено из контекстного меню. Печать по умолчанию установлено для одного и большого (не менее чем вдвое от главной страницы) документа. Экспорт по умолчанию установлено для одного и большого (не менее чем вдвое от главной страницы) документа или диаграммы.
- К статусу конфигурационной страницы модуля добавлено перечень главных открытых окон, для удалённого контроля.
- WebVision: Пользователь "root" или пользователи в группе "root" допущены к многократному открытию сеансов при любых условиях.
9.9 [27.12.2014] ДВЕНАДЦАТОЕ (12) обновление
Это обновление релиза 0.8 LTS исправляет около 30 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- TConfig,DB.*: Удалено глобальный флаг noTransl() как устарелый.
- Безопасность: Для пользователей и их групп переименовано функции lName() и descr() в descr() и longDescr(), соответственно к полям БД.
- TElem: Расширено для создания TFld из примера-шабона присутствующего TFld но с отличным ID. Добавлено TElem::fldClear() для очистки полей.
- TVarObj: Функции propGet() и propSet() расширено для иерархического доступа за путём.
Дополнения:
- TConfig,DB: Для определения ключа добавлено и использовано функцию isKey().
- DB: Добавлено метод TTable::fullDBName().
- DAQ.JavaLikeCalc: Добавлено встроенную функцию пользовательского API tr() для запроса к базе переводов постоянных строк, как терминатор, с целью обеспечения совместимости с рабочей версией.
SYS
- FIX:TCntrNode::chldPresent() изменено для определения всех присутствующих узлов, также и выключенных. Значительным образом для гарантированного определения за названием.
- FIX: Обеспечено принудительное создание заданий и записей к ним в случае ошибок вроде граничного времени запуска. Предотвращение падений в некоторых случаях.
- FIX: Выключены исключения в случае установки значения атрибута в режиме NoWrite, просто выход из функции. Значительным образом для исправления проблем с DAQ.BlockCalc.
- FIX: Безопасность: Размер пароля расширено на более чем 8 символов путём переключения на кодирование MD5. Сохранено обратную совместимость для ранее установленных паролей. Обнаружено Василием Григорьевым.
- CntrIf,UI.{QTCfg,WebCfgD}: К таблице добавлено флажок "noReload" с целью контроля полной перегрузки содержимого большой таблицы после запроса "SET", также использовано в таблице объекта БД.
- DAQ, DAQ.JavaLikeCalc, UI.{QTCfg,Vision}: Добавлено атрибут "font" к корневому узлу правил подсветки синтаксиса с целью указания типичного шрифта конфигурации. Типичный шрифт для JavaLikeCalc процедур установлено в "Courier".
- С целью лучшего определения проблем свойств реального времени к статусу задачи добавлено значение максимальной задержки вызова и использованного времени.
- XMLNode::childGet(): добавлено поддержку отрицательных индексов с целью отсчёта от конца.
- Использование "LibGD" в OpenSCADA ядре выключено по умолчанию и вместо использовано "SVG".
БД
- FIX: TBDS::dataDel() исправлено для удаления записей из конфигурационного файла после таких попыток в БД, значительным образом для исправления удаления одинаковых записей БД.
- FIX:SQLite,MySQL,PostgreSQL,FireBird: Исправлено для предотвращения загрузки перевода из непустого, но выключенного для перевода поля БД.
- FIX:FireBird: dataSeek() исправлено поведение в случае пустого SELECT.
- MySQL,PostgreSQL,FireBird: Для нулевой длины строки по умолчанию использовано тип TEXT.
DAQ
- FIX: Флажок "prcStRd" в задаче резервирования установлено наперёд для предотвращения ошибочного запуска этой задачи во время подключения к отсутствующим удаленным станциям и падения при остановке.
- FIX:JavaLikeCalc: К compileFunc() добавлено захват ресурса на генерацию ID функции по "<auto>" с целью предотвращения многоразового подключения к одной функции.
- FIX: Добавлено ранний старт, на время загрузки, для библиотек функций. Значительным образом для запуска этих функций перед DAQ.BlockCalc.
- Удалено флажок Func::SysAttr для IO "f_frq", "f_start", "f_stop", "this" с целью обеспечения их сохранения, ввиду возможности приоритетного и независимого запуска.
- FIX:Siemens: Значительным образом пересмотрено захват ресурсов и добавлено новый захват на глобальный API, с целью предотвращения падений во время переподключений, параллельный доступ и переопределение индекса подключений.
- FIX:BlockCalc: Процедуру сортирования блоков значительным образом переписано с целью исправления. Предотвращено копирование таблицы с блоками в BLOCK_SH во время копирования этого объекта контроллера.
- DCON,ModBus: Область действия попыток последовательного интерфейса расширено на подключения, в виду возможности искажения запроса и отсутствия ответа.
- LogicLev: Добавлено подключение к свойству объекта по пути в связи "{ModType}.{Cntr}.{Prm}.{Attr}#{ObjPath}".
- FIX:DAQGate: Очищение обрабатываемого списка параметров перенесено с фазы остановки в отключение. Добавлено пропуск пустых параметров в режиме отдельного запроса атрибутов, с целью уменьшения общего времени запроса.
- SoundCard: расширено для специфики X86_64 с короткими вызовами framesPerBuffer к функции обратного вызова.
Archive
- FIX:FSArch: Исправлено на предмет предотвращения дубликатов и ошибочного подключения архивов, для источников данных которые поздно добавляются, а также добавлено обязательную проверку перед добавление новых архивов. Указание на область данных для последнего значения индекса предотвращено для типа Строка.
Transport
- FIX:TTransportIn: Добавлено раннюю остановку в postDisable() для предотвращения падения в деструкторе на освобождённых данных объекта предка.
Protocol
- FIX:ModBus: Исправлено несоответствие формата диагностики узла для реальных счётчиков.
UI
- FIX:VCAEngine,Vision: Процедуру опускания изменений значительным образом исправлено и адаптировано на предмет обновления родительского виджета, в открытом для редактирования режиме. Добавлено поддержку редактирования ячейки вида “Таблица” примитива "FormEl".
- QTCfg,Vision: Установка курсора ожидания исправлено на установку и восстановление после интервала задержки 50 мс, для предотвращения мигания и высокой нагрузки в некоторых окружениях рабочего стола.
- FIX:WebUser: Предотвращено падение во время обработки новых HTTP переменных.
- FIX:QTCfg: Исправлено политику определения размера для значения логического типа в режиме только для чтения. Виджет таблицы значительным образом расширено на предмет:
- Включено вертикальный скролинг по пикселам.
- resizeRowsToContents() расширено на предмет ограничения высоты строк в 0.9 от общей высоты таблицы и вызовом через нажатие мышей в секции заголовка, для перенастройки.
- Представление строки в многострочном режиме текста ItemsDelegate переписано с целью предотвращения ошибочного Qt eliding для строк и другого.
- FIX:VCAEngine: Предотвращено двойную установку страниц в обработку и потерю контекста перво-инициализации. Предотвращено двойное исполнение страниц для инициализации из процедуры установки в обработку и по каскаду из страниц верхнего уровня.
- FIX: Загрузку mime расширено и исправлено для проектов.
- Унифицировано доступ у таблице времени сеанса проекта добавлением функций атрибута сеанса sessAttr(), sessAttrSet(). Эти функции использовано в: примитиве "Документ", стиле сеанса, редактируемых ресурсах с помощью функций API пользователя "mime()" и "mimeSet()", "fromSess" и "toSess" функций API пользователя "attr()" и "attrSet()". Сервис "/serv/attrSess/" добавлено для доступа к атрибутам сеансов.
- Добавлено поддержку наследования для владельца и разрешений віджета.
- Автоматическое создание сеанса во время включения модуля обновлено.
- Добавлено доступ к атрибутам DAQ объектного типа по пути в связях типа "/DAQ/{Cntr}/{Prm}/{Attr}#/{oAttr1}/{oAttr2}".
- FIX:Vision: Установлено прокси фокуса для редактируемого контейнера виджета на этот виджет, в режиме разработки, чтобы обеспечить общность источника фокуса и потерю выбора вложенных виджетов в общих случаях.
- FIX: Исправлено примитив "Диаграмма" на предмет актуальной установки курсора и значений параметров под ним в случае значительной разницы между хостом сеанса сервера и хостом визуализатора этого сеанса, на предмет отставания позиции курсора на один период.
- FIX: Виджет LineEdit несколько исправлено на предмет применения реального размера кнопки путём получения реального и предотвращения этим плывучего увеличения размера окна в виду несоответствия.
- FIX: Исключено потерю рисок в виде “Слайдер” и дефекты похожих видов примитива “FormEl” после нажатии в контейнере этого элемента путём глобальной обработки сообщений QEvent::MouseButtonPress и QEvent::MouseButtonRelease.
- FIX: Исправлено обновление изменений после их принятия в групповом режиме менеджера атрибутов виджета путём обновления отличных атрибутов виджета в группе а также в первом виджете группы.
- Кеш ресурсов значительным образом улучшено для ускорения доступа и обновления.
- Добавлено контроль и сохранение позиции окон режима исполнения с помощью включения опции "winPosCntrSave" и использования нового сервиса "/serv/attrSess/". Номер экрана расширено не только для связи с различными физическими дисплеями, а и для независимого контроля и сохранения позиции.
- Для автоматического запуска добавлено возможность указания сеанса в параметре “Список проектов для пуска”, значительным образом для подключения к уже запущенным или фоновым сеансам.
- Добавлено время контроля восстановления подключения для предотвращения блокирования удалённых подключений к серверу визуализации и обновления экрана.
- WebVision: Коррекция прокручивания для разных вариантов включения в контейнер. Кеш изображений значительным образом расширено очисткой похожей на UI.Vision.
- WebCfgD: Расширено попыткой загрузки файлов WebCfgDVCA.html и WebCfgDVCA.js с рабочей папки. JavaScript код значительным образом очищено и Таблицу расширено упрощением контроля и выходу из режима редактирования ячеек.
Special
- FIX:FLibSYS: Исправлено и расширено функцию strDec4Bin() аргументом разделителя со значением по умолчанию " ", с целью восстановления обратной совместимости.
9.10 [21.07.2014] ОДИНАДЦАТОЕ (11) обновление
Это обновление релиза 0.8 LTS исправляет около 20 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- SYS: Список TSYS::Errors (в основном DB Errors) удалено как устарелый.
- TSYS::modifCfg() расширено для проверки на доступ на запись.
- Унифицировано функции strEncode() и strDecode().
- XMLNode: Аргумент позиции функций childIns() и childDel() установлено в знаковый тип (integer) чтобы позволить вставку и удаление от конца (отрицательное значение).
- TCntrNode: К функциям TCntrNode::load() и TCntrNode::save() добавлено аргумент "string *errs = NULL" для размещения всех ошибок загрузки и сохранения объектов.
- DB: Расширено функции TBDS::dataGet(), TBDS::dataSet() и TBDS::dataDel() аргументом "noEx = false" для генерации исключений в случае ошибок доступа к хранилищу.
- Transport: setAddr() изменено на невиртуальный, cfgChange() использовано вместо. К функции "start()" выходного транспорта добавлено аргумент времени, ненулевое значение которого контролирует время подключения.
- DAQ: Аргумент "maxCalcTm" функции TTipDAQ::compileFunc() установлено в 0 для указания использования значения по умолчанию модуля.
- Archive: TArchive, TMArchivator и TMArchivator переведено на использование TConfig::cntrCmdMake(). setValPeriod() и setArchPeriod() изменено на невиртуальные, cfgChange() использовано вместо.
Дополнения:
- SYS: Добавлено инициированный нулём объект ошибки "TError() : cod(0)". Добавлено новую глобальную и простую функцию s2ll() для области имён OSCADA. Вариант функции TSYS::strMess() добавлено для контроля за длиной и добавления "...".
- Archive: Добавлено приоритет выбора к объекту архиватора значений с целью предоставления контроля за последовательностью, и отключения вообще, в режиме выбора "Все", использовано для функций getVal(), getVals() и сервиса архива "/serv/val". Добавлено функции selPrior() и setSelPrior().
DB
- AGLKS.St.db: ModBus.testTCP, DAQGate.test и OPC_UA.test установлено для запуска по умолчанию. FIX: Архиваторы сообщений "FSArch.NetRequsts" и "FSArch.StatErrors" исправлено.
SYS
- Добавлено функции API пользователя strEncode() и strDecode(). Добавлено сообщения про проблемы доступа к хранилищам. Комплексное тестирование уведомлений про проблемы для хранилищ: SQLite, MySQL, PostgreSQL, FireBird, DBF, Cfg; результаты: wiki.oscada.org/Works/Tests/DB.
- FIX:TFunction, TValue, UI.VCAEngine.Attr: Добавлено установку TEValObj() в атрибут объектного типа по EVAL скаляру.
DB
- Предотвращено исключение в момент отключения объекта БД, как правило после проблем в момент подключения к сетевой БД. Уменьшено таймаут ожидания освобождения таблиц до 1 секунды в момент остановки БД, для ускорения в момент потери подключения к сетевой БД.
- DBF: Добавлено периодическую синхронизацию (10 секунд) изменений в памяти с файлами. Добавлено выбор директории БД в строке конфигурации объекта БД. Добавлено доступ и ошибки для БД только на чтение.
- SQLite: Добавлено поддержку записи бинарной строки в БД, формой "#'XXXXXX'". Адаптировано к работе в режиме только для чтения.
- FireBird: Обрабатываемые типы расширено до: blr_varying, blr_varying2, blr_text, blr_text2, blr_blob, blr_short, blr_long, blr_int64, blr_float, blr_double и blr_d_float. FIX: Добавлено очистку данных API после ошибок подключения. fieldSet() и fieldDel() значительно переписано для типичности.
- MySQL: Адаптировано к работе в режиме только чтения, fieldDel() значительно переписано для обработки режима только для чтения. Добавлено обработку CR_CONNECTION_ERROR в случае потери подключения.
- PostgreSQL: Обрабатываемые типы расширено до: text. character varyin, character(%d), character varying(%d), smallint, integer, bigint, real, double precision, timestamp with time zone. FIX: Обработку потери подключения перенесено на момент после запроса. Обработку транзакций переписано для типичности. Адаптировано для работы в режиме только для чтения, fieldDel() значительно переписано для обработки режима только для чтения.
DAQ
- FIX:JavaLikeCalc: "Ошибка постоянной после постоянной" дополнена положением её размещения. Добавлено типовое время безопасности во вкладке модуля.
Корневой объект TDAQS расширено запросом интерфейса управления "/serv/PrmAttr" для удалённой навигации по дереву DAQ параметров.
- FIX:ModBus: Исправлено запись по комплексным типам вроде "_f", "_i4" в режиме только для записи. Комплексные типы расширено с "u2" - uint16, "d" - Double.
- SNMP: Значительно расширено навигацией в строке по OID, MIB дерево использовано для определения режима доступа и вариантов выбора перечисления.
- OPC_UA: К объекту конфигурации параметра добавлено навигацию в строке по дереву OPC UA узлов. FIX: Расширено контроль размера входного пакета и заголовка для ранней обработки и отбрасывания.
- DAQGate: Добавлено навигацию в строке по внешним узлам и дереву удалённых параметров. Расширено для идентификации удалённых параметров в независимом пространстве названий и связывания по идентификатору удалённого параметра. Разрешено прохождение "/prm/*" переменных для обработки некоторых глобальных списков. Расширено для связывания с иерархическими параметрами (из OpenSCADA 0.9).
Архив
- FIX: Исправлено потерю подключения архивов к архиватору в случае его перезапуска.
- FIX: Исправлено установку отрицательного уровня нарушений в случае прямого их запроса через сервис "/serv/mess" на предмет исключения модификации сохранённых данных.
- Установка периода архиватора расширена на предмет нулевого значения и отключения по нему обработки буфера значений, т.е. только для прямой записи в архив.
- Адаптировано для записи не выровненных к периоду значений и буферов.
- FIX:DBArch: Добавлено принудительное перечитывание meta-данных для архивов значений, после ошибочного их чтения на старте, по причине недоступности сетевой БД. Добавлено обнаружение отключения архиватора от БД и использование следующего архиватора по приоритету.
- {DBArch,FSArch}: Типовой приоритет установлено в 1 для DBArch и 1000 для FSArch.
Transport
- Добавлено ко вкладке "Запрос" выходного транспорта получение измеренного время запроса после его прерывания исключениями. FIX: TTransportOut, TTransportIn исправлено на предмет проверки и обработки установки значений.
- Sockets: Типичные таймауты выходных транспортов возвращено в "5:1".
Протокол
- ModBus: Добавлено поддержку функций 0x2 (CI) и 0x4 (RI). Добавлено классическую форму записи регистров и комплексные типы расширено "d" - Double.
- SelfSystem: Реализацию протокола улучшено для проверки и ожидания полноты заголовка. Добавлено аргумент "conTm" к выходной части транспорта. SES_OPEN ограничено в 10 подключений от одного источника и пользователя. Сеанс перемещено в std::map для ускорения.
UI
- QTCfg: Добавлено проверку и предупреждение про непринятые изменения на странице. Добавлено и использовано функцию getPrintVal() для проверки и кодирования откровенно бинарных строк. Добавлено поддержку команд "load" и "save" к группе узлов.
- VCAEngine: Расширено функции API пользователя области сеанса attr() и attrSet() аргументами "bool fromSess" и "bool toSess" соответственно для установления атрибутов в таблице сеанса. FIX: Исправлено слежение изменения родителя для проектов и библиотек виджетов. VCAEngine: атрибут "geomZ" виджетов разрешено для отрицательных значений.
- Vision: Управление атрибутом "geomZ" изменено на его смену только у одного виджета для исключения отрыва от реально рабочей позиции, в основном для исключения смены "geomZ" у группы виджетов и коллизий реальной не смены позиций. Функцию обновления последовательности вложенных виджетов расширено для исключения случайности упорядочивания для одинаковых значений "Z", путём досортировки по идентификатору. FIX: Для вложенных в контейнер страниц установлено атрибут окна Qt::WA_WindowPropagation с целью обеспечения реальной прозрачности путём распространения палитры, в основном из-за скрытия Slider. FIX: Исправлено обновление последовательности виджетов после ручной установки "geomZ", в режиме разработки.
- {QTCfg,Vision}: В качестве курсора занятости-ожидания использовано QApplication::setOverrideCursor(Qt::WaitCursor).
- {VCAEngine,Vision}: Добавлено функцию опускания изменений визуального элемента к его родителю. Добавлено проверку и предупреждение про непринятые изменения в конфигурационном диалоге элементов.
9.11 [09.05.2014] ДЕСЯТОЕ (10) обновление
Это обновление релиза 0.8 LTS исправляет около 50 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
API
!!!!:Изменения:
- Archive: Добавлено результат функции TMArchivator::put() для контроля завершения записи.
- SYS.Mess,Archive.DBArch: Тип уровня сообщения в структуре TMess::SRec изменено с типа "Type" в int8_t для исправления отрицательного уровня в DB.MySQL.
- SYS.XMLNode: В функции load() аргумент "full" заменено на "flg" с флагами: 0x01 - полный режим; 0x02 - не удалять пробелы с начала и конца текста тега.
- Transport: Улучшено конфигурацию внешних хостов через выбор режимов "Пользов.", "Системный", "Пользов. и Системный" в общей таблице. Удалено функции: sysHost(), setSysHost(). Изменено функции: extHostList(), extHostGet(), extHostSet(), extHostDel().
- DAQ: API функции "void vlSet();" расширено для указания нового значения прямо и предупреждения его потери.
Дополнения:
- SYS: Добавлено новые объекты блокирования ресурсов MtxAlloc и MtxString.
- К ResAlloc добавлено lock() и unlock().
- TCntrNode: Добавлено базовую функцию _ctrMkNode() и специфичную для указания аргументов ctrMkNode2() к оригинальной ctrChkNode().
- "TSYS::i{bits}_LE()", "TSYS::i{bits}_BE()", "floatBE{rev}()", "doubleBErev()" функции добавлено для обработки размещения байт.
- Добавлено новые глобальные функции к области имён OSCADA: tm2s(), s2i() та s2r().
- TArrayObj: Добавлено новые функции прямого доступа arGet() и arSet(), для быстрого доступа из внутри.
- XMLNodeObj: Добавлено новую функцию "childGet(string name, int num = 0)".
- Transport,Transport.*: К выходному транспорту добавлено функции timings() и setTimings().
DB
- AGLKS.St.db: KeepAlive таймаут входного транспорта OPC_UA установлено в 60, Клиентские и Серверные сертификаты сгенерировано с учётом всех требований и адрес установлено в 127.0.0.1.
SYS
- адаптировано для обработки *.core файлов.
- TConfig,TValue,UI.{VCAEngine,Vision}: Добавлено поддержку редактируемого списка в конфигурационных полях и DAQ атрибутах посредством TFld::SelEdit.
- Предоставлено функции API пользователя gmtime(), timegm(), strftimegm(), strptimegm() для обработки времени в GMT(UTC).
- DB,TVariant,DAQ.JavaLikeCalc,Special.FLibSYS: Установлено прямой доступ к объекту пространства имён TArrayObj, изнутри.
БД
- FIX:DB.{SQLite,MySQL,PostgreSQL,FireBird}: Исправлено проверку на отсутствие ключа в БД для fieldSeek() и fieldSet().
- DB.{SQLite,FireBird,PostgreSQL,MySQL}: Изменено механизм восстановления подключения для сетевых БД на включение выключенных БД с toEnable() в цикле проверки транзакций.
- Проведено комплексные тесты на восстановление потерянных подключений и общий тест БД модуля Special.SystemTests.
- MTable::fieldDel() адаптировано для удаления записей с ключами реально отсутствующими в таблице БД.
- MySQL: Добавлено поддержку и использование транзакций для повышения производительности некоторых хранилищ БД.
DAQ
- BlockCalc: Добавлено опциональную запись при изменении значений по выходным связям блоков. Размер поля "VAL" для таблицы IO блоков увеличено с 20 на 10000 и "LNK" с 50 на 100.
- JavaLikeCalc.Array: Установлено прямой доступ к свойствам объекта для повышения производительности. FIX: Исправлено установку элемента объекта в массиве во время создания как "new Array(0, 1, 2, ar[0])".
- FIX:LogicLev: Тип "Отражение" исправлено и расширено для подключений к целевому параметру, обновления и синхронизации перечня атрибутов в периоде вычисления.
- ModBus: Убрано попытку подключения из функции start() объекта контроллера.
- OPC_UA.{*,LibOPC_UA}: LGPL COPYING файл добавлено к этой библиотеке.
- FIX: libOPC_UA исправлено в ответе клиентскому сервису "Write" и ещё с десяток критических исправлений.
- OPC_UA области имён унифицировано, а также NS_OPC_UA(0), NS_SERVER(1) и OpenSCADA_DAQ_NS(2) добавлено.
- Добавлено обработку времени жизни сеанса.
- Рост SubscriptionId и MonitoredItemId начато с '1', для исключения некорректного значения '0'.
- Добавлено установку данных пользователя и пароля в клиентской части программы и в тесте. Добавлено установку политики в тестовой программе.
- К объекту параметра клиента добавлено однострочный обзор узлов для установки в перечень обработки.
- FIX:System: Добавлено новый DA-тип "UPS", посредством NUT-протокола. Исправлено проверку DA и их создание по общим параметрам, не по идентификатору параметра.
- BFN,DAQGate,ModBus,OPC_UA: Формирование нарушений состояния подключения к удалённому источнику унифицировано.
Архив
- TMArchivator: Переписано архивацию сообщений для переотправления сообщений в буфере после восстановления подключения.
- FIX:Archive.*,Special.FLibSYS: Предотвращено установку отрицательного значения периода в буфере. TValBuf::vOK() расширено для проверки выравнивания к периодичности буфера. setVals() адаптировано для записи невыравненного по границе [beg:end] путём округления к периоду.
- *,DBArch: До TVArchEl::setValsProc() добавлено результат с целью контроля записи части буфера в архив, использовано для перезаписи в сетевую БД посредством DBArch. Разрешено запуск архиваторов Значений и Сообщений в случае ошибок в БД, предусматривая восстановление подключения.
- *,UI.{Vision,WebVision}: Сервис "/serv/val" адаптировано для возврата EVAL_STR как EVAL для всех режимов предоставления данных.
Transport
- {SSL,Sockets}: KeepAlive параметры входного транспорта унифицировано и добавлено описания. Типовое значение KeepAliveTm установлено в 60 для предотвращения зависания входного транспорта.
UI
- QTCfg: Проверка и смена текущей страницы при её переименовании. Механизм подстройки строк и столбцов таблицы установлено похожим на вид "Таблица" примитива "FormEl" для UI.Vision. Добавлено поддержку установки значения записей в группу-выбор страниц.
- Vision:
- FIX: Примитив "Текст" исправлено на предмет обновления размера шрифта во время смены масштаба.
- Для захвата объекта сеанса добавлено простой ресурс dataM (pthread_mutexattr_t) и использовано для mOpen, mStProp.
- FIX: Сервис <openlist path="/serv/pg"> исправлено на ошибки виджетов страницы и попытку пересоздания сеанса.
- Для страниц включенных в контейнер установлено прозрачную палитру фона.
- UI.{QTStarter,QTCfg,Vision}: Адаптировано для Qt5, исключая Phonon.
- VCAEngine,Vision,WebVision: Примитивы "Текст", "Протокол", "Документ", "Диаграмма" переведено к индексам с types.h.
- VCAEngine,Vision: Добавлено новый вид "Таблица" примитива "FormEl".
- Vision,WebVision: Время слежения для примитива "Диаграмма" и "Протокол" установлено во время реально присутствующих данных.
Special
- FLibSYS: Добавлено унифицированную функцию вычисления CRC().
9.12 [21.12.2013] ДЕВЯТОЕ (9) обновление
Это обновление релиза 0.8 LTS исправляет около 40 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
- SYS:Добавлена контролируемая запись в конфигурационный файл с целью предотвращения записи немодифицированных полей зависимых от системного окружения. Глобальные определения OBJ_ID_SZ и OBJ_NM_SZ добавлены и использованы для всех конфигурационных ID и NAME. Лимит на размер поля NAME пропущен к конфигураторам посредством поля "idm", через OpenSCADA интерфейс управления.
- DB: К функциям TBDS::dataGet() и TBDS::dataSet() добавлен флаг "forceCfg", позволяющий установить приоритетное сохранение в конфигурационный файл. MySQL: MULTI_STATEMENTS запросы включены, однако обрабатывается и возвращается только первый результат.
- Protocol.UserProtocol: В контекст процедуры входного транспорта добавлен атрибут "tr" для представления объекта входного транспорта.
- DAQ.{BlockCalc,LogicLev,ModBus},Archive,UI.VCAEngine: Связи на DAQ параметры и атрибуты адаптированы для возможности включения параметра в параметр, для пути типа "{Mod}.{Cntr}.{Prm1}.{PrmN}.{Attr}".
- DAQ: Функции TDAQS::ctrListPrmAttr(), TDAQS::prmAt() и TDAQS::attrAt() унифицированы для исключения зависимости от порядка. Функция TDAQS::daqAt() добавлена для доступа к любому элементу DAQ пути, посредством TCntrNode, функция также использованa в TDAQS::prmAt() и TDAQS::attrAt().
- LogicLev: Добавлена возможность создания параметра как чистого контейнера.
- FIX:DAQ.ModBus: Исправлено восстановление соединения для синхронного режима записи и бита регистра. Исправлено блокирование атрибутов узлов в режиме "Данные" узла протокола.
- OPC_UA: Добавлена поддержка Publish, RePublish, Subscribe, MonitoredItem и сопутствующие сервисы для входной части протокола (Без Publish ответов в LTS). Добавлен сервис "BrowseNext" и ContinuationPoints. Функция reqData(), серверной части, раздела на часть OPC_UA бинарного кодирования в библиотеке и она-же, зависимая от реализации модели данных, для сервисов "Browse", "Read" и "Write". Поддержка продления TokenId канала безопасности в серверной части реализована и несколько исправлена в клиентской части. Все библиотечные файлы перемещены в отдельную директорию libOPC_UA. Серверные сервисы Browse, Read и Write в значительной степени переписаны. Серверные сервисы Browse и Read используют поле "Name" при возврате в OPC UA "BrowseName" запросе.
- TArchVal: Исправлено использование LibGD2 в ядре посредством переменной HAVE_GD_CORE. Построение тренда значения архива реализовано через SVG в случае отключения LibGD2 в ядре.
- FIX:TArchVal: исправлен доступ к архиву следующего уровня в общем запросе, вроде из 1m в 10m.
- UI:
- {VCAEngine,Vision}: Функция групповой установки атрибутов Vision::attrsSet() переписана для строгого упорядочивания и исправления неупорядоченной записи некоторых ещё отсутствующих атрибутов, которые появятся после изменений выше; обнаружено на примитиве "ElFig".
- FIX:{Vision,WebVision}: Применено два метода предотвращения возможного зависания примитива "Diagram" при некоторой комбинации начала данных от различных архиваторов.
- {QTCfg,WebCfgD}: Добавлено ограничение на длину поля "NAME" в диалоге добавления узла.
- QTCfg: Добавлена возможность копирования узла в его ветвь без прямого выбора родительского узла, путём копирования в себя.
- VCAEngine: Разрешена установка отрицательных координат виджета. Лимит на количество областей карты примитива "Media" расширенно до 20. FIX: Исправлена потеря глобальной видимости атрибута "name" после изменения вида примитива "FormEl" из "Button" в "Tree", "List" и другие.
- Vision: Отключена центровка окон инструментов и загрузка новых страниц посредством load("") перемещена в конструктор RunPageView, чтобы позволить DE контролировать поведение размещения окон. GeomZ устанавливается на верх для копированного виджета.
- ElFig: Следующий этап очистки кода и рефакторинга, в значительной степени для moveItemTo().
- FIX: Исправлена перегрузка после добавления некоторых фигур.
- FIX: Исправлено масштабирование ширины фигуры с границей.
- FIX: Добавлено копирование индексов цвета и изображения при копировании заливки.
- FIX: Добавлены проверки на допустимость индексов с целью предотвращения падений по выходу за диапазон.
- ElFig: Следующий этап очистки кода и рефакторинга, в значительной степени для moveItemTo().
9.13 [16.09.2013] ВОСЬМОЕ (8) обновление
Это обновление релиза 0.8 LTS исправляет около 10 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
- SYS: Функция пользовательского API XMLNodeObj::childIns() исправлена для обнаружения аргумента 1 типа XMLNodeObj.
- DAQ.Templates,Protocol.ModBus: Добавлено использование предыдущей строки как шаблона при создании новой. Добавлена нумерация строковых меток посредством strLabEnum().
- SYS.{WorkDir,IcoDir,ModDir},Archive.FSArch,DB.SQLite,Protocol.HTTP,Transport.Serial: Функция ctrListFS() добавлена и использована для навигации по директориям и файлам в конфигурационных полях.
- DAQ.ModBus: Исправлена ошибочная установка EVAL для атрибута по идентификатору ссылки, в случае ошибки записи по этой ссылке. Добавлена поддержка комплексного типа "Строка", блок регистров, в DAQ посредством суффикса "_s" к регистру "R[I]". Добавлена поддержка комплексных типов "Целое" (32 бит, знаковый), "Вещественное" и "Строка" (блок регистров) в объект узла входящего протокола.
- DAQ.{BlockCalc,LogicLev,ModBus},Archive.TArchVal,UI.VCAEngine: Навигация по атрибутам параметров и самим параметрам перемещена в общую функцию TDAQ::ctrListPrmAttr() и использовано везде.
- DAQ.OPC_UA,{Lib,Protocol}.OPC_UA: Часть протокола OPC UA для клиента и сервера перемещена в LGPL v3 библиотеку для упрощения использования другими проектами. Объект контроллера упрощён на предмет выбора Конечных Узлов (EndPoints) и транспортов; Вы можете просто установить Конечную Точку, а транспорт будет создан из неё. Для включенного объекта контролера Вы получите перечень доступных Конечных Узлов. TokenId и SessionId адаптированы к комплексному типу NodeId и проверено на Ignition OPC UA сервере. OPC UA сервер исправлен на предмет обработки объединённых входных сообщений. Обработка основных атрибутов узлов в значительной степени улучшена и расширена.
- TVal: Добавлена остановка архива при отключении объекта атрибута для разблокирования и завершения действия.
- Archive.FSArch: Исправлено помещение больших сообщений в архив плоского текста, при достижении лимита на размер буфера.
- UI.{VCAEngine,Vision,WebVision}: В примитивах "FormEl", "ElFigure", "Media", "Box" использованы определения индексов из "types.h".
- UI.{Vision,WebVision}: Исправлена загрузка конфигурации элементов примитива "ElFigure" с учётом требования присутствия всех точек. Функция attr{s}Set() примитива "ElFigure", и "FormEl" в UI.Vision, полностью пересмотрена и оптимизирована. Примитив "Diagram" исправлен на предмет заполнения буфера тренда дубликатами при одиночном запросе к архиву и этот запрос перемещён в одиночные запросы текущего.
- UI.{Vision,VCAEngine}: Добавлен вариант обзора элементов "Дерево" в примитиве "FormEl". Добавлена одно-строчная навигация ресурсов и файлов для image/media атрибутов. Таблица "Mime" контейнеров разрешает прямую загрузку, а не только для выбранных элементов, при этом "mime" берётся из расширения; "mime" также использован при выгрузке файлов. Установлен лимит на размер загружаемых файлов.
- UI.VCAEngine: Лимит на архив примитива "Документ" исправлен на расширение до 1000000. Экспортные символы перемещены в файл types.h и предназначен для включения визуализаторами. Добавлено изменение части адреса родителя вложенных виджетов при изменении родителя библиотечного виджета или страницы, при включении.
- UI.Vision: Исправлено переформирование вектора index_array для точек 1 и 2 для помещения только общих фигур единожды (исключая Дугу, в случае объединения точек 1 и 2). Исправлено падение на Линиях и Дугах (предыдущее ошибочное исправление). Примитив "ElFigure" исправлен на предмет масштабирования и размасштабирования толщин путём перемещения масштабирования прямо на момент отрисовки фигур.
- UI.WebCfg: Исправлено отображение поля "Дата+Время" в таблице и других местах.
9.14 [11.07.2013] СЕДЬМОЕ (7) обновление
Это обновление релиза 0.8 LTS исправляет около 10 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
- UI.Vision: Исправлено падение примитива "ElFigure" при нажатии на общие точки 1,2 дуги и точку 1 линии; значительная очистка кода.
- DB.SQLite: Добавлено закрытие открытой транзакции при остановке модуля с целью предотвращения потери данных при падении некоторых модулей на отключении.
- UI.Vision: Добавлена функция WdgView::attrsSet() и использована для установки группы атрибутов в одном запросе для предотвращения потери некоторых связанных событий при обработке, а также повышения производительности в сети.
- UI.{VCAEngine,Vision,WebVision}: В примитив "Диаграмма" добавлено формирование трендов из прямо указанных данных посредством префикса "data:" и "line:".
- DAQ.Template,DAQ.{JavaLikeCalc,ModBus},Protocol.UserProtocol,UI.WebUser: Ограничение исходного текста процедур расширено до 1000000 символов.
- DAQ.{ModBus,LogicLev,BlockCalc,Siemens}: Предотвращена перегрузка исполнительного контекста из БД на запущенных объектах контролеров.
- DAQ.SoundCard: Добавлена возможность установки приоритета задачи сбора, из PortAudio. Добавлены некоторые сообщения об ошибках. Несколько увеличена производительность.
- UI.WebVision: ID объекта сеанса переименован в PATH и nodeName() установлен в строку с разделителем от пути. Добавлена опция уровня сжатия PNG для некоторого контроля производительности формирования изображений, а значений по умолчанию установлено в "1".
- Transport.{Serial,Sockets}: Добавлена обработка номера ошибки EAGAIN в функции write() для исходящих транспортов с целью предотвращения ошибок на передаче больших блоков данных.
- UI.{Vision,WebVision}: Исправлен завал буфера данных примитива "Диаграмма" текущими значениями и потеря старых видимых значений при достижении ограничения буфера путём выравнивания текущих значений к размеру-времени пиксела.
- DAQ.JavaLikeCalc: Удаление ошибочного правила грамматики "expr OR CONST{" в виду окончания действия на первой постоянной, независимо от следующих операций выражения. Условная логическая команда '||' и '&&' исправлена для постоянных.
9.15 [12.05.2013] ШЕСТОЕ (6) обновление
Это обновление релиза 0.8 LTS исправляет около 20 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
- UI.WebVision: Добавлена попытка загрузки внешнего JS файла "WebVisionVCA.js" из текущей директории. Изменения в JS коде:
- значительная очистка и исправления;
- добавлена проверка на нулевую прозрачность для отключения фона;
- попытка использование асинхронных запросов в основном цикле;
- примитивы "ElFigure", "Media", "FormEl" в значительной степени адаптированы для предотвращения полной замены ** контекста на динамических изменениях одиночных свойств;
- отключено хватание для изображений в FireFox.
- ModShedul,Archive.FSArch,DB.DBF: Скрыто-проблематичная функция readdir() заменена на многопоточный вариант readdir_r().
- UI.Vision: Изменения и исправления примитива "ElFigure":
- Добавлено и использовано определение диапазона значений.
- Добавлено перечисление ShapeItem::Type для фигур "Линия", "Дуга" и "Безье".
- Добавлено копирование индексов "Ширин", "Стилей" и "Цветов" при копировании фигур.
- Исправлено разделение точек 5 нескольких дуг при перемещении клавиатурой и мышью.
- Добавлено перемещение курсора мыши с перемещением клавиатурой.
- Добавлен разрыв контура окружности перемещением с клавиатуры.
- Значительная чистка кода.
- UI.{VCAEngine,Vision,WebVision}: Расширен верхний предел количества параметров примитива "Диаграмма" до 20. Реализовано разделение шкал отдельных параметров примитива "Диаграмма".
- DAQ.DCON: Значительные изменения от Алмаза Каримова:
- добавлено чтение аналоговых входов одним методом;
- исправлена работа метода 1AO (#AA) (блоки NL-1AO, I-7021, ADAM-4021);
- добавлен метод 4AO (#AACN) для работы с блоками ADAM-4024;
- метод чтения дискретных входов @AA заменён на $AA6 для совместимости с блоками ADAM;
- методы записи дискретных выходов 4DO (#AA000F), 8DO (#AA00FF), 12DO (#AA000FFF) добавлены для работы с блоками ADAM.
- DAQ.JavaLikeCalc: В язык добавлено разделение назначений символом ',' для конструкций подобных к следующим:
- var1=1, var2=3, var4=var1+var2;
- for(var1=0, var2=0, var3=-1; var1 < 10; var1++, var2++) var3++;
- SYS: Добавлена функция пользовательского API SYS.mktime() для получения времени с эпохи 1.1.1970 с конвертацией из разделённого времени.
9.16 [02.02.2013] ПЯТОЕ (5) обновление
Это обновление релиза 0.8 LTS исправляет около 20 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
- UI.WebVision: Вычисление времени периода обновления переписано для обеспечения большей отзывчивости и адаптации к реальным свойствам сетевого канала.
- В функцию создания задач добавлен контроль и освобождение завершённых, но с присутствующим объектом, неотсоединённых задач.
- Archive.FSArch: Предотвращено разрушение, в некоторых случаях, архивных данных посредством перекрытия памяти буфера индексов, обнаружено с помощью "ValGrind".
- Исправлена утечка памяти в объектах деструктора TVal::~TVal(), обнаружено с помощью "ValGrind".
- Функция "getopt" для разбора командной строки полностью заменена на собственную функцию TSYS::getCmdOpt() по причине того, что getopt() не является безопасной для потоков и создаёт проблемы при независимом вызове разными частями OpenSCADA.
- Адаптация к поддержке односимвольных кодировок, проверено на KOI8-R.
- UI.Vision: Добавлена проверка на реальную видимость части виджета (по пикселу). Использовано для генерации событий и вызова контекстного меню, в основном в примитивах "Box" и "ElFigure".
- UI.VCAEngine: Лимит поля "Количество параметров", примитива "Диаграмма", расширен до 20.
- Transport.Serial: Добавлено конфигурационное поле "Приоритет" для задачи входного транспорта.
- Добавлен контроль на возможность редактирования для конфигурационных полей различных объектов, зависимо от состояний "Включен" и "Запущен".
- SYS:ModSched: Поля "ModAllow" и "ModDeny" открыты для редактирования и сохранения в конфигурационном файле.
9.17 [13.11.2012] ЧЕТВЁРТОЕ (4) обновление
Это обновление релиза 0.8 LTS исправляет около 15 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
- DAQ.SoundCard: Переписан сбор для обеспечения реального времени, а также контроля частоты выборки и потери кадров.
- Системные атрибуты MessLev, LogTarget, Lang, Lang2CodeBase, WorkDB, Workdir, IcoDir, ModDir разрешены для чтения и записи только в конфигурационный файл.
- Архив: Добавлен запрос по нужной периодичности для обеспечения быстрого доступа к высокоточным архивам значений, посредством указанного размера кадра и периодичности.
9.18 [08.09.2012] ТРЕТЬЕ (3) обновление
Это обновление релиза 0.8 LTS исправляет около 30 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
- Исправлена бесконечная рекурсия при установке значения строки в тип Объект.
- Значительные исправления, а также падения, архива значений.
- XMLNodeObj: Хранение ссылки на родителя изменено на прямой указатель для предотвращения самоблокировки, что позволяет удалять узлы и исключить утечку памяти.
- Реальное не создание задачи из высокоприоритетного потока на некоторых Linux ядрах, для примера 2.6.29, исправлено заменой ожидания вызова sched_yield() на TSYS::sysSleep(1e-3).
- UI.VCAEngine: Добавлена загрузка/включение виджетов библиотек и проектов по требованию.
- Добавлен объект TEValObj для подобной к скалярам обработки EVAL.
- Заменена немногопоточная функция вычисления хеша пароля crypt() на многопоточную crypt_r().
- БД: Значительные расширения, исправления и оптимизация генерации документов по времени, а также реализация новой концепции движка рецептов.
9.19 [09.07.2012] ВТОРОЕ (2) обновление
Это обновление релиза 0.8 LTS исправляет около 5 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
9.20 [09.06.2012] ПЕРВОЕ (1) обновление
Это обновление релиза 0.8 LTS исправляет около 30 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
10 Ссылки
- Протокол тестирования промышленного релиза 0.8.0 LTS.