У мегя вот было пару свободных часов, решил сесть и написать какой нить пример, но так и не понял что нужно сделать, как дохожу до места где про "обрезание" какие то циклы, так и всё,каша в голове![]()
У мегя вот было пару свободных часов, решил сесть и написать какой нить пример, но так и не понял что нужно сделать, как дохожу до места где про "обрезание" какие то циклы, так и всё,каша в голове![]()
Так. Попробую еще раз. Есть два интервала, А+18 и В+12 часов. Моменты А и В произвольные, но интервал В+12 должен всегда лежать внутри интервала А+18. То есть, если проще, на линейной временнОй шкале(например в секундах с 1970 года) В всегда должно быть от А до А+6. Готовый макрос проверки выше я выкладывал, вроде бы он правильно проверяет в любое время суток.
Переход от режима А+18 к режиму В+12 должен происходить за 12 циклов, в каждом из которых убирается по полчаса. То есть, в первый день перехода мы должны сократить 18-часовой интервал до 17,5 часов, на следующий день до 17, дальше до 16,5, и так далее до 12,5, после чего следующим циклом включить В+12. При этом, В+12 должно всегда лежать внутри этого сокращающегося интервала. Интервал мы можем сокращать произвольно с любой стороны до совпадения его со строго заданными В+12.
Если все еще не очень понятно, напишите. Попробую какие-нибудь графики порисовать.
Последний раз редактировалось Budka; 30.11.2013 в 16:08.
А и В задается один раз, перед полным циклом событий. Полный цикл - это:
А+18 какое-то количество суток(от 1 до 30, например).
Далее идет переход от (А+18) к (В+12) 11 суток сокращение по полчаса
И на 12-е сутки начинается режим В+12, который продолжается какое-то количество суток(от 5 до 30, грубо)
При задаче А и В они проверяются на тупость персонала.
Он задан перед полным циклом событий, и не меняется до следующего полного цикла. Цикл я описал выше.Так В+12 - неизменяемый интервал? А начинается он всегда в одно время, или в разное?
У нас нет задачи получить А+12, а есть задача В+12 получить. Потому что если (В+12) начинается в (А+5) например, то нужно убирать время работы, включая позже, а не выключая раньше. Когда осталось менее 30 минут с каждой из сторон, значит осталось ровно полчаса. Просто включаем В+12, и переход завершен.И ещё, если между А и В интервал меньше 0,5 часа, и между
А+12,5 и В+12 то же меньше, то как в следующем цикле получить А+12?
Думаю, в энергонезависимую память писать номер дня от начала года, когда переключился режим, и от него уже считать.если происходит сброс питания - как мы узнаем предыдущее значение и сколько суток назад вступили в силу новые значения?
P.S. Графики выложил несколькими постами выше, может понятнее будет![]()
Последний раз редактировалось Budka; 30.11.2013 в 16:28.
Вдогонку. А и В пишутся в энергонезависимые переменные. Если начался режим А+18, значение А должно быть заблокировано от изменений. Пока не начался режим перехода(идет режим А+18), значение В может быть изменено в пределах от А до А+6,но в данном случае это неважно, думаю. В момент начала перехода должно быть заблокировано и значение В, до окончания полного цикла. Но это к самой логике отношения не имеет, это внешние ФБ или макросы какие-то должны быть, и сейчас можно на это вообще внимания не обращать, думаю что сам это сделаю.
Уехал, буду у компа после 23-00, если вопросы будут, отвечу. Всем огромное спасибо, что моей схемкой занимаетесь!
думаю, как и в моих "костылях" нужно всё приводить к "началу координат" - в точке первого запуска, а начА и длитА превращать в начВ и длитВ интерполяцией, за любое (заданное) кол-во дней.
начинающий профессионал
AI!, я ни черта не понял, но это работает! И работает прекрасно. И проще моего в сто раз. Попытаюсь понять алгоритм вычисления, но пока просто сижу и восхищаюсьКонечно, я где-то в глубине души понимал, что там не все так сложно, но вот привести к такому простому виду никак не получалось. Я верно понимаю, что Ваш макрос вполне универсален и при любых уставках правильно считает, а не только при 18 и 12 часах?