EnglishУкраїнськаРусский
Вход/Новый
06.04.2012 17:00 Давность: 5 yrs

Автор: Роман Савоченко

Промышленный релиз OpenSCADA 0.8.0 LTS

Промышленная версия предназначена для повсеместной интеграции в решения автоматизации для платформ Linux x86, x86_64 и ARM. Эта версия позиционируется как поддерживаемая в течении продолжительного времени (LTS).


OpenSCADA на ARM ПЛК LP-5xxx

OpenSCADA на ARM плате Tion-Pro270

OpenSCADA на ARM ПЛК Segnetics SMH-2Gi

OpenSCADA на интернет планшете Nokia N800

OpenSCADA на мобильном телефоне Nokia N900

OpenSCADA на мобильном телефоне Nokia N950

Запись, отмена и повтор изменений

Выбор и просмотр архивов значений

OpenSCADA 0.8.0 LTS

Изменения

  • 12.02.2017 — Семнадцатое плановое обновление промышленного релиза. Исправлено около 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().
  • 28.06.2016 — Шестнадцатое плановое обновление промышленного релиза. Исправлено около 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: Осуществлены очень важные исправления на предмет адаптации к стабильной работе с серверами СВК:
          • Атрибуты модуля 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().
        • Удалённую аутентификацию расширено на использование аутентификации хоста, по умолчанию, и самого подключения для её проверки.
        • Таймаут попыток восстановления подключения к удалённой станции сделано прогрессивным, до указанного значения, и отображение сообщения ошибок осуществляется после значения таймаута в три секунды.
    • Специальный.SystemTests: Тесты БД расширены тестом сканирования.
  • 12.01.2016 — Пятнадцатое плановое обновление промышленного релиза. Исправлено около 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.
  • 07.11.2015 — Четырнадцатое плановое обновление промышленного релиза. Исправлено около 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 в выбранный элемент.
    • FIX:Special.FLibSYS: VArchObj::FFT(): Предотвращено потенциальное падение. Расширено для проверки на EVAL и замену его на адаптивный последний аргумент <vlOnEVAL>. К результирующему массиву добавлено обєектные атрибуты "bufSize" и "bufEVAL" для возможности контроля качества данных.
  • 14.05.2015 — Тринадцатое плановое обновление промышленного релиза. Исправлено около 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" допущены к многократному открытию сеансов при любых условиях.
  • 27.12.2014 — Двенадцатое плановое обновление промышленного релиза. Исправлено около 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 к функции обратного вызова.
    • FIX:Archive.FSArch: Исправлено на предмет предотвращения дубликатов и ошибочного подключения архивов, для источников данных которые поздно добавляются, а также добавлено обязательную проверку перед добавление новых архивов. Указание на область данных для последнего значения индекса предотвращено для типа Строка.
    • FIX:Transport.TTransportIn: Добавлено раннюю остановку в postDisable() для предотвращения падения в деструкторе на освобождённых данных объекта предка.
    • FIX:Protocol.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 код значительным образом очищено и Таблицу расширено упрощением контроля и выходу из режима редактирования ячеек.
    • FIX:Special.FLibSYS: Исправлено и расширено функцию strDec4Bin() аргументом разделителя со значением по умолчанию " ", с целью восстановления обратной совместимости.
  • 21.07.2014 — Одиннадцатое плановое обновление промышленного релиза. Исправлено около 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}: Добавлено функцию опускания изменений визуального элемента к его родителю. Добавлено проверку и предупреждение про непринятые изменения в конфигурационном диалоге элементов.
  • 09.05.2014 — Десятое плановое обновление промышленного релиза. Исправлено около 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().
  • 21.12.2013 — Девятое плановое обновление промышленного релиза. Исправлено около 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: Добавлены проверки на допустимость индексов с целью предотвращения падений по выходу за диапазон.
  • 16.09.2013 — Восьмое плановое обновление промышленного релиза. Исправлено около 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: Исправлено отображение поля "Дата+Время" в таблице и других местах.
  • 11.07.2013 — Седьмое плановое обновление промышленного релиза. Исправлено около 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{" в виду окончания действия на первой постоянной, независимо от следующих операций выражения. Условная логическая команда '||' и '&&' исправлена для постоянных.
  • 12.05.2013 — Шестое плановое обновление промышленного релиза. Исправлено около 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 с конвертацией из разделённого времени.
  • 02.02.2013 — Пятое плановое обновление промышленного релиза. Исправлено около 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" открыты для редактирования и сохранения в конфигурационном файле.
  • 13.11.2012 — Четвёртое плановое обновление промышленного релиза. Исправлено около 15 ошибок и добавлены некоторые улучшения. Значительные изменения:
    • DAQ.SoundCard: Переписан сбор для обеспечения реального времени, а также контроля частоты выборки и потери кадров.
    • Системные атрибуты MessLev, LogTarget, Lang, Lang2CodeBase, WorkDB, Workdir, IcoDir, ModDir разрешены для чтения и записи только в конфигурационный файл.
    • Архив: Добавлен запрос по нужной периодичности для обеспечения быстрого доступа к высокоточным архивам значений, посредством указанного размера кадра и периодичности.
  • 08.09.2012 — Третье плановое обновление промышленного релиза. Исправлено около 30 ошибок и добавлены некоторые улучшения. Значительные изменения:
    • Исправлена бесконечная рекурсия при установке значения строки в тип Объект.
    • Значительные исправления, а также падения, архива значений.
    • XMLNodeObj: Хранение ссылки на родителя изменено на прямой указатель для предотвращения самоблокировки, что позволяет удалять узлы и исключить утечку памяти.
    • Реальное не создание задачи из высокоприоритетного потока на некоторых Linux ядрах, для примера 2.6.29, исправлено заменой ожидания вызова sched_yield() на TSYS::sysSleep(1e-3).
    • UI.VCAEngine: Добавлена загрузка/включение виджетов библиотек и проектов по требованию.
    • Добавлен объект TEValObj для подобной к скалярам обработки EVAL.
    • Заменена немногопоточная функция вычисления хеша пароля crypt() на многопоточную crypt_r().
    • БД: Значительные расширения, исправления и оптимизация генерации документов по времени, а также реализация новой концепции движка рецептов.
  • 09.07.2012 — Второе внеплановое обновление промышленного релиза. Исправлено около 5 ошибок и добавлены некоторые улучшения. Исправлено включение архива из DAQ параметров, а также значительно улучшена обработка архивов. Модуль DAQ.System значительно обновлен и улучшен для создания новых объектов источников при их появлении.
  • 09.06.2012 — Первое плановое обновление промышленного релиза. Исправлено около 30 ошибок и добавлены некоторые улучшения. Завершен документ "Создание модулей OpenSCADA". Значительно обновлен и дополнен документ "Быстрый старт OpenSCADA" и создано видео-дополнение к нему.
  • 06.04.2012 — Промышленный релиз 0.8.0.

Введение

Релиз открытой 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" из дистрибутива системы или здесь: wiki.oscada.org/Works/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) — Стабилизация. Добавлена подсветка синтаксиса процедур.

1 Реализация плановых задач

В соответствии с планом релиза были выполнены следующие задачи:

  • Формирование предоставления коммерческих услуг на основе OpenSCADA. — Выстроена концепция и созданы механизмы предоставления коммерческих услуг разработчиками на основе OpenSCADA (oscada.org/ru/uslugi ).
  • Адаптация системы OpenSCADA для работы на аппаратной платформе ARM. — Осуществлена сборка, адаптация и полномасштабное тестирование OpenSCADA на архитектуре ARM; адаптация и тестирование проводились на интернет планшете фирмы NokiaN800 (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: Добавлено кратковременное засыпание после закрытия всех окон в функции отключения, с целью предоставить время окончательно разрушиться объектам всех окон и предотвратить падение.
  • Реализация механизма откатов изменений редактирования в Vision. — В рамках окна визуального редактирования виджетов реализован многоуровневый механизм отката изменений для всех основных операций: визуальное изменение геометрии, изменение значения атрибута виджета, добавление/удаление виджета, копирование виджета и редактирование виджетов на основе примитива "ElFigure".

2 Оптимизация, повышение стабильности, устойчивости и производительности системы

С момента последнего стабильного релиза в процессе работ над данной версией, а также её практической адаптации, было обнаружено и исправлено в общей сложности более 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-запроса на предмет разбора всех атрибутов каждого элемента.
  • Сбор данных и архивы:
    • Archive:
      • Исправлено использование буфера мягкой сетки с низким и высоким разрешением времени в архивах значений.
      • Исправлено вычисление начала архива в функции begin() при пустом буфере.
      • FSArch:
        • Исправлено создание файлов архива сообщений при помещении множества старых сообщений. Добавлен параметр предотвращения дубликатов.
        • Результат функции fgetc() записан в целочисленную переменную вместо символьной, что исправило обнаружение "EOF".
        • Исправлено чтение данных из буфера архива в соответствии с размером буфера в алгоритме быстрого вычисления количества битов.
        • Исправлено помещение смещения в кеш из алгоритма быстрого вычисления количества битов.
        • Исправлена некорректная обработка конца невыравненных блоков быстрого алгоритма подсчёта количества битов.
        • Добавлен монопольный ресурс к вызову функции calcVlOff() с целью предотвращения некорректной работы с кешем.
    • DAQ:
      • System: Исправлено падение при выходе для источника "Hddtemp".
      • ModBus: Режим установки значений атрибутов параметров изменён на активный и улучшена обработка ошибок.
      • JavaLikeCalc:
        • Добавлена проверка индекса при доступе к символу строки по индексу с целью предотвращения выхода за диапазон.
        • Исправлено падение функции replace() объекта "RegExp".
      • Siemens:
        • Исправлено получение и запись значений вещественных типов.
        • Исправлено переподключение в случае ошибки.
        • Исправлено использование свойства размера целого, вещественного и строкового типов.
        • Добавлена очистка связей параметра при его выключении.
  • Интерфейсы визуализации:
    • VCAEngine:
      • Исправлено блокирование сеанса для динамически активных проектов при динамическом доступе к собственным атрибутам виджета.
      • Предотвращена возможность потери изменений в сервере визуализации при отображении в визуализаторах путём предварительного сохранения значения тактового счётчика в сервисном запросе "openList".
      • Ресурсы атрибутов виджетов сделаны более прозрачными (посредством использования рекурсивного мютекса) и использован один общий ресурс, для сеансов и другого, с целью предотвращения перекрёстного блокирования одной задачи другой.
    • Vision, WebVision:
      • Повышено разрешение координат всех виджетов до трёх знаков после запятой с целью обеспечения нормального позиционирования на больших масштабах.
      • Исправлен доступ за границу вектора при отрисовке графиков примитива "FormEls".
      • Исправлено обновление изображения примитива "Элементарная фигура" при изменении масштаба.
      • Исправлено обновление примитива "Протокол" по времени и размеру.
    • Vision:
      • Исправлено падение сеанса для проектов с периодом исполнения более 500 мс.
      • Реализована доводка координат фигур примитива "Элементарная фигура" к остатку положения виджета.
      • Масштабирование текста примитива "Текст" изменено на изменение размера шрифта вместо масштабирования конечного изображения, что повысило общее качество отображения шрифта.
    • WebVision:
      • Удалена проверка попадания точек фигур в область отображения примитива "Элементарная фигура". Данная функция переложена на библиотеку GD.
      • Исключена возможность падения для примитивов "Diagram" или "ElFigure" в случае передачи некорректных значений атрибутов изображения "xSc" или "ySc" из Web-браузера.
      • Исправлено открытие и замена корневой страницы.
      • Исправлена обработка масштаба вложенных страниц с учётом масштаба корневой.
      • Исправлена очистка хвоста примитива "Протокол".

Оптимизация и повышение производительности:

  • SYS:
    • Механизм ресурса объекта "ResString" заменён с RW-блокировок на мютекс с целью повысить производительность и сократить потребление памяти.
    • TConfig: Объект элемента конфигурации (TCfg) основан на TVariant. Доступ к объекту "TCfg" сделан прозрачным, что позволяет использовать связи без базовых типов.
    • Механизм хранения дочерних узлов в карте по ключу "string" изменён на тип ключа "const char*". Все узлы адаптированы к константности идентификатора.
  • Archive.FSArch: Обработка индексной таблицы архива значений значительно ускорена посредством использования быстрого алгоритма вычисления количества битов в 32-разрядном целом.
  • UI.WebCfgD:
    • Добавлено изменение размера иконок на стороне сервера с целью снижения трафика.
    • Использован групповой запрос содержимого страниц для значительного повышения производительности на медленных и высоколатентных каналах.
  • UI.QTCfg:
    • Использован групповой запрос к интерфейсу управления для повышения производительности на медленных и высоколатентных соединениях.
    • Исключён многократный запрос элементов выборных колонок таблиц.
  • UI.Vision: Повышена производительность отрисовки заполнений примитива "ElFigure".
  • UI.VCAEngine:
    • Выполнены мероприятия по повышению скорости запуска сеанса проекта в числе:
      • Пропущена инициализация базовых атрибутов ввиду их последующего наследования.
      • Удален перевод некоторых сообщений времени исполнения сеанса.
      • Реализовано включение только нужных страниц при запуске сеанса. Остальные страницы исполняющегося сеанса включаются по мере обращения к ним. Это позволило значительно повысить скорость запуска сеанса, а также уменьшить зависимость скорости запуска от сложности проекта визуализации.
    • Реализация архивного режима примитива "Документ" изменена на прямую работу с БД, что позволило расширить глубину архива до 1000000 документов и без ущерба для оперативной памяти.

3 Усовершенствование и стабилизация графической подсистемы

Заметная работа была выполнена в рамках графической подсистемы, а именно в модулях движка СВУ UI.VCAEngine, визуализаторов UI.Vision и UI.WebVision, а также конфигураторах. Внесённые изменения были направленны на стабилизацию, оптимизацию потребления памяти и улучшение пользовательских свойств.

Улучшения графической подсистемы:

  • Добавлено API подсветки синтаксиса. На основе данного API подсветка синтаксиса добавлена в:
    • DAQ:
      • BlockCalc: Подсветка синтаксиса в описании атрибутов параметров.
      • JavaLikeCalc: Подсветка синтаксиса к компилятору языка JavaLikeCalc.JavaScript, а также ко всем текстовым полям, использующим этот язык внутри модуля.
      • ModBus, OPC_UA: Подсветка синтаксиса списка атрибутов.
    • Protocol.UserProtocol: Подсветка синтаксиса к текстам процедур протокола.
    • UI:
      • QTCfg: Отображение многоуровневой подсветки синтаксиса, передаваемой из модели данных в виде правил регулярных выражений.
      • VCAEngine: Подсветка синтаксиса к текстовым атрибутам примитивов виджета, для которых это нужно.
      • Vision: Подсветка синтаксиса к текстовым атрибутам примитивов виджета, а также текстам программ виджетов.
      • WebUser: Подсветка синтаксиса процедур формирования Web-интерфейса.
  • 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-блоков с целью исключить проблемы и задержки в открытии внешних окон различными браузерами.
    • Использован групповой запрос содержимого страниц для значительного повышения производительности на медленных и высоколатентных каналах.
    • Добавлена информация в строке статуса о текущем пользователе и возможность его смены.
    • Выполнена адаптация для работы в полную ширину экрана.

4 Формирование, расширение и стабилизация 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() для простого подключения к виджету как по абсолютному, так и относительному пути.

5 Общесистемные расширения

В общесистемное 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". Поддержка старых адресов сохранена.

6 Публикация решений OpenSCADA

В процессе осуществления работ над данным релизом на разных конференциях и выставках были представлены решения на основе проекта OpenSCADA:

Заключение

В процессе создания нового стабильного релиза 0.8.0 промышленного назначения с продолжительным сроком поддержки проделана большая работа по стабилизации, расширению функциональных возможностей, а также адаптации для работы на альтернативных аппаратных платформах (на архитектуре ARM). Всё это в целом позволило расширить рамки полноценного применения OpenSCADA на все уровни систем автоматизации от ПЛК, серверов SCADA-систем и до распределённых систем визуализации.

В появлении новой промышленной версии системы OpenSCADA 0.8.0 активное участие приняли:

  • Савоченко Роман: Основной объём работ по разработке, документированию и тестированию.
  • Лысенко Максим: Сопровождение и стабилизация примитива "Элементарная фигура" среды визуализации и управления (СВУ), а также перевод и обновление большей части документации на Английский язык.
  • Попкова Ирина: Перевод и обновление интерфейса системы OpenSCADA и её модулей на Немецкий язык.
  • Алмаз Каримов: Расширение модуля поддержки протокола DCON и активное тестирование.
  • Попков Алексей: Сборка пакетов для Fedora-based дистрибутивов.
  • Многие другие пользователи системы OpenSCADA посредством всестороннего тестирования.

Последующие усилия разработки будут направлены на реализацию программной многоплатформенности, а также расширение функциональности путём создания модулей поддержки новых интерфейсов, в том числе и по схеме авансированной разработки, с распределением затрат реализации на проданные экземпляры (для модулей взаимодействующих с коммерческими системами и интерфейсами). Для реализации централизованного распространения решений, услуг и расширений на основе OpenSCADA планируется создание магазина в рамках главного информационного ресурса OpenSCADA (oscada.org ).


2489