Запись массива в EEPROM по отсечке времени

alex11011963
Offline
Зарегистрирован: 29.03.2020

Здравствуйте. Помогите с идеей. Надо по отсечке RTC записывать в EEPROM массив. Причем проблема заключается в том, что в момент наступившей метки времени для записи устройство может быть отключено от питания. Но запись все равно надо сделать. И так постоянно в заданной изначально время. Массив хранится в EEPROM и потом может быть извлечен (выведен) на дисплей для анализа. Ничего не приходит на ум. Можно конечно программно установить превышение по времени метки записи но как потом сбросить повторную запись когда вновь подается питание?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тут надо или спящий режим с просыпанием от RTC или толкового маёра с "командирскими" часами. 

b707
Offline
Зарегистрирован: 26.05.2017

alex11011963 пишет:

Причем проблема заключается в том, что в момент наступившей метки времени для записи устройство может быть отключено от питания. Но запись все равно надо сделать.

простите, но это бред. Если на ардуине нет питания - о какой записи в ЕЕПРОМ вы говорите? Меняйте концепцию

Другое дело, если допустима отложенная запись - то есть, если в момент "Ч" питания не было - запись производится как только питание появилось - это решается элементарно при помощи RTC и флагов

Morroc
Offline
Зарегистрирован: 24.10.2016

Пишите метку времени туда же и будет понятно перезаписывать или нет.

alex11011963
Offline
Зарегистрирован: 29.03.2020

Понятное дело , что пока питания нет - нет и записи. Но как только питание появилось , а время установленной записи прошло, часы то работают, надо и записать. Установить флаг по событию и при входе в программу сначала прочитать флаг, записать и сбросить его не решение. Наверное надо два флага - один на наступление события, а второй на то что запись сделана и он возвращает первый на разрешение записи по условию времени. Или я что-то упускаю.

alex11011963
Offline
Зарегистрирован: 29.03.2020

Метка времени например на 08.00.00, а включение произошло в 14.13.36 и что она дает? С каждым циклом все корректно?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

толкового маёра с "командирскими" часами. 

и с генератором электричества на баз велотренажёра.

b707
Offline
Зарегистрирован: 26.05.2017

alex11011963 пишет:

Метка времени например на 08.00.00, а включение произошло в 14.13.36 и что она дает? С каждым циклом все корректно?

вы какие-то странные вопросы задаете. Метка времени решает все. Допустим Вам нужно записывать данные в 8-00, 12-00, 16-00 и в полночь. Электричество включилось в 14-13, последняя метка - 8-00. Очевидно, что запись в 12-00 пропущена. Что тут непонятного?

sadman41
Offline
Зарегистрирован: 19.10.2016

Пропадает электричество - ставь упс. Ардуину на обратных фотонах ещё продавать не начали.

alex11011963
Offline
Зарегистрирован: 29.03.2020

Записать данные по отсечке необходимо в любом случае были какие то действия или нет, а делать запись просто по метке времени_ это не решение. Так при каждой перезагрузке будут записываться данные. Можно конечно и так, но если система включается по 600-700 раз за сутки то не надолго хватит ресурса EEPROM.

b707
Offline
Зарегистрирован: 26.05.2017

alex11011963 пишет:

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

По-моему, вы не понимаете. Или хотите чего-то совсем другого и плохо обьясняете.

С какой стати данные будут перезаписываться при каждой перезагрузке. если у вас есть метка времени? - вот смотрите, берем мой предыдущий пример, график записи в 8,12 и 16 час. Система перезагрузилась, получила время с RTC, время 14-13. Далее она читает последнюю метку записи из ЕЕПРОМ - допустим там 12 час. Значит все идет по плану и данные пока писать не надо (пока не наступит 16 час). И пусть она хоть 600 раз перестартует - данные в ЕЕПРОМ будут записаны один раз, не ранее 16 час

Обьясните, где же тут запись при каждой перезагрузке?

alex11011963
Offline
Зарегистрирован: 29.03.2020

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

alex11011963
Offline
Зарегистрирован: 29.03.2020

флаг проиpведенной записи в этом случае будет неактуален, т.к от при повторном включении устройства будет сброшен до значения по умолчанию. Видимо надо этот флаг также записывать в EEPROM/

b707
Offline
Зарегистрирован: 26.05.2017

alex11011963 пишет:

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

и в чем проблема? чем не подходит принцип, описанный выше?

alex11011963
Offline
Зарегистрирован: 29.03.2020

потому, что текущая метка времени уже не актуальна. Не надо ждать следующей. И следующая тоже может быть просроченной и т.д.

alex11011963
Offline
Зарегистрирован: 29.03.2020

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Идея правильная. При включении вычислять - скоко чекпойнтов пропущено начиная с последнего зафиксированного и записывать все пропущенные с одними и теми же данными. Грубо говоря - последний чекпойнт откопипастить N раз, изменяя таймштамп.  

b707
Offline
Зарегистрирован: 26.05.2017

вуд

alex11011963
Offline
Зарегистрирован: 29.03.2020

Да. Спасибо за совет. Должно сработать. Сделаю отпишусь. Я не имел дела с EEPROM и оказалось проще кучу всяких задач решить, чем всего-то записать-прочитать то что надо.

b707
Offline
Зарегистрирован: 26.05.2017

alex11011963 пишет:

Да. Спасибо за совет. Должно сработать. Сделаю отпишусь. Я не имел дела с EEPROM и оказалось проще кучу всяких задач решить, чем всего-то записать-прочитать то что надо.

имхо, у вас  проблемы не с ЕЕПРОМ, а с логикой :)

А ЕЕПРОМ это просто - EEPROM.put() потом get() и все :)

alex11011963
Offline
Зарегистрирован: 29.03.2020

Я имел в виду, что мне надо вести подсчет жидкой фракции по нескольким линиям с разной производительностью за определенный промежуток времени. К примеру за 12 часов. Последнее показание для контроля должно быть доступным. Отсюда и необходимость записи по времени. Да, система включается автономно по сигналам внешних устройств и они же дают разрешение на включение самой системы счетчиков , расчета параметров и записи.

alex11011963
Offline
Зарегистрирован: 29.03.2020

Система после метки времени записывает  данные в EEPROM и продолжает с чистого листа, сбросив все в ноль. Но не факт что в момент времени для записи она активна.

 

b707
Offline
Зарегистрирован: 26.05.2017

alex11011963 пишет:

Система после метки времени записывает  данные в EEPROM и продолжает с чистого листа, сбросив все в ноль. Но не факт что в момент времени для записи она активна.

все равно не очень понял, зачем так. В чем смысл выключения системы сотни раз на дню? Судя по тому. что это контроль какой-то установки. речь о экономии электричества не идет. Может пересмотреть концепцию в сторону постоянной работы без выключений? - тогда и беспокоится о "пропущенных точках" не надо будет

alex11011963
Offline
Зарегистрирован: 29.03.2020

нет возможности обеспечить бесперебойное питание. основное оборудование находится удаленно и снего поступает питание тогда когда это необходимо.

alex11011963
Offline
Зарегистрирован: 29.03.2020

прокладка независимой линии питания может стоить дороже чем само устройство.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

18650 и PowerDown тебя спасёт на многие годы.   Просыпаться, смотреть, есть питание или нет, дублировать последние данные, если питание не включалось, или обновлять, если оно есть. 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Поставьте хороший ИБП 12В с аккумулятором на 17Ач и он Вам 3-е суток будет держать. Бредите, уважаемый.

Да и, кстати, ИБП Вам выдаст сигнал критического разряда батареи и у Вас будет несколько минут для выполнения контроллером каких-то действий.