From OpenSCADAWiki
Jump to: navigation, search
(Updating to match new version of source page)
Line 80: Line 80:
 
* data/openscada-proj.in: Переключено на ссылку содержимого Пользовательской LibsDB на системные библиотеки, с содержимым только на чтение, вместо копирования.
 
* data/openscada-proj.in: Переключено на ссылку содержимого Пользовательской LibsDB на системные библиотеки, с содержимым только на чтение, вместо копирования.
  
{{CntHdr|DAQ}}
+
{{CntHdr|Сбор Данных}}
* ModBus,Siemens: Switched in "f_frq" value form to use the real task execution information.
+
* ModBus,Siemens: Переключено, в формирование значения "f_frq", на использование информации реального исполнения задачи.
* {{Anch|OPC_UA|{DAQ,Protocol}.OPC_UA.{.,libOPC_UA} }}: Appended for the Publish service implementation, CHUNKS support on the DAQ-client part and the code coming refactoring in generic:
+
* {{Anch|OPC_UA|{DAQ,Protocol}.OPC_UA.{.,libOPC_UA} }}: Дополнено реализацией сервиса Publish, поддержкой кусков (CHUNKS) на клиентской части Сбора Данных и общим пересмотром кода в процессе этого:
:: ''CLIENT'':
+
:: ''КЛИЕНТ'':
:* attributes (monitored items) adding moved from attrPrc() directly to enable() and which ensured to call at the controller object start
+
:* добавление атрибутов (элементов мониторинга) перенесено из attrPrc() непосредственно в enable() и которая запускается при запуске объекта контроллера
:* ... and the items processing improved in updating the description, flags and link;
+
:* ... и обработка элементов улучшена обновлением описания, флагов и связывания;
:* values acquisition is unified in processing in the parameter function upVal()
+
:* сбор данных унифицирован обработкой в функции параметра upVal()
:* ... and the values requesting by the controller object function getValMIt() with the Arrays support
+
:* ... и запроса значений функцией объекта контроллера getValMIt() с поддержкой Массивов
:* ... than preparing closely for builtin the logical parameter type;
+
:* ... чем вплотную подготовлено для встраивание логического типа параметров;
:* the DAQ-parameter objects enabled for including other parameters;
+
:* объекты параметров Сбора Данных автивированы для включения других параметров;
:* the EVAL setting and removing for all attributes tested for all modes;
+
:* установка и удаление EVAL ко всем атрибутам проверено во всех режимах;
:* structure variables in DAQ-parameters allowed to select them items separately, in the selection browser;
+
:* структурные переменные, в просмотрщике выбора DAQ-параметра, разрешены для выбора их элементов отдельно;
:* the variables list of the DAQ-parameters parsing set to complete parsing with passing empty lines;
+
:* разбор перечня переменных DAQ-параметров установлен в полный разбор с пропуском пустых строк;
:* the DAQ-controller object appended in closing the session and secure channel at it stopping;
+
:* объект DAQ-контроллера дополнен закрытием сеанса и безопасного канала при его останове;
:* the controller object common status appended for the detailed information about the used secure channel, session, subscription and the processing monitored items;
+
:* общий статус объекта контроллера дополнен детализированной информацией на предмет использованного канала безопасности, сеанса, подписки и обрабатываемыми элементами мониторинга;
:* the request lock renamed to resOPC.
+
:* блокирование запроса переименовано в resOPC.
:: ''SERVER'':
+
:: ''СЕРВЕР'':
:* the OPC-UA Server object appended for the common server status tab with information about activity of the secure channels;
+
:* объект OPC-UA Сервера дополнен вкладкой общего статуса сервера с информацией на предмет активности каналов безопасности;
:* the EndPoint Node object appended for the common status with information about activity of the sessions and subscriptions, also the subscription task period and time of execution.
+
:* объект Узла EndPoint дополнен общим статусом с информацией на предмет активности сеансов и подписок, а также периодичностью и временем исполнения задачи подписок.
:: ''LIB'':
+
:: ''БИБЛИОТЕКА'':
:* unified in specifying the default value of the secure channel life time, what set to 300000 ms;
+
:* унифицировано и определено типовое значение времени жизни канала безопасности, которое установлено в 300000 мс;
:* the default LifeTimeCounter of the subscriptions set to 2400;
+
:* типовой LifeTimeCounter подписок установлен в 2400;
:* the object NodeId appended for the function operator==() of direct comparing;
+
:* объект NodeId дополнен функцией прямого сравнения operator==();
:* the function XML_N::childClear() appended by a result of returning the same XML_N object for concatenation;
+
:* функция XML_N::childClear() дополнена результатом возврата того самого объекта XML_N для объединения;
:* the function curTime() appended for an argument of the clock source specifying with using the function clock_gettime();
+
:* функция curTime() дополнена аргументом определения источника часов с использованием функции clock_gettime();
:* short functions appended for str2int() and str2uint();
+
:* короткие функции дополнены str2int() и str2uint();
:* some fields renamed: publInterv to publInterval, cntrLifeTime to lifetimeCnt, cntrKeepAlive to maxKeepAliveCnt, maxNotPerPubl to maxNtfPerPubl, en to publEn;
+
:* некоторые поля переименованы: publInterv в publInterval, cntrLifeTime в lifetimeCnt, cntrKeepAlive в maxKeepAliveCnt, maxNotPerPubl в maxNtfPerPubl, en в publEn;
:* fixing "POOL" word on "POLL".
+
:* исправление слова "POOL" на "POLL".
:: ''LIB_CLIENT'':
+
:: ''БИБЛИОТЕКА_КЛИЕНТ'':
:* Client::reqService() appended for the meta command "CloseALL" of closing current session and secure channel;
+
:* Client::reqService() дополнен мета-командой "CloseALL" закрытия текущего сеанса и каналу безопасности;
:* the main client services processing function protIO() adapted to work in the asynchronous mode (not requesting);
+
:* функция обработки клиентских сервисов protIO() адаптирована к работе в асинхронном режиме (не запрос);
::* the function Client::messIO() expanded for the timeout argument with specifying the requesting mode also;
+
::* функция Client::messIO() расширена аргументом таймаута с определением также режима запроса;
::* the channel writing and reading is separated in MSG packages processing;
+
::* запись в канал и чтение из него отделено в обработке MSG пакетов;
::* adaption the secure messages to work with the mixed input buffer;
+
::* адаптация сообщений безопасности к работе со смешанным входным буфером;
::* moving the main service request "OPN" under the messages processing due to the renewals sending inward the Publish activity.
+
::* перенос основного сервисного запроса "OPN" под обработку сообщений из-за отправки обновлений в середине Publish активности.
:* implemented for the Publish service on the client side:
+
:* реализован сервис Publish на стороне клиента:
::* the "Client" object appended for the subobject "Subscr" implementation (but stored in Client::SClntSess) with the functions: activate(), monitoredItemAdd() and monitoredItemDel();
+
::* объект "Client" дополнен реализацией подобъекта "Subscr" (но сохраняется в Client::SClntSess) с функциями: activate(), monitoredItemAdd() и monitoredItemDel();
::* the "Client" object appended for the function poll() with:
+
::* объект "Client" дополнен функцией poll() с:
:::* unifying the values reading both for the Read and Publish modes;
+
:::* унификацией чтения значений в обоих режимах Read и Publish;
:::* checking of loss all Publish requests during the OpcUa_ClntPublishResentCntr(2) keep alive count-time;
+
:::* проверкой потери всех Publish запросов в течении OpcUa_ClntPublishResentCntr(2) попыток-времени сохранения живым;
:::* restoring the Publish pool.
+
:::* восстановления пула Publish.
::* the object Client::Subscr::MonitItem was added as the monitored items representer with the access under the client resource common lock;
+
::* объект Client::Subscr::MonitItem добавлен как представитель элементов мониторинга с доступом из под общего блокирования клиентских ресурсов;
:::* the service requests appended for implementation, include processing the responses: CreateSubscription, DeleteSubscriptions, CreateMonitoredItems, Publish, Poll;
+
:::* сервисные запросы дополнены реализацией, включая обработку ответов: CreateSubscription, DeleteSubscriptions, CreateMonitoredItems, Publish, Poll;
:::* implemented and tested in the secure policies support at Publish;
+
:::* реализовано и проверено в поддержке безопасных политик по Publish;
:::* the target Publish requests pool per subscription set in the virtual function publishReqsPool() with default value 2.
+
:::* целевой пул Publish запросов на подписку установлено в виртуальной функции publishReqsPool() с типовым значением 2.
::* appended for the CHUNKS implementation both for requests and responses;
+
::* дополнено реализацией кусков (CHUNKS) как в запросах, так и ответах;
::* completely revised and cleared in the common requesting function reqService() from doubling the arguments and parameters:
+
::* целиком отревизировано и очищено общую функцию запроса reqService() от дубликатов аргументов и параметров:
:::* appended for restoring sessions at reconnection the secure channel;
+
:::* дополнено восстановлением сеансов при переподключении канала безопасности;
:::* unifying the clearing of the current session and secure channel.
+
:::* унифицировано очистку текущего сеанса и канала безопасности.
::* the client object appended by the common resources lock mtxData;
+
::* объект клиента дополнен общим блокированием ресурсов mtxData;
::* the message property "timeoutHint" set to 0 for all messages;
+
::* свойство сообщения "timeoutHint" установлено в 0 для всех сообщений;
::* the Read request returned to the plain requesting with limition on CHUNKS only;
+
::* запрос Read возвращён к "плоскому" запросу с ограничением только в CHUNKS;
::* the error OpcUa_BadSecureChannelIdInvalid added for clearing the secure channel;
+
::* ошибка OpcUa_BadSecureChannelIdInvalid добавлена к очистке канала безопасности;
::* Client::SClntSess::{sessOpen,lstMessReq} renamed to {secChnlOpenTm,secLstMessReqTm}
+
::* Client::SClntSess::{sessOpen,lstMessReq} переименован в {secChnlOpenTm,secLstMessReqTm}
::* ... and prevented from clearing in restoring the session and secure channel;
+
::* ... и предотвращён от очистки и восстановления сеанса и канала безопасности;
::* appended for debug message of the request errors.
+
::* дополнено отладочными сообщениями ошибок запросов.
:: ''LIB_SERVER'':
+
:: ''БИБЛИОТЕКА_СЕРВЕР'':
:* the server part adapted to work with UAExpert 1.5 for: the attribute AId_Descr of the DAQ-value set to the type OpcUa_LocalizedText, the integer types appended for declaration OpcUa_IntAuto and OpcUa_UIntAuto;
+
:* серверная часть адаптирована к работе с UAExpert 1.5 на предмет: установки атрибута AId_Descr DAQ-значения в тип OpcUa_LocalizedText, добавления декларации целочисленного типа OpcUa_IntAuto и OpcUa_UIntAuto;
:* the subscriptions processing returned to they processing in a separate task and the function subScrCycle() for:
+
:* обработка подписок возвращена к их обработке в отдельной задаче и функции subScrCycle() на предмет:
::* true counting all timeouts to disable;
+
::* правильного расчёта всех таймаутов для выключения;
::* processing the periodicity of subscription and publishing;
+
::* обработки периодичности подписки и публикации;
::* checking the assigned sessions and secure channels state to close the subscriptions.
+
::* проверки состояния связанных сеансов и каналов безопасности на предмет закрытия подписок.
:* but the publishing leave for processing in the input channel activity and the function Server::EP::publishCall() with preventing the Publish processing for wrong and foreign Subscriptions, by checking inPrtId, sesTokId and isSecCnlAct;
+
:* но публикация оставлена на обработку в активности входного канала и функции Server::EP::publishCall() с предотвращением обработки Publish для ошибочных и чужих Подписок, через проверку inPrtId, sesTokId и isSecCnlAct;
:* Session unification for: link of the sessions to secure channels switched to single one instead an array, the session checking of all messages appended of preventing of using foreign connections;
+
:* унификация Сеанса на предмет: связывания сеансов с каналами безопасности переключено на один вместо массива, проверку сеанса всех сообщений дополнено предотвращением использования чужих подключений;
:* not final chunk packages switched to send directly, for not append to single TCP-package;
+
:* не последние куски пакета переключены на отправку прямо, чтобы не добавлять к одному TCP-пакету;
:* EP::mtxData lock switched to PTHREAD_MUTEX_RECURSIVE;
+
:* EP::mtxData блокирование переключено в PTHREAD_MUTEX_RECURSIVE;
:* the secure channels limited in OpcUa_SecCnlLimit(10) and the publishes queue in OpcUa_ServerMaxPublishQueue(10);
+
:* каналы безопасности ограничены колчеством OpcUa_SecCnlLimit(10) и очередь публикаций количеством OpcUa_ServerMaxPublishQueue(10);
:* EP::secSize() renamed to EP::secN() and there added EP::sessN(), EP::subscrN() and chnlList();
+
:* EP::secSize() переименовано в EP::secN() и добавлено EP::sessN(), EP::subscrN() и chnlList();
:* Server.SecCnl.{TokenId,TokenIdPrev} renamed to Server.SecCnl.{tokenId,tokenIdPrev}.
+
:* Server.SecCnl.{TokenId,TokenIdPrev} переименовано в Server.SecCnl.{tokenId,tokenIdPrev}.
* ModBus: The output part of the protocol RTU variant appended for early termination of the package waiting of the standard functions [ERR,1...6,15,16], what increases the overall bandwidth twice.
+
* ModBus: Выходная часть RTU варианта протокола дополнена ранним прерыванием ожидания пакетов стандартных функций [ERR,1...6,15,16], что увеличивает общую пропускную способность вдвое.
** IO of the Logical Level parameters enabled for the translation, for not linked strings and like to DAQ.LogicLev.
+
** ВВ параметров Логического Уровня включено в перевод, для не связанных строк и так как в DAQ.LogicLev.
** The DAQ attributes parsing switched to use TSYS::strLine() and TSYS::strParse() than allowing the symbol ':' in the name and empty lines in the text.
+
** Разбор атрибутов Сбора Данных переключено на использование TSYS::strLine() и TSYS::strParse(), чем разрешено символ ':' в названии и пустые строки в тексте.
* DAQGate: The sync modes appended for a mode of preventing the sync in whole for the stored in the cache objects, allowing value '''-1''' for the configuration field "Synchronization time with the remote station, seconds."
+
* DAQGate: Режимы синхронизации дополнены режимом предотвращения синхронизации вообще для объектов сохранённых в кеше, путём разрешения значения '''-1''' конфигурационного поля "Периодичность синхронизации с удалённой станцией, секунд".
  
 
{{CntHdr|Архивы-История}}
 
