OpenSCADAWiki: Home Page Uk/Doc/FS Arch ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of HomePageUk/Doc/FSArch from 2016-09-30 12:11:23..

Модуль підсистеми "Архіви" <FSArch>

Модуль: FSArch
Ім'я: Архіватор на файлову систему
Тип: Архів
Джерело: arh_FSArch.so
Версія: 2.8.0
Автор: Роман Савоченко
Опис: Модуль архіватору. Надає функції архівування повідомлень та значень на файлову систему.
Ліцензія: GPL

Contents

Вступ

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


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


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


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


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

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

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


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


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


Файли архівів іменуються архіваторами, виходячи із дати першого повідомлення у архіві. Наприклад, так: "2006-06-21 17:11:04.msg".


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


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


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


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


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

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


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

Вкладка "Файли" об'єкту архіватору повідомлень. (175 Kb)
Рис.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 — категорія повідомлення.
Текст повідомлення

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

Де:
  • записів повідомлень у форматі: "{tm} {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>


    Приклад вмісту архівного файлу у форматі плоского тексту:

    FSArch 1.2.0    UTF-8 4a27dfbb 4a28c991
    4a28c98f:432619 1 /DemoStation/ Запуск!
    4a28c98f:432858 1 /DemoStation/sub_Transport/ Пуск%20підсистеми.
    4a28c98f:455400 1 /DemoStation/sub_DAQ/mod_DAQGate/cntr_test/ Включення%20контролеру!
    4a28c98f:457360 1 /DemoStation/sub_DAQ/mod_ModBus/cntr_testTCP/ Включення%20контролеру!
    4a28c98f:460691 1 /DemoStation/sub_DAQ/mod_ModBus/cntr_testRTU/ Включення%20контролеру!
    4a28c98f:464227 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_Anast1to2node/ Включення%20контролеру!
    4a28c98f:680767 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM102cntr/ Включення%20контролеру!
    4a28c98f:705683 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_Anast1to2node_cntr/ Включення%20контролеру!
    4a28c98f:753659 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM101/ Включення%20контролеру!
    4a28c98f:905073 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM102/ Включення%20контролеру!
    4a28c990:81670 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM201/ Включення%20контролеру!
    4a28c990:206208 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_КМ202/ Включення%20контролеру!
    4a28c990:333471 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM301/ Включення%20контролеру!
    4a28c990:457490 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM302/ Включення%20контролеру!
    4a28c990:591702 1 /DemoStation/sub_DAQ/mod_System/cntr_AutoDA/ Включення%20контролеру!
    4a28c990:595549 4 /DemoStation/sub_Transport/mod_Sockets/out_HDDTemp/ Помилка%20підключення%20к%20Internet%20сокету:%20Операція%20виконується%20на%20цей%20час!
    4a28c990:618617 1 /DemoStation/sub_DAQ/mod_SoundCard/cntr_test/ Включення%20контролеру!
    4a28c990:621487 1 /DemoStation/sub_DAQ/mod_LogicLev/cntr_experiment/ Включення%20контролеру!
    4a28c990:729323 1 /DemoStation/sub_DAQ/mod_JavaLikeCalc/cntr_testCalc/ Включення%20контролеру!
    4a28c990:733434 1 /DemoStation/sub_DAQ/mod_Siemens/cntr_test/ Включення%20контролеру!
    4a28c990:754368 1 /DemoStation/sub_DAQ/mod_DAQGate/cntr_test/ Включення%20контролеру!
    4a28c990:786925 1 /DemoStation/sub_Archive/ Пуск%20підсистеми.
    4a28c990:955967 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_Anast1to2node/ Запуск%20контролера!
    4a28c990:957251 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM102cntr/ Запуск%20контролера!
    4a28c990:957636 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_Anast1to2node_cntr/ Запуск%20контролера!
    4a28c990:958006 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM101/ Запуск%20контролера!
    4a28c990:958637 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM102/ Запуск%20контролера!
    4a28c990:959268 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM201/ Запуск%20контролера!
    4a28c990:959875 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_КМ202/ Запуск%20контролера!
    4a28c990:961261 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM301/ Запуск%20контролера!
    4a28c990:961919 1 /DemoStation/sub_DAQ/mod_BlockCalc/cntr_KM302/ Запуск%20контролера!
    4a28c990:963775 1 /DemoStation/sub_DAQ/mod_System/cntr_AutoDA/ Запуск%20контролера!
    4a28c990:966980 1 /DemoStation/sub_DAQ/mod_LogicLev/cntr_experiment/ Запуск%20контролера!
    4a28c991:26791 1 /DemoStation/sub_Archive/ Пуск%20підсистеми.
    4a28c991:28489 1 /DemoStation/sub_UI/mod_VCAEngine/ Старт%20модуля.

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

    Переклад триває


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


    Архив значений является независимым компонентом, который включает буфер, обрабатываемый архиваторами. Основным параметром архива значения является источник данных. В роли источника данных могут выступать атрибуты параметров подсистемы "Сбор данных", а также другие внешние источники данных (пассивный режим). Другими источниками данных могут быть: сетевые архиваторы удалённых OpenSCADA систем, среда программирования системы OpenSCADA и др. Не менее важными параметрами архива являются параметры его буфера. От параметров буфера зависит возможность работы архиваторов. Так, периодичность значений в буфере должна быть не больше периодичности самого быстрого архиватора, а размер буфера не менее двойного размера для самого медленного архиватора. В противном случае возможны потери данных!


    Общая схема архивирования значений наглядно изображена на рис. 3.


    Загальна схема процесу архівування значень. (71 Kb)
    Рис.3. Общая схема процесса архивирования значений.

    Файлы архивов именуются архиваторами, исходя из даты первого значения в архиве и идентификатора архива. Например, таким образом: "MemInfo_use 2006-06-17 17:32:56.val".


    Файлы архивов могут ограничиваться по времени. После превышения лимита создаётся новый файл. Максимальное количество файлов в директории архиватора также может ограничиваться. После превышения лимита на количество файлов старые файлы начнут удаляться!


    С целью экономии дискового пространства архиваторы поддерживают упаковку в дополнении к последовательной упаковке старых архивов упаковщиком gzip. Упаковка производится после продолжительного неиспользования архива. Для обеспечения возможности быстрого подключения больших архивов к другой системе можно включить использование информационных файлов для упакованных файлов, что предотвратит предварительную распаковку всех файлов на другой системе.


    Модулем предоставляются дополнительные параметры настройки процесса архивирования (рис.4).


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

    В число этих параметров входят:

     (2 Kb) Большие файлы архива будут дольше обрабатываться в виду продолжительной распаковки gzip-файлов и первичной индексации, при доступе к участкам архива глубоко в истории.

    Для контроля за файлами архиватора Вы можете посмотреть во вкладке "Файлы" (рис. 5).

    Вкладка "Файли" об'єкту архіватору значень. (196 Kb)
    Рис.5. Вкладка "Файлы" объекта архиватора значений.

    2.1. Формат файлов архива значений

    Для реализации архивирования на файловую систему предъявлялись следующие требования:


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


    Загальна структура файлу архіву значень. (13 Kb)
    Рис.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. Как можно видеть из рисунка признак упаковки содержит длину (не фиксированные типы) или признак упаковки (фиксированные типы) отдельно взятого значения. Это значит, что для получения смещения нужного значения необходимо сложить длины всех предыдущих действительных значений. Выполнение данной операции каждый раз и для каждого значения является крайне накладной операцией. Поэтому был внедрён механизм кеширования смещений значений. Механизм кеширует смещения значений через предопределённое их количество, а также кеширует смещение последнего значения к которому производился доступ (отдельно на чтение и запись).


    Механізм послідовної упаковки значень. (41 Kb)
    Рис.7. Механизм последовательной упаковки значений.

    Изменения значений внутри существующего архива также предусмотрено. Однако, учитывая необходимость выполнения сдвига хвоста архива, рекомендуется выполнять эту операцию как можно реже и как можно большими блоками.

    3. Эффективность

    При проектировании и реализации данного модуля были заложены механизмы повышения эффективности процесса архивирования.


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


    Вторым механизмом является упаковка как текущих значений, так и устаревших файлов архивов для оптимизации используемого дискового пространства. Реализовано два механизма упаковки: механизм последовательной упаковки (архивы значений) и механизм дожатия архивов стандартным упаковщиком (gzip). Данный подход позволил достичь высокой производительности в процессе архивирования текущих данных с эффективным механизмом последовательного сжатия. А дожатие стандартным упаковщиком устаревших архивов завершает общую картину компактного хранения больших массивов данных. Статистика практического применения в условиях реального зашумленного сигнала(худшая ситуация) показала, что степень последовательной упаковки составила 10%, а степень полной упаковки составила 71%.

    Ссылки

    Referring pages: HomePageUk/Doc
    HomePageUk/Doc/DBArch
    HomePageUk/Function
    HomePageUk/Using/PLC/firmware


     
    There are no files on this page.[Display files/form]
    There is no comment on this page. [Display comments/form]