МдаСпасибо за помощь, придется на ST и ПЛК писать. Квадратики не для меня)
МдаСпасибо за помощь, придется на ST и ПЛК писать. Квадратики не для меня)
xarfan - Если вы алгоритм ST внимательно посмотрите, то увидите, что там тоже самоетолько соединительных линий не видно, они у вас в голове
![]()
Можно и кольцевой счётчик по-человечьи сделать(мелкому шикарный подарок) и не только счётчик, например так:
Кольцевой счётчик_4.PNG
Последний раз редактировалось Сергей0308; 25.10.2018 в 19:26.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Sel лень разбираться в вашем творчестве. Начните с того, что чтобы клавиша работала на удержание и не мешала обычному режиму работы то обычный режим должен срабатывать по ЗАДНЕМУ фронту. Тогда удерживая клавишу можно этот фронт заблокировать.
И второй момент - зачем удерживать соседнюю кнопку, если можно удерживать ту же самую и применять действие, которое вы прекрасно увидите по смене режима лампы ?
Доброй ночи.
Квадратики даются с трудом.
Подскажите, как осуществить алгоритм: Кнопка без фиксации. При обычной работе с кнопкой, выход меняет статус. При удержании кнопки в нажатом состоянии более 3-х секунд, при отпускании кнопки статус выхода не именяется.
Суть: С кнопки включаем/выключаем лампу. Нажали кнопку, включается лампа, отпустили кнопку. Потом нажимаем кнопку на удержание 3 сек. И нужно, чтобы отпустив кнопку лампа не погасла.
Вроде все просто, но прога меняет статус выхода как ТОН меняет свой.
1.jpg
Посмотрел ранее, мне отвечали на этот вопрос, предложив добавить ТР. Но я хочу полностью уйти от таймеров в последствии. Есть ли другие способы не считывать изменение статуса кнопки, при длительном нажатии.
(год назад я решил этот вопрос без ТР. Но не помню как, а исходники проекта умерли вместе с винтом)
Последний раз редактировалось Sel; 05.11.2018 в 00:48.
Можно не мудрить, есть же Д-триггер, делайте как хочется, я до конца не понял, как Вы хотите, лучше диаграмму состояний, для ясности!
Т-триггер_4.PNG
Насколько смог Вас понять, у меня так и было, поэтому мне непонятно, что Вы хотите!
Вот мой последний вариант, в преведущих аналогично и уставка времени в мс, при превышении времени нажатия выше этого времени импульс не проходит:
Уставка времени.PNG
Последний раз редактировалось Сергей0308; 05.11.2018 в 01:10.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Да, Вы мне в прошлый раз советовали использовать Д-триггер. Но на нем та же обвязка из ТР
Вот Ваш пример
1.jpg
На счет диаграммы не понимаю как ее нарисовать.
Суть простая, это часть предыдущей задачи - первой клавишей (КЛ1) управляем лампой 1 (Л1), второй клавишей (КЛ2) лампой 2 (Л2). Обычные нажатия 1КЛ1 вкл.выкл Л1, при удержании КЛ1 более 3-х с, нажимая на КЛ2 меняем режимы лампы. Т.е. после удержания КЛ1, Л1 не должна никак реагировать, а в моем примере она включается.
Убрав задержки, я получил не верные срабатывания. При отпускании КЛ2 после удержания, включается Л2. Так же есть зависимость в последовательности отпускания клавиш. С задержками они тоже есть, но реже.
Сейчас в прибор залита программа, которая лишена этих тонкостей, т.е. она работает как и должна. Но я не помню что я там нарисовал. Помню только что я почти все строил на Д-триггерах, так как с битами и другими регистрами не разобрался.
Вам всё равно надо как-то время измерять и Вам разумно предложили измерять время таймером, но Вы понятное дело, лёгких путей не ищете и таймеры Вам неприемлемы, тогда задача становится неразрешимой! Время можно измерять и циклами программы, но это всё равно таймер получится, только сложней станет! Хорошо если вспомните, как Вы год назад время считали без таймеров, пишите, вместе посмеёмся!
И Вы наверно не смотрели мой последний вариант программы для ламп, там не надо секунду(как в первых вариантах) ждать для переключения режимов работы и включения-выключения ламп, можно "щёлкать" без перекуров, ТР будет перезапускаться, что ещё надо?
Последний раз редактировалось Сергей0308; 05.11.2018 в 01:55.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Пример посмотрел, спасибо. Я понимаю, что связка, с использованием задержки выключения ТР спасает от ложных срабатываний, срезая передний фронт, но это костыль, который будет приводить к несрабатываниям (нажал на кнопку и задумался). А хотелось бы уйти от этого ограничения.
Понятно, что таймеры нужны будут, особенно там, где событие по удержанию клавиши. Но меня убивает ограничение, которые без танцев с бубнами не обойти. Те же таймеры удержания для переключения режимов это вынужденная мера из-за того, что я не понимаю как переключить контуры управления лампами. В коде все просто с точки зрения условий, а вот лоджик очень сильно ограничивает (если бы можно было вводить условия кодом, все было бы проще).
Для понимания чего хочу. Вариант временный. Удержание 2-х нажатых клавиш более 5-ти секунд выключает свет во всей квартире (здесь точно нужен таймер). l1 влк\вык лампу с 7-ю схемами включения Лампа_1, l2 управляет одной лампой Лампа_2. Если зажимаем l2, то нажатием l1 меняем режимы включения Лампа_1. (это реализовано). Выключение всего света в квартире производится путем сброса макроса Т-риггера в 0 (для Вашего примера везде устанавливается Q=0)
Что не реализовано:
1. если зажималась l2 и переключались режимы Лампа_1, то статус Лампа_2 не меняется (на данный момент Лампа_2 реагирует на любое нажатие)
2. если, после изменения режима Лампа_1 сначала отпустить l2, а потом l1, то Лампа_1 выключается.
3. При отпускании обеих клавиш после сброса, лампы должны оставаться выключенными. (в данном примере, если после сброса первой отпустить l2, Т-триггер поменяет статус, что приведет к выключению лампы. В случае сброса, если отпустить клавишу после обнуления переменных, триггер будет отрабатывать в обычном режиме)
4. Все переключения ламп должны происходить только если нет сброса (не уверен на счет заднего фронта выключателя, так как экспериментируя с фронтами, некоторые замечания уходят).
В этом примере хорошо, если бы прямая линия от l2 до Т-триггер2 разрывалась, если при удержании l2 была нажата l1 и восстанавливалась только при отпускании l2. Такое своеобразное программное реле. Даже не знаю как проще объяснить, чтобы Вы меня поняли.
пример 1:
1.jpg
Теперь вариант с двумя многорежимными лампами.
Я убрал таймеры, которые заставляют лишнее время стоять у выключателя, в итоге переключая режимы на Лампа_1 (удерживаем l2 и щелкаем l1), Лампа_1 переключает режимы, Лампа_2 мигает и переключает режимы.
Пример 2:
2.jpg
Для решения моего вопроса хорошо помогла бы функция оценки статуса выключателя (нажат\отпущен), в этом случае, можно сделать условие:
если были нажаты клавиши l1 и l2, то Лампа_2 игнорирует выключатель; иначе слушается
Последний раз редактировалось Sel; 05.11.2018 в 14:15.
У меня создаётся впечатление, что Вы не смотрели мои варианты включения-выключения ламп, там как раз как Вы хотите при переключении режима работы кнопок с первого(включение-выключение) на второй(переключение по кругу выходов одного светильника 1-8), как раз первый режим блокируется на время и если кнопка не нажимается некоторое время(10 с) опять переключается на первый режим работы! Вам ничего и думать-понимать не нужно, можно сделать аналогично! И если Вы сторонник текстовых языков, то только из-за принципа должны были взять что-то вроде СПК, дюймов на 10 и не заморачиваться, там на экране места хватит для двух кнопок на каждый светильник и главное реализовали бы свои способности, может завидовать все вам стали!
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.