Цитата Сообщение от FPavel Посмотреть сообщение
Я бы грешил на механические контакты кнопок и концевиков.
Поставьте на каждый дискретный вход с кнопками, от которых возможен счёт, по схеме устранения дребезга контактов на основе таймеров и RS-триггера.
Постоянную фильтра сделайте от 20мс - обычно этого достаточно.
Что-то типа


Или в текстовом виде
Код:
VAR
	(* переменные для обработки положения переключателя "Насосы в автоматическом режиме" *)
	bPumpAtAuto		: BOOL;				(* обработанное антидребезгом состояние переключателя *)
	tonPumpAtAuto		: TON;				(* переключатель в "АВТО" - после паузы антидребезга *)
	tofPumpAtManual		: TOF;				(* переключатель в "РУЧНОМ" - после паузы антидребезга *)
	rsPumpAtAutoStatus	: RS;				(* переключатель в "АВТО" - управляется от состояний нажата/отпущена после паузы антидребезга *)
	rtrigPumpAtAuto		: R_TRIG;			(* одиночный импульс при переключении в автоматический режим *)
END_VAR


(*--------------------------------------------------------------------------*)
(* переключатель "Насосы в автоматическом режиме"							*)
(*--------------------------------------------------------------------------*)
(* Проверка нажатия кнопки b_Button с подавлением дребезга *)
tonPumpAtAuto(in:=xPumpAtAuto, pt:=t#20ms);
tofPumpAtManual(in:=xPumpAtAuto, pt:=t#20ms);
rsPumpAtAutoStatus(SET:=tonPumpAtAuto.q, reset1:=NOT tofPumpAtManual.Q);
rtrigPumpAtAuto(clk:=rsPumpAtAutoStatus.Q1);
bPumpAtAuto:=rsPumpAtAutoStatus.Q1;
Очень полезная информация.