From OpenSCADAWiki
< Documents | Release 0.8.0
Это обновление релиза 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().