From OpenSCADAWiki
< Documents | Release 0.9
Это обновление релиза 0.9 LTS исправляет около 45 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.
Переведено в счёт пакета ТП Лаборатории Вакуумных Технологий
Важные действия пользователя по обновлению
- FIX:SYS: Общее конфигурационное поле "WorkDir" предотвращено от маркирования как модифицированное при переключении проекта, чем и от сохранения в конфигурационном файле, но отсутствует механизм автоматического удаления этого поля из конфигурационного файла старых проектов.
- => удалите вручную общее конфигурационное поле "WorkDir" если оно появилось там ошибочно и вы имеете проблемы использования каталогов чужих проектов этим проектом.
Новые и значительно обновленные части
- Ядро OpenSCADA: 3:9:0 => 3:10:0
- Подсистема "Транспорты" OpenSCADA: 17 => 18
- {DAQ,Protocol}.OPC_UA,libOPC_UA: 1.7 => 2.1, 1.10 => 2.1, 1.2 => 2.1
- 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".