Модулі/Архівація на ФС - OpenSCADAWiki

# Модулі/Архівація на ФС

This page is a translated version of the page Modules/FSArch and the translation is 100% complete.

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

Модуль | Ім'я | Версія | Ліцензія | Джерело | Мови | Платформи | Тип | Автор | Опис
--- | --- | --- | --- | --- | --- | --- | --- | --- | ---
FSArch | Архіватор на файлову систему | 3.8 | GPL2 | arh_FSArch.so | en,uk,ru,de | x86,x86_64,ARM | Архів | Роман Савоченко | Модуль архіватору. Надає функції архівування повідомлень та значень на файлову систему.

Модуль призначено для архівування повідомлень та значень OpenSCADA на файлову систему.

Будь яка SCADA система надає можливість архівування зібраних даних, тобто формування історії змін (динаміки) процесів. Архіви умовно можна поділити на два типи: архіви повідомлень та архіви значень.

Особливістю архівів повідомлень є те, що архівуються так звані повідомлення. Характерною ознакою повідомлення є час його виникнення. Архіви повідомлень за звичай використовуються для архівування повідомлень програми, тобто ведення логів та протоколів. Залежно від джерела, повідомлення можуть класифікуватися за різними критеріями. Наприклад, це можуть бути: протоколи аварійних ситуацій, протоколи дій операторів, протоколи збоїв зв'язку та інше.

Особливістю архівів значень є їх періодичність, яка визначається проміжком часу між двома суміжними значеннями. Архіви значень застосовуються для архівування історії безперервних процесів. Оскільки процес безперервний то й архівувати його можна тільки шляхом введення поняття квантування часу опитування, оскільки інакше ми отримуємо архіви нескінченних розмірів через неперервність самої природи процесу. Крім того, практично ми можемо отримати значення з періодом, обмеженим самими джерелами даних. Наприклад, доволі якісні джерела даних у промисловості рідко дозволяють отримувати дані з частотою більшою за 1кГц. І це без врахування самих давачів, які мають ще менш якісні характеристики.

Для ведення архівів у OpenSCADA передбачено підсистему "Архіви-Історія". Ця підсистема, відповідно до типів архівів, складається із двох частин: архів повідомлень та архіви значень. Підсистема, загалом, є модульною, що дозволяє створювати архіви, основані на різній природі та способах зберігання даних. Цей модуль надає механізм архівування на файлову систему як для потоку повідомлень, так і для потоку значень.

## 1 Архіватор повідомлень

Архіви повідомлень формуються архіваторами, яких може бути багато та з індивідуальними налаштуваннями, що дозволяє відокремлювати архівування різних класів повідомлень.

Архіватор повідомлень цього модуля дозволяє зберігати дані як у файлах формату мови XML, так і у форматі плаского тексту. Мова розмітки XML є стандартним форматом, який з легкістю розуміють багато сторонніх додатків. Однак, відкриття та розбір файлів у такому форматі вимагає значних ресурсів. З іншого боку, формат плаского тексту вимагає значно менше ресурсів, хоча і не є уніфікованим, а також вимагає знань його структури для стороннього розбору.

У будь якому разі, підтримуються обидва формати та користувач може обрати будь який з них відповідно до власних потреб.

Файли архівів іменуються архіваторами відповідно до дати першого повідомлення у архіві, наприклад, так: "2018-05-03 17.57.03.msg".

Файли архівів можуть обмежуватися за розміру та часом. Після перевищення ліміту створюється новий файл. Максимальна кількість файлів у теці архіватору також може бути обмежена. Після перевищення ліміту на кількість файлів, старі файли почнуть видалятися!

З метою оптимізації використання дискового простору архіватори підтримують упаковку старих архівів пакувальником gzip. Упаковка здійснюється після тривалого невикористання архіву.

При використанні архівів у форматі мови XML, відповідні файли завантажуються цілком! Для вивантаження невикористаних тривалий час архівів застосовується таймаут доступу до архіву, після перевищення якого архів вивантажується із пам'яті, а потім і пакується.

Модулем надаються додаткові параметри налаштування процесу архівування, рисунок 1.

Рис.1. Додаткові параметри налаштування процесу архівування повідомлень.

До числа цих параметрів входять:

