Показано с 1 по 10 из 4481

Тема: разные вопросы новичка

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Это Вы так придумали алгоритм работы, что надо ждать 5 секунд, нажав одну кнопку, что бы переключился режим работы другой, для всех остальных людей, кроме Вас, такой проблемы не существует в принципе, можно сразу без задержки переключить режим работы другой кнопки и Вы ещё пытаетесь несовершенство ваших задумок преподнести как какой-то косяк ПР или ОЛ, по крайней мере это неразумно, а по мне просто дикость дикая, мягко выражаясь!

    2 лампы по 8 режимов_6.PNG
    Спасибо за пример. Но я бы хотел убрать и TP. В Вашем примере если переключить режим Лампы_1 и отпустить обе клавиши и управиться меньше чем за 1с, то Лампа_2 погаснет (если была включена) и наоборот. А если уменьшить значение ТП, то будет мало времени на "подумать" с нажатым выключателем. Когда такое возможно - я точно знаю, что следующий режим лампы нужный и я нажму сразу 2 клавиши и отпущу их, это займет менее секунды, в итоге вторая лампа или включится или выключится. Согласен, это редко бывает, когда нажатие меньше сек, но бывает.

    Кстати, задумка самая обычная - чтобы не было лишних срабатываний или не срабатываний, а если задумался, то выключатель выполнил свою функцию. У меня больше года свет работает на ПР и эти тонкости оказались актуальны. Сейчас подключена 1 лампа с 3-мя режимами и 1 обычная лампа, управляются с 2-х выключателей . При этом описанные выше нюансы не возникают. Но я не помню какими условиями я этого добился. Помню только, что условий было мало и делал на DTRIG. Единственная тонкость работы нынешнего переключения - лампы вкл\выкл по заднему фронту, а переключение режимов по переднему. Короче, не помню, а восстановить не могу.

    Сейчас ковырялся, надумал следующий алгоритм. Если нажимались 2 клавиши одновременно (например l2 зажата, l1 выбираем режим), создаем переменную и сохраняем в ней логическую 1 (в моем примере DTRIG2). При срабатывании заднего фронта l2 (отпускаем клавишу) проверяем условие DTRIG2 равен 1, статус Лампа_2 не меняется и обнуляется DTRIG2. Если же DTRIG2 равен 0, то меняем статус Лампа_2 на противоположное.
    В принципе, для Лампа_2 я этой логикой убрал лишние срабатывания и предыдущие замечания. Но вот если удержать l1 и быстро понажимать на l2, то Лампа_2 меняет свой статус. На железе, чтобы получить этот глюк, надо нажимать клавишу со скоростью 1 раз в цикл. Пока не знаю реально это или нет, так как не знаю времени цикла.
    Чтобы вообще убрать лишнее срабатывание, надо разорвать связь между FTRIG1 и DTRIG1, но как это сделать, я не знаю. (есть идея убрать все в переменные и работать с переменными, но на практике пока не проверял, да и в прошлый раз, когда писал программу, столкнулся с какими-то сложностями, когда лоджик оказался записывать переменную)

    Пример для Лампы с 3-мя режимами и для 1 обычной. Но, в дальнейшем прейду на 2 многорежимные лампы. Отлаживать проект пока проще на одной многорежимной лампе. Кстати, так как для многорежимной лампы пока не ввел алгоритм разделения выключателя и триггера, то можно посмотреть как она себя ведет, если зажать l1 и нажимать на l2 (в реальной жизни пользователь выбрал нужный режим Лампа_1 и отпустил сначала l2, а потом l1).
    Пример 3:
    3.jpg

    P.S. Нашел, почему при быстром нажатии меняется статус лампы. У DTRIG приоритет по сбросу. Если команда на сброс приходит одновременно с одновременным нажатием 2-х клавиш, то программа не запоминает, что клавиши были нажаты. Надо еще условие добавлять перед DTRIG2. Ндя, куда проще убрать связь между кнопкой и триггером, но просто в теории, а на практике...
    Вложения Вложения
    Последний раз редактировалось Sel; 05.11.2018 в 22:00.

  2. #2
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,441

    По умолчанию

    Цитата Сообщение от Sel Посмотреть сообщение
    Спасибо за пример. Но я бы хотел убрать и TP. В Вашем примере если переключить режим Лампы_1 и отпустить обе клавиши и управиться меньше чем за 1с, то Лампа_2 погаснет (если была включена) и наоборот. А если уменьшить значение ТП, то будет мало времени на "подумать" с нажатым выключателем. Когда такое возможно - я точно знаю, что следующий режим лампы нужный и я нажму сразу 2 клавиши и отпущу их, это займет менее секунды, в итоге вторая лампа или включится или выключится. Согласен, это редко бывает, когда нажатие меньше сек, но бывает.

    Кстати, задумка самая обычная - чтобы не было лишних срабатываний или не срабатываний, а если задумался, то выключатель выполнил свою функцию. У меня больше года свет работает на ПР и эти тонкости оказались актуальны. Сейчас подключена 1 лампа с 3-мя режимами и 1 обычная лампа, управляются с 2-х выключателей . При этом описанные выше нюансы не возникают. Но я не помню какими условиями я этого добился. Помню только, что условий было мало и делал на DTRIG. Единственная тонкость работы нынешнего переключения - лампы вкл\выкл по заднему фронту, а переключение режимов по переднему. Короче, не помню, а восстановить не могу.

    Сейчас ковырялся, надумал следующий алгоритм. Если нажимались 2 клавиши одновременно (например l2 зажата, l1 выбираем режим), создаем переменную и сохраняем в ней логическую 1 (в моем примере DTRIG2). При срабатывании заднего фронта l2 (отпускаем клавишу) проверяем условие DTRIG2 равен 1, статус Лампа_2 не меняется и обнуляется DTRIG2. Если же DTRIG2 равен 0, то меняем статус Лампа_2 на противоположное.
    В принципе, для Лампа_2 я этой логикой убрал лишние срабатывания и предыдущие замечания. Но вот если удержать l1 и быстро понажимать на l2, то Лампа_2 меняет свой статус. На железе, чтобы получить этот глюк, надо нажимать клавишу со скоростью 1 раз в цикл. Пока не знаю реально это или нет, так как не знаю времени цикла.
    Чтобы вообще убрать лишнее срабатывание, надо разорвать связь между FTRIG1 и DTRIG1, но как это сделать, я не знаю. (есть идея убрать все в переменные и работать с переменными, но на практике пока не проверял, да и в прошлый раз, когда писал программу, столкнулся с какими-то сложностями, когда лоджик оказался записывать переменную)

    Пример для Лампы с 3-мя режимами и для 1 обычной. Но, в дальнейшем прейду на 2 многорежимные лампы. Отлаживать проект пока проще на одной многорежимной лампе. Кстати, так как для многорежимной лампы пока не ввел алгоритм разделения выключателя и триггера, то можно посмотреть как она себя ведет, если зажать l1 и нажимать на l2 (в реальной жизни пользователь выбрал нужный режим Лампа_1 и отпустил сначала l2, а потом l1).
    Пример 3:
    3.jpg

    P.S. Нашел, почему при быстром нажатии меняется статус лампы. У DTRIG приоритет по сбросу. Если команда на сброс приходит одновременно с одновременным нажатием 2-х клавиш, то программа не запоминает, что клавиши были нажаты. Надо еще условие добавлять перед DTRIG2. Ндя, куда проще убрать связь между кнопкой и триггером, но просто в теории, а на практике...
    Можно конечно и все таймеры(ТР) убрать, но возможно это не принесёт счастья, если сейчас допустим Вы случайно нажали какую-то кнопку, можно подержать её не менее секунды и ничего не случится при её отпускании, то тогда это станет невозможным! Вы же рассматриваете какие-то случайные нажатия?! Но попытка - не пытка! У Вас как будто не лампочка, а ядерная боеголовка! Применяйте мажоритарную логику, типа если в течении 5 минут более 100 раз повторится какая-то команда, то будет выполнена, тогда наверняка ничего лишнего не включится, не переключится, одна трудность: Вам минимум 100 раз придётся команду выполнять и укладываться по времени, Вы так хотите?
    Последний раз редактировалось Сергей0308; 05.11.2018 в 22:21.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  3. #3
    Пользователь Аватар для Василий Кашуба
    Регистрация
    20.11.2011
    Адрес
    Ставрополь
    Сообщений
    2,552

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Можно конечно и все таймеры(ТР) убрать, но возможно это не принесёт счастья, если сейчас допустим Вы случайно нажали какую-то кнопку, можно подержать её не менее секунды и ничего не случится при её отпускании, то тогда это станет невозможным! Вы же рассматриваете какие-то случайные нажатия?! Но попытка - не пытка! У Вас как будто не лампочка, а ядерная боеголовка! Применяйте мажоритарную логику, типа если в течении 5 минут более 100 раз повторится какая-то команда, то будет выполнена, тогда наверняка ничего лишнего не включится, не переключится, одна трудность: Вам минимум 100 раз придётся команду выполнять и укладываться по времени, Вы так хотите?
    Сергей предложи ему использовать XOR на входах 1 и 2, чтобы при одновременном нажатии сигнал от них не проходил.

  4. #4

    По умолчанию

    Цитата Сообщение от Василий Кашуба Посмотреть сообщение
    Сергей предложи ему использовать XOR на входах 1 и 2, чтобы при одновременном нажатии сигнал от них не проходил.
    И как только я отпущу одну из клавиш, отработает вторая. В этом то вся и проблема, чтобы сигнал обрубить и не пустить его дальше. Вся логика сигнал не рубит, а пускает дальше, как только условие соблюдается

  5. #5
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,590

    По умолчанию

    Цитата Сообщение от Sel Посмотреть сообщение
    И как только я отпущу одну из клавиш, отработает вторая. В этом то вся и проблема, чтобы сигнал обрубить и не пустить его дальше. Вся логика сигнал не рубит, а пускает дальше, как только условие соблюдается
    ну так напишите таблицу истинности, внесите туда все свои алгоритмы и стразу станет ясна вся картина, на какой логике это можно сделать. В СДНФ/СКНФ нет ни каких таймеров как Вам и хочется
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #6

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Вы так хотите?
    Все гораздо проще, я хочу удобно. А значит должно сработать с первого раза и правильно (даже если пользователь я сделал что-то не так).
    А на счет "случайно нажали какую-то кнопку, можно подержать её не менее секунды" мне ближе заложить двойное быстрое нажатие, чтобы восстановить режим. Не дружу я со всем удержаниями кнопок, поэтому стараюсь от них уйти.

  7. #7
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,441

    По умолчанию

    Цитата Сообщение от Sel Посмотреть сообщение
    Все гораздо проще, я хочу удобно. А значит должно сработать с первого раза и правильно (даже если пользователь я сделал что-то не так).
    А на счет "случайно нажали какую-то кнопку, можно подержать её не менее секунды" мне ближе заложить двойное быстрое нажатие, чтобы восстановить режим. Не дружу я со всем удержаниями кнопок, поэтому стараюсь от них уйти.
    Короче, насколько Вас понял, Вы так хотели, без всяких таймеров:

    2 лампы по 8 режимов_8.PNG
    Вложения Вложения
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  8. #8

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Короче, насколько Вас понял, Вы так хотели, без всяких таймеров:

    2 лампы по 8 режимов_8.PNG
    Спасибо, то, что надо.


    Начал собирать временную сборку для ПР200. Добавил в нее Ваш пример но переделал на одну многорежимную лампу и заменил Т-триггер на свой макрос, который работает через DTRIG. В итоге в проекте, включени\выключение лампы происходит только по завершению отсчета ТР. При этом это единственный триггер, который ждет окончания отсчета, все остальные отрабатывают за 1 цикл. Например, если включить пошаговое выполнение, смоделировать одновременное нажатие l2, l3, l6, пройти цикл и отпустить l2, l3, l6 то в следующем цикле будут активны только Q2 и Q3, чтобы активировался Q5 нужно шагать до истечения таймера ТР. Если же запускать управление лампой в отдельном проекте, все происходит за 1 цикл.
    Как вариант, именно для этого выключателя вместо DTRIG использовать XOR (в этом случае проект отрабатывает за 1 цикл)
    Пробовал уйти от макроса и в поле проекта прописал триггер. Как только в цепочке именно этого выключателя появляется триггер, исполнение зависает на время, указанное для ТР.
    Это фича лоджика, или на железе будет так же? Если на железе, то как отвязать триггер от ТР?

    Макрос для кнопки со сбросом:
    без фиксации.jpg

    Фрагмент проекта в котором проявляется фича:
    лампа.jpg
    Вложения Вложения

  9. #9
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,122

    По умолчанию

    Цитата Сообщение от Sel Посмотреть сообщение
    Спасибо, то, что надо.


    Начал собирать временную сборку для ПР200. Добавил в нее Ваш пример но переделал на одну многорежимную лампу и заменил Т-триггер на свой макрос, который работает через DTRIG. В итоге в проекте, включени\выключение лампы происходит только по завершению отсчета ТР. При этом это единственный триггер, который ждет окончания отсчета, все остальные отрабатывают за 1 цикл. Например, если включить пошаговое выполнение, смоделировать одновременное нажатие l2, l3, l6, пройти цикл и отпустить l2, l3, l6 то в следующем цикле будут активны только Q2 и Q3, чтобы активировался Q5 нужно шагать до истечения таймера ТР. Если же запускать управление лампой в отдельном проекте, все происходит за 1 цикл.
    Как вариант, именно для этого выключателя вместо DTRIG использовать XOR (в этом случае проект отрабатывает за 1 цикл)
    Пробовал уйти от макроса и в поле проекта прописал триггер. Как только в цепочке именно этого выключателя появляется триггер, исполнение зависает на время, указанное для ТР.
    Это фича лоджика, или на железе будет так же? Если на железе, то как отвязать триггер от ТР?

    Макрос для кнопки со сбросом:
    без фиксации.jpg

    Фрагмент проекта в котором проявляется фича:
    лампа.jpg
    Нафига в макросе D триггер, который используется как обычный SR триггер?
    Захват-1.png
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  10. #10

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Нафига в макросе D триггер, который используется как обычный SR триггер?
    Захват-1.png
    Потому что мне так проще. А, вообще это дело привычки. Если рассматривать именно как блок управления кнопкой, то туда и DTRIG, и SR, и XOR подходят и на всех можно организовать принудительный сброс. Но, так как я новичек, то я беру что мне проще. В DTRIG есть гарантированный сброс и мне это нужно. Да и не думаю, что DTRIG в рамках загрузки Пр200+прм, при минимальных расчетах, сильно съест рессурсы.

    P.S. а если относительно моего вопроса, то любой триггер заставляет ждать окончания отсчета ТР.

Похожие темы

  1. ПЛК 110 - Вопросы новичка?
    от di-s в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 15.04.2025, 16:38
  2. Вопросы новичка!!!
    от sau в разделе ПЛК1хх
    Ответов: 42
    Последнее сообщение: 02.05.2022, 19:57
  3. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 14:39
  4. Вопросы полного новичка
    от Korion в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.02.2010, 10:08
  5. Вопросы новичка по ПЛК
    от Ollegator в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.07.2009, 09:29

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •