Модуль | Ім'я | Версія | Ліцензія | Джерело | Мови | Платформи | Тип | Автор | Опис |
---|---|---|---|---|---|---|---|---|---|
FSArch | Архіватор на файлову систему | 3.8 | GPL2 | arh_FSArch.so | en,uk,ru,de | x86,x86_64,ARM | Архів | Роман Савоченко | Модуль архіватору. Надає функції архівування повідомлень та значень на файлову систему. |
Модуль призначено для архівування повідомлень та значень OpenSCADA на файлову систему.
Будь яка SCADA система надає можливість архівування зібраних даних, тобто формування історії змін (динаміки) процесів. Архіви умовно можна поділити на два типи: архіви повідомлень та архіви значень.
Особливістю архівів повідомлень є те, що архівуються так звані повідомлення. Характерною ознакою повідомлення є час його виникнення. Архіви повідомлень за звичай використовуються для архівування повідомлень програми, тобто ведення логів та протоколів. Залежно від джерела, повідомлення можуть класифікуватися за різними критеріями. Наприклад, це можуть бути: протоколи аварійних ситуацій, протоколи дій операторів, протоколи збоїв зв'язку та інше.
Особливістю архівів значень є їх періодичність, яка визначається проміжком часу між двома суміжними значеннями. Архіви значень застосовуються для архівування історії безперервних процесів. Оскільки процес безперервний то й архівувати його можна тільки шляхом введення поняття квантування часу опитування, оскільки інакше ми отримуємо архіви нескінченних розмірів через неперервність самої природи процесу. Крім того, практично ми можемо отримати значення з періодом, обмеженим самими джерелами даних. Наприклад, доволі якісні джерела даних у промисловості рідко дозволяють отримувати дані з частотою більшою за 1кГц. І це без врахування самих давачів, які мають ще менш якісні характеристики.
Для ведення архівів у OpenSCADA передбачено підсистему "Архіви-Історія". Ця підсистема, відповідно до типів архівів, складається із двох частин: архів повідомлень та архіви значень. Підсистема, загалом, є модульною, що дозволяє створювати архіви, основані на різній природі та способах зберігання даних. Цей модуль надає механізм архівування на файлову систему як для потоку повідомлень, так і для потоку значень.
Архіви повідомлень формуються архіваторами, яких може бути багато та з індивідуальними налаштуваннями, що дозволяє відокремлювати архівування різних класів повідомлень.
Архіватор повідомлень цього модуля дозволяє зберігати дані як у файлах формату мови XML, так і у форматі плаского тексту. Мова розмітки XML є стандартним форматом, який з легкістю розуміють багато сторонніх додатків. Однак, відкриття та розбір файлів у такому форматі вимагає значних ресурсів. З іншого боку, формат плаского тексту вимагає значно менше ресурсів, хоча і не є уніфікованим, а також вимагає знань його структури для стороннього розбору.
У будь якому разі, підтримуються обидва формати та користувач може обрати будь який з них відповідно до власних потреб.
Файли архівів іменуються архіваторами відповідно до дати першого повідомлення у архіві, наприклад, так: "2018-05-03 17.57.03.msg".
Файли архівів можуть обмежуватися за розміру та часом. Після перевищення ліміту створюється новий файл. Максимальна кількість файлів у теці архіватору також може бути обмежена. Після перевищення ліміту на кількість файлів, старі файли почнуть видалятися!
З метою оптимізації використання дискового простору архіватори підтримують упаковку старих архівів пакувальником gzip. Упаковка здійснюється після тривалого невикористання архіву.
При використанні архівів у форматі мови XML, відповідні файли завантажуються цілком! Для вивантаження невикористаних тривалий час архівів застосовується таймаут доступу до архіву, після перевищення якого архів вивантажується із пам'яті, а потім і пакується.
Модулем надаються додаткові параметри налаштування процесу архівування, рисунок 1.
До числа цих параметрів входять:
Для контролю за файлами архіватору Ви можете подивитися у вкладці "Файли", рисунок 2.
У таблиці нижче наведено синтаксис файлу архіву, побудованого на XML-мові:
Тег | Опис | Атрибути | Вміст |
---|---|---|---|
FSArch | Кореневий елемент. Ідентифікує файл, як той що належить цьому модулю. |
Version — версія файлу архіву; |
(m) |
m | Тег окремого повідомлення. |
tm — час створення повідомлення (hex - UTC в секундах від 01/01/1970); |
Текст повідомлення |
Архівний файл на основі плаского тексту складається із:
Текст повідомлення та категорія кодуються з метою виключення символів роздільників — символ пробілу.
Приклад вмісту архівного файлу у форматі мови XML:
<?xml version='1.0' encoding='UTF-8' ?> <FSArch Version="3.2.0" Begin="4a27dfbc" End="4a28c990"> <m tm="4a28c982" tmu="905587" lv="4" cat="/sub_DAQ/mod_DiamondBoards/">Помилка dscInit.</m> <m tm="4a28c990" tmu="595549" lv="4" cat="/sub_Transport/mod_Sockets/out_HDDTemp/">Помилка підключення до Internet сокету: Операція виконується на цей час!</m> </FSArch>
Приклад вмісту архівного файлу у форматі плаского тексту:
FSArch 3.2.0 UTF-8 4a27dfbb 4a28c991 4a28c98f:432619 1 / Запуск! 4a28c98f:432858 1 /sub_Transport/ Пуск%20підсистеми. 4a28c98f:455400 1 /sub_DAQ/mod_DAQGate/cntr_test/ Включення%20контролеру! 4a28c98f:457360 1 /sub_DAQ/mod_ModBus/cntr_testTCP/ Включення%20контролеру! 4a28c98f:460691 1 /sub_DAQ/mod_ModBus/cntr_testRTU/ Включення%20контролеру! 4a28c98f:464227 1 /sub_DAQ/mod_BlockCalc/cntr_Anast1to2node/ Включення%20контролеру! 4a28c98f:680767 1 /sub_DAQ/mod_BlockCalc/cntr_KM102cntr/ Включення%20контролеру! 4a28c98f:705683 1 /sub_DAQ/mod_BlockCalc/cntr_Anast1to2node_cntr/ Включення%20контролеру! 4a28c98f:753659 1 /sub_DAQ/mod_BlockCalc/cntr_KM101/ Включення%20контролеру! 4a28c98f:905073 1 /sub_DAQ/mod_BlockCalc/cntr_KM102/ Включення%20контролеру! 4a28c990:81670 1 /sub_DAQ/mod_BlockCalc/cntr_KM201/ Включення%20контролеру! 4a28c990:206208 1 /sub_DAQ/mod_BlockCalc/cntr_КМ202/ Включення%20контролеру! 4a28c990:333471 1 /sub_DAQ/mod_BlockCalc/cntr_KM301/ Включення%20контролеру! 4a28c990:457490 1 /sub_DAQ/mod_BlockCalc/cntr_KM302/ Включення%20контролеру! 4a28c990:591702 1 /sub_DAQ/mod_System/cntr_AutoDA/ Включення%20контролеру! 4a28c990:595549 4 /sub_Transport/mod_Sockets/out_HDDTemp/ Помилка%20підключення%20к%20Internet%20сокету:%20Операція%20виконується%20на%20цей%20час! 4a28c990:618617 1 /sub_DAQ/mod_SoundCard/cntr_test/ Включення%20контролеру! 4a28c990:621487 1 /sub_DAQ/mod_LogicLev/cntr_experiment/ Включення%20контролеру! 4a28c990:729323 1 /sub_DAQ/mod_JavaLikeCalc/cntr_testCalc/ Включення%20контролеру! 4a28c990:733434 1 /sub_DAQ/mod_Siemens/cntr_test/ Включення%20контролеру! 4a28c990:754368 1 /sub_DAQ/mod_DAQGate/cntr_test/ Включення%20контролеру! 4a28c990:786925 1 /sub_Archive/ Пуск%20підсистеми. 4a28c990:955967 1 /sub_DAQ/mod_BlockCalc/cntr_Anast1to2node/ Запуск%20контролера! 4a28c990:957251 1 /sub_DAQ/mod_BlockCalc/cntr_KM102cntr/ Запуск%20контролера! 4a28c990:957636 1 /sub_DAQ/mod_BlockCalc/cntr_Anast1to2node_cntr/ Запуск%20контролера! 4a28c990:958006 1 /sub_DAQ/mod_BlockCalc/cntr_KM101/ Запуск%20контролера! 4a28c990:958637 1 /sub_DAQ/mod_BlockCalc/cntr_KM102/ Запуск%20контролера! 4a28c990:959268 1 /sub_DAQ/mod_BlockCalc/cntr_KM201/ Запуск%20контролера! 4a28c990:959875 1 /sub_DAQ/mod_BlockCalc/cntr_КМ202/ Запуск%20контролера! 4a28c990:961261 1 /sub_DAQ/mod_BlockCalc/cntr_KM301/ Запуск%20контролера! 4a28c990:961919 1 /sub_DAQ/mod_BlockCalc/cntr_KM302/ Запуск%20контролера! 4a28c990:963775 1 /sub_DAQ/mod_System/cntr_AutoDA/ Запуск%20контролера! 4a28c990:966980 1 /sub_DAQ/mod_LogicLev/cntr_experiment/ Запуск%20контролера! 4a28c991:26791 1 /sub_Archive/ Пуск%20підсистеми. 4a28c991:28489 1 /sub_UI/mod_VCAEngine/ Старт%20модуля.
Архіви значень, по замовченню, формуються архіваторами значень індивідуально для кожного зареєстрованого архіву. Архіваторів може бути багато та з індивідуальними налаштуваннями, що дозволяє поділити архіви за різними параметрами, наприклад, за точністю та глибиною.
Архів значень є незалежним компонентом, який включає буфер, що обробляється архіваторами. Основним параметром архіву значень є джерело даних. У ролі джерела даних можуть виступати атрибути параметрів підсистеми "Збір даних", а також інші зовнішні джерела даних (пасивний режим). Іншими джерелами даних можуть бути: мережеві архіватори віддалених OpenSCADA станцій, середовище програмування OpenSCADA та інше. Не менш важливими параметрами архіву є параметри його буферу. Від параметрів буферу залежить можливість роботи архіваторів. Так, періодичність значень у буфері має бути не більше за періодичність самого швидкого архіватору, а розмір буферу не менш подвійного розміру для самого повільного архіватору. Інакше можливі втрати даних.
Загальну схему архівування значень наочно зображено на рисунку 3.
Файли архівів іменуються архіваторами відповідно до дати першого значення у архіві та ідентифікатору архіву, наприклад, так: "CPULoad_load 2018-04-03 19.13.52.val".
Файли архівів можуть обмежуватися за часом. Після перевищення ліміту створюється новий файл. Максимальна кількість файлів у теці архіватору також може обмежуватися. Після перевищення ліміту на кількість файлів старі файли почнуть видалятися!
З метою економії дискового простору архіватори підтримують пакування, додатково до послідовного пакування, старих архівів пакувальником gzip. Пакування здійснюється після тривалого невикористання архіву. Для забезпечення можливості швидкого підключення великих архівів до іншої станції можна для упакованих файлів включити використання інформаційного файлу, що попередить попереднє розпакування всіх файлів на іншій станції.
Модулем надаються додаткові параметри налаштування процесу архівування, рисунок 4.
До числа цих параметрів входять:
Для контролю за файлами архіватору Ви можете подивитися у вкладці "Файли", рисунок 5.
До реалізації архівування на файлову систему пред'являлися наступні вимоги:
Згідно до вищенаведених вимог, організовано архівування методом множинності файлів (для кожного джерела). Циклічність архіву реалізується на рівні файлів, тобто створюється новий файл, а самий старий видаляється. Для швидкого стиснення використовується метод притягнення до останнього однакового значення. Для цих цілей у файлі архіву передбачається бітова таблиця упаковки розміром один в один із кількістю збережених даних. Тобто, кожний біт відповідає одному значенню у архіві. Значення біту вказує на наявність значення. Для потоку однакових значень біти обнулено. У випадку із архівом рядків, таблиця є не бітовою а байтовою та містить довжину відповідного значення. У випадку надходження потоку однакових значень, довжина буде нульовою та читатися буде перше однакове значення. Оскільки таблиця байтова то архів може зберігати рядки довжиною не більше 255 символів. Таким чином, методики збереження можна розділити на методику даних фіксованого та нефіксованого розміру. Загальну структуру файлу архіву наведено на рисунку 6.
При створені нового файлу архіву формуються: заголовок (структура заголовку у таблиці 1), нульова бітова таблиця упаковки архіву та перше недостовірне значення (EVAL). Таким чином, виходить архів, ініційований недостовірними значеннями. Надалі, нові значення будуть вставлятися у область значень із коригуванням індексної таблиці упаковки. З цього слідує, що пасивні архіви будуть вироджуватися у файли розміром з заголовок та бітову таблицю.
Таблиця 1. Структура заголовку файлу архіву
Поле | Опис | Розмір байт(біт) |
---|---|---|
f_tp | Системне ім'я архіву ("OpenSCADA Val Arch.") | 20 |
archive | Ім'я архіву до якого належить файл. | 20 |
beg | Час початку архівних даних, у мікросекундах | 8 |
end | Час закінчення архівних даних, у мікросекундах | 8 |
period | Період архіву, у мікросекундах | 8 |
vtp | Тип значення у архіві: Логічний, Цілий (Цілий16, Цілий32, Цілий64), Реальний (Float, Double), Рядок | (3) |
hgrid | Ознака використання жорсткої сітки у буфері архіву | (1) |
hres | Ознака використання часу високої роздільної здатності (мікросекунди) у буфері архіву | (1) |
reserve | Резерв | 14 |
term | Символ закінчення заголовку архіву (0x55) | 1 |
Роз'яснення механізму послідовної упаковки наведено на рисунку 7. Як можна бачити з рисунку, ознака упаковки містить довжину (нефіксовані типи) або ознаку упаковки (фіксовані типи) окремо взятого значення. Це означає, що для отримання зміщення потрібного значення необхідно скласти довжини всіх попередніх дійсних значень. Здійснення цієї операції кожний раз та для кожного значення є дуже накладною операцією тому було запроваджено механізм кешування зміщень значень. Механізм кешує зміщення значень через визначену їх кількість, а також кешує зміщення останнього значення, до якого здійснювався доступ (окремо на читання та запис).
Зміну значень всередині існуючого архіву також передбачено. Однак, враховуючи необхідність виконання зсуву хвоста архіву, рекомендується виконувати цю операцію якомога рідше та якомога більшими блоками.
При проектуванні та реалізації цього модуля було закладено механізми підвищення ефективності процесу архівування.
Першим механізмом є блокове (покадрове або транзакційне) розташування даних у файл архіву значень. Такий механізм дозволяє досягти максимальної швидкості архівування, а відповідно і дозволяє одночасно архівувати більше потоків даних. Досвід практичного застосування показав, що система K8-3000 із звичайним IDE жорстким диском спроможна архівувати до 300000 потоків даних із періодом 1 секунда або, система K5-400 з IDE диском (2.5") спроможна архівувати до 100 параметрів з періодом 1 мілісекунда.
Другим механізмом є пакування як поточних значень, так і застарілих файлів архівів, для оптимізації використання дискового простору. Реалізовано два механізми пакування: механізм послідовної пакування (архіви значень) та механізм дотискання архівів стандартним пакувальником (gzip). Цей підхід дозволив досягти високої продуктивності у процесі архівування поточних даних з ефективним механізмом послідовного стиснення, та дотискання стандартним пакувальником застарілих архівів завершує загальну картину компактного зберігання великих масивів даних. Статистика практичного застосування в умовах реального зашумленого сигналу(найгірша ситуація) показала, що ступінь послідовної упаковки склала 10%, а ступінь повної упаковки склала 71%.
Modules/FSArch/uk - GFDL | November 2024 | OpenSCADA 1+r2996 |