- Файли архіву у XML — включає архівування повідомлень у файли XML-формату, замість плаского тексту. Використання у архівуванні XML-формату вимагає більше оперативної пам'яті, оскільки необхідне: повне завантаження файлу, XML-розбір та зберігання у пам'яті на момент використання.
- Запобігати дублікатам — включає перевірку наявності дубльованих повідомлень під час розташування повідомлення до архіву. При наявності дублікату, повідомлення не розташовується у архіві. Ця функція дещо збільшує час запису до архіву, але, у випадку розташування повідомлень у архіві зворотнім числом із зовнішніх джерел, дозволяє виключити дублювання.
- Вважати дублікатами та запобігати з рівним часом, категорією, рівнем — включає перевірку наявності дублювальних повідомлень під час розташування повідомлення у архів. Дублювальними вважаються повідомлення з рівним часом, категорією та рівнем. Нове дублювальне повідомлення замінює у архіві старе. Ця функція переважно корисна для зміни тексту запису повідомлення, наприклад, для статусу порушення.
- Максимальний розмір файлу архіву, у кілобайтах — встановлює обмеження на розмір одного файлу архіву. Відключити обмеження можна встановивши параметр у нуль.
- Максимальна кількість файлів — обмежує максимальну кількість файлів архіву та, разом з розміром окремого файлу, визначає розмір архіву на диску. Повністю зняти це обмеження можна встановивши параметр у нуль.
- Розмір файлу за часом, у днях — встановлює обмеження на розмір одного файлу архіву за часом.
- Таймаут пакування файлів архіву, у хвилинах — встановлює проміжок часу за закінченням якого, та у випадку відсутності звернень, файли архівів будуть пакуватися gzip архіватором. Встановити у нуль для відключення упаковки gzip.
- Період перевірки архівів, у хвилинах — встановлює періодичність перевірки архівів на предмет появи або видалення у теці файлів архівів, а також перевищення лімітів та видалення старих файлів архівів.
- Використовувати інформаційний файл для упакованих архівів — вказує на потребу створення файлу з інформацією про запаковані gzip-архіватором файли архіву. При копіюванні файлів архіву на іншу станцію цей інформаційний файл дозволяє прискорити процес першого запуску цільової станції, за рахунок виключення потреби розпакування gzip-архівів для отримання інформації.
- Перевірити теку архіватору зараз — команда, яка дозволяє запустити перевірку архівів негайно, наприклад, після ручної зміни у теці архіватору.

Для контролю за файлами архіватору Ви можете подивитися у вкладці "Файли", рисунок 2.

Рис.2. Вкладка "Файли" архіватору повідомлень.

### 1.1 Формат файлів архіву повідомлень

У таблиці нижче наведено синтаксис файлу архіву, побудованого на XML-мові:

Тег | Опис | Атрибути | Вміст
--- | --- | --- | ---
FSArch | Кореневий елемент. Ідентифікує файл, як той що належить цьому модулю. | Version — версія файлу архіву; Begin — час початку архіву (hex - UTC в секундах від 01/01/1970); End — час закінчення архіву (hex - UTC в секундах від 01/01/1970). | (m)
m | Тег окремого повідомлення. | tm — час створення повідомлення (hex - UTC в секундах від 01/01/1970); tmu — мікросекунди часу повідомлення; lv — рівень повідомлення; cat — категорія повідомлення. | Текст повідомлення

Архівний файл на основі плаского тексту складається із:

- заголовок у форматі: "FSArch {vers} {charset} {beg_tm} {end_tm}"; Де:
  - vers — версія модуля архівування;
  - charset — кодування файлу, за звичай UTF-8;
  - beg_tm — UTC час початку архіву з епохи 01.01.1970, у шістнадцятковій формі;
  - end_tm — UTC час закінчення файлу архіву з епохи 01.01.1970, у шістнадцятковій формі.
- записи повідомлень у форматі: "{tm} {lev} {cat} {mess}"; Де:
  - tm — час повідомлення у вигляді: "{utc_sec}:{usec}", де:
    - utc_sec — UTC час з епохи 01.01.1970, у шістнадцятковій формі;
    - usec — мікросекунди часу, у десятковій формі.
  - lev — рівень важливості повідомлення;
  - cat — категорія повідомлення;
  - mess — текст повідомлення.

Текст повідомлення та категорія кодуються з метою виключення символів роздільників — символ пробілу.

### 1.2 Приклад файлу архіву повідомлення

Приклад вмісту архівного файлу у форматі мови 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модуля.

