реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как правильнее организовать ведение журнала работы устройства на диске..
Alechin
сообщение Aug 28 2007, 09:39
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Имеем контроллер, управляющий неким устройством. Сейчас по всем событиям, происходящим в процессе работы, в терминальный последовательный порт выдается информация о событии и реакции на него в текстовом виде (просматривается на подключенном ноутбуке-терминале). Теперь необходимо этот журнал работы вести на имеющимся в системе флеш-диске с файловой системой (FAT16 - все под DOSом). Ни как на ум не приходит красивое решение по ведению этого журнала.
В предыдущем устройстве аналогичное делал - но там был сеансный режим работы (короткие сеансы с большими перерывами) и поэтому создавался каталог для журнала ("/LOG"), в нем каталог с текущей датой ("/LOG/070828/" для 28 августа 2007) и далее для текущего сеанса текстовый файл с именем, сформированным по времени начала сеанса ("/LOG/070828/13-25.log"). По окончании сеанса файл закрывался (fclose). Все было хорошо - и искать удобно, и при пропадании питания и других сбоях в худшем случае терялась информация только по последненму сеансу.
Здесь же работа ведется непрерывно, хотя и события возникают не чаще 1 раза в секунду, даже в несколько секунд), поэтому вроде как нужен один файл, но тогда при пропадании питания (допустимая ситуация) файл будет не закрыт и вероятно потеряна записанная в него ранее информация. Да и при заполнении диска непонятно как с работать - нужно будет как-то удалять устаревшие записи, т.е. вести "перелопачивание" всего файла. Да скачивание такого файла по медленному порту терминала и ручной поиск информации по какому либо событию (оператором в случае разбора журнала работы) затруднен в текстовом файле в 16 МБайт (объем флеш-диска). Значит разбивать на "короткие" файлы за небольшие промежутки времени? Но это как-то нелогично, ведь процесс работы устройства непрерывен. Да и индексироваться для поиска тоже надо как-то будет.
Да - формат сообщений в журнале (логе) менять нельзя - это текстовые строки (ASCIIZ) различной длины (но начинаются они всегда с даты-времени, одно сообщение не может занимать более одной строки), т.е. построить что-то двоичное структуроподбное нельзя.
Кто как поступал в аналогичных ситуациях, и вообще, есть ли какие-нибудь правила по ведению логов?
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 28 2007, 11:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Вы определите для себя какое самое уязвимое место в протоколировании, над ним и колдуйте. А считывать весь журнал при сбое не обязательно. У вас же дата/время в заголовке имеются. Вот и считывайте записи только за тот промежуток времени, когда сбой произошел.
Go to the top of the page
 
+Quote Post
Alechin
сообщение Aug 30 2007, 10:29
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Хорошо, спрошу немного конкретнее - как организовать циклический буфер записей в файле? Т.е. я должен отслеживать переполнение диска при записи нового собщения в журнал и удалять самые "старые" сообщения? Если это возможно простым способом - то вопросов в ведении журнала не возникнет.
Go to the top of the page
 
+Quote Post
vmp
сообщение Aug 30 2007, 12:43
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Может быть заводить по одному файлу на каждый день?
А слишком старые файлы удалять. Пусть буферами, свободныи местом и т.д. ОС занимается.
Go to the top of the page
 
+Quote Post
Alechin
сообщение Aug 30 2007, 12:48
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Цитата(vmp @ Aug 30 2007, 16:43) *
Может быть заводить по одному файлу на каждый день?
А слишком старые файлы удалять. Пусть буферами, свободныи местом и т.д. ОС занимается.

Возможно, я уже думал, только день - многовато. При возможном (и допустимом выключении) пропадет журнал за целый день. Я думал минут по 5 делать, тогда надо как-то осмысленно файлы именовать, что бы была возможность поиска по дате/времени как оператором (при "разборе полетов"), так и контроллером. Правда что делать при корректировке времени - переименовывать все файлы? Как-то все сложно и запутанно получается.
Go to the top of the page
 
+Quote Post
vmp
сообщение Aug 30 2007, 13:06
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(Alechin @ Aug 30 2007, 16:48) *
Возможно, я уже думал, только день - многовато. При возможном (и допустимом выключении) пропадет журнал за целый день.

Если вас так беспокоит выключение, то FAT - далеко не лучший выбор. При выключении в процессе записи можно потерять всю информацию. Поэтому нужно либо делать контролируемое отключение, либо ставить другую файловую систему.
Кроме того, при слишком частой перезаписи быстро кончится ресурс флеш-диска. Я бы больше чем на 100 000 записей не закладывался. Поэтому данные надо где-то буферизировать. При гарантированном питании - в ОЗУ, при негарантированном - либо в ОЗУ с подпиткой, либо в FRAM от Ramtron. Если делаем буферизацию, то данные можно сбрасывать на диск либо по заполнению буфера, либо при смене даты по алгоритму - открыли файл на дозапись fopen(name, "ab"), записали данные, закрыли файл, сбросили кеш.
Go to the top of the page
 
+Quote Post
Elvin
сообщение Sep 24 2007, 08:24
Сообщение #7





Группа: Новичок
Сообщений: 3
Регистрация: 24-09-07
Из: Санкт-Петербург
Пользователь №: 30 781



