Вход

Просмотр полной версии : ПР100 переключение выходов по одному входу.



EvilH0mer
26.03.2024, 15:57
Добрый день. Не смог найти или не правильно сформулировал запрос. Подскажите пожалуйста, как реализовать переключение выходов ПР100 по одному входу. Подаём импульс "1" на вход I1, включается выход Q1. Подаём следующий импульс, включается выход Q2, Q1 выключается. Подаём следующий, Q2 отключается, включается Q3, при следующем импульсе отключается Q3 включается Q1 и так по кругу.

melky
26.03.2024, 15:58
используйте счетчик и сравнение например. Вариантов на самом деле масса, этот не единственный.

EvilH0mer
26.03.2024, 16:01
Спасибо, попробую так, интересно как лучше, сделать.

melky
26.03.2024, 16:10
Например так можно. если по кругу.
а блин... после последнего автоматом первый не включится, у вас он есть в условии. А выключить все в условии нет :)

kondor3000
26.03.2024, 16:15
Например так можно. если по кругу.
а блин... после последнего автоматом первый не включится, у вас он есть в условии. А выключить все в условии нет :)

В N записать 1 надо и всё)
SEL =>> Write to FB, запись 1 или 0 для сброса.

EFrol
26.03.2024, 16:21
Еще вариант:
74726

EvilH0mer
26.03.2024, 16:21
Да спасибо большое, так и сделал. Я входы то указал для 74727 примера, но сути не меняет, в макросе так же:) Интересны ещё варианты.

melky
26.03.2024, 16:39
kondor3000 так при запуске программы первый вход окажется включен.
По идее надо все выключено, потом короткими нажатиями переключаем по кругу, а длинным например отключаем все.

а блин, про SEL сразу не понял. да, после первого нажатия можно в N записать 1, а для длинного нажатия запись 0 и сброс.

Dimensy
26.03.2024, 16:40
Была где-то тема с т-триггерами и круговым сдвигом

EFrol
26.03.2024, 17:10
Еще вариант: :rolleyes:
74728

kondor3000
26.03.2024, 19:02
так при запуске программы первый вход окажется включен.
По идее надо все выключено, потом короткими нажатиями переключаем по кругу, а длинным например отключаем все.

а блин, про SEL сразу не понял. да, после первого нажатия можно в N записать 1, а для длинного нажатия запись 0 и сброс.

Сразу видно, что вы с Лоджиком не работаете, если в N записать 1 сразу, то при включении будет 0. Чтобы записать на выход 1 надо кратковременно сделать сброс.
Что и будет, сделано после каждого прохода по кругу.
А SEL нужен только для полного сброса.

EvilH0mer
26.03.2024, 19:34
Еще вариант: :rolleyes:
74728

А что это за переключатель? Что то из расширений или макрос?

kondor3000
26.03.2024, 19:36
А что это за переключатель? Что то из расширений?

Вот, переключатель на 3 выхода (можно изменить) со сбросом. 74730

EFrol
26.03.2024, 19:46
А что это за переключатель? Что то из расширений или макрос?

В принципе может быть всё, что угодно, например: :rolleyes:


function_block sw
var_input
U : bool;
end_var

var_output
Q1 : bool;
Q2 : bool;
Q3 : bool;
Q4 : bool;
end_var

var
State : udint := 8;
Trig : SYS.RTRIG;
end_var

Trig(I:=U);
if Trig.Q then
State := shl(State, 1); if State.4 then State := 1; end_if
Q1:=State.0; Q2:=State.1; Q3:=State.2; Q4:=State.3;
end_if


end_function_block

EvilH0mer
26.03.2024, 19:54
Вот, переписал код на ST со скрина EFrol 74730 Переключатель на 3 выхода (можно изменить) со сбросом.

Позновательно, спасибо.

EvilH0mer
26.03.2024, 19:57
Весьма доходчиво. В ответах получил даже больше информации чем предполагал. Спасибо.

kondor3000
26.03.2024, 20:16
Весьма доходчиво. В ответах получил даже больше информации чем предполагал. Спасибо.

Скрин схемы на DTRIG выложил Dimensy , но зачем то удалил 74735

Dimensy
26.03.2024, 20:23
Скрин схемы на DTRIG выложил Dimensy , но зачем то удалил 74735

Да я попробовал к нему сброс прикрутить и у меня, вообще, все перестало работать, даже без сброса, поэтому удалил
Хотя, так, вроде работает
74737