## 2 Архіватор значень

Архіви значень, по замовченню, формуються архіваторами значень індивідуально для кожного зареєстрованого архіву. Архіваторів може бути багато та з індивідуальними налаштуваннями, що дозволяє поділити архіви за різними параметрами, наприклад, за точністю та глибиною.

Архів значень є незалежним компонентом, який включає буфер, що обробляється архіваторами. Основним параметром архіву значень є джерело даних. У ролі джерела даних можуть виступати атрибути параметрів підсистеми "Збір даних", а також інші зовнішні джерела даних (пасивний режим). Іншими джерелами даних можуть бути: мережеві архіватори віддалених OpenSCADA станцій, середовище програмування OpenSCADA та інше. Не менш важливими параметрами архіву є параметри його буферу. Від параметрів буферу залежить можливість роботи архіваторів. Так, періодичність значень у буфері має бути не більше за періодичність самого швидкого архіватору, а розмір буферу не менш подвійного розміру для самого повільного архіватору. Інакше можливі втрати даних.

Загальну схему архівування значень наочно зображено на рисунку 3.

Рис.3. Загальна схема процесу архівування значень.

Файли архівів іменуються архіваторами відповідно до дати першого значення у архіві та ідентифікатору архіву, наприклад, так: "CPULoad_load 2018-04-03 19.13.52.val".

Файли архівів можуть обмежуватися за часом. Після перевищення ліміту створюється новий файл. Максимальна кількість файлів у теці архіватору також може обмежуватися. Після перевищення ліміту на кількість файлів старі файли почнуть видалятися!

З метою економії дискового простору архіватори підтримують пакування, додатково до послідовного пакування, старих архівів пакувальником gzip. Пакування здійснюється після тривалого невикористання архіву. Для забезпечення можливості швидкого підключення великих архівів до іншої станції можна для упакованих файлів включити використання інформаційного файлу, що попередить попереднє розпакування всіх файлів на іншій станції.

Модулем надаються додаткові параметри налаштування процесу архівування, рисунок 4.

Рис.4. Додаткові параметри налаштування процесу архівування значень.

До числа цих параметрів входять:

- Розмір файлів архіву за часом, в годинах — параметр встановлюється автоматично при зміні періодичності значень архіватору та в цілому пропорційний до періодичності значень архіватору.

  Великі файли архіву будуть довше оброблятися через тривале розпакуванню gzip-файлів та первинну індексацію, при доступі до ділянкам архіву глибоко у історії.

- Максимальна кількість файлів одного архіву — обмежує максимальну кількість файлів архіву та, разом з розміром окремого файлу, визначає розмір архіву на диску. Повністю зняти це обмеження можна встановивши параметр у нуль.
- Максимальний розмір всіх архівів, у мегабайтах — встановлює обмеження на максимально займаний об'єм дискового простору файлами всіх архівів архіватору. Перевірка здійснюється з періодичністю перевірки архівів (далі), в результаті якої, та за перевищення ліміту, здійснюється видалення самих старих файлів всіх архівів. Повністю зняти це обмеження можна встановивши параметр у нуль.
- Округлення числових значень (%) — встановлює граничний відсоток різниці значень параметрів цілого та реального типів при якому вони вважаються однаковими та розташовуються у архіві як одне значення, за посередництвом послідовного пакування. Дозволяє добре пакувати параметри за межами достовірності — які слабко змінюються. Відключити цю властивість можна встановивши параметр у нуль.
- Таймаут пакування файлів архіву, у хвилинах — встановлює проміжок часу за закінченням якого, та у випадку відсутності звернень, файли архівів будуть пакуватися gzip архіватором. Встановити у нуль для відключення упаковки gzip.
- Період перевірки архівів, у хвилинах — встановлює періодичність перевірки архівів на предмет появи або видалення у теці файлів архівів, а також перевищення лімітів та видалення старих файлів архівів.
- Використовувати інформаційний файл для упакованих архівів — вказує на потребу створення файлу з інформацією про запаковані gzip-архіватором файли архіву. При копіюванні файлів архіву на іншу станцію цей інформаційний файл дозволяє прискорити процес першого запуску цільової станції, за рахунок виключення потреби розпакування gzip-архівів для отримання інформації.
- Видалити оригінальний файл архіву при помилці розпакування — видалення відбувається протягом перевірки архівів і це корисне для видалення зіпсованих файлів архіву.
- Перевірити теку архіватору зараз — команда, яка дозволяє запустити перевірку архівів негайно, наприклад, після ручної зміни у теці архіватору.

