Сергей0308 Именно здесь я и нашел свою ошибку.
Сергей0308 Именно здесь я и нашел свою ошибку.
Может тогда вывести на экран номер уставки, что последней сработала, тогда будет легче понять, что время сбито? А то действительно, когда много уставок, непонятно какая сработала!
Вот, как обещал, добавил на экран номер последней сработавшей уставки:
Звонок на 8 цехов(выходов) с маской недели, экран_2.PNG
Звонок на 8 цехов(выходов) с маской недели_2.PNG
Последний раз редактировалось Сергей0308; 20.03.2019 в 02:43.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
До хантера далековато. Время включения выходов не регулируется. Нет очереди включения зон ("входов") с тем, чтобы гарантировать включение только одного выхода. Нет % регулировки длительности включения всех входов. Нет обработки датчиков (дождя, ветра и прочего семейства хантеровских нормально замкнутых датчиков *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.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Вот здесь посмотрите в посте 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.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.