У меня 3 листа двигаются с помощью прописанной переменной и условия(скрин ниже) list_move_x - это начальная позиция листов, list_move_max - это конечная позиция листов; после пересечения которой они возвращаются на начальную; dx_list - это кол-во пикселей(для движение шпона)
Здравствуйте! Подскажите есть ли возможность получить реальное время с ПК, записать его в переменную? В визуализации можно отобразить его, но использовать как переменную не получилось. Делаю всё в CodeSys v.2.3. без ПЛК(Т.е. мне нужно в программе получить реальное время и просто его сравнить)
Здравствуйте!
Прошу помощи.
Ниже приведенный код работает нормально за исключением одного маленького но. При первом выполнении условия IF включается таймер включения с задержкой в 3 секунды, когда условие не выполняется срабатывает ELSE (здесь все нормально). Но при повторном выполнении условия IF таймер TON срабатывает без выдержки времени, следовательно каким то образом хранятся переменная PT или Q.
Правильно ли я понимаю что их надо обнулить.
Попробовал так:
TON1.PT:= T#0s;
Не получилось, подскажите как быть?
VAR
dvig_on: BOOL;
ton1: TON;
s_ontime: TIME;
rabota_r,rabota_a : BOOL;
END_VAR
IF rabota_r=1 AND kn_off=1 THEN
ton1(IN:= rabota_r, PT:= T#3s, Q=> , ET=> );
dvig_on :=TON1.Q;
s_ontime :=TON1.ET;
ELSE
dvig_on:=0;
END_IF
тон надо выносить за тело условия
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Спасибо огромное!!!
Ясно, я думал так возможно ))
Всем доброго времени суток, в чём в данном коде проблема? Пишу программу в ST и визуализирую, опишу возникшую проблему: Использую инкрементный счётчик, и по конвейерной ленте движутся 2 листа друг за другом, первый счётчиком принимается на расстоянии 500, а второй на 700 не принимается. Уже голову ломаю, почему не получается отмечать оба листа, а лишь 1 - первый? И каждый заход аналогичен. Надеюсь понятно объяснил.
Код:PROGRAM animate_listi VAR_INPUT START:BOOL; END_VAR VAR CTUInst2: CTU; Var2BOOL1: BOOL; Var2BOOL2: BOOL; Var2INT1: WORD; Var2INT2: WORD; Var2BOOL3: BOOL; dx_list:REAL:=4; DELAY:WAIT; END_VAR IF START THEN CTUInst2(CU:= Var2BOOL1, RESET:=Var2BOOL2 , PV:= Var2INT1); Var2BOOL3 := CTUInst2.Q; Var2INT2 := CTUInst2.CV; list_move_x1:=list_move_x1+dx_list; list_move_x2:=list_move_x2+dx_list; TR:=FALSE; TR2:=FALSE; IF list_move_x1>=500 THEN TR:=TRUE; RTRIGInst(CLK:= TR); Var2BOOL1 := RTRIGInst.Q; END_IF; IF list_move_x2>=700 THEN TR2:=TRUE; RTRIGInst(CLK:= TR2); Var2BOOL1 := FTRIGInst.Q; END_IF;