PDA

Просмотр полной версии : 3 Кнопки - 2 хода ПЛК



Frayl
25.09.2012, 09:37
Задача. Есть три кнопки. Заведены на 2 входа In1 и In2. Если активен IN1 То значит нажата кнопка 1. Если In2 то кнопка 2. Если одновременно нажаты то кнопка 3.
Проблемы: Если зажать 1ю и 2ю кнопки(такое возможно в процессе работы) - активируется третья.

Написал такую вот функцию, решив что никто не сможет нажать две кнопки одновременно с разницей во времени в 1мс:

key:=0;
(*запускаем два таймера на передние фронты сигналов с кнопок*)
t1(in:=in1,pt:=t#1ms);
t2(in:=in2,pt:=t#1ms);
IF t1.Q AND t2.Q THEN(*только если оба фронта пришли с разницей не более 1мс считаем, что нажата 3я кнопка*)
key:=3;
ELSE
IF in1 THEN
key:=1;
ELSE
IF in2 THEN key:=2; END_IF;
END_IF;
END_IF;
t1(in:=FALSE);
t2(in:=FALSE);

В эмуляции работает не так как задумано. Это эмуляция работает так и на реальном устройстве будет нормально или у меня в корне неправильная реализация?
То есть я запускаю программу в режиме эмуляции, "зажигаю" два входа и у меня включается 1й и 3 например. Или 2й и 3й.

Yegor
25.09.2012, 09:46
Цикл ПЛК бывает дольше, чем 1 мс, в том числе в симуляторе. Надёжно защититься программными методами здесь нельзя.

Frayl
25.09.2012, 09:51
другого варианта кроме как программного нет. Что же это получается нерешаемая задача?

Yegor
25.09.2012, 09:53
Расскажите больше про конструкцию кнопок и как они размещены. Я буду слушать и есть... в смысле на обед пошёл.

Валенок
25.09.2012, 10:02
Егор имеет ввиду поставить внешнюю взаимоблокировку на 1 и 2-ю ? Не очень верю что нельзя воткнуть.
И не отработаны варианты 1+3, 2+3

Frayl
25.09.2012, 10:02
Кнопки шнайдеровские. Размещены друг за дружкой. Первая подключена к in1, вторая к in2, третья к in1 и in2

kgsh82
25.09.2012, 10:18
Кнопки шнайдеровские. Размещены друг за дружкой. Первая подключена к in1, вторая к in2, третья к in1 и in2

Какая серия кнопок? Может есть возможность поставить кнопку 1НО+1НЗ? При нажатии первой кнопки он разрывает цепь второй и наоборот. Ну а третья - обычная кнопка

Frayl
25.09.2012, 10:25
на самом деле я удивлен. я сам знаю возможность исполнения данного решения. И кнопки именно такие.Но я программист. Интересно знать почему проектировщик схемы сказал что так нельзя делать. Пойду мучать

Frayl
25.09.2012, 10:28
а нет. кнопки обыкновенные и контактов нз/но не поставить

kgsh82
25.09.2012, 10:31
а нет. кнопки обыкновенные и контактов нз/но не поставить


Если попробовать реализовать это программно? (сам не пробовал)

Валенок
25.09.2012, 10:37
проектировщик схемы сказал что так нельзя делать.
Нормальный ответ. Оно ему надо ?
Поменять кнопки или воткнуть реле.

Frayl
25.09.2012, 10:38
чуть выше посмотрите пожалуйста)))

Frayl
25.09.2012, 10:39
Нормальный ответ. Оно ему надо ?
Поменять кнопки или воткнуть реле.

ну два человека работает в команде - проектировщик и программист. Каждый заинтересован в результате, а не в простой отмазе - сам решай свои проблемы.

Валенок
25.09.2012, 10:39
Если попробовать реализовать это программно? (сам не пробовал)
Это автор и хочет.
Чтоб проектировщика не разбудить.

Валенок
25.09.2012, 10:39
Каждый заинтересован в результате,
Оно и видно. Особенно проектировщик

"И изволька мне добыть - то чаво не может быть"

Хотите надежности - внешнее решение. С остальным - гоняйте код.

Frayl
25.09.2012, 10:51
вот я и обсуждаю этот вопрос на форуме - может быть кто-то сталкивался с подобным.

Frayl
25.09.2012, 11:02
Отказались от обработки одновременных нажатий и повесили на реле каждую кнопку.

petera
25.09.2012, 14:58
Задача. Есть три кнопки. Заведены на 2 входа In1 и In2. Если активен IN1 То значит нажата кнопка 1. Если In2 то кнопка 2. Если одновременно нажаты то кнопка 3.
Проблемы: Если зажать 1ю и 2ю кнопки(такое возможно в процессе работы) - активируется третья.