{{CntHdr|Архивы-История}}

Revision as of 15:42, 20 July 2021

Other languages:
English • ‎mRussian • ‎Українська

Это обновление релиза 0.9 LTS исправляет около 45 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.

Переведено в счёт пакета ТП Лаборатории Вакуумных Технологий

At.png Важные действия пользователя по обновлению

  • FIX:SYS: Общее конфигурационное поле "WorkDir" предотвращено от маркирования как модифицированное при переключении проекта, чем и от сохранения в конфигурационном файле, но отсутствует механизм автоматического удаления этого поля из конфигурационного файла старых проектов.
=> удалите вручную общее конфигурационное поле "WorkDir" если оно появилось там ошибочно и вы имеете проблемы использования каталогов чужих проектов этим проектом.

Новые и значительно обновленные части

  • Ядро OpenSCADA: 3:9:0 => 3:10:0
(ревизия механизма переводов)
  • Подсистема "Транспорты" OpenSCADA: 17 => 18
  • {DAQ,Protocol}.OPC_UA,libOPC_UA: 1.7 => 2.1, 1.10 => 2.1, 1.2 => 2.1
(дополнено реализацией сервиса Publish, поддержкой кусков (CHUNKS) на клиентской части Сбора Данных и общим пересмотром кода в этом процессе)
  • DAQ.ModBus: 2.12 => 3.1
  • DAQ.DAQGate: 2.2 => 2.3
  • DAQ.Siemens: 3.5 => 3.6
  • Transport.Sockets: 4.2 => 4.3
  • Transport.Serial: 2.5 => 2.6
  • Transport.SSL: 3.2 => 3.3
  • UI.WebCfgD: 1.5 => 2.0
  • UI.VCAEngine: 6.9 => 7.1
  • UI.QTStarter: 5.8 => 5.9
  • UI.QTCfg: 5.1 => 5.4
(общий пересмотр и переделка таблиц)
  • UI.Vision: 7.7 => 7.13
(общий пересмотр и переделка таблиц в Qt в целом и вида Таблица примитива FormEl СВУ)
  • UI.WebVision: 5.8 => 6.2
(общий пересмотр и переделка таблиц вида Таблица примитива FormEl СВУ)
  • LibsDB.OscadaLibs.DevLib.IEC62056: 1.0 => 1.1
  • LibsDB.vcaBase.Main: 2.0 => 2.1
    • storeHouse: 1.0
    • RootPgSo: 2.3 => 2.4

OpenSCADA библиотеки и проекты

  • LibsDB.vcaBase,AGLKS.vca: Main.RootPgSo: Дополнено на предмет:
    • виджета "alarms" на основе примитива "Протокол" с возможностью включить/выключить;
    • добавления опциональной функции возврата к типовому пользователю после определённого времени неактивности в атрибуте "defUser";
    • переключено на неотносительный алгоритм вычисления вертикальной позиции и высоты главной мнемосхемы.
  • LibsDB.OscadaLibs: DevLib.IEC62056: Переписано в синхронный режим (запрос-ответ) для работы нескольких устройств на одной последовательной шине.
  • LibsDB.vcaBase:
    • Библиотека "Основная" дополнена новой страницей реализации "Склада (storeHouse)".
    • Main.RootPgSo: Периодичность исполнения кадра поднята до 1000 миллисекунд после добавления ранней обработки событий. Значительным образом переключено с клавиатурных последовательностей "Ctrl+?" на "CtrlAlt+?".
  • AGLKS.vca: Страница проекта /prj_AGLKS/pg_so/pg_4/pg_mn/pg_1 переименована в /prj_AGLKS/pg_so/pg_4/pg_mn/pg_CM101, как с другими.

API
!!!!:Изменения:

  • SYS: Функцию TSYS::curTime() дополнено аргументом определения источника часов с использованием функции clock_gettime(). Определение EVAL_RFlt дополнено суффиксом "f".
  • Mess: Функция перевода TMess::translSet() дополнена аргументом "srcFltr" фильтрации по источникам.
  • Транспорты: Функция протокола ВВ pushLogMess() дополнена аргументами "data" и "dataDir".

Дополнения:

  • Mess: Блокирование данных отделено от блокирования всех сообщений в dtRes.
  • SYS: Функции API пользователя дополнены функцией lang() быстрого получения системного языка.
    • Дополнено функцией TSYS::curTimeN().
    • .,DAQ.{LogicLev,ModBus,Siemens}: Дополнено и использовано глобальную постоянную DAQ_APER_FRQ представления частоты апериодических вызовов, вроде f_start, периодических процессов.
  • Безопасность: Объект пользователя дополнен функцией Пользовательского API auth() для аутентификации по паролю.
  • Транспорты: Входные и выходные объекты транспортов дополнены атрибутами протокола ВВ: "mLogLstDt", "mLogLstDtTm".
  • DAQ: Объект DAQ-параметра дополнен информационным полем метки времени изменения с его максимальным значением на объекте контроллера, с помощью нового конфигурационного поля БД "TIMESTAMP" объекта параметра.

