PDA

Просмотр полной версии : Нажатие кнопки обрабатывается через раз



kost2
03.12.2013, 22:22
Программа должна обрабатывать нажатие кнопки - в общем обрабатывает, но через раз. Можно оставить так, но хочется разобраться почему.
Кнопка обычная - без фиксации, подключена ко входу МВ110-16Д, который подключен к ПЛК150 по RS485.
Прога на SFC. В текущем шаге в самом начале вызывается такая функция:


RTRIG_BUTTON_START : R_TRIG ;
------------------------------------
IF((DN16 AND 4) > 0) THEN RTRIG_BUTTON_MODE(CLK := TRUE); ELSE RTRIG_BUTTON_MODE(CLK:= FALSE); END_IF;

IF RTRIG_BUTTON_MODE.Q THEN
mode:=mode+1;
IF(mode >= 3)THEN mode:=0;END_IF;
END_IF;

petera
04.12.2013, 03:37
Программа должна обрабатывать нажатие кнопки - в общем обрабатывает, но через раз. Можно оставить так, но хочется разобраться почему.
Кнопка обычная - без фиксации, подключена ко входу МВ110-16Д, который подключен к ПЛК150 по RS485.
Прога на SFC. В текущем шаге в самом начале вызывается такая функция:


RTRIG_BUTTON_START : R_TRIG ;
------------------------------------
IF((DN16 AND 4) > 0) THEN RTRIG_BUTTON_MODE(CLK := TRUE); ELSE RTRIG_BUTTON_MODE(CLK:= FALSE); END_IF;

IF RTRIG_BUTTON_MODE.Q THEN
mode:=mode+1;
IF(mode >= 3)THEN mode:=0;END_IF;
END_IF;

1. Ваша "прога" на ST.:)
2. Эта строчка
IF((DN16 AND 4) > 0) THEN RTRIG_BUTTON_MODE(CLK := TRUE); ELSE RTRIG_BUTTON_MODE(CLK:= FALSE); END_IF;просто "жесть". :eek:
Почему сразу не написать так?
RTRIG_BUTTON_MODE(CLK := DN16.2);

RTRIG_BUTTON_MODE(CLK := DN16.2);
IF RTRIG_BUTTON_MODE.Q THEN
mode:=mode+1;
IF(mode >= 3)THEN mode:=0;END_IF;
END_IF;
3. Объявлена переменная RTRIG_BUTTON_START : R_TRIG ;, а в фрагменте кода используется другая -RTRIG_BUTTON_MODE :confused:
Если это "очепятка", то код работает правильно. В противном случае может не там ищем? Кнопка с каким названием срабатывает через раз BUTTON_START или BUTTON_MODE :confused:

kost2
04.12.2013, 05:46
1. У меня программа разбита на куски на SFC, затем в шагах уже ST. Надо было точнее написать.
2. Потому что я не знал, что можно обращаться к отдельным битам переменной, Ваш вариант конечно намного красивее - так и буду делать. Спасибо. Уже незря тему создавал.
3. Это просто опечатка.

Тогда может ли быть этот глюк по причине того, что у меня ПЛК с МВ общаются на скорости 9600 ?

Sergey666
04.12.2013, 09:05
Там большее значение имеет период опроса МВ.
В вашем случае кнопку надо удерживать подольше или задействовать счетчик в МВ.