А если так? (на LD и FB)
1.Кнопки работают по одной и не зависимо друг от друга, если нажатие на вторую кнопку происходит, не ранее, например, чем через 100мс после нажатия первой.
Включили In1/In2 и пока удерживаем - кнопка 1/2 вкл.;
Выключили In1/In2 - кнопка 1/2 выключается.
2. Кнопки работают одновременно.
Если включили одновременно In1 и In2 (с задержкой, например, не более 100мс) пока удерживаем оба входа - кнопка 3 вкл;
Если выключили и In1 и In2 - кнопка 3 выключается;
"...Если зажать 1ю и 2ю кнопки(такое возможно в процессе работы) - активируется третья" не наблюдается.

Yegor
25.09.2012, 16:01
"...Если зажать 1ю и 2ю кнопки(такое возможно в процессе работы) - активируется третья" не наблюдаетсяНу как это не наблюдается? Очень даже наблюдается. Сами же пишете:
Если включили одновременно In1 и In2 (с задержкой, например, не более 100мс) пока удерживаем оба входа - кнопка 3 вклПопасть в задержку 100 мс не сложно. А если сделать условие «совсем одновременно» (в один цикл ПЛК), то третья кнопка ненадёжной станет.

Frayl
25.09.2012, 16:57
там стоит по словам проектировщика "два диода/стабилитрона" и обеспечивает разницу в сигналах в микросекунды. Вроде так понял)

petera
25.09.2012, 18:05
Ну как это не наблюдается? Очень даже наблюдается.
В том смысле, что если нажать любую кнопку и удерживать ее и перед нажатием второй подождать, то вторая кнопка вкл. и выкл. свою виртуальную кнопку, а не третью.Как-то так хотел сказать:)

BETEP
26.09.2012, 13:12
Блин.....задержки, время цикла, контакты, сорт кнопок...

все три кнопки обычные, с ОДНОЙ группой контактов, третья развязана с остальными по входам двумя диодами.

два фронта вверх в одном цикле, значит нажата третья кнопка, два фронта вниз--отпустили кнопку. остальное, комбинация первых двух.

petera
26.09.2012, 15:49
Блин.....задержки, время цикла, контакты, сорт кнопок...

все три кнопки обычные, с ОДНОЙ группой контактов, третья развязана с остальными по входам двумя диодами.

два фронта вверх в одном цикле, значит нажата третья кнопка, два фронта вниз--отпустили кнопку. остальное, комбинация первых двух.
Как-то так.

BETEP
27.09.2012, 01:06
Не так. я имел в виду фронт сигнала, т.е переход из состояния 0 в 1, в прошлом цикле было 0, в этом 1, значит есть фронт, фронт вниз, или "задний" было 1 стало 0.
благодаря диодам, оба сигнала придут одновременно т.е. нажатие третьей кнопки отличите всегда, если же какая-то из первых уже нажата, третью кнопку в этот момент не увидеть, но этой ситуации небыло в вопросе.

если есть два свободных транзисторных выхода, сделайте матрицу 2Х2, получите 4 кнопки

petera
27.09.2012, 14:21
Не так. я имел в виду фронт сигнала, т.е переход из состояния 0 в 1, в прошлом цикле было 0, в этом 1, значит есть фронт, фронт вниз, или "задний" было 1 стало 0.

От чего же не так? Все так. И работает, можно проверить и в эмуляторе, выполняя программу по одному циклу. Нужно учитывать логику работы ПЛК - в начале цикла состояние физических входов запоминается и эти состояния используются для текущего цикла. Т.е. изменение состояния входов до начала следующего цикла ПЛК просто не заметит.
В предыдущем примере была некоторая паранойя с использованием RS триггера. Можно и проще.LD как раз для таких задач, все наглядно и понятно (с учетом принципа работы ПЛК).
Фиксация одновременного изменения in1 и in2 ("...переход из состояния 0 в 1, в прошлом цикле было 0, в этом 1, значит есть фронт, фронт вниз, или "задний" было 1 стало 0") выполняется автоматически в первой цепи примера безо всяких дополнительных ухищрений. Результат - состояние кнопки 3 (kn3).
Вторая и третья цепь использует состояние kn3, полученное в первой цепи и состояние входов in1 или in2, которое было на начало цикла. Если уже нажата кнопка 3 (на начало цикла активны in1 и in2), то кнопки 1 и 2 не включаются. Или, если не нажата кнопка 3 (на начало цикла не активны один из входов in1 или in2), то кнопки 1 или 2 включаются.
З.Ы. Инверсные контакты kn1 и kn2 в первой цепи блокируют включение kn3, если нажать вторую кнопку после включения первой и на оборот.