Система

  • FIX:Сборка:configure.ac: Версия библиотеки ядра увеличена до 3:10:0 и версия программы увеличена до 0.9.4.
  • Сообщения исходного кода и документация программы:
    • rom_as@oscada.org заменено на roman@oscada.org везде в исходниках.
    • Документ "Modules/OPC_UA" целиком отревизирован для версии модулей 2.1 и перевода.
  • Вкладка "Переводы" несколько отревизирована, дополнена актуальным статусом, дополнена контекстной помощью и менеджер переводов дополнен на предмет:
  • ограничения времени формирования таблицы в prmInterf_TM (7 секунд);
  • конфигурационного поля пропуска количества верхних сообщений;
  • установки перевода только для фильтрованных источников;
  • проверки содержимого на совпадение только для фильтрованных источников;
  • пропуск ошибок отсутствия источников.
  • Функция перевода TMess::translSet() предотвращена от распространения групповых сообщений, изменённых не из менеджера перевода.
  • FIX:.,BD.LDAP,Archive.{DBArch,FSArch},DAQ.{ModBus,MMS},{DAQ,Protocol}.OPC_UA,UI.Vision: Несколько очищено от предупреждений сборки.
  • FIX: Определение EVAL_RFlt дополнено суффиксом "f" для предотвращения ошибочного сравнения double EVAL_RFlt с сохранённым float значением, исправляет работу архиватора Archive.FSArch с типами значений float при выявлении EVAL.
  • FIX:Mess: Блокирование данных отделено от блокирования всех сообщений в dtRes для предотвращения конкурентным блокировкам при активной работе с переводами. Атрибуты mLang2CodeBase, mLang2Code переключены на это новое блокирование.
  • data/openscada-proj.in: Переключено на ссылку содержимого Пользовательской LibsDB на системные библиотеки, с содержимым только на чтение, вместо копирования.

