Код: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
Возникла еще одна проблема - начал разбираться, почему кнопки через раз работают, для чего подключил модуль статистики.
Кино - в приложении. Я так понимаю, что идет банальный перегруз процессора.
Выход я так понимаю в том, чтобы не использовать oscat... Это печаль...
На всякий случай приоржил сам проект...
1. Используйте функцию SEL или функции выбора IF, Case....
2. Увеличьте мин. время цикла до 2-3 мс. На производстве S-400 работают с циклом 15-17мс, временами до 30мс. Если время критично выводите скоростные задачи на сопроцессор.
Скорее всего у вас в программе ошибки. Я в вашей программе сложных задач для сопроцессора не вижу.