Как с решением задачки? Много времени прошло 07.gif Если подобные задачи есть еще - у Рамтрона появились FRAM c большим объемом массива - и параллельные и последовательные. И одно из типичных массовых применений FRAM - как раз кольцевой энергонезависимый буфер. Самая большая, правда, всего 4 мегабита (FM22L16, 512кбайт, 8 или 16 разрядов шина данных), зато количество перезаписей не ограничено.
Go to the top of the page
 
+Quote Post
Alechin
сообщение Sep 24 2007, 10:49
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Цитата
Как с решением задачки?

Пока никак - эту задачу буду решать в последнюю очедь. А поменять файловую систему или применить что-либо другое нельзя - это ГОТОВЫЙ контроллер Octagon 6225, и что в нем есть, то есть, не добавить не отнять smile.gif
Go to the top of the page
 
+Quote Post
vshemm
сообщение Sep 28 2007, 16:04
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803



Не очень понятно, почему нельзя поменять файловую систему, если флешка в полном Вашем распоряжении. Этот вариант - наилучший, имхо.
Другой способ - создать fault tolerant хранилище поверх фат16. Это довольно трудоемкая задача, если делать "как надо" smile.gif Облегченный вариант - это создавать файлы по n записей или по m кб, писАть в них нужно как сказал vmp - открыть, записать, закрыть, сбросить кеш если нужно. Индексация - по имени или дате модификации (если есть источник абсолютного времени). В идеале, потеряется только текущий файл лога, поэтому остается подобрать нужное значение n или m. Однако, если реализация драйвера фат16 и самой флешки "кривая", то можно потерять все smile.gif
Go to the top of the page
 
+Quote Post
редактор
сообщение Oct 3 2007, 10:37
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Лучший вариант - организовать подхват питания. В нормальном режиме файлы писать в ОЗУ (RAM диск). При сигнале отключения питания сбрасывать все на диск (FLASH) и контроллером отключать питание. Иначе диск убить можно, и никакая система распределения записей не спасет.
Вели журнал на контроллере FASTWELL (стоял DiskOnChip) писали файл раз в менуту и через 3 месяца получали отказ диска, дважды. Первый раз списали на дефект, второй раз отключили журнал.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 3 2007, 11:24
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Alechin @ Aug 30 2007, 18:48) *
Я думал минут по 5 делать, тогда надо как-то осмысленно файлы именовать, что бы была возможность поиска по дате/времени как оператором (при "разборе полетов"), так и контроллером. Правда что делать при корректировке времени - переименовывать все файлы? Как-то все сложно и запутанно получается.

Время не нужно корректировать. Никогда. Корректируется только поправка к этому времени: поправка для коррекции хода "набортных" часов, поправка на летнее/зимнее время, поправка для отображения пользовательского (поясного) времени и т.д. В таком случае никакой проблемы поиска по времени создания/редактирования не будет.
Go to the top of the page
 
+Quote Post
vshemm
сообщение Oct 3 2007, 16:47
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803



Цитата(редактор @ Oct 3 2007, 14:37) *
Лучший вариант - организовать подхват питания. В нормальном режиме файлы писать в ОЗУ (RAM диск). При сигнале отключения питания сбрасывать все на диск (FLASH) и контроллером отключать питание. Иначе диск убить можно, и никакая система распределения записей не спасет.
Вели журнал на контроллере FASTWELL (стоял DiskOnChip) писали файл раз в менуту и через 3 месяца получали отказ диска, дважды. Первый раз списали на дефект, второй раз отключили журнал.

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

Во-первых, нужно гарантированное время, в течение которого будет питание. Если оно небольшое - тушите свет.
Во-вторых, придется оставлять только фиксированное число последних записей (или кб), чтобы гарантированно уложиться в это время.
В-третьих, придется изучить как происходят файловые операции (для той же цели). Как это сделать без исходников - догадайтесь сами smile.gif

Еще весьма интересно куда заведен этот сигнал по питанию, т.к. в зависимости от приоритета прерывания (ведь скорее всего это будет прерывание) возникает ряд не менее чудных задач.
К тому же, при другом сбое (например, программном) весь лог в РАМ потеряется.

При нормальном wear leaving'е флешка должна жить довольно долго. Чтобы окончательно решить эту проблему, нужно, как уже говорили, ставить FRAM без ограничения циклов перезаписи.
Go to the top of the page
 
+Quote Post
редактор
сообщение Oct 5 2007, 12:25
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Все зависит от конкретной системы.
Если это тумблер на приборе, то при подаче питания паралельно ему замыкать реле (или контактор)
а при отключении (определяется опросом) размыкать реле контроллером после записи данных.
Если же это внешний рубильник тогда сложнее. Тjгда FRAM.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
oran-be
сообщение Nov 21 2007, 15:10
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Вообще вся проблема создания таких систем упирается в организацию питания. Питание необходимо такое, чтобы при пропадании основного электропитания в системе оставался резерв для того, чтобы гарантированно успеть записать последние записи. При правильно организованоой системе лог записей последней записью этого сеанса будет запись о сбое основного электропитания. А циклический буфер в пределах одного файла фиксированных размеров делается элементарно - необходимо в структуру файла заложить заголовок, в котором, помимо некоторой служебной информации будет хоанится указатель на последнюю запись. В случае наличия записей неравной длины тогда необходимо будет еще иметь указатель на первую запись в циклическом массиве.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01481 секунд с 7
ELECTRONIX ©2004-2016