From OpenSCADAWiki
< Documents | Release 0.9
Revision as of 10:23, 3 July 2021 by FuzzyBot (Talk | contribs) (Updating to match new version of source page)
This update of the 0.9 LTS release fixes about 45 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
Переведено в счёт пакета ТП Лаборатории Вакуумных Технологий
Важные действия пользователя по обновлению
- FIX:SYS: Общее конфигурационное поле "WorkDir" предотвращено от маркирования как модифицированное при переключении проекта, чем и от сохранения в конфигурационном файле, но отсутствует механизм автоматического удаления этого поля из конфигурационного файла старых проектов.
- => удалите вручную общее конфигурационное поле "WorkDir" если оно появилось там ошибочно и вы имеете проблемы использования каталогов чужих проектов этим проектом.
Новые и значительно обновленные части
- Ядро OpenSCADA: 3:9:0 => 3:10:0
- Подсистема "Транспорты" OpenSCADA: 17 => 18
- {DAQ,Protocol}.OPC_UA,libOPC_UA: 1.7 => 2.1, 1.10 => 2.1, 1.2 => 2.1
- DAQ.ModBus: 2.12 => 3.1
- DAQ.DAQGate: 2.2 => 2.3
- DAQ.Siemens: 3.5 => 3.6
- Transport.Sockets: 4.2 => 4.3
- Transport.Serial: 2.5 => 2.6
- Transport.SSL: 3.2 => 3.3
- UI.WebCfgD: 1.5 => 2.0
- UI.VCAEngine: 6.9 => 7.1
- UI.QTStarter: 5.8 => 5.9
- UI.QTCfg: 5.1 => 5.4
- UI.Vision: 7.7 => 7.13
- UI.WebVision: 5.8 => 6.2
- LibsDB.OscadaLibs.DevLib.IEC62056: 1.0 => 1.1
- LibsDB.vcaBase.Main: 2.0 => 2.1
- storeHouse: 1.0
- RootPgSo: 2.3 => 2.4
OpenSCADA библиотеки и проекты
- LibsDB.vcaBase,AGLKS.vca: Main.RootPgSo: Дополнено на предмет:
- виджета "alarms" на основе примитива "Протокол" с возможностью включить/выключить;
- добавления опциональной функции возврата к типовому пользователю после определённого времени неактивности в атрибуте "defUser";
- переключено на неотносительный алгоритм вычисления вертикальной позиции и высоты главной мнемосхемы.
- LibsDB.OscadaLibs: DevLib.IEC62056: Переписано в синхронный режим (запрос-ответ) для работы нескольких устройств на одной последовательной шине.
- LibsDB.vcaBase:
- Библиотека "Основная" дополнена новой страницей реализации "Склада (storeHouse)".
- Main.RootPgSo: Периодичность исполнения кадра поднята до 1000 миллисекунд после добавления ранней обработки событий. Значительным образом переключено с клавиатурных последовательностей "Ctrl+?" на "CtrlAlt+?".
- AGLKS.vca: Страница проекта /prj_AGLKS/pg_so/pg_4/pg_mn/pg_1 переименована в /prj_AGLKS/pg_so/pg_4/pg_mn/pg_CM101, как с другими.
API
!!!!:Изменения:
- SYS: Функцию TSYS::curTime() дополнено аргументом определения источника часов с использованием функции clock_gettime(). Определение EVAL_RFlt дополнено суффиксом "f".
- Mess: Функция перевода TMess::translSet() дополнена аргументом "srcFltr" фильтрации по источникам.
- Транспорты: Функция протокола ВВ pushLogMess() дополнена аргументами "data" и "dataDir".
Дополнения:
- Mess: Блокирование данных отделено от блокирования всех сообщений в dtRes.
- SYS: Функции API пользователя дополнены функцией lang() быстрого получения системного языка.
- Дополнено функцией TSYS::curTimeN().
- .,DAQ.{LogicLev,ModBus,Siemens}: Дополнено и использовано глобальную постоянную DAQ_APER_FRQ представления частоты апериодических вызовов, вроде f_start, периодических процессов.
- Безопасность: Объект пользователя дополнен функцией Пользовательского API auth() для аутентификации по паролю.
- Транспорты: Входные и выходные объекты транспортов дополнены атрибутами протокола ВВ: "mLogLstDt", "mLogLstDtTm".
- DAQ: Объект DAQ-параметра дополнен информационным полем метки времени изменения с его максимальным значением на объекте контроллера, с помощью нового конфигурационного поля БД "TIMESTAMP" объекта параметра.
Система
- FIX:Сборка:configure.ac: Версия библиотеки ядра увеличена до 3:10:0 и версия программы увеличена до 0.9.4.
- Сообщения исходного кода и документация программы:
- rom_as@oscada.org заменено на roman@oscada.org везде в исходниках.
- Документ "Modules/OPC_UA" целиком отревизирован для версии модулей 2.1 и перевода.
- Вкладка "Переводы" несколько отревизирована, дополнена актуальным статусом, дополнена контекстной помощью и менеджер переводов дополнен на предмет:
- ограничения времени формирования таблицы в prmInterf_TM (7 секунд);
- конфигурационного поля пропуска количества верхних сообщений;
- установки перевода только для фильтрованных источников;
- проверки содержимого на совпадение только для фильтрованных источников;
- пропуск ошибок отсутствия источников.
- Функция перевода TMess::translSet() предотвращена от распространения групповых сообщений, изменённых не из менеджера перевода.
- FIX:.,BD.LDAP,Archive.{DBArch,FSArch},DAQ.{ModBus,MMS},{DAQ,Protocol}.OPC_UA,UI.Vision: Несколько очищено от предупреждений сборки.
- FIX: Определение EVAL_RFlt дополнено суффиксом "f" для предотвращения ошибочного сравнения double EVAL_RFlt с сохранённым float значением, исправляет работу архиватора Archive.FSArch с типами значений float при выявлении EVAL.
- FIX:Mess: Блокирование данных отделено от блокирования всех сообщений в dtRes для предотвращения конкурентным блокировкам при активной работе с переводами. Атрибуты mLang2CodeBase, mLang2Code переключены на это новое блокирование.
- data/openscada-proj.in: Переключено на ссылку содержимого Пользовательской LibsDB на системные библиотеки, с содержимым только на чтение, вместо копирования.
Сбор Данных
- ModBus,Siemens: Переключено, в формирование значения "f_frq", на использование информации реального исполнения задачи.
- {DAQ,Protocol}.OPC_UA.{.,libOPC_UA} : Дополнено реализацией сервиса Publish, поддержкой кусков (CHUNKS) на клиентской части Сбора Данных и общим пересмотром кода в процессе этого:
- КЛИЕНТ:
- добавление атрибутов (элементов мониторинга) перенесено из attrPrc() непосредственно в enable() и которая запускается при запуске объекта контроллера
- ... и обработка элементов улучшена обновлением описания, флагов и связывания;
- сбор данных унифицирован обработкой в функции параметра upVal()
- ... и запроса значений функцией объекта контроллера getValMIt() с поддержкой Массивов
- ... чем вплотную подготовлено для встраивание логического типа параметров;
- объекты параметров Сбора Данных автивированы для включения других параметров;
- установка и удаление EVAL ко всем атрибутам проверено во всех режимах;
- структурные переменные, в просмотрщике выбора DAQ-параметра, разрешены для выбора их элементов отдельно;
- разбор перечня переменных DAQ-параметров установлен в полный разбор с пропуском пустых строк;
- объект DAQ-контроллера дополнен закрытием сеанса и безопасного канала при его останове;
- общий статус объекта контроллера дополнен детализированной информацией на предмет использованного канала безопасности, сеанса, подписки и обрабатываемыми элементами мониторинга;
- блокирование запроса переименовано в resOPC.
- СЕРВЕР:
- объект OPC-UA Сервера дополнен вкладкой общего статуса сервера с информацией на предмет активности каналов безопасности;
- объект Узла EndPoint дополнен общим статусом с информацией на предмет активности сеансов и подписок, а также периодичностью и временем исполнения задачи подписок.
- БИБЛИОТЕКА:
- унифицировано и определено типовое значение времени жизни канала безопасности, которое установлено в 300000 мс;
- типовой LifeTimeCounter подписок установлен в 2400;
- объект NodeId дополнен функцией прямого сравнения operator==();
- функция XML_N::childClear() дополнена результатом возврата того самого объекта XML_N для объединения;
- функция curTime() дополнена аргументом определения источника часов с использованием функции clock_gettime();
- короткие функции дополнены str2int() и str2uint();
- некоторые поля переименованы: publInterv в publInterval, cntrLifeTime в lifetimeCnt, cntrKeepAlive в maxKeepAliveCnt, maxNotPerPubl в maxNtfPerPubl, en в publEn;
- исправление слова "POOL" на "POLL".
- БИБЛИОТЕКА_КЛИЕНТ:
- Client::reqService() дополнен мета-командой "CloseALL" закрытия текущего сеанса и каналу безопасности;
- функция обработки клиентских сервисов protIO() адаптирована к работе в асинхронном режиме (не запрос);
- функция Client::messIO() расширена аргументом таймаута с определением также режима запроса;
- запись в канал и чтение из него отделено в обработке MSG пакетов;
- адаптация сообщений безопасности к работе со смешанным входным буфером;
- перенос основного сервисного запроса "OPN" под обработку сообщений из-за отправки обновлений в середине Publish активности.
- реализован сервис Publish на стороне клиента:
- объект "Client" дополнен реализацией подобъекта "Subscr" (но сохраняется в Client::SClntSess) с функциями: activate(), monitoredItemAdd() и monitoredItemDel();
- объект "Client" дополнен функцией poll() с:
- унификацией чтения значений в обоих режимах Read и Publish;
- проверкой потери всех Publish запросов в течении OpcUa_ClntPublishResentCntr(2) попыток-времени сохранения живым;
- восстановления пула Publish.
- объект Client::Subscr::MonitItem добавлен как представитель элементов мониторинга с доступом из под общего блокирования клиентских ресурсов;
- сервисные запросы дополнены реализацией, включая обработку ответов: CreateSubscription, DeleteSubscriptions, CreateMonitoredItems, Publish, Poll;
- реализовано и проверено в поддержке безопасных политик по Publish;
- целевой пул Publish запросов на подписку установлено в виртуальной функции publishReqsPool() с типовым значением 2;
- дополнено реализацией кусков (CHUNKS) как в запросах, так и ответах;
- целиком отревизировано и очищено общую функцию запроса reqService() от дубликатов аргументов и параметров:
- дополнено восстановлением сеансов при переподключении канала безопасности;
- унифицировано очистку текущего сеанса и канала безопасности.
- объект клиента дополнен общим блокированием ресурсов mtxData;
- свойство сообщения "timeoutHint" установлено в 0 для всех сообщений;
- запрос Read возвращён к "плоскому" запросу с ограничением только в CHUNKS;
- ошибка OpcUa_BadSecureChannelIdInvalid добавлена к очистке канала безопасности;
- Client::SClntSess::{sessOpen,lstMessReq} переименован в {secChnlOpenTm,secLstMessReqTm}
- ... и предотвращён от очистки и восстановления сеанса и канала безопасности;
- дополнено отладочными сообщениями ошибок запросов.
- БИБЛИОТЕКА_СЕРВЕР:
- серверная часть адаптирована к работе с UAExpert 1.5 на предмет: установки атрибута AId_Descr DAQ-значения в тип OpcUa_LocalizedText, добавления декларации целочисленного типа OpcUa_IntAuto и OpcUa_UIntAuto.
- обработка подписок возвращена к их обработке в отдельной задаче и функции subScrCycle() на предмет:
- правильного расчёта всех таймаутов для выключения;
- обработки периодичности подписки и публикации;
- проверки состояния связанных сеансов и каналов безопасности на предмет закрытия подписок.
- но публикация оставлена на обработку в активности входного канала и функции Server::EP::publishCall() с предотвращением обработки Publish для ошибочных и чужих Подписок, через проверку inPrtId, sesTokId и isSecCnlAct;
- унификация Сеанса на предмет: связывания сеансов с каналами безопасности переключено на один вместо массива, проверку сеанса всех сообщений дополнено предотвращением использования чужих подключений;
- не последние куски пакета переключены на отправку прямо, чтобы не добавлять к одному TCP-пакету;
- EP::mtxData блокирование переключено в PTHREAD_MUTEX_RECURSIVE;
- каналы безопасности ограничены колчеством OpcUa_SecCnlLimit(10) и очередь публикаций количеством OpcUa_ServerMaxPublishQueue(10);
- EP::secSize() переименовано в EP::secN() и добавлено EP::sessN(), EP::subscrN() и chnlList();
- Server.SecCnl.{TokenId,TokenIdPrev} переименовано в Server.SecCnl.{tokenId,tokenIdPrev}.
- ModBus: Выходная часть RTU варианта протокола дополнена ранним прерыванием ожидания пакетов стандартных функций [ERR,1...6,15,16], что увеличивает общую пропускную способность вдвое.
- ВВ параметров Логического Уровня включено в перевод, для не связанных строк и так как в DAQ.LogicLev.
- Разбор атрибутов Сбора Данных переключено на использование TSYS::strLine() и TSYS::strParse(), чем разрешено символ ':' в названии и пустые строки в тексте.
- DAQGate: Режимы синхронизации дополнены режимом предотвращения синхронизации вообще для объектов сохранённых в кеше, путём разрешения значения -1 конфигурационного поля "Периодичность синхронизации с удалённой станцией, секунд".
Архивы-История
- FIX:FSArch: Критически исправлено обработку файлов архива значений, при попытке записи их ИД в нулевую строку.
- DBArch: Архиваторы сообщений дополнены конфигурационным полем "Уникальные и недублирующие сообщения только за временем и категорией".
- FIX: Исправлено падение при обработке групп архиватора значений из-за неочистки связывания конфигурации полей таблицы (TConfig) под блокированием и неблокирование функции ModVArch::grpLimits() в reqRes.
Транспорты
- Протокол ВВ, во входной и выходной части, расширен и дополнен:
- комбинированием данных пакетов с одинаковым направлением и адресом данных в течении prmWait_TM (5 секунд);
- микросекундную часть времени зафиксировано в 6(шести) символах;
- сообщения данных дополнены символом направления;
- ограничением размера одного блока обработки, новым конфигурационным полем;
- значительным повышением производительности через использование предопределённого буфера.
- FIX:Serial: Выходной транспорт исправлен в ожидании между запросами на предмет обработки reqRetrMult*wCharTm как миллисекунды.
- FIX:Sockets: Обнаружено ошибку "Обрыв канала (32)" при записи, после отключения сервера, поэтому попытки переподключения установлены в 2 по (kz <= 0).
Интерфейс Пользователя
- FIX:Общий пересмотр и переделка таблиц в Qt и Web в целом и вида Таблица примитива FormEl СВУ:
- QTStarter,QTCfg,Vision: Общий библиотечный класс TableDelegate значительным образом улучшено в работе на QTCfg и Vision:
- дополнено собственными пользовательскими ролями SelectRole, TextLimRole и OneLineString;
- отображение ячеек дополнено фоновым цветом через чтение-применение общих ролей;
- числовые типы (целое и реальное) дополнены принудительным центрированием;
- строковые типы дополнены опциями выравнивания и заворачивания слов с ролями Qt::TextAlignmentRole;
- дополнено поддержкой визуального ограничения длинных текстов собственной ролью TextLimRole и типовое значение установлено в 300 символов через дополнительное переопределение sizeHint().
- FIX: Вид "Таблица" примитива "FormEl":
- VCAEngine,QTStarter,Vision,WebVision: Дополнено новым типом ячейки 't'-текст, в основном для возможности подтверждения редактирования типа 's'-строка нажатием Enter.
- VCAEngine,Vision,WebVision: Дополнено опцией "prec" пространства колонки, строки и ячейки для контроля точности реальных значений; и реализацией атрибута "align" колонки и ячейки.
- WebVision,Vision: Дополнено переключением таблиц в предотвращение двойному хранению исходного содержимого при его размере более чем 10000.
- FIX:Vision: Использование общего делегата таблицы с возможностью многострочного редактирования.
- Усовершенствовано отображение колонок, строк и ячеек при обновлении и в целом:
- ограничением визуального размера содержимого ячейки 300 символами и высоты строк в 70% от общего размера таблицы;
- более точным выравниванием ширины колонок;
- подстройкой в режиме разработки, а также при видимости вертикального заголовка;
- плотным заполнением таблицы через учёт размера видимой полосы вертикальной прокрутки;
- подстройкой только после полного изменения размера таблицы, чем также допуская ручное изменение колонок и для предоставления такой-правильной подстройки всегда.
- Реализовано "лёгкую" обработку изменения ширины и обновления:
- "лёгкое" редактирование без переподстройки колонок при каждом обновлении, только при: появлении первой строки, изменения количества колонок и изменения заголовка колонки, изменении шрифта и изменении размера;
- применение фиксированной ширины колонки и учёт высоты строк с ограничениями независимо от значения общего атрибута "colsWdthFit";
- установка значения, раннее изменение размера и подстройка таблицы, перенесены в пространство наличия содержимого таблицы и после сортирования.
- Функцию экспорта во время исполнения дополнено экспортом вида Таблица примитива "FormEl" в CSV.
- WebVision:
- Усовершенствовано отображение колонок, строк и ячеек при обновлении и в целом:
- реализацией режима не подстройки (отсутствие атрибута "colsWdthFit"), с использованием режима автоматического размещения таблицы для вычисления фиксированной ширины и последующего переключения в фиксированный режим размещения таблицы;
- многострочным редактированием текста ячеек в полную ширину и высоту ячейки, с применением редактирования по Ctrl+Enter;
- вид строчных ячеек ограничен 300 символами;
- отображение логических ячеек изображением состояния TRUE;
- ячейки таблицы, в режиме редактирования, разрешены к вызову контекстного меню системы-браузера.
- Реализовано "лёгкую" обработку изменения ширины и обновления:
- обнаружение изменения таблицы и обновление переключено в режим не сохранения исходного содержимого дважды;
- предотвращено от полного обновления при модификации атрибута "value".
- Дополнено поддержкой сортировки по колонкам. Установка в сортировку по первой видимой колонке при включении сортировки.
- WebCfgD: Расширение таблицы на предмет:
- большое видимое содержимое текста ограничено 300 символами;
- строковый тип разрешён для многострочного редактирования используя TEXTAREA;
- тип данных "bool" отображено изображением, не "On" или "Off";
- центрирование содержимого логического, чисел, времени и выбора;
- упрощение редактирования содержимого таблицы для типов время, число и строка, путём удаления кнопок применения и прокручивания.
- QTStarter,QTCfg,Vision: Начат перенос общего Qt-кода Qt-модулей OpenSCADA в файлы новой библиотеки lib_qtgen.*, которая размещена в каталоге модуля QTStarter и привязано во всех Qt-модулях, и это осуществлено для: внешней icoSize(), colorAdjToBack() и TableDelegate.
- VCAEngine:
- Дополнено, и включено как опция сборки, на предмет механизма маркирования изменения атрибутов без дубликатов, путём запроса предыдущих-завершенных циклов, чем также предотвращая необходимости выявления дубликатов в визуализаторах и сохранению большого исходного содержимого.
- Исполнение проектов улучшено при смене родителя обрабатываемых страниц на лету.
- Исполнение задач сеансов дополнено ранним исполнением, при наличии событий.
- FIX: СВУ-стили исправлены при доступе к пустым полям, которые не загружаются.
- Страницу "Диагностика" СВУ-проектов адаптировано к отображению сообщений уровня отладки при включении отладки.
- Информацию исполнения сеанса проекта дополнено реальной периодичностью, полученной из задачи, которую также использовано при формировании значения атрибута "f_frq" процедуры.
- Vision: Диалоги свойств "Виджеты" и "Проекты / Библиотеки виджетов" дополнены собственной строкой статуса и кнопкой вызова контекстной документации. Виджеты TextEdit переключены на собственную строку статуса диалогов свойств, на предмет позиции курсора и что выключено во Всплывающей Подсказке. Виджет редактирования текста кода диалога свойств "Виджеты" дополнен восстановлением позиции курсора после применения или отмены.
- FIX:WebVision: Дополнен обнаружением исчезания сеанса исполнения проекта и возвратом ошибки, в общем запросе "pgOpenList", и сброса счётчика вычислений "tmCnt".
- Клавиатурный фокус и события значительным образом усовершенствованы на предмет гарантии работы этого в целом через:
- установку атрибута "tabindex" для всех активных виджетов и специфично для FormEl — непосредственно в элементы формы;
- дополнения вычислением числа "tabindex" как уникальный для целого интерфейса, чем предотвращая скачки фокуса;
- обработки события onfocus на предмет установки собственного фокуса в setFocus();
- вид Кнопка примитива FormEl дополнен обработкой клавиатурных событий нажатия и отпускания по клавишам Space и Enter;
- примитив Диаграмма упрощён путём удаления лишнего элемента тега A;
- FIX: Исправлено переключение фокуса при клацанье на кнопках с изображениями.
- FIX: Исправлено проверку удаленных виджетов для всех и главной страницы.
- FIX: Исправлено наконец размножение лишних DIV элементов при смене страницы в контейнере страниц.
- FIX: Предотвращение зацикливанию при наличии Web-сеанса, но отсутствии соответствующего СВУ-сеанса.
- FIX:WebCfgD: Целиком отревизировано и расширено на предмет:
- переноса всех действий внутренних инструментов на реализацию кнопками и размер панели инструментов установлен с 25 в 30 пикселей;
- удаления фильтрации-изменения размера изображений кнопок инструментов на стороне сервера;
- установки расстояния между иконкой страницы и заголовком в 10 пикселей;
- полного обновления контролированной страницы после смены размера окна;
- расширения поля общего редактирования текста TEXTAREA применением и отменой из клавиатуры;
- привязки функции обновления хостов к двойному клацанью мышей на общем пространстве области дерева;
- FIX: исправления функции обновления хостов на предмет выявления элементов дублированных хостов;
- FIX: принудительного обозначения актуальных-выбранных элементов в дереве контроля после его разворачивания;
- удаления nodeText() и setNodeText() путём непосредственного использования "innerText" и "textContent".