Добрый день! не могу понять почему переменная Var1 продолжает расти до переполнения:
PROGRAM PLC_PRG
VAR
Counter: INT;
Var1: INT;
END_VAR
--------
FOR Counter:=1 TO 5 DO
Var1:= Var1+1;
END_FOR;
Добрый день! не могу понять почему переменная Var1 продолжает расти до переполнения:
PROGRAM PLC_PRG
VAR
Counter: INT;
Var1: INT;
END_VAR
--------
FOR Counter:=1 TO 5 DO
Var1:= Var1+1;
END_FOR;
Автоматизация Диспетчеризация Сервис
e-mail: ads-kaluga@mail.ru
Или поместите FOR во внутрь IF. Также для выхода в теле цикла используют EXIT.
А так у Вас каждый цикл программы, как верно заметил Виктор Родиков повторяется Ваш FOR/
А он не предлагал ничего городить вроде.
1 PLC_PRG постоянно циклически вызывается контролером
2 при первом вызове PLC_PRG переменная Var1 не определена и может принять любое значение (к примеру Х)
3 выполняется цикл FOR после выполнении его переменная Var1 принимает значение Х+5, переменная Counter значение 6
4 заканчивается выполнение PLC_PRG
5 следующий вызов PLC_PRG
6 переменная Var1 имеет значение (х+5)
7 выполняется цикл FOR после выполнения цикла переменная Var1 принимает значение (х+5+5) переменная Counter значение 6
8 заканчивается выполнение PLC_PRG
и так далее выполняются пункты 5-8
Просматриваю программу видим бесконечно растущую переменную Var1 и переменную Counter имеющую значение 6
Последний раз редактировалось ksn33; 20.01.2012 в 20:33.
Извините за глупый вопрос, но я не понимаю почему инструкция в цикле продолжает работать (переменная Var1 инкрементируется) при достижении Counter значения 6.
ПРоблему я победил - перед циклом поставил Var1:=0. Все работает как надо. но почему это работает я не понимаю. Тем более что по умолчанию Var1 и так равен 0.
Смотри, цикл у тебя, к примеру выполнился первый раз (Var1 стало к примеру 5) а далее ПЛК опять циклически вызывает PLC_PRG цикл начинает выполняться второй раз а значение Var1 осталось то предыдущим (5) поэтому оно опять увеличивается на 5(теперь оно 10)! Далее опять вызывается PLC_PRG и цикл выполняется третий раз и так далее... Когда ты поставил Var1:=0 перед выполнением цикла то каждый раз перед выполнением цикла у тебя значение Var1 обнуляется поэтому оно не превышает 5. Так яснее?
PS За наличие вопросов извиняться не надо, хуже когда их нет
Последний раз редактировалось ksn33; 23.01.2012 в 11:15.
ksn33, большое спасибо-мне понятна логика работы ПЛК и вызова PLC_PRG, но я не понимаю следующего из справки Кодесис:
"С помощью FOR можно программировать повторяющиеся процессы.
Синтаксис:
INT_Var :INT;
FOR <INT_Var> := <INIT_VALUE> TO <END_VALUE> {BY <Step size>} DO
<Instructions>
END_FOR
Часть конструкции, заключенная в фигурные скобки, не обязательна.
<Instructions> выполняются, пока счетчик <INT_Var> не больше <END_VALUE>. Это условие проверяется перед выполнением <Instructions>, поэтому раздел <Instructions> не выполняется, если <INIT_VALUE> больше <END_VALUE>.
Всякий раз, когда выполняются <Instructions>, значение <INIT_VALUE>, увеличивается на <Step_size>."
В моем примере, если Значение Counter уже больше 5, то почему инструкция продолжает выполняться?