До хантера далековато. Время включения выходов не регулируется. Нет очереди включения зон ("входов") с тем, чтобы гарантировать включение только одного выхода. Нет % регулировки длительности включения всех входов. Нет обработки датчиков (дождя, ветра и прочего семейства хантеровских нормально замкнутых датчиков *Click). Но впрочем задача Сергея в этом и не состояла.
Просто я занимаюсь автополивом. Но сейчас не сезон и я неспешно курю ПР200 на предмет применения в качестве контроллера системы антиобледенения для одного объекта. Проблема на объекте в том, что мощностей дают мало, а требуется ее много. И необходимо по таймеру включать разные контуры греющего кабеля не более N штук за раз.
(Между прочим, включение нескольких зон одновременно - фишка только продвинутых контроллеров полива для коммерческого использования.)
Наткнулся еще на первые примеры Сергея. Начал над ними работать. И пришел примерно к тому, что Сергей показал в последнем примере. Т.е. главный суточный таймер "пинает" таймеры задержки выключения. При этой схеме можно уйти от не совсем красивой переменной последнего включения.
Ну и применил схему уставки не как принято у "автоматчиков" - время суток включения+время суток выключения, а так как обычно это реализовано в контроллерах полива - время суток включения+длительность включения.
При этом в один UInt32 запихал следующие переменные:
1) 11 бит - минуты суток включения;
2) 7 бит - маска дней недели;
3) 10 бит длительность включения (максимум 1023 минут);
4) 4 бита - номер выхода, который надо включить (4 бита дают 16 шт., естественно).
Тратить один бит на признак вкл/выкл - роскошь. Можно применить время суток включения более 24 часов. Либо длительность установить в ноль.
Последний раз редактировалось vsheveliov; 20.03.2019 в 20:11.
А при чём здесь сколько минут в сутках? Всё зависит с каким минимальным интервалом, т. е. ступенькой нужно назначать время уставок, при минимальной ступеньке в 5 минут диапазон уставок уместится в 9 бит(при 10 минутах в 8 бит), а умножить на 5(или 10) всегда можно вне уставки, с длительностью включения аналогично поступить, а так получается..., короче плохо получается, не рационально биты используются! И ещё хотел добавить, только нечто почти противоположное, вот у Вас выхода включаются очень заморочено, 4 битами, Вам не кажется это странным, когда энергонезависимая память используется только на четверть, короче зачем это делать, если ресурсов более чем достаточно выполнить это по-человечьи?
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Защита от ошибок и от дурака. При 32-х уставках легко ошибиться в ступеньках. Задача - ограничить число включаемых одновременно входов.
Назначаем произвольное время суток на включение. Выставляем произвольную (в пределах разумного и возможного) длительность включения, которая может составлять несколько часов. Никаких ступенек не получится. Ну можно время включения как в тех же поливных контроллерах хантер назначить с шагом 15-10 минут и сэкономить на этом несколько бит. Для подобных применений - не критично.
Когда номер выхода в сохраняем в уставке - имеем бОльшую свободу при выборе времен включения. Можно, конечно привязать номер выхода к номеру уставки. Скажем, первые две уставки - выход 1, следующие две - выход 2 и т.д.
Имеем 32 уставки на 16 выходов - по две уставки на выход. Но один выход нам нужно включить раз в сутки, другой - 3 раза.
Ничего замороченного не вижу, например уставка/задание: в 18.00 по пятницам и субботам включить выход 2 на 4 часа.
Если 4-мя битами включаются 16 выходов, то все биты выключены(0) будет соответствовать включению 1 выхода, все биты включены(1) будет соответствовать 16 выходу, ну и все остальные выхода будут аналогично задаваться, разве это не заморочено?
И как это внешне задаётся и как сделано в программе - это две разные вещи, короче, можно к времени включения добавить время включенного состояния и вычислить время выключения(удобней, чем самому вычислять)), по нему и выключать, а не по таймеру обратного отсчёта времени, надеюсь, понятно получилось объяснить?!
Последний раз редактировалось Сергей0308; 21.03.2019 в 06:44.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
??? Это обычная битовая арифметика. 4-мя битами мы можем отобразить только число от 0 до 15. Ничего сложного, только нужно быть внимательным к очепяткам/ошибкам при написании. Для облегчения распаковки/запаковки уставок я засунул эти функции и связанные преобразования переменных пользовательского интерфейса в макросы - PackSet/UnpackSet. (См вложение.)
Ну во вложении примерно то, что я хочу изобразить. Ваш таймер занимается только подачей сигнала о включении, номера выхода и длительности включения на таймеры выходов. Дальше - не его дело ("я не стратег, я тактик"). Таймеры выходов крутятся самостоятельно - можно приостановить, отменить. И, поскольку ваш таймер минутный, может лучше счетчик ctzu пускать только раз в минуту (блинком или по изменению переменной минуты). Раз в минуту пробежаться по уставкам, избавиться от переменной "Время ПК" и/или не дергать лишний раз таймеры задержки выключения?
Последний раз редактировалось vsheveliov; 21.03.2019 в 10:15.
Подскажите это нормально ?
Если переменная не энергонезависимая то она не работает (а мне нужно чтобы она была не энергонезависимая).
Безымянный.jpg
тест.owl
Вот здесь посмотрите в посте 4559: https://www.owen.ru/forum/showthread...=9398&page=456
Командоаппарат реальногого времени с маской недели на 32 команды 8 канальный_00.PNG
Сделал назначение уставки с дискретностью 5 минут, ну и соответственно диапазон уменьшился для минут в 5 раз с 60 до 12.
А на счёт очереди здесь посмотрите в посте 333: https://www.owen.ru/forum/showthread...=25068&page=34
Макрос очередь 8 Х 8_6_3.PNG
Кстати, самый сложный мой макрос!
Последний раз редактировалось Сергей0308; 18.04.2019 в 18:46.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.