Для контролю за файлами архіватору Ви можете подивитися у вкладці "Файли", рисунок 5.

Рис.5. Вкладка "Файли" архіватору значень.

### 2.1 Формат файлів архіву значень

До реалізації архівування на файлову систему пред'являлися наступні вимоги:

- швидкий та простий доступ на додання до архіву та читання із архіву;
- можливість зміни значень у чинному архіві, з метою заповнення отворів у дубльованих системах;
- циклічність, обмеження розміру;
- можливість стиснення методом упаковки послідовності однакових значень, зберігаючи можливість швидкого доступу — послідовне пакування;
- можливість пакування застарілих даних стандартними архіваторами (gzip, bzip2 ...) із можливістю розпакування при звернені.

Згідно до вищенаведених вимог, організовано архівування методом множинності файлів (для кожного джерела). Циклічність архіву реалізується на рівні файлів, тобто створюється новий файл, а самий старий видаляється. Для швидкого стиснення використовується метод притягнення до останнього однакового значення. Для цих цілей у файлі архіву передбачається бітова таблиця упаковки розміром один в один із кількістю збережених даних. Тобто, кожний біт відповідає одному значенню у архіві. Значення біту вказує на наявність значення. Для потоку однакових значень біти обнулено. У випадку із архівом рядків, таблиця є не бітовою а байтовою та містить довжину відповідного значення. У випадку надходження потоку однакових значень, довжина буде нульовою та читатися буде перше однакове значення. Оскільки таблиця байтова то архів може зберігати рядки довжиною не більше 255 символів. Таким чином, методики збереження можна розділити на методику даних фіксованого та нефіксованого розміру. Загальну структуру файлу архіву наведено на рисунку 6.

Рис.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. Як можна бачити з рисунку, ознака упаковки містить довжину (нефіксовані типи) або ознаку упаковки (фіксовані типи) окремо взятого значення. Це означає, що для отримання зміщення потрібного значення необхідно скласти довжини всіх попередніх дійсних значень. Здійснення цієї операції кожний раз та для кожного значення є дуже накладною операцією тому було запроваджено механізм кешування зміщень значень. Механізм кешує зміщення значень через визначену їх кількість, а також кешує зміщення останнього значення, до якого здійснювався доступ (окремо на читання та запис).

Рис.7. Механізм послідовної упаковки значень.

Зміну значень всередині існуючого архіву також передбачено. Однак, враховуючи необхідність виконання зсуву хвоста архіву, рекомендується виконувати цю операцію якомога рідше та якомога більшими блоками.

## 3 Ефективність

При проектуванні та реалізації цього модуля було закладено механізми підвищення ефективності процесу архівування.

Першим механізмом є блокове (покадрове або транзакційне) розташування даних у файл архіву значень. Такий механізм дозволяє досягти максимальної швидкості архівування, а відповідно і дозволяє одночасно архівувати більше потоків даних. Досвід практичного застосування показав, що система K8-3000 із звичайним IDE жорстким диском спроможна архівувати до 300000 потоків даних із періодом 1 секунда або, система K5-400 з IDE диском (2.5") спроможна архівувати до 100 параметрів з періодом 1 мілісекунда.

Другим механізмом є пакування як поточних значень, так і застарілих файлів архівів, для оптимізації використання дискового простору. Реалізовано два механізми пакування: механізм послідовної пакування (архіви значень) та механізм дотискання архівів стандартним пакувальником (gzip). Цей підхід дозволив досягти високої продуктивності у процесі архівування поточних даних з ефективним механізмом послідовного стиснення, та дотискання стандартним пакувальником застарілих архівів завершує загальну картину компактного зберігання великих масивів даних. Статистика практичного застосування в умовах реального зашумленого сигналу(найгірша ситуація) показала, що ступінь послідовної упаковки склала 10%, а ступінь повної упаковки склала 71%.

## 4 Посилання

- Діаграма: Загальна схема процесу архівування значень.
- Діаграма: Загальна структура файлу архіву значень модуля Archive.FSArch.
- Діаграма: Механізм послідовної упаковки значень модуля Archive.FSArch.

Modules/FSArch/uk - GFDL | May 2026 | OpenSCADA 0.9.9