Мне надо, что бы QQ была равна первоначальному значению ТТ, т.е. 100.
Вид для печати
Код:VAR CONSTANT
QQ: INT := 100;
END_VAR
Почему???
Вот вполне себе рабочий вариант:
Но, к сожалению, это только для лабораторных работ. Проблема в том, что если переменная TT берет значения откуда-то, то при первом же цикле, еще ДО присвоения данных ТТ "снаружи", QQ становится равно ТТ, и не меняется. А при старте ТТ = 0.Код:PROGRAM PLC_PRG
VAR
TT : INT := 100;
QQ : INT;
INIT_VAR : BOOL := 1;
END_VAR
IF INIT_VAR THEN
QQ := TT;
INIT_VAR := 0;
END_IF
IF DI1 AND TT >0 THEN
TT := TT - 1;
ELSIF DI1 AND TT = 0 THEN
TT :=0;
ELSE
TT := QQ;
END_IF
Думаю дальше... :)
Прочитал про указатели, но как их использовать для моей задачи так и не понял... Люди! Дайте пример... Ну пожалуйста...
Ну-с, приступим... Набросал пример из кина, только имна изменил. Цепляю к сообщению. Как работает, вроде бы понятно.
Но тут одно НО. В самом начале PLC_PRG переменной ТТТ присваивается значение "100". Поэтому RRR тоже будет 100. Я же пытаюсь понять, как это сделать с динамической переменной. Т.е. в процессе она вычисляется, потом по событию она начинает меняться, и вот этот момент мне и надо зафиксировать. Чтобы при пропадании события ТТТ вернулась к запомненному значению.Код:PROGRAM PLC_PRG
VAR
TTT : INT;
RRR : INT;
QQQ : INT;
END_VAR
TTT := 100;
RRR := TTT;
PT (ADR(TTT));
QQQ := TTT;
FUNCTION PT: INT
VAR_INPUT
INP :POINTER TO INT;
END_VAR
VAR
END_VAR
INP^:= INP^ +30 ;
Ну, т.е. без глобального цикла будет такое:
Код:TTT := WWW;
IF DI1 THEN
TTT := TTT-10; (* Если DI1 то начинаем менять *)
ELSE
TTT := WWW; (* Если DI1 пропало - вернули как было *)
END_IF
Возникла еще одна проблема - начал разбираться, почему кнопки через раз работают, для чего подключил модуль статистики.
Кино - в приложении. Я так понимаю, что идет банальный перегруз процессора. :eek:
Выход я так понимаю в том, чтобы не использовать oscat... Это печаль...
На всякий случай приоржил сам проект...
1. Используйте функцию SEL или функции выбора IF, Case....
2. Увеличьте мин. время цикла до 2-3 мс. На производстве S-400 работают с циклом 15-17мс, временами до 30мс. Если время критично выводите скоростные задачи на сопроцессор.
Скорее всего у вас в программе ошибки. Я в вашей программе сложных задач для сопроцессора не вижу.