Сбор Данных

  • ModBus,Siemens: Переключено, в формирование значения "f_frq", на использование информации реального исполнения задачи.
  • {DAQ,Protocol}.OPC_UA.{.,libOPC_UA} : Дополнено реализацией сервиса Publish, поддержкой кусков (CHUNKS) на клиентской части Сбора Данных и общим пересмотром кода в процессе этого:
КЛИЕНТ:
  • добавление атрибутов (элементов мониторинга) перенесено из attrPrc() непосредственно в enable() и которая запускается при запуске объекта контроллера
  • ... и обработка элементов улучшена обновлением описания, флагов и связывания;
  • сбор данных унифицирован обработкой в функции параметра upVal()
  • ... и запроса значений функцией объекта контроллера getValMIt() с поддержкой Массивов
  • ... чем вплотную подготовлено для встраивание логического типа параметров;
  • объекты параметров Сбора Данных автивированы для включения других параметров;
  • установка и удаление EVAL ко всем атрибутам проверено во всех режимах;
  • структурные переменные, в просмотрщике выбора DAQ-параметра, разрешены для выбора их элементов отдельно;
  • разбор перечня переменных DAQ-параметров установлен в полный разбор с пропуском пустых строк;
  • объект DAQ-контроллера дополнен закрытием сеанса и безопасного канала при его останове;
  • общий статус объекта контроллера дополнен детализированной информацией на предмет использованного канала безопасности, сеанса, подписки и обрабатываемыми элементами мониторинга;
  • блокирование запроса переименовано в resOPC.
СЕРВЕР:
  • объект OPC-UA Сервера дополнен вкладкой общего статуса сервера с информацией на предмет активности каналов безопасности;
  • объект Узла EndPoint дополнен общим статусом с информацией на предмет активности сеансов и подписок, а также периодичностью и временем исполнения задачи подписок.
БИБЛИОТЕКА:
  • унифицировано и определено типовое значение времени жизни канала безопасности, которое установлено в 300000 мс;
  • типовой LifeTimeCounter подписок установлен в 2400;
  • объект NodeId дополнен функцией прямого сравнения operator==();
  • функция XML_N::childClear() дополнена результатом возврата того самого объекта XML_N для объединения;
  • функция curTime() дополнена аргументом определения источника часов с использованием функции clock_gettime();
  • короткие функции дополнены str2int() и str2uint();
  • некоторые поля переименованы: publInterv в publInterval, cntrLifeTime в lifetimeCnt, cntrKeepAlive в maxKeepAliveCnt, maxNotPerPubl в maxNtfPerPubl, en в publEn;
  • исправление слова "POOL" на "POLL".
