Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2016, 18:25   #1
vitalmsk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 28
По умолчанию Нужна идея.

Программа работает под DOS. Считывает данные с датчиков и записывает показания в файл. Время от времени файл закрывается для сохранения накопленного. Бывают случаи отключения питания от нескольких минут до нескольких часов (UPS-а НЕТ, да и не спасет). Если питание пропало при открытом файле, то текущие данные пропадают. При включении питания программа автоматически запускается и продолжает работать, но данные записанные от момента последнего открытия файла и до момента отключения питания пропадают. Есть возможность запросить датчики повторить запомненные данные (какие остались у них в буфере) ЗАДАЧА: нужна идея как распознать было ли отключение питания БЕЗ ВНЕШНИХ ОБВЕСОВ КОМПА. Если было отключение, то программа сама "переспросила бы" датчики.
vitalmsk вне форума Ответить с цитированием
Старый 10.05.2016, 18:59   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

У файла жэж есть время последней записи, ёмаё!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.05.2016, 20:14   #3
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Помимо времени записи файла.

DOS имеет в своём составе область памяти для межпроцессного обмена. Можно записать в неё некую метку, а если при пуске её нет - значит было отключение.
В метку можно даже записать время последней записи в файл. И это время также будет отсчётом.
В терминах Pascal
Код:
CONST
  ICALength = 16;
  ICA_Max   = ICALength-1;
  ICA_Seg   = $004F;
TYPE
  ICAType   = array [0..ICA_Max] of Byte;
VAR
  ICA : ICAType absolute $004F:$0000;
Это если на данном компе вы первый, кто решил воспользоваться ICA.

Но время файла - конечно же лучше.

В программе можно объявить предопределённую переменную - дата и время последней записи. Которая при включении программы равна 0. Но при записи файла, в неё заносится дата и время.

Последний раз редактировалось FPaul; 10.05.2016 в 20:23.
FPaul вне форума Ответить с цитированием
Старый 11.05.2016, 09:23   #4
vitalmsk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 28
По умолчанию

Дата/время последней записи - интересно! Рассмотрим случай: в 12:00 были благополучно записаны данные с датчиков (записываются только показания, без привязки ко времени). Запись происходит по мере накопления данных, без строгой периодичности. Наступило "время Ч" записать новые данные или это время не наступило. Вырубилось питание (данные в памяти пропали). Питание включилось, программа запустилась, определила текущее время, время последней записи (пусть разница 1 мин) , сколько данных в памяти (их нет) - значит ещё их не было.... и что ?????
vitalmsk вне форума Ответить с цитированием
Старый 11.05.2016, 09:28   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
значит ещё их не было.... и что ?????
Как что? Вот что:
Цитата:
Если было отключение, то программа сама "переспросила бы" датчики.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.05.2016, 12:31   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
нужна идея как распознать было ли отключение питания БЕЗ ВНЕШНИХ ОБВЕСОВ КОМПА.
или точнее сказать как узнать:
БЫЛИ ли ПОЛУЧЕНЫ данные ПОСЛЕ последнего сохранения (и НЕ БЫЛИ СОХРАНЕНЫ по тем или иным причинам).

постоянно(!!! при каждом сохранении) отмечать ВРЕМЯ сохранения. (можно использовать время изменения файла).
постоянно(!!! при каждом получении) отмечать ВРЕМЯ получения (сохранять это время и только время (БЕЗ самих ДАННЫХ) в "энергонезависимой памяти" (ФАЙЛЕ) и каждый раз его освобождать. (и да тоже можно использовать время его изменения)
А можно и сами данные, но НЕ В АРХИВ, а в промежуточный файл (лог) если их не так много. В этом случае даже перезапрос не потребуется.
ДВА НЕЗАВИСИМЫХ файла
1. большой архив используемый изредка, медленные операции (время сохранения данных)
2. маленький-маленький "лог" используемый постоянно, быстрые операции. (время получения данных)

при любом СТАРТЕ программы анализировать эти ДВА времени и
если НЕТ ни времени получения ни времени СОХРАНЕНИЯ
то ????????????
иначе если НЕТ времени получения
то ??????????????
иначе если НЕТ времени сохранения
то ??????????????
иначе если время получения > время сохранения
то ПОВТОРИТЬ ДАННЫЕ
иначе
ВСЕ НОРМАЛЬНО???

НО!!! все равно остается шанс, что данные в датчике(-ах) окажутся НОВЕЕ чем ДАТА последнего ПОЛУЧЕНИЯ.
программа сохранила ВСЕ полученные данные и вырубилась НЕ успев ничего принять.
датчики за время простоя программы получили новые данные и ...
запуск программы про ЭТО ничего не знает. (время приема < время сохранения )!!!
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.05.2016, 16:57   #7
vitalmsk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 28
По умолчанию Для min@y

Не понятен критерий по которому программа обратится за перезапросом данных.
vitalmsk вне форума Ответить с цитированием
Старый 11.05.2016, 17:00   #8
vitalmsk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 28
По умолчанию Для evg_m

Спасибо за идею, Пусть с трудом на понял. Попробую реализовать. Кажется свет в конце туннеля.
vitalmsk вне форума Ответить с цитированием
Старый 11.05.2016, 17:02   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Не понятен критерий по которому программа обратится за перезапросом данных.
А я-то тут причём? Это ж не моя программа. Я её и в глаза не видел.
Тема была "Нужна идея". Я идею вбросил, дальше сам давай.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.05.2016, 17:09   #10
vitalmsk
Пользователь
 
Регистрация: 10.05.2016
Сообщений: 28
По умолчанию Для min@y

Да ничего, Просто отсутствие данных в памяти может иметь два случая
1 - они пропали
2 - их еще и не было после последнего сохранения.
Вот здесь я и растерялся...
Ну а так все равно спасибо.
vitalmsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна хорошая идея Максикок Помощь студентам 6 16.12.2014 18:54
нужна идея... rostik123 Общие вопросы C/C++ 1 25.11.2012 13:25
НУЖНА ХОТЯ БЫ ИДЕЯ ИДЕЯ РЕШЕНИЯ!) немного непонятная задача с массивом.... ngup_k Паскаль, Turbo Pascal, PascalABC.NET 1 12.12.2011 19:33
Нужна идея Pein95 Общие вопросы Delphi 7 02.05.2011 15:56
Нужна идея viter.alex Microsoft Office Word 13 06.02.2009 00:07