Сообщение от
capzap
зайдите на oscat.de скачайте библиотеку building откройте ПОУ CLICK_MODE и сравните их код с Вашим
Кажется разобрался. Может быть кому-то окажется полезным.
Создал ф. блок (навеяно ф. блоком CLICK_MODE):
Код:
FUNCTION_BLOCK ClickKey
VAR_INPUT
bIn : BOOL;
timLong : TIME := t#2000ms;
END_VAR
VAR_OUTPUT
bSingle : BOOL;
bLong : BOOL;
END_VAR
VAR
timer : TP;
ft1 : F_TRIG;
ft2 : F_TRIG;
END_VAR
timer(in := bIn, pt := timLong);
ft1(clk := bIn);
bSingle := ft1.Q AND timer.Q;
ft2(clk := timer.Q);
bLong := ft2.Q AND bIn;
END_FUNCTION_BLOCK
На соответствующих выходах выдаёт однотактные импульсы. Для того, чтобы нажатие считалось долгим, нужно жать более 2 сек (по умолчанию).
Пример для проверки:
Код:
PROGRAM PLC_PRG
VAR CONSTANT
KEY_START_STOP : WORD := 32;
END_VAR
VAR
bInit : BOOL := TRUE;
bRun : BOOL := FALSE;
bPause : BOOL := FALSE;
click : ClickKey;
END_VAR
IF bInit THEN
ClearScreen(0);
ShowString(0, 0, 0, 'Stopped. ');
bInit := FALSE;
END_IF;
click(bIn := wKbrd = KEY_START_STOP);
IF click.bSingle THEN
IF bPause THEN
bPause := FALSE;
ShowString(0, 0, 0, 'Running... ');
ELSE
bPause := TRUE;
ShowString(0, 0, 0, 'Paused. ');
END_IF
END_IF
IF click.bLong THEN
IF bRun THEN
bRun := FALSE;
ShowString(0, 0, 0, 'Stopped. ');
ELSE
bRun := TRUE;
ShowString(0, 0, 0, 'Running... ');
END_IF
END_IF