БИБЛИОТЕКА_КЛИЕНТ:
  • Client::reqService() дополнен мета-командой "CloseALL" закрытия текущего сеанса и каналу безопасности;
  • функция обработки клиентских сервисов protIO() адаптирована к работе в асинхронном режиме (не запрос);
  • функция Client::messIO() расширена аргументом таймаута с определением также режима запроса;
  • запись в канал и чтение из него отделено в обработке MSG пакетов;
  • адаптация сообщений безопасности к работе со смешанным входным буфером;
  • перенос основного сервисного запроса "OPN" под обработку сообщений из-за отправки обновлений в середине Publish активности.
  • реализован сервис Publish на стороне клиента:
  • объект "Client" дополнен реализацией подобъекта "Subscr" (но сохраняется в Client::SClntSess) с функциями: activate(), monitoredItemAdd() и monitoredItemDel();
  • объект "Client" дополнен функцией poll() с:
  • унификацией чтения значений в обоих режимах Read и Publish;
  • проверкой потери всех Publish запросов в течении OpcUa_ClntPublishResentCntr(2) попыток-времени сохранения живым;
  • восстановления пула Publish.
  • объект Client::Subscr::MonitItem добавлен как представитель элементов мониторинга с доступом из под общего блокирования клиентских ресурсов;
  • сервисные запросы дополнены реализацией, включая обработку ответов: CreateSubscription, DeleteSubscriptions, CreateMonitoredItems, Publish, Poll;
  • реализовано и проверено в поддержке безопасных политик по Publish;
  • целевой пул Publish запросов на подписку установлено в виртуальной функции publishReqsPool() с типовым значением 2.
  • дополнено реализацией кусков (CHUNKS) как в запросах, так и ответах;
  • целиком отревизировано и очищено общую функцию запроса reqService() от дубликатов аргументов и параметров:
  • дополнено восстановлением сеансов при переподключении канала безопасности;
  • унифицировано очистку текущего сеанса и канала безопасности.
  • объект клиента дополнен общим блокированием ресурсов mtxData;
  • свойство сообщения "timeoutHint" установлено в 0 для всех сообщений;
  • запрос Read возвращён к "плоскому" запросу с ограничением только в CHUNKS;
  • ошибка OpcUa_BadSecureChannelIdInvalid добавлена к очистке канала безопасности;
  • Client::SClntSess::{sessOpen,lstMessReq} переименован в {secChnlOpenTm,secLstMessReqTm}
  • ... и предотвращён от очистки и восстановления сеанса и канала безопасности;
  • дополнено отладочными сообщениями ошибок запросов.
БИБЛИОТЕКА_СЕРВЕР:
  • серверная часть адаптирована к работе с UAExpert 1.5 на предмет: установки атрибута AId_Descr DAQ-значения в тип OpcUa_LocalizedText, добавления декларации целочисленного типа OpcUa_IntAuto и OpcUa_UIntAuto;
  • обработка подписок возвращена к их обработке в отдельной задаче и функции subScrCycle() на предмет:
  • правильного расчёта всех таймаутов для выключения;
  • обработки периодичности подписки и публикации;
  • проверки состояния связанных сеансов и каналов безопасности на предмет закрытия подписок.
  • но публикация оставлена на обработку в активности входного канала и функции Server::EP::publishCall() с предотвращением обработки Publish для ошибочных и чужих Подписок, через проверку inPrtId, sesTokId и isSecCnlAct;
  • унификация Сеанса на предмет: связывания сеансов с каналами безопасности переключено на один вместо массива, проверку сеанса всех сообщений дополнено предотвращением использования чужих подключений;
  • не последние куски пакета переключены на отправку прямо, чтобы не добавлять к одному TCP-пакету;
  • EP::mtxData блокирование переключено в PTHREAD_MUTEX_RECURSIVE;
  • каналы безопасности ограничены колчеством OpcUa_SecCnlLimit(10) и очередь публикаций количеством OpcUa_ServerMaxPublishQueue(10);
  • EP::secSize() переименовано в EP::secN() и добавлено EP::sessN(), EP::subscrN() и chnlList();
  • Server.SecCnl.{TokenId,TokenIdPrev} переименовано в Server.SecCnl.{tokenId,tokenIdPrev}.
  • ModBus: Выходная часть RTU варианта протокола дополнена ранним прерыванием ожидания пакетов стандартных функций [ERR,1...6,15,16], что увеличивает общую пропускную способность вдвое.
    • ВВ параметров Логического Уровня включено в перевод, для не связанных строк и так как в DAQ.LogicLev.
    • Разбор атрибутов Сбора Данных переключено на использование TSYS::strLine() и TSYS::strParse(), чем разрешено символ ':' в названии и пустые строки в тексте.
  • DAQGate: Режимы синхронизации дополнены режимом предотвращения синхронизации вообще для объектов сохранённых в кеше, путём разрешения значения -1 конфигурационного поля "Периодичность синхронизации с удалённой станцией, секунд".

