Просмотр полной версии : проблема с первым запуском
Помогите разобраться при первом заходе в этот кусок программы не срабатывает таймер последующая работа выполняется, таймер срабатывает в чем проблема растолкуйте.
(*НЕ СРАБОТАЛ НЕ ОДИН ДАТЧИК *)
ELSIF NOT ZCPAB_1 AND NOT KTH_2 THEN
TRANS :=TRUE;
TON_6(IN:=(TON_3.Q OR TON_5.Q) , PT:=T#1.5S , Q=> , ET=> );
IF TON_6.Q THEN
IF fn THEN(*флаг направления*)
TON_3(IN:=0 , PT:=T#10S , Q=> , ET=> );
ELSE
TON_5(IN:=0 , PT:=T#10S , Q=> , ET=> );
END_IF
END_IF
(*10b10 происходит не правильное переключение???????????????????*)
IF NOT TON_3.Q OR NOT TON_5.Q THEN
TON_6(IN:= 0, PT:=T#1.5S , Q=> , ET=> );
IF fn THEN(*флаг направления*)
K_2:=TRUE;
TON_3(IN:=K_2 , PT:=T#10S , Q=> , ET=> );
IF TON_3.Q THEN
K_2:=FALSE;
fn:= FALSE;
END_IF
ELSE
K_1:=TRUE;
TON_5(IN:=K_1 , PT:=T#10S , Q=> , ET=> );
IF TON_5.Q THEN
K_1:=FALSE;
fn:= TRUE;
END_IF
END_IF
END_IF
Flomaster
23.07.2010, 09:40
о каком из таймеров идет речь? у вас их в этом куске кода 3 штуки.
Малышев Олег
23.07.2010, 09:46
ВСЕ РАБОТЫ с таймерами следует вынеси из if блоков. Сам несколько раз натыкался на эти грабли. таймеры в основной код а внутри блока if анализ .Q переменных.
о каком из таймеров идет речь?
TON_6
таймеры в основной код а внутри блока if анализ .Q переменных.
Мне TON_6 нужно в определенное время сбрасывать Я что-то не пойму как это сделать.
lara197a
23.07.2010, 13:19
так и вынесите его за If.
Вынес за if не помогло
Ton_6(in:=(ton_3.q Or Ton_5.q) , Pt:=t#1.5s , Q=> , Et=> );
Выполняется истина и ложное состояние в этом в этом куске кода при первом запуске , а потом работает нормально подскажите что я делаю не так.
IF fn THEN(*флаг направления*)
K_2:=TRUE;
TON_3(IN:=K_2 , PT:=T#10S , Q=> , ET=> );
IF TON_3.Q THEN
K_2:=FALSE;
fn:= FALSE;
END_IF
ELSE
K_1:=TRUE;
TON_5(IN:=K_1 , PT:=T#10S , Q=> , ET=> );
IF TON_5.Q THEN
K_1:=FALSE;
fn:= TRUE;
END_IF
END_IF
lara197a
23.07.2010, 15:11
Уважаемый bango по куску кода трудно сказать, может ошибка в другой части программы.
Все же попробуйте убрать и остальные таймеры, а в IF проверяйте только условия и состояния переменных.
Возможно ошибка в том, что Вы взводите по условию таймер, потом это условие более не проверяется и не происходит вызов следующего условия. У Вас внутри одного условия вызова находятся несколько других условий.
Попробуйте в режиме эмуляции проверить работу в пошаговом режиме.
Малышев Олег
23.07.2010, 19:19
Настоящая жесть - начал переписывать без if -
констатирую - все не правильно. Напишите что должна делать программа
я напишу в несколько строк. Пока пример что можно было сделать.
TON_6(IN:=PABOTA AND (TON_3.Q OR TON_5.Q) , PT:=T#1.5S , Q=> , ET=> );
TON_3(IN:=PABOTA AND TON_6.Q AND fn , PT:=T#10S , Q=> , ET=> );
TON_5(IN:=PABOTA AND TON_6.Q AND NOT fn, PT:=T#10S , Q=> , ET=> );
K_2:=((NOT TON_3.Q) OR (NOT TON_5.Q)) AND fn;
Малышев Олег
23.07.2010, 19:44
Если я правильно понял к1 и k2 включаются по таймеру последовательно на 10 секунд - если нужно между ними 1.5 секунды задержки пишем
VAR
RS_1: RS;
RABOTA: BOOL;
f_trig_k2: F_TRIG;
f_trig_k1: F_TRIG;
K2: BOOL;
TP_K2: TP;
TON_Wait1_5_1: TON;
TON_Wait1_5_2: TON;
K1: BOOL;
TP_K1: TP;
END_VAR
TON_Wait1_5_1(in:=(NOT RS_1.Q1) AND RABOTA AND NOT f_trig_k2.q,pt:=t#1500ms);
TP_K1(in:=TON_wait1_5_1.q,pt:=t#10s,q=>K1);
f_trig_k1(CLK:=K1);
TON_Wait1_5_2(in:=RS_1.Q1 AND RABOTA AND NOT f_trig_k1.q,pt:=t#1500ms);
TP_K2(in:=TON_wait1_5_2.q,pt:=t#10s,q=>K2);
f_trig_k2(CLK:=K2);
RS_1(SET:=f_trig_k1.q,RESET1:=f_trig_k2.q);
Вроде так -
можно было бы проще но надо будет думать... :)
покажите мастер класс.
опрашиваем флаг направления если флаг направления ложно включить к1 и запустить таймер на 10с после отработки таймера сделать стоп к1 запустить таймер на 1,5с после отработки таймера установить флаг в истинное состояние и включить к2 и запустить таймер на 10с после отработки таймера сделать стоп к2 запустить таймер на 1,5с после отработки таймера установить флаг направления ложно и так по кругу.
я написал так
IF PABOTA THEN
IF fn THEN
TON_5(IN:=0, PT:=T#5S , Q=> , ET=> );
TON_6(IN:=PABOTA , PT:=T#1.5S , Q=> , ET=> );
IF TON_6.Q THEN
K_2:=TRUE;
TON_3(IN:=K_2 , PT:=T#5S , Q=> , ET=> );
IF TON_3.Q THEN
K_2:=FALSE;
TON_6(IN:=0 , PT:=T#1.5S , Q=> , ET=> );
fn:=FALSE;
END_IF
END_IF
ELSE
TON_3(IN:=0, PT:=T#5S , Q=> , ET=> );
TON_6(IN:=PABOTA , PT:=T#1.5S , Q=> , ET=> );
IF TON_6.Q THEN
K_1:=TRUE;
TON_5(IN:=K_1 , PT:=T#5S , Q=> , ET=> );
IF TON_5.Q THEN
K_1:=FALSE;
TON_6(IN:=0 , PT:=T#1.5S , Q=> , ET=> );
fn:=TRUE;
END_IF
END_IF
END_IF
END_IF
всех благодарю за участие особенно, малышева олега ваш совет мне очень помог.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot