Contents
- 1 Вступ
- 2 Реалізація планових задач
- 3 Оптимізація, підвищення стабільності, стійкості та продуктивності системи
- 4 Удосконалення та стабілізація графічної підсистеми
- 5 Формування, розширення та стабілізація API користувацького програмування
- 6 Загальносистемні розширення
- 7 Публікація рішень OpenSCADA
- 8 Заключення
- 9 Оновлення
- 9.1 [06.06.2018] ДВАДЦЯТЕ (20) останнє оновлення
- 9.2 [29.12.2017] ДЕВ'ЯТНАДЦЯТЕ (19) оновлення
- 9.3 [02.07.2017] ВІСІМНАДЦЯТЕ (18) оновлення
- 9.4 [12.02.2017] СІМНАДЦЯТЕ (17) оновлення
- 9.5 [28.06.2016] ШІСТНАДЦЯТЕ (16) оновлення
- 9.6 [12.01.2016] П'ЯТНАДЦЯТЕ (15) оновлення
- 9.7 [07.11.2015] ЧОТИРНАДЦЯТЕ (14) оновлення
- 9.8 [14.05.2015] ТРИНАДЦЯТЕ (13) оновлення
- 9.9 [27.12.2014] ДВАНАДЦЯТЕ (12) оновлення
- 9.10 [21.07.2014] ОДИНАДЦЯТЕ (11) оновлення
- 9.11 [09.05.2014] ДЕСЯТЕ (10) оновлення
- 9.12 [21.12.2013] ДЕВ'ЯТЕ (9) оновлення
- 9.13 [16.09.2013] ВОСЬМЕ (8) оновлення
- 9.14 [11.07.2013] СЬОМЕ (7) оновлення
- 9.15 [12.05.2013] ШОСТЕ (6) оновлення
- 9.16 [02.02.2013] П'ЯТЕ (5) оновлення
- 9.17 [13.11.2012] ЧЕТВЕРТЕ (4) оновлення
- 9.18 [08.09.2012] ТРЕТЕ (3) оновлення
- 9.19 [09.07.2012] ДРУГЕ (2) оновлення
- 9.20 [09.06.2012] ПЕРШЕ (1) оновлення
- 10 Посилання
1 Вступ
Реліз відкритої 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" з дистрибутиву системи або тут: http://oscada.org/svn/tags/openscada_0.8.0/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) — Стабілізація. Додано підсвічування синтаксису процедур.
2 Реалізація планових задач
У відповідністю з планом релізу було виконано наступні завдання:
- Формування надання комерційних послуг на основі OpenSCADA. — Побудовано концепцію та створено механізми надання комерційних послуг розробниками на основі OpenSCADA (http://oscada.org/ua/poslugi).
- Адаптація системи OpenSCADA до роботи на апаратній платформі ARM. — Здійснено збірку, адаптацію та повномасштабне тестування OpenSCADA до архітектури ARM; на інтернет планшеті фірми Nokia — N800 (http://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: Додано короткочасне засинання після закриття всіх вікон у функції виключення, з метою надати час остаточно зруйнуватися об'єктам всіх вікон та попередити падіння.
- SYS:
- Реалізація механізму відкатів змін редагування у Vision. — У межах вікна візуального редагування віджетів реалізовано багаторівневий механізм відкату змін для всіх основних операцій: візуальна зміна геометрії, зміна значення атрибуту виджета, додання/видалення віджету, копіювання віджету та редагування віджетів на основі примітиву "ElFigure".
3 Оптимізація, підвищення стабільності, стійкості та продуктивності системи
З моменту останнього стабільного релізу, у процесі робіт над даною версією, а також її практичної адаптації, було виявлено та виправлено в загальній складності більш 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-запитів на предмет розбору всіх атрибутів кожного елементу.
- Transport:
- Збір даних та архіви:
- Archive:
- Виправлено використання буферу м'якої ґратки з низькою та високою роздільною здатністю часу у архівах значень.
- Виправлено обчислення початку архіву в функції begin(), при порожньому буфері.
- FSArch:
- Виправлено створення файлів архіву повідомлень при розташуванні безлічі старих повідомлень. Додано параметр попередження дублікатів.
- Результат функції fgetc() записано в цілочисельну змінну, замість символьної, що виправило виявлення "EOF".
- Виправлено читання даних з буферу архіва у відповідності з розміром буфера в алгоритмі швидкого обчислення кількості бітів.
- Виправлено розташування зміщення до кешу із алгоритма швидкого обчислення кількості бітів.
- Виправлено некоректну обробку кінця невирівняних блоків швидкого алгоритма підрахунку кількості бітів.
- Додано монопольний ресурс до виклику функції calcVlOff() з метою попередження некоректної роботи з кешем.
- DAQ:
- System: Виправлено падіння при виході для джерела "Hddtemp".
- ModBus: Режим встановлення значень атрибутів параметрів змінено на активний та покращено обробку помилок.
- JavaLikeCalc:
- Додано перевірку індексу при доступі до символу рядка за індексом, з метою попередження виходу за діапазон.
- Виправлено падіння функції replace(), об'єкту "RegExp".
- Siemens:
- Виправлено отримання та запис значень реальних типів.
- Виправлено перепідключення у випадку помилки.
- Виправлено використання властивості розміру цілого, реального та строкового типів.
- Додано очищення зв'язків параметру при його виключені.
- Archive:
- Інтерфейси візуалізації:
- VCAEngine:
- Виправлено блокування сеансу для динамічно активних проектів при динамічному доступі до власних атрибутів віджету.
- Попереджено можливість втрати змін в сервері візуалізації при відображені у візуалізаторах шляхом попереднього збереження значень тактового лічильника у сервісному запиті "openList".
- Ресурси атрибутів віджетів зроблено більш прозорими (за посередництвом використання рекурсивного мютексу) та використано один загальний ресурс, для сеансів та іншого, з метою попередження перехресного блокування однієї задачі іншою.
- Vision, WebVision:
- Підвищено роздільну здатність координат всіх віджетів до трьох знаків після коми, з метою забезпечення нормального позиціювання на великих масштабах.
- Виправлено доступ за границю вектору під час відображення графіків примітиву "FormEls".
- Виправлено оновлення зображення примітиву "Елементарна фігура" під час зміни масштабу.
- Виправлено оновлення примітиву "Протокол" за часом та розміром.
- Vision:
- Виправлено падіння сеансу для проектів з періодом виконання більш 500 мс.
- Реалізовано доведення координат фігур примітиву "Елементарна фігура" до залишку положення віджету.
- Масштабування тексту примітиву "Текст" змінено на зміну розміру шрифту замість масштабування кінцевого зображення, що підвищило загальну якість відображення шрифту.
- WebVision:
- Видалено перевірку попадання точок фігур у область відображення примітиву "Елементарна фігура". Цю функцію перекладено на бібліотеку GD.
- Виключено можливість падіння для примітивів "Diagram" або "ElFigure", у випадку передачі деяких значень атрибутів зображень "xSc" або "ySc" із Web-браузера.
- Виправлено відкриття та заміна кореневої сторінки.
- Виправлено обробку масштабу вкладених сторінок, з розрахунком масштабу кореневої.
- Виправлено очищення хвосту примітиву "Протокол".
- VCAEngine:
Оптимізація та підвищення продуктивності:
- SYS:
- Механізм ресурсу об'єкта "ResString" замінено з RW-блокувань на мютекс, з метою підвищення продуктивності та скоротити споживання пам'яті.
- TConfig: Об'єкт елементу конфігурації (TCfg) засновано на TVariant. Доступ до об'єкту "TCfg" зроблено прозорим, що дозволяє використовувати зв'язки без базових типів.
- Механізм зберігання дочірніх вузлів у карті за ключем "string" змінено на тип ключа "const char*". Всі вузли адаптовано до константності ідентифікатору.
- Archive.FSArch: Обробку індексної таблиці архіву значень значно прискорено за посередництвом використання швидкого алгоритму обчислення кількості бітів у 32-розрядному цілому.
- UI.WebCfgD:
- Додано зміну розміру іконок на боці сервера з метою зниження трафіку.
- Використано груповий запит вмісту сторінок для значного підвищення продуктивності на повільних та високолатентних каналах.
- UI.QTCfg:
- Використано груповий запит до інтерфейсу керування для підвищення продуктивності на повільних та високолатентних підключеннях.
- Виключено багаторазовий запит елементів обраних рядків таблиць.
- UI.Vision: Підвищено продуктивність відображення заповнень примітиву "ElFigure".
- UI.VCAEngine:
- Виконано заходи по підвищенню швидкості запуску сеансу проекту в числі:
- Пропущено ініціалізація базових атрибутів у зв'язку їх наступного наслідування.
- Видалено переклад деяких повідомлень часу виконання сеансу.
- Реалізовано включення тільки потрібних сторінок при запуску сеансу. Решта сторінок виконуваного сеансу включаються по зверненню до них. Це дозволило значно підвищити швидкість запуску сеансу, а також зменшити залежність швидкості запуску від складності проекту візуалізації.
- Реалізація архівного режиму примітиву "Документ" змінено на пряму роботу з БД, що дозволило розширити глибину архіву до 1000000 документів та без шкоди для оперативної пам'яті.
- Виконано заходи по підвищенню швидкості запуску сеансу проекту в числі:
4 Удосконалення та стабілізація графічної підсистеми
Значну роботу було виконано у межах графічної підсистеми, а саме у модулях рушія СВК UI.VCAEngine, візуалізаторів UI.Vision та UI.WebVision, а також конфігураторах. Внесені зміни були направлені на стабілізацію, оптимізацію споживання пам'яті та покращення користувацьких властивостей.
Удосконалення графічної підсистеми:
- Додано API підсвічення синтаксису. На основі даного API підсвічення синтаксису додано до:
- DAQ:
- BlockCalc: Підсвічування синтаксису у опису атрибутів параметрів.
- JavaLikeCalc: Підсвічування синтаксису до компілятору мови JavaLikeCalc.JavaScript, а також до всіх текстових полів, які використовують цю мову всередині модуля.
- ModBus, OPC_UA: Підсвічування синтаксису переліку атрибутів.
- Protocol.UserProtocol: Підсвічування синтаксису до текстів процедур протоколу.
- UI:
- QTCfg: Відображення багаторівневого підсвічування синтаксису, яке передається з моделі даних у вигляді правил регулярних виразів.
- VCAEngine: Підсвічування синтаксису до текстових атрибутів примітивів віджету, для яких це потрібно.
- Vision: Підсвічування синтаксису до текстових атрибутів примітивів віджету, а також текстам програм віджетів.
- WebUser: Підсвічування синтаксису процедур формування Web-інтерфейсу.
- DAQ:
- 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-блоків з метою виключити проблеми та затримки при відкритті зовнішніх вікон різноманітними браузерами.
- Використано груповий запит вмісту сторінок для значного підвищення продуктивності на повільних та високолатентних каналах.
- Додано інформацію у строку статусу про поточного користувача та можливість його зміни.
- Виконано адаптацію для роботи у повну ширину екрану.
5 Формування, розширення та стабілізація 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() для простого підключення до віджету як за абсолютним, так і відносним шляхом.
6 Загальносистемні розширення
До загальносистемного 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". Підтримка старих адрес збережено.
- Додано можливість використання регулярних виразів при пошуку за категорією та за посередництвом "/match/"
7 Публікація рішень OpenSCADA
В процесі здійснення робіт над цим релізом на різних конференціях та виставках були представлені рішення на основі проекту OpenSCADA:
- FOSS Sea 2011 — на конференції було зачитано доповідь про рішення на основі OpenSCADA, а в холі було організовано міні-стенд з рішеннями на основі OpenSCADA вживу.
- Міжнародний інноваційний форум 2011 — у складі стенду OOO НІП "ДІЯ" та Дніпродзержинського Державного Університету (ДДТУ) було представлено обладнання та матеріали з рішеннями на основі OpenSCADA.
- 10 Всеукраїнська Конференція розробників та користувачів вільного ПЗ — на конференції було зачитано доповідь про рішення на основі OpenSCADA, а в холі було організовано міні-стенд з рішеннями на основі OpenSCADA вживу.
- Дні розробників QT Qt Developer Days 2011 у Мюнхені та Сан-Франциско: у межах цих заходів в Qt Demo Pavilion відбулася демонстрація OpenSCADA за посередництвом представлення рішень Динамічна модель парового котла №9 ДМК на ПК та Динамічна модель реального часу Анастасіївської ГЛКС на Nokia N9.
8 Заключення
В процесі створення нового стабільного релізу 0.8.0, промислового призначення з тривалим строком підтримки, виконано велику роботу по стабілізації, розширенню функціональних можливостей, а також адаптації для роботи на альтернативних апаратних платформах (на архітектурі ARM). Все це в цілому дозволило розширити межі повноцінного застосування OpenSCADA на всі рівні систем автоматизації, від ПЛК, серверів SCADA-систем та до розподілених систем візуалізації.
У появі нової промислової версії системи OpenSCADA 0.8.0 активну участь прийняли:
- Роман Савоченко: Основний об'єм робіт по розробці, документування та тестуванню.
- Максим Лисенко: Супровід та стабілізація примітиву "Елементарна фігура" середовища візуалізації та керування (СВК), також переклад і оновлення більшої частини документації на Англійську мову.
- Ірина Попкова: Переклад і оновлення інтерфейсу системи OpenSCADA та її модулів на Німецьку мову.
- Алмаз Каримов: Розширення модуля підтримки протоколу DCON та активне тестування.
- Олексій Попков: Збірка пакетів для Fedora-based дистрибутивів.
- Багато інших користувачів системи OpenSCADA, за посередництвом всебічного тестування.
Наступні зусилля розробки будуть направлені на реалізацію програмної багатоплатформності, а також розширення функціональності шляхом створення модулів підтримки нових інтерфейсів, в том числі і за схемою авансованої розробки, з розподілом витрат реалізації на продані екземпляри (для модулів які взаємодіють з комерційними системами та інтерфейсами). Для реалізації централізованого розповсюдження рішень, послуг та розширень на основі OpenSCADA планується створення магазину, у межах головного інформаційного ресурсу OpenSCADA (http://oscada.org).
9 Оновлення
9.1 [06.06.2018] ДВАДЦЯТЕ (20) останнє оновлення
Це оновлення є останнім оновленням релізу 0.8 LTS, яке передбачається переважно як перехідне для оновлення до 0.9 LTS. Виправлено біля 30 помилок та додано деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.
API
!!!!:Зміни:
- SYS.*: Уніфіковано допомогу з командного рядку у функції optDescr() для отримання ієрархічної допомоги у рядку та подальшого її друку у одному місці функції TSYS::load_().
- DAQ.JavaLikeCalc: Функцію String.toInt() користувацького API встановлено у основу "10", по замовченню.
- UI.{VCAEngine,Vision}: Визначення "quittance" перейменовано у "quietance", від слова "тихо (quiet)", що є логічним для порушень, та користувацьке API залишено сумісним. Перенесено реалізацію видів "Завантаження", "Збереження", "Меню" виду "Кнопка" примітиву "FormEl" та атрибут "checkable" перейменовано у "mode"!
- TFunction,TPrmTmpl,DAQ.JavaLikeCalc.FLib: Деякі властивості інтерфейсу керування (ID, NAME, DESCR) встановлено пов'язаними з конфігурацією БД.
Доповнення:
- SYS:
- Додано функцію cmdOptPresent() та використано виключно для перевірки наявності параметру.
- DB.DBF,Archive.FSArch,UI.Vision: Додано загальний контроль за правами створюваних OpenSCADA файлів, параметром командного рядка "--permCrtFiles" та функцією TSYS::permCrtFiles().
- TRegExp: Перенесено реалізацію ознаки UTF8, по замовченню не встановлено. Додано атрибут "err" до результату масиву запиту match().
- Додано віртуальні функції TSubSYS::optDescr() та TModule::optDescr() для уніфікації допомоги щодо командного рядку.
- Загальні мітки доповнено категоріями повідомлень у функції TMess::labMessCat().
- DAQ.JavaLikeCalc: API користувача розширено функціями приведення {Boolean,Integer,Real}.{toReal,toInt}().
SYS
- *: Більшість оригінальних повідомлень відревізовано та покращено. Відревізовано всі повідомлення допомоги щодо командного рядку бібліотеки ядра та модулів OpenSCADA, на предмет оригінальних текстів та їх перекладу на Українську, Російську та Німецьку. "Бібліотека шаблону" перейменовано у "Бібліотеки шаблону", "Архіви" перейменовано у "Архіви-Історія", "ID" перейменовано у "Ідентифікатор".
- TCntrNode: У якості таймауту вимкнення/від'єднання вузлів використано стандартний STD_WAIT_TM(10) та при виході він встановлюється у STD_WAIT_TM*5, замість DEF_TIMEOUT.
- Додано новий аргумент командного рядку --consoleCharSet для контролю кодування консолі, у повідомленнях та допомозі.
- Додано аргумент командного рядку --modDir, як копія параметру конфігураційного файлу "ModDir".
БД
- {SQLite,MySQL,PostgreSQL,FireBird}: Додано створення стовпчика перекладу під час виправлення таблиці, для вже частково перекладених таблиць у не багатомовному режимі.
DAQ
- {TPrmTempl,JavaLikeCalc}: Завершено та перевірено реалізацію класу TPrmTempl::Impl, уніфікації використання DAQ шаблонів.
- SNMP: Розширено контролем помилок підключень на рівні параметру.
Архіви-Історія
- Копіювання об'єктів архіваторів убезпечино від копіювання поля "ADDR", убезпечино від запуску та виправлено копіювання додаткових властивостей.
- Виправлено завантаження архіваторів за відсутності деяких модулів архівів.
- FSArch: Доступ до кешу переміщено під критичну секцію, для запобігання падінням на високому навантажені. Жорстко убезпечино від зміни конфігураційного поля "ADDR" при виконання, для повідомлень та значень. Додано процедуру перевірки дублювань конфігураційного поля "ADDR". Файли архівів перейменовано у формат "%F %H.%M.%S" для можливості їх створення на FAT.
- DBArch: Виправлено щодо запиту одного значення у архіву значень.
Транспорти
- Serial: Додано вимірювання максимального часу символу вихідних транспортів у режимі запиту та налагодження.
Інтерфейс Користувача
- {VCAEngine,Vision,WebVision}: Примітив "Text" доповнено атрибутом "inHtml" та підтримкою відображення HTML.
- FIX:{QTStarter,QTCfg,Vision}:
- Видалення більшості Qt об'єктів переведено на використання deleteLater(), для безпечного видалення під викликом processEvents().
- Розмір іконок та шрифтів зроблені адаптованими до реального розміру основного-системного шрифту, за допомогою нової функції icoSize(), для: ініціюючого розміру основного вікна, шрифту заголовку, іконок панелей інструментів, іконок дерева навігації, вигляду дерева навігації, ширини роздільника.
- Змінено формування меню QTStarter з метою незалежного створення дій, через проблеми формування рідної панелі меню у Unity.
- Видалено примусове перемикання стилю QPlastiqueStyle() (Qt4) або QCommonStyle() (Qt5) завдяки реалізації контролю за виглядом та відчуттям у OpenSCADA.
- {VCAEngine,Vision}: Здійснено деякі заходи, що передбачають повноцінну "гарячу" розробку для вже виконуваних та віддалених сеансів:
- Проекти розширено обліком використальних сеансів для "гарячого" ввімкнення сторінок у сеансах.
- FIX: Убезпечино атрибут "value" примітиву "FormEl" від встановлення ознаки модифікації при зміні типу.
- FIX: Відновлено та виправлено гаряче стеження, у сеансах, за змінами у зв'язках віджетів.
- Реалізовано гаряче оновлення процедур віджетів у режимі виконання.
- ElFigure: Деякі властивості загальної частини режиму розробки перенесено до приватної частини.
- QTStarter: Розширено власним контролем за виглядом та відчуттями та підтримкою їх профілями з таблиці "LookFeel" конфігураційного файлу модуля, для: Загальний шрифт, Стиль віджетів, Палітра, Стиль CSS.
- QTCfg:
- Виправлено, переважно при закритті, опрацювання запитів у окремих потоках та щодо падінь при відкритому діалозі попередження-помилки.
- Формування WhatsThis, ToolTip та StatusTip елементу, уніфіковано переносом у одну функцію setHelp().
- Механізм підлаштування вертикально-масштабованих елементів зроблено: скидуваним щодо попереднього вписування, швидшим та більш точним.
- VCAEngine:
- Убезпечино від збереження ще не увімкнених елементів за "enableByNeed".
- Покращено архівний режим примітиву "Документ", встановленням специфічних атрибутів у режим Attr::NotStored. Убезпечино від попереджень про відсутність атрибутів при перемиканні примітиву "Документ" у динамічний режим.
- Vision:
- Масштабування головного вікна режиму виконання зроблено абсолютним, від оригінального розміру вікна.
- Віджет InputDlg розширено контрольованим збереженням та відновленням розміру вікна, для дуже розширюваних вікон, наприклад — повноекранний текстовий редактор.
- WebVision: Реалізовано режими: "Меню", "Завантаження" та "Збереження" виду "Кнопка" примітиву "FormEl".
9.2 [29.12.2017] ДЕВ'ЯТНАДЦЯТЕ (19) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 30 помилок та додає деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.
API
!!!!:Зміни:
- SYS.*: Прапорець TCfg::TransltText перенесено до TFld::TransltText а також використано замість TFld::NoStrTransl, який видалено.
- Транспорти: Замок загального доступу до вихідного транспорту змінено на мютекс та аргумент "noRes" видалено з функції messIO() для попередження неочікуваних виходів з критичної секції запиту. Об'єкт блокування ресурсу nRes та його функція nodeRes() видалено з об'єкту вхідного транспорту.
Доповнення:
- SYS:
- strEncode() розширено режимом "ToLower" для перетворення у нижній регістр.
- Параметри командного рядку доповнено предзавантаженням та прямим доступом-модифікацією за допомогою нової функції cmdOpt(), повне переключення з getCmdOpt() на cmdOpt().
- Бінарне декодування у strDecode() розширено значенням аргументу "<text>" для формування текстової частини праворуч.
- XMLNodeObj: Доповнено функцією користувацького API getElementsBy() — отримання переліку вузлів XML за ім'ям тегу або значенням атрибуту.
- TArrayObj: arSet() адаптовано для додання у кінець масиву за негативним індексом.
- DAQ.{AMRDevs,ICP_DAS},Special.FLibSYS: Власна імплементація функції atof() та strtod() у функції TSYS::str2real() та її короткому посиланні s2r() та для розуміння обох символів поділу дробової частини реального числа "." та ",". DAQ.OPC_UA.libOPC_UA: Функцію TSYS::str2real() розташовано та використано у окремій бібліотеці. Наразі вимкнено!
- Транспорти: Додано загальний протокол ВВ за вхідними та вихідними транспортами, до ядра та всіх транспортних модулів.
- UI.VCAEngine: Доповнено функціями користувача у просторі сеансу: reqTm(), reqUser(), userActTm().
SYS
- XMLNode
- Виправлено щодо надлишкового резервування розміру рядка у кодуванні серіалізації, що призводило до значної деградації її продуктивності, особливо на великих деревах. Це має значно підвищити продуктивність мережевої взаємодії за XML.
- Уніфіковано та виправлено серіалізацію у XHTML щодо: запобігання самозавершенню тегів для "script", "div; запобігання кодуванню символів "'" та '"' у тексті (також для XML); кодування UTF8 символу 0xA0 у " ".
- TRegExp виправлено у функції match() щодо запобігання зависанню та падінню.
- Версію бібліотеки ядра встановлено у 2:6:0. Модульну версію підсистеми "Транспорти" піднято до 10.
- TConfig: Запобігання рекурсії входу у cfgChange() за прапорцем mInCfgCh.
- XMLNodeObj,XMLNode: Видалення дочірніх вузлів здійснено з кінця, для збільшення швидкості цієї операції.
БД
- Додано конфігурабельне обмеження відображення вмісту таблиць, типово це 100 рядків.
- {SQLite,MySQL,PostgreSQL,FireBird}: Додано обмеження предзавантаження fieldSeek() у 100 записів для запобігання тривалому безперервному підвисанню.
Збір даних
- {DCON,ModBus,Siemens}: Об'єкти мютексу "enRes" та "reqRes" встановлено у рекурсивні, від Олексія Бондарчука.
- SoundCard: Значно переглянуто та виправлено для роботи з реальним та віртуальним, на кшталт PulseAudio, обладнанням та перевірено на частотах вибірки до 192000.
Архіви
- Архіватори значень та повідомлень доповнено вимірюванням максимального часу опрацювання.
- FSArch: Попереджено багаторазове пакування-розпакування файлів. Додано перевірку та очищення від нульових архівних файлів. Буфери архівації повідомлень та інформаційних файлів значень зроблено безпечнішими щодо можливого читання випадкових даних.
- DBArch: Доповнено пропуском помилкових архівів значень.
Транспорти
- {SSL,Sockets}.out: Функціональний замок ресурсів транспортів поєднано з reqRes().
- Вхідні транспорти доповнено вимірюванням поточного та максимального часу запиту до протоколу, у режимі "Налагодження (0)". Вихідні транспорти доповнено вимірюванням часу відгуку, у режимі "Налагодження (0)".
Протоколи
- HTTP: Розширено переліком користувачів, дозволених до автентифікації. mNoFull перейменовано у mNotFull.
Інтерфейс Користувача
- {QTCfg,Vision}: Додано збереження та відновлення розміру головного вікна та головних діалогів (розробка Vision) та властивостей розділювачів.
- QTCfg: Виправлено вертикально-масштабовані віджети "Таблиці" та "Переліки" шляхом їх розташування у кінець стеку віджетів. Попереджено високе навантаження на очікувані відповіді діалогу прогресу.
- VCAEngine: Обробка різних віджетів з великим періодом (у головній задачі сеансу) адаптовано до виконання у різних фазах чим завантажуючи основне завдання більш рівномірно та загалом менше. Додано контроль дій користувача за часом дії.
- QTStarter: Розширено закриттям (вікон) та запуском у системному треї. Значно переглянуто на предмет повного створення інтерфейсу у циклі повідомлень Qt exec() та функції WinControl перенесено до StApp, нащадку QApplication. Власне меню QTStarter, з переліком модулів Qt, уніфіковано щодо статичного сховища дій для розширення меню та панелей інструментів вікон Qt модулів та іконки системного трею, поміщено також до властивості "menuStarterAddr" головного об'єкту додатку.
- Vision:
- Додано підлаштовування розміру вікна під розмір головної сторінки після повернення з максимізації або повного екрану та запуску у оригінальному розмірі.
- Створення меню режиму виконання змінено у повний режим, тобто повне формування за потреби та повне очищення за її відсутності; для запобігання відображення меню у неактивному режимі у деяких оточеннях на кшталт Maemo та Unity.
- Додано контроль за користувачем режиму виконання за допомогою специфічного до візуалізатору атрибуту "userSetVis" головної сторінки, розширення віджета статусу користувача та діалогу обрання.
Special
- FLibSYS: VArch::set() розширено записом одного значення до архіватору архіву.
9.3 [02.07.2017] ВІСІМНАДЦЯТЕ (18) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 30 помилок та додає деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.
API
!!!!:Зміни:
- SYS:
- XMLNode: Функції save() та saveNode() встановлено як постійні.
- XMLNodeObj: Функцію API користувача text() розширено аргументом "full" для комбінування тексту дочірніх вузлів.
- ModSchedule: Функції ScanDir() та CheckFile() перейменовано відповідно у dirScan() та fileCheck().
- Transport.out: Функцію API користувача messIO() розширено для повернення всюди строкового типу.
- Special.FLibSYS: Функцію API користувача dbReqSQL() приведено до властивостей функції SYS.BD["TypeDB"]["DB"].SQLReq().
Доповнення:
- SYS: Функцію TMess::getUTF8() додано та використано для визначення символів UTF-8 у XMLNode::encode(). TCntrNode: Розширено функцією API користувача "messSys".
- Archive.Value: Функції API користувача доповнені setVal().
SYS
- Виправлено багато оригінальних повідомлень.
- ModSchedule: Закриття модулів при виході змінено у первинне закриття модулів, а вже потім відключення бібліотек. Процедуру сканування модулів розширено шаблоном ім'я модуля у кінці шляху.
- Значні зміни у складальній системі.
- XMLNode: Серіалізацію було розширено правильною перевіркою UTF-8 символів та опрацюванням " " у функції encode() та парсері, для сутності " ".
- Protocol.HTTP,UI.{WebUser,WebVision}: Додано підтримку ACL для контролю за доступом та видимістю елементів індексаторів Web ресурсів.
- Додано опцію командного рядка "lang".
Збір даних
- ModBus: Виправлено опрацювання дублювальних атрибутів стандартних параметрів.
- DAQGate: Виправлено запити до іншої станції після видалення попередньої. Розширено на предмет можливості запису у атрибути "NAME" та "DESCR".
Архів
- Виправлено на предмет визначення потрібного архіватору за його періодичністю, дозволяє коректно обирати архіватор за періодичністю більш ніж у одну хвилину при побудові графіків.
- FSArch:
- Виправлено функцію перевірки архіваторів на предмет коректного опрацювання обмеження ємності архівації значень шляхом видалення його архівованих файлів за максимальною кількістю.
- Виправлено читання дуже довгих повідомлень та попереджено читання помилкових повідомлень взагалі.
- Розширено для збереження INFO файлів до стандартного файлу БД SQLite у теці цього архіватору.
Транспорт
- SSL:
- Виправлено звільнення, у клієнтській частині, які призводили до падінь та блокувань, на предмет відсутності SSL_free() та звільнення змінних "ctx", "ssl", "conn" при повторному запуску, у вихідній частині. Широко протестовано на браузерах Chrome, Firefox; на предмет звільнення описувачів файлів та у Valgrind.
- Метод "SSLv2" було остаточно видалено через його небезпечність та повне видалення із OpenSSL 1.1.
- Функції SSLv3_server_method() та SSLv3_client_method() встановлено для вимкнення за визначенням OPENSSL_NO_SSL3.
Протокол
- OPC_UA{*.libOPC_UA}: До об'єкту серверу додано ресурс "mtxData", який використано для доступу до контейнеру каналів безпеки.
Інтерфейс Користувача
- {VCAEngine,Vision,WebVision}: Додано атрибут "mult" до вигляду "Перелік" примітиву "FormEl" для можливості обрання декількох елементів.
- QTStarter: Повністю оновлено із Робочої гілки.
- QTCfg: Завершено реалізацію правильного влаштування масштабованих вертикально елементів: тексти, таблиці та переліки. Виправлено опрацювання sizeHint() та minimumSizeHint() для елементів "Текст" та "Перелік".
- VCAEngine: До механізму динамічного зв'язування додано перевірку зв'язків на активність.
- Vision:
- Додано очищення зображень примітиву "Медіа" за встановленням порожнього рядку.
- До кодування у сховища за TSYS::base64 встановлено роздільник "\n".
- Виправлено розмір віджетів, які відкриваються до редагування, на великих екранах, це підстроювання зроблено умовним від відсутності відкритого активного та максимізованого віджету через проблеми тут Qt.
- FormEl.Table: Виправлено на предмет властивостей стовпчиків. ** Розширено властивість "width" приховуванням цього стовпчика при значені 0. Використано масштаб за X у кінцевій ширині стовпчика.
- WebCfgD:
- Дещо покращено опрацювання елементу "Таблиця" для великого вмісту та виправлено редагування ключових елементів.
- Підстроювання до наявного простору масштабованих вертикально елементів: тексти, таблиці, переліки.
- Бібліотеку GD було замінено фільтрами CSS та зроблено опційною, за --enable-LibGD.
- Дещо покращено формування дерева навігації та діалогів, падаючою тінню та прозорим фоном для попередження доступу до загального простору.
- Розширено копіювання елементів копіюванням їх до свого кореню та через себе.
- Загальні вдосконалення.
- WebVision:
- Виправлено ширину вікна контекстного меню.
- Виправлено поводження примітиву "Медіа" у не режиму "Вписувати" для попередження проблем масштабування шляхом повного видалення тегу <img>. До зображень цього примітиву додано вертикальне вирівнювання.
- Виправлено та покращено формування діалогів, малих вбудованих вікон, шрифт заголовку встановлено у 12pt.
- Подавлено системне контекстне меню для активних віджетів.
- Виправлено опрацювання границь та прозорого фону. Опрацювання фону примітивів узагальнено та здійснюється після опрацювання самих примітивів та додано саме опрацювання прозорості-непрозорості фону у окремому блоці (div), який створюється за рівнем непрозорості.
- Примітив "Текст": опрацювання пробілу встановлено у "white-space: pre-wrap", додано підтримку властивості "wordWrap".
- Вигляд "Кнопка" примітиву "FormEl": виправлено на предмет перенесення слів на браузері Chrome, переключено на використання фільтрів у відображені неактивних зображень.
- Реалізовано вигляди "Панель прокрутки", "Панель прогортання", "Таблиця", "Дерево". Вигляд "Панель прокрутки" зараз такий як "Панель прокрутки".
- Вигляд "Рядок" примітиву "FormEl" розширено календарем для варіантів за датою.
- Додано підтримку специфічних до візуалізатору атрибутів через їх активацію.
- Додано підстроювання розміру головної сторінки до наявного простору вікна браузеру, тільки у бік збільшення та із контролем пропорційності.
- XHTML частину сторінки винесено до окремого файлу подібно до частини JavaScript. Все основне у CSS правилах перенесено до XHTML файлу.
- Загальні вдосконалення.
9.4 [12.02.2017] СІМНАДЦЯТЕ (17) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 60 помилок та додає деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.
API
!!!!:Зміни:
- SYS: Багато функцій встановлено як константи, після доповнення деяких об'єктів копіювальними конструкторами.
- TConfig::cfgChange() доповнено аргументом попереднього значення конфігурації "pc".
- TVariant: У строковому типу розширено переважним використанням STL-рядку, окрім полів які позначені як "stdStringOmit", переважно для TCfg як константа.
- Функції load() та load_() вузла розширено аргументом TConfig *cfg для можливості прямого завантаження після сканувального запиту. Видалено аргумент "force" функції вузла load() та замінено його попереднім викликом modifG().
- Об'єкт захоплення ресурсу ЧитанняЗапису "Res" перейменовано у "ResRW".
- Функцію TModule::modFunc(), отримання посилання на експортовані функції, розширено викликом без виключень та результатом.
- Функцію strNoSpace() розширено контролем опрацьовуваних символів та перейменовано у strTrim(). Опрацьовувані по замовченню символи встановлено у " \n\t\r".
- time2str() та tm2s() астрономічного часу перейменовано у atime2str() та atm2s() та час початку, відповідних відносних функцій, було змінено з мікросекунд на секунди.
- taskSleep(), у аргументі "cron", замінено на чисте (рядок) представлення для можливості отримання початкової точки до виявленої зміни астрономічного годинника та відповідної корекції цілі крону, а також виміру використаного часу для taskUtilizTm().
- TVariant::propClear() розширено на предмет очищення однієї вказаної властивості.
- taskUtilizTm() розширено аргументом "max" для отримання цього максимального значення, та саме значення змінено у секунди.
- Додано функцію taskDescr() для отримання посилання на структуру опису поточного завдання.
- DAQ: Варіант "Постійна", конфігураційного поля шаблону, перейменовано у "Змінна" та, відповідно, "Публічна константа" у "Константа".
- Archive: Архіватор значень розширено підтримкою режиму акумуляції, переважно для Archive.DBArch. Атрибут "tm", результуючого масиву функції API "getMess", змінено у тип "int".
- Protocol: API вхідної частини приведено до вигляду робочої (Work) гілки на предмет додання функцій srcAddr(), setSrcAddr() та зміни mess().
Доповнення:
- SYS: Додано системну опцію "clockRT" для обрання годиннику планування задач CLOCK_REALTIME інакше це CLOCK_MONOTONIC (по замовченню наразі).
- Додано об'єкт керування умовними змінними "CondVar".
- До об'єкту TCntrNode додано функцію mess_sys(), з метою створення системних повідомлень із шляхом цього вузла у категорії та розташуванням у початку цього повідомлення, за допомогою нової функції nodeNameSYSM().
- До об'єкту TCntrNode додано функцію err_sys(), з метою створення об'єкту помилки із шляхом та розташуванням вузла.
- Додано функціональні шаблони fmin() та fmax().
- Для функції strTrim() створено короткий виклик sTrm() та його всюди використано.
- TSecurity: Додано функції користувацького API User::groups() та Group::user().
- Додано функцію користувацького API TVal::isCfg().
- DB: Для функції користувацького API SQLReq() додано спрямування помилок від виключень до атрибуту "err" результуючого масиву.
- DAQ.JavaLikeCalc: Перелік функцій рядку розширено trim().
- Transport: Функцію messIO() користувацького API розширено розміром вхідного буферу.
- Transport.Serial: Додано функцію sendbreak() до користувацького API вихідного транспорту.
- UI: Розширено функцією mimeGet() для визначення типу "mime" за вихідною інформацією, розширенням файлу та його вмістом.
- Special.FLibSYS: Доповнено функцією вирахування "Message Digest 5 (MD5)" із OpenSSL та функцією floatExtract() для вилучення експоненти та мантиси із значення реального типу.
SYS
- TCntrNode: Концепцію керування ресурсами замінено на стабілізовану у робочій (Work) гілці.
- Виправлено багато помилок та попереджень із звіту PVS-Studio, завдяки Максиму Кочеткову.
- Всі частини адаптовано до нового аргументу "cfg" функцій завантаження, предзавантаження dataSeek() та прямого завантаження після сканувального запиту.
- Нові функції mess_sys(), err_sys() об'єкту TCntrNode використано всюди у ядрі OpenSCADA та модулях.
- Модульну версію підсистем "БД", "DAQ", "Архів", "Транспорт" піднято до 9 та для підсистем "Protocol", "UI" піднято до 8. Версію бібліотеки встановлено у 2:5:0.
- Функції LibZ переписано для деякої уніфікації та оптимізації використання пам'яті.
- Адаптовано та дещо виправлено для збірки GCC v6, із C++11 по замовченню.
- Мінімальний рівень повідомлень для всіх конфігурацій встановлено у "Інформація(1)".
БД
- {.,FireBird,MySQL,PostgreSQL,SQLite}: До функції fieldSeek() та dataSeek() додано режим предзавантаження сканування з метою значного збільшення продуктивності тут.
- *: getVal() розширено та уніфіковано.
- {SQLite,MySQL,PostgreSQL,FireBird}: Розширено на предмет використання NULL для збереження/представлення загального EVAL.
- PostgreSQL: Об'єкт БД розширено статистикою контролю активності та затримок.
Збір даних
- Стан виконання завдань розширено максимальним часом використання.
- DAQGate: Адаптовано до зберігання призначення параметрів за станціями, з метою забезпечити їх раннє відновлення без потреби у синхронізації. Додано опціональний контроль за автоматичним видаленням параметрів та атрибутів.
- LogicLev: Встановлення значення атрибуту "f_frq" змінено на реальну частоту, отриману із структури опису цього завдання.
- OPC_UA.libOPC_UA: До серверної частини додано підтримку шматків. Шматки перевірено для вхідних запитів на небезпечних та безпечних підключеннях. Виправлено розташування у черзі та подальшу обробку запитів публікації, та повідомлень в цілому, для безпечних підключень та для підтвердження небезпечних після прямого опрацювання.
- JavaLikeCalc: Додано підтримку динамічного зв'язування із зовнішніми функціями шляхом: function {nm} = "{addr}"; {nm}();. Виклик об'єктних функцій оптимізовано на предмет прямої передачі ім'я у команді виклику. Розширено оператором "delete" для звільнення об'єктів та їх властивостей.
- System: Розширено джерелом даних "ФС". Автоматичне створення джерел розширено режимами "Швидкі" та "Повільні".
Архів
- Попереджено зайві записи прямо до архіватору у TVArchive::setVals(). getMess() виправлено на предмет подвійного виклику функції модуля get(), через використання fmin().
- {.,FSArch}: Додано інформацію останнього читання буферу та використання цієї властивості загалом виправлено. Попереджено виключення у archivatorAttach() та зупинку об'єкту архіватору щоб забезпечити можливість раннього запуску архіву.
- DBArch: Частину архівації повідомлень виправлено у "needMeta" та додано відмову у доступі до архіватору до вдалого отримання "meta". Читання архіву значень зроблено оптимальним за часом, до десятка разів, через використання ключа "MARK" та сканувального запиту. Частину архівації значень розширено групуванням архівів у одній таблиці, переважно для збільшення продуктивності.
Транспорт
- До діалогу ручного запиту вихідного транспорту додано розмір вхідного буферу.
- Serial: Вихідний транспорт розширено перевіркою та використанням I2C. Контроль потоку доповнено режимом RTS перемикача (true/false) та фільтрацією луни.
- Sockets: Читання відповіді вихідного транспорту після FD_ISSET у "неправда" розширено шляхом читання SO_ERROR сокету та очікуванням переривання за будь якою помилкою сокету. Вихідний транспорт переключено на дві спроби перевірки SO_ERROR, на час читання відповіді, щоб дати деякий час на читання через часом тривале читання стану SO_ERROR.
- SSL: Розширено прямими методами: TLSv1.1, TLSv1.2, DTLSv1.
Протокол
- SelfSystem: Завантаження XML розширено використанням опції LD_NoTxtSpcRemEnBeg та дозволом пробілів на початку та кінці текстових елементів.
- HTTP: Значним чином уніфіковано у створені сервісних сторінок за допомогою однієї функції pgCreator(). Функцію pgCreator() первинно реалізовано як функцію API користувача модульного об'єкта HTTP та дозволено для використання у WEB-підмодулях для створення власних сервісних сторінок із загальним стилем. Зовнішні виклики до WEB підмодулів розширено функціями HTTP_GET(), HTTP_POST() з аргументом TProtocolIn *iprt, та старі виклики HttpGet(), HttpPost() також продовжені перевірятися та підтримуватися. Основний діалог вибору розширено зображеннями та контекстною допомогою до наявних WWW-модулів. Шаблон головної сторінки відокремлено від основного шаблону з метою надання повністю специфічної користувачу головних сторінок.
Інтерфейс Користувача
- {WebUser,WebVision}: Розширено використанням уніфікованого сервісного інтерфейсу із Protocol.HTTP за допомогою pgCreator() та нових функцій HTTP_GET, HTTP_POST виклику HTTP.
- QTStarter: Вимкнено менеджер сеансів X від перезапуску закритих при виході програм. Розширено параметром командного рядка "--noX11", щоб дозволити виключення Qt.
- QTCfg: Попереджено небезпечне оновлення відсутньої сторінки у прийняті змін на віджетах сторінки що заміщується, "Діалог прийняття для попередження втрати змін". Використання QMutex та QWaitCondition замінено на ResMtx та CondVar, переважно для попередження зависань при зміні часу системи.
- VCAEngine: Блокування ресурсів FuncM встановлено у рекурсивне для попередження "мертвих" блокувань. Час обчислення сеансу розширено максимальним значенням. Адаптовано до використання TUIS::mimeGet().
- Vision: Дозволено оголошення специфічних для візуалізатору атрибутів примітивів та атрибут "sclWin" додано та використано для примітиву "Діаграма" з метою масштабування вмісту трендів, шляхом вимальовування вікна мишею. Для примітиву "Діаграма", у режимі "Тренд", додано ковзання мишею за шкалою часу. ToolTip та StatusTip віджету встановлено для відображення на неповністю прозорих частинах віджету.
- WebVision: Адаптовано до асинхронних викликів для всіх регулярних оновлень за допомогою servGet() та також makeEl() адаптовано до цього. Виправлено відображення SVG зображень шляхом коректного опрацювання "mime" у UI.VCAEngine та використання TUIS::mimeGet(). Вигляд "Кнопка" примітиву "FormEl": виправлено опрацювання наступного рядка, виправлено на предмет коректного відображення тексту та зображення. Для примітиву "Текст" встановлено "line-height" з метою попередження верхнього відступу шрифту та у його представлені для повернутих текстів використано CSS властивість "transform: rotate({X}deg)". Опрацювання примітиву "Media" дещо виправлено на предмет переключення "fit" та зміни масштабу контейнеру. Поведінку шрифту розширено підтримкою декорації тексту "underline" та "line-through".
- WebUser: Семантику функції сторінки розширено двома об'єктними аргументами "Цей об'єкт" та "Об'єкт протоколу".
- WebCfgD: Створено новий дизайн. Адаптація до функцій HTTP_GET, HTTP_POST викликів HTTP та переведення всього на загальний створювач сторінок HTTP::pgCreator().
9.5 [28.06.2016] ШІСТНАДЦЯТЕ (16) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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:
- FIX: Здійснено дуже важливі виправлення на предмет адаптації до стабільної роботи із серверами СВК:
- Атрибути модуля 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().
- Віддалену аутентифікацію розширено на використання аутентифікації хоста, по замовченню, та самого підключення для її перевірки.
- Таймаут спроб відновлення підключення до віддаленої станції зроблено прогресивним, до вказаного значення, та відображення повідомлення помилки здійснюється після значення таймауту у три секунди.
- FIX: Здійснено дуже важливі виправлення на предмет адаптації до стабільної роботи із серверами СВК:
Спеціальне
- SystemTests: Тести БД розширено тестом сканування.
9.6 [12.01.2016] П'ЯТНАДЦЯТЕ (15) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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.
9.7 [07.11.2015] ЧОТИРНАДЦЯТЕ (14) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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 до обраного елементу.
Special
- FIX:FLibSYS: VArchObj::FFT(): Попереджено потенційне падіння. Розширено для перевірки на EVAL та заміну його на адаптивний останній аргумент <vlOnEVAL>. До результуючого масиву додано об'єктні атрибути "bufSize" та "bufEVAL" для можливості контролю якості даних.
9.8 [14.05.2015] ТРИНАДЦЯТЕ (13) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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/ua/poslugi/tekh-pidtrimka/.
- Основну стартову програму "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" дозволені для багаторазового відкриття сеансів у будь-яких умовах.
9.9 [27.12.2014] ДВАНАДЦЯТЕ (12) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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 до функції зворотного виклику.
Archive
- FIX:FSArch: Виправлено на предмет попередження дублікатів та помилкового підключення архівів для джерел даних які пізно додаються, а також додано обов'язкову перевірку перед доданням нових архівів. Вказівка на область даних для останнього значення індексу попереджено для типу Рядок.
Transport
- FIX:TTransportIn: Додано ранню зупинку у postDisable() для попередження падіння у деструкторі на звільнених даними об'єкту нащадку.
Protocol
- FIX: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 код значним чином очищено та Таблицю розширено спрощенням контролю та виходу із режиму редагування чарунок.
Special
- FIX:FLibSYS: Виправлено та розширено функцію strDec4Bin() аргументом роздільника зі значенням по замовченню " ", із метою відновлення зворотної сумісності.
9.10 [21.07.2014] ОДИНАДЦЯТЕ (11) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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}: Додано функцію опущення змін візуального елементу до його батька. Додано перевірку та попередження про неприйнятті зміни у конфігураційному діалозі елементів.
9.11 [09.05.2014] ДЕСЯТЕ (10) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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: Перевірка та зміна поточної сторінки на її перейменування. Механізм підлаштування рядків та стовпчиків таблиці встановлено схожим на вигляд "Table" примітиву 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().
9.12 [21.12.2013] ДЕВ'ЯТЕ (9) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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, функція також використана у 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: Додано перевірку на допустимість індексів з метою попередження падінь по виходу за діапазон.
- ElFig: Наступний етап очищення коду та рефакторингу, значним чином для moveItemTo().
9.13 [16.09.2013] ВОСЬМЕ (8) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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: Виправлено відображення поля "Дата+Час" у таблиці та інших місцях.
9.14 [11.07.2013] СЬОМЕ (7) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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{" у зв'язку з закінченням дії на першій постійній, незалежно від наступних операцій виразу. Умовна логічна команда '||' та '&&' виправлені для постійних.
9.15 [12.05.2013] ШОСТЕ (6) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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 з конвертацією із поділеного часу.
9.16 [02.02.2013] П'ЯТЕ (5) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 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" відкрито для редагування та збереження у конфігураційному файлі.
9.17 [13.11.2012] ЧЕТВЕРТЕ (4) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 15 помилок та додає деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.
- DAQ.SoundCard: Переписано збір для забезпечення реального часу, а також контролю частоти вибірки та втрати кадрів.
- Системні атрибути MessLev, LogTarget, Lang, Lang2CodeBase, WorkDB, Workdir, IcoDir, ModDir дозволено для читання та запису тільки у конфігураційний файл.
- Архів: Додано запит за потрібною періодичністю для забезпечення швидкого доступу до високоточних архівів значень, за посередництвом визначеного розміру кадру та періодичності.
9.18 [08.09.2012] ТРЕТЕ (3) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 30 помилок та додає деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.
- Виправлено нескінчену рекурсію при встановлені значення рядка у тип Об'єкт.
- Значні виправлення, а також падіння, архіву значень.
- XMLNodeObj: Збереження посилання на батька змінено на прямий показник для запобігання самоблокування, що дозволяє видаляти вузли та виключити виток пам'яті.
- Реальне не створення задачі із високопріоритетного потоку на деяких Linux ядрах, для прикладу 2.6.29, виправлено заміною очікування виклику sched_yield() на TSYS::sysSleep(1e-3).
- UI.VCAEngine: Додано завантаження/включення віджетів бібліотек та проектів за вимогою.
- Додано об'єкт TEValObj для подібної до скалярів обробки EVAL.
- Замінено небагатопотокову функцію обчислення хешу пароля crypt() на багатопотокову crypt_r().
- БД: Значні розширення, виправлення та оптимізація генерації документів за часом, а також реалізація нової концепції рушія рецептів.
9.19 [09.07.2012] ДРУГЕ (2) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 5 помилок та додає деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.
9.20 [09.06.2012] ПЕРШЕ (1) оновлення
Це оновлення релізу 0.8 LTS виправляє біля 30 помилок та додає деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.
10 Посилання
Протокол тестування промислового релізу 0.8.0 LTS.