Архивы-История

  • FIX:FSArch: Критически исправлено обработку файлов архива значений, при попытке записи их ИД в нулевую строку.
  • DBArch: Архиваторы сообщений дополнены конфигурационным полем "Уникальные и недублирующие сообщения только за временем и категорией".
    • FIX: Исправлено падение при обработке групп архиватора значений из-за неочистки связывания конфигурации полей таблицы (TConfig) под блокированием и неблокирование функции ModVArch::grpLimits() в reqRes.

Транспорты

  • Протокол ВВ, во входной и выходной части, расширен и дополнен:
    • комбинированием данных пакетов с одинаковым направлением и адресом данных в течении prmWait_TM (5 секунд);
    • микросекундную часть времени зафиксировано в 6(шести) символах;
    • сообщения данных дополнены символом направления;
    • ограничением размера одного блока обработки, новым конфигурационным полем;
    • значительным повышением производительности через использование предопределённого буфера.
  • FIX:Serial: Выходной транспорт исправлен в ожидании между запросами на предмет обработки reqRetrMult*wCharTm как миллисекунды.
  • FIX:Sockets: Обнаружено ошибку "Обрыв канала (32)" при записи, после отключения сервера, поэтому попытки переподключения установлены в 2 по (kz <= 0).

Интерфейс Пользователя

  • FIX:Общий пересмотр и переделка таблиц в Qt и Web в целом и вида Таблица примитива FormEl СВУ:
  • QTStarter,QTCfg,Vision: Общий библиотечный класс TableDelegate значительным образом улучшено в работе на QTCfg и Vision:
  • дополнено собственными пользовательскими ролями SelectRole, TextLimRole и OneLineString;
  • отображение ячеек дополнено фоновым цветом через чтение-применение общих ролей;
  • числовые типы (целое и реальное) дополнены принудительным центрированием;
  • строковые типы дополнены опциями выравнивания и заворачивания слов с ролями Qt::TextAlignmentRole;
  • дополнено поддержкой визуального ограничения длинных текстов собственной ролью TextLimRole и типовое значение установлено в 300 символов через дополнительное переопределение sizeHint().
  • FIX: Вид "Таблица" примитива "FormEl":
  • VCAEngine,QTStarter,Vision,WebVision: Дополнено новым типом ячейки 't'-текст, в основном для возможности подтверждения редактирования типа 's'-строка нажатием Enter.
  • VCAEngine,Vision,WebVision: Дополнено опцией "prec" пространства колонки, строки и ячейки для контроля точности реальных значений; и реализацией атрибута "align" колонки и ячейки.
  • WebVision,Vision: Дополнено переключением таблиц в предотвращение двойному хранению исходного содержимого при его размере более чем 10000.
  • FIX:Vision: Использование общего делегата таблицы с возможностью многострочного редактирования.
  • Усовершенствовано отображение колонок, строк и ячеек при обновлении и в целом:
  • ограничением визуального размера содержимого ячейки 300 символами и высоты строк в 70% от общего размера таблицы;
  • более точным выравниванием ширины колонок;
  • подстройкой в режиме разработки, а также при видимости вертикального заголовка;
  • плотным заполнением таблицы через учёт размера видимой полосы вертикальной прокрутки;
  • подстройкой только после полного изменения размера таблицы, чем также допуская ручное изменение колонок и для предоставления такой-правильной подстройки всегда.
  • Реализовано "лёгкую" обработку изменения ширины и обновления:
  • "лёгкое" редактирование без переподстройки колонок при каждом обновлении, только при: появлении первой строки, изменения количества колонок и изменения заголовка колонки, изменении шрифта и изменении размера;
  • применение фиксированной ширины колонки и учёт высоты строк с ограничениями независимо от значения общего атрибута "colsWdthFit";
  • установка значения, раннее изменение размера и подстройка таблицы, перенесены в пространство наличия содержимого таблицы и после сортирования.
  • Функцию экспорта во время исполнения дополнено экспортом вида Таблица примитива "FormEl" в CSV.
  • 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".