Модуль архіватору. Надає функції архівування повідомлень та значень на файлову систему.
Ліцензія:
GPL
Вступ
Модуль призначено для архівування повідомлень та значень системи OpenSCADA на файлову систему.
Будь яка SCADA система надає можливість архівування зібраних даних, тобто формування історії змін (динаміки) процесів. Архіви умовно можна поділити на два типи: архіви повідомлень та архіви значень.
Особливістю архівів повідомлень є те, що архівуються, так звані, повідомлення. Характерною ознакою повідомлення є час його виникнення. Архіви повідомлень за звичай використовуються для архівування повідомлень у системі, тобто ведення логів та протоколів. У залежності від джерела повідомлення можуть класифікуватися за різними критеріями. Наприклад, це можуть бути протоколи аварійних ситуацій, протоколи дій операторів, протоколи збоїв зв'язку та інше.
Особливістю архівів значень є їх періодичність, яка визначається проміжком часу між двома суміжними значеннями. Архіви значень застосовуються для архівування історії безперервних процесів. Оскільки процес безперервний, то й архівувати його можна тільки шляхом введення поняття квантування часу опитування, оскільки інакше ми отримуємо архіви нескінченних розмірів у зв'язку із неперервністю самої природи процесу. Крім того, практично ми можемо отримати значення з періодом обмеженим самими джерелами даних. Наприклад, доволі якісні джерела даних у промисловості рідко дозволяють отримувати дані з частотою більшою за 1кГц. І це без врахування самих давачів, які мають ще менш якісні характеристики.
Для ведення архівів у системі OpenSCADA передбачено підсистему "Архіви". Ця підсистема, у відповідності із типами архівів, складається із двох частин: архів повідомлень та архіви значень. Підсистема в цілому є модульною, що дозволяє створювати архіви основані на різній природі та способах зберігання даних. Цей модуль надає механізм архівування на файлову систему як для потоку повідомлень, так і для потоку значень.
1. Архіватор повідомлень
Архіви повідомлень формуються архіваторами. Архіваторів може бути безліч з індивідуальними налаштуваннями, які дозволяють поділяти архівування різних класів повідомлень.
Архіватор повідомлень цього модуля дозволяє зберігати дані як у файлах формату мови XML, так і у форматі плоского тексту. Мова розмітки XML є стандартним форматом, який з легкістю розуміють багато сторонніх додатків. Однак відкриття та розбір файлів у такому форматі вимагає значних ресурсів. З іншого боку, формат плоского тексту вимагає значно менше ресурсів, хоча і не є уніфікованим, а також вимагає знань його структури для розбору.
В будь якому разі підтримуються обидва формати та користувач може обрати будь який з них, у відповідності із власними потребами.
Файли архівів іменуються архіваторами, виходячи із дати першого повідомлення у архіві. Наприклад, так: "2006-06-21 17:11:04.msg".
Файли архівів можуть обмежуватися за розміру та часом. Після перевищення ліміту створюється новий файл. Максимальна кількість файлів у теці архіватору також може бути обмежена. Після перевищення ліміту на кількість файлів, старі файли почнуть видалятися!
З метою оптимізації використання дискового простору архіватори підтримують упаковку старих архівів пакувальником gzip. Упаковка здійснюється після тривалого невикористання архіву.
При використанні архівів у форматі мови XML відповідні файли завантажуються цілком! Для вивантаження невикористаних тривалий час архівів застосовується таймаут доступу до архіву, після перевищення якого архів вивантажується із пам'яті, а потім і пакується.
Модулем надаються додаткові параметри налаштування процесу архівування (рис.1).
Рис.1. Додаткові параметри налаштування процесу архівування повідомлень.
До числа цих параметрів входять:
Файли архіву у XML — Включає архівування повідомлень у файли XML-формату, замість плаского тексту. Використання у архівуванні XML-формату вимагає більше оперативної пам'яті оскільки необхідне повне завантаження файлу, XML-розбір та зберігання у пам'яті на момент використання.
Максимальний розмір файлу архіву, у кілобайтах — Встановлює обмеження на розмір одного файлу архіву. Відключити обмеження можна встановивши параметр у нуль.
Максимальна кількість файлів — Обмежує максимальну кількість файлів архіву і разом з розміром окремого файлу визначає розмір архіву на диску. Повністю зняти це обмеження можна встановивши параметр у нуль.
Розмір файлу за часом, у днях — Встановлює обмеження на розмір одного файлу архіву за часом.
Таймаут упаковки файлів архіву, у хвилинах — Встановлює проміжок часу за закінченням якого, та у випадку відсутності звернень, файли архівів будуть пакуватися gzip архіватором. Встановити у нуль для відключення упаковки gzip.
Період перевірки архівів, у хвилинах — Встановлює періодичність перевірки архівів на предмет появи або видалення у теці файлів архівів, а також перевищення лімітів та видалення старих файлів архівів.
Використовувати інформаційний файл для упакованих архівів — Вказує на потребу створення файлу з інформацією про запаковані gzip-архіватором файли архіву. При копіюванні файлів архіву на іншу станцію цей інформаційний файл дозволяє прискорити процес першого запуску цільової станції за рахунок виключення потреби розпакування gzip-архівів для отримання інформації.
Запобігати дублікатам — Включає перевірку на наявність дубльованих повідомлень на час розташування повідомлення до архіву. При наявності дублікату повідомлення не розташовується у архіві. Ця функція дещо збільшує час запису до архіву, але у випадку розташування повідомлень у архіві зворотнім числом із зовнішніх джерел дозволяє виключити дублювання.
Вважати дублікатами та запобігати з рівним часом, категорією, рівнем — Включає перевірку на наявність дублювальних повідомлень на час розташування повідомлення у архів. Дублювальними вважаються повідомлення з рівним часом, категорією та рівнем. Нове дублювальне повідомлення замінює у архіві старе. Ця функція переважно корисна для зміни тексту запису повідомлення, наприклад, для статусу порушення.
Перевірити теку архіватору зараз — Команда, яка дозволяє запустити перевірку архівів негайно, наприклад, після ручної зміни у теці архіватору.
Для контролю за файлами архіватору Ви можете подивитися у вкладці "Файли" (рис. 2).
У таблиці нижче приведено синтаксис файлу архіву, побудованого на 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="1.3.0"Begin="4a27dfbc"End="4a28c990">
<m tm="4a28c982"tmu="905587"lv="4"cat="/DemoStation/sub_DAQ/mod_DiamondBoards/">Помилка dscInit.</m>
<m tm="4a28c990"tmu="595549"lv="4"cat="/DemoStation/sub_Transport/mod_Sockets/out_HDDTemp/">Помилка підключення до Internet сокету: Операція виконується на цей час!</m>
</FSArch>
Приклад вмісту архівного файлу у форматі плоского тексту:
Архіви значень, по замовченню, формуються архіваторами значень індивідуально для кожного зареєстрованого архіву. Архіваторів може бути безліч із індивідуальними налаштуваннями, які дозволяють поділити архіви за різними параметрами, наприклад, за точністю та глибиною.
Архів значень є незалежним компонентом, який включає буфер, який обробляється архіваторами. Основним параметром архіву значень є джерело даних. У ролі джерела даних можуть виступати атрибути параметрів системи OpenSCADA, а також інші зовнішні джерела даних (пасивний режим). Іншими джерелами даних можуть бути: мережеві архіватори віддалених OpenSCADA систем, середовище програмування системи OpenSCADA та інше. Не менш важливими параметрами архіву є параметри його буферу. Від параметрів буферу залежить можливість роботи архіваторів. Так, періодичність значень у буфері має бути не більше за періодичність самого швидкого архіватору, а розмір буферу не менш подвійного розміру для самого повільного архіватору. Інакше можливі втрати даних.
Загальну схему архівування значень наочно зображено на рис.3.
Рис.3. Загальна схема процесу архівування значень.
Файли архівів іменуються архіваторами, виходячи із дати першого значення у архіві та ідентифікатору архіву. Наприклад, таким чином: "MemInfo_use 2006-06-17 17:32:56.val".
Файли архівів можуть обмежуватися за часом. Після перевищення ліміту створюється новий файл. Максимальна кількість файлів у теці архіватору також може обмежуватися. Після перевищення ліміту на кількість файлів старі файли почнуть видалятися!
З метою економії дискового простору архіватори підтримують пакування, додатково до послідовного пакування старих архівів пакувальником gzip. Пакування здійснюється після тривалого невикористання архіву. Для забезпечення можливості швидкого підключення великих архівів до іншої системи можна включити використання інформаційних файлів для упакованих файлів, що попередить попереднє розпакування всіх файлів на іншій системі.
Модулем надаються додаткові параметри налаштування процесу архівування (рис.4).
Рис.4. Додаткові параметри налаштування процесу архівування значень.
До числа цих параметрів входять:
Розмір файлу архіву за часом, в годинах — Параметр встановлюється автоматично при зміні періодичності значень архіватору та в цілому пропорційний до періодичності значень архіватору.
Великі файли архіву будуть довше оброблятися завдяки тривалому розпакуванню gzip-файлів та первинній індексації, при доступі до ділянкам архіву глибоко у історії.
Максимальна кількість файлів одного архіву — Обмежує максимальну кількість файлів на архів та разом із розміром окремого файлу визначає розмір архіву на диску. Повністю зняти це обмеження можна встановивши параметр у нуль.
Максимальний розмір всіх архівів, у мегабайтах — Встановлює обмеження на максимально займаний об'єм дискового простору файлами всіх архівів архіватору. Перевірка здійснюється з періодичністю перевірки архівів (далі), в результаті якої, за перевищенням ліміту, здійснюється видалення самих старих файлів всіх архівів. Повністю зняти це обмеження можна встановивши параметр у нуль.
Округлення чисельних значень (%) — Встановлює граничний відсоток різниці значень параметрів цілого та реального типів при якому вони вважаються однаковими та розташовуються у архіві як одне значення, за посередництвом послідовного пакування. Дозволяє добре пакувати параметри за межами достовірності, які слабко змінюються. Відключити цю властивість можна встановивши параметр у нуль.
Таймаут пакування файлів, у хвилинах — Встановлює проміжок часу за закінченням якого, та у випадку відсутності звернень, файли архівів будуть пакуватися gzip архіватором. Встановіть у нуль для відключення упаковки gzip.
Період перевірки архівів, у хвилинах — Встановлює періодичність перевірки архівів на предмет появи або видалення у теці файлів архівів, а також перевищення лімітів та видалення старих файлів архівів.
Використовувати інформаційний файл для упакованих архівів — Вказує на потребу створення файлу з інформацією про запаковані gzip-архіватором файли архіву. При копіюванні файлів архіву на іншу станцію цей інформаційний файл дозволяє прискорити процес першого запуску цільової станції за рахунок виключення потреби розпакування gzip-архівів для отримання інформації.
Перевірити теку архіватору зараз — Команда, яка дозволяє запустити перевірку архівів негайно, наприклад, після ручної зміни у теці архіватору.
Для контролю за файлами архіватору Ви можете переглянути у вкладці "Файли" (рис. 5).
Для реалізації архівування на файлову систему пред'являлися наступні вимоги:
швидкий (простий) доступ на додання до архіву та читання із архіву;
можливість зміни значень у чинному архіві (з метою заповнення отворів у дубльованих системах);
циклічність (обмеження розміру);
можливість стиснення методом упаковки послідовності однакових значень, зберігаючи можливість швидкого доступу (послідовне пакування);
можливість пакування застарілих даних стандартними архіваторами (gzip, bzip2 ...) із можливістю розпакування при звернені.
Відповідно до вищевикладених вимог організовано архівування методом множинності файлів (для кожного джерела). Циклічність архіву реалізується на рівні файлів, тобто створюється новий файл, а самий старий видаляється. Для швидкого стиснення використовується метод притягнення до останнього однакового значення. Для цих цілей у файлі архіву передбачається бітова таблиця упаковки розміром один в один із кількістю збережених даних. Тобто кожний біт відповідає одному значенню у архіві. Значення біту вказує на наявність значення. Для потоку однакових значень біти онулені. У випадку із архівом рядків таблиця є не бітовою а байтовою та містить довжину відповідного значення. у випадку надходження потоку однакових значень, довжина буде нульовою та читатися буде перше однакове значення. Оскільки таблиця байтова, то архів зможе зберігати рядки довжиною не більше 255 символів. Таким чином, методики збереження можна розділити на методику даних фіксованого та нефіксованого розміру. Загальну структуру файлу архіву приведено на рис.6.
Рис.6. Загальна структура файлу архіву значень.
При створені нового файлу архіву формується: заголовок (структура заголовку у таблиці 1), нульова бітова таблиця упаковки архіву та перше недостовірне значення. Таким чином, виходить архів, ініційований недостовірними значеннями. Надалі нові значення будуть вставлятися у область значень із коригуванням індексної таблиці упаковки. З цього слідує, що пасивні архіви будуть вироджуватися у файли розміром з заголовок та бітову таблицю.
Таблиця 1. Структура заголовку файлу архіву
Поле
Опис
Розмір байт(біт)
f_tp
Системне ім'я архіву ("OpenSCADA Val Arch.")
20
archive
Ім'я архіву, якому належить файл.
20
beg
Час початку архівних даних (мкс)
8
end
Час кінця архівних даних (мкс)
8
period
Періодичність архіву (мкс)
8
vtp
Тип значення у архіві (Логічний, Цілий, Реальний, Рядок)
(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%.