PDA

Просмотр полной версии : Локальный Var ведет себя как RETAIN



tyura
17.09.2011, 12:19
Добрый день.

Как я понимаю, локальные переменные VAR (без RETAIN) не должны сохранять свои значения после сброса,а у меня они сохраняют значения.
Уже выкинул из программы все, что можно, для проверки, все равно ведет себя также.
Программа в файле, а проверяю следующим образом:
Зашиваю проект, делаю загрузочным, запускаю.
Задаю значения переменных, после этого счетчик начинает увеличивать значения....
Выключаю питание, жду....
Включаю, подключаюсь к контроллеру, и вижу заданные значения переменных и счетчик, продолжающий считать от значения перед выключением.
Как мне инициализировать внутренние переменные VAR после сброса?

lara197a
17.09.2011, 12:36
в первой строке программы поставьте тригер переднего фронта, на входе TRUE, по срабатыванию тригера инициализируйте переменные.
К примеру
R_TRIG(CLK:=TRUE, Q=> );
IF R_TRIG.Q THEN
i_1=1;
i_2=5;....
i_n=Z56;
END_IF

tyura
17.09.2011, 15:24
Так и придется делать, но все-таки почему переменные не обнуляются?
И зачем тогда нужны объявления такого вида
Var1:INT:=5;
если все равно инициализации нет.

Jeck
18.09.2011, 10:58
а был ли сброс)))

Выключаю питание, жду....
Включаю,
в плк есть своя батарейка ;)

tyura
18.09.2011, 11:30
а был ли сброс)))

в плк есть своя батарейка ;)

Спасибо.
Поискал по "аккумулятор" на форуме, нашел решение - через Statistic и R_TRIG.
Заодно еще нашел кучу тем про хранение Retain переменных и время жизни аккумулятора.
Печально, конечно то, что для надежного сохранения параметров требуются какие-то нетривиальные действия с записью в Flash.
На сименсе как-то все это попроще было.

capzap
18.09.2011, 12:25
требуются какие-то нетривиальные действия

Да уж, заплати кучу денег для надежности, куда как тривиально

aven
19.09.2011, 10:59
Да уж, заплати кучу денег для надежности, куда как тривиальнокогда-то я считал siemens куда как не тривиальным. От одной только смены положения байт в слове по спине мурашки пробегали и ладони начинали потеть. После CoDeSys siemens'ы выглядят детской песочницей. Да странный мир, но хотя бы прогнозируемый, где вполне хватает элементарного алгоритма: хочешь идти налево - поверни направо. А тут как сталкер, не знаешь где подорвешься. И когда раздаётся очередной звонок заказчика, начинаешь думать так серьезно стоило экономить?
Да и после поступления на рынок семейного уродца S7-1200 вопрос экономии остаётся открытым.

capzap
19.09.2011, 11:11
с точностью до наоборот, могу сказать что было время когда считал что КДС намного проще чем степ, сейчас одинаково

aven
19.09.2011, 11:12
с точностью до наоборот, могу сказать что было время когда считал что КДС намного проще чем степ, сейчас одинаковоОткровенно, из двух зол хотелось бы выбрать меньшее, но есть ли выбор? Проблема не в сложностях, а в засадах 8=)

capzap
19.09.2011, 11:32
Вы нчинаете изучать новый продукт, причем свободного распространения и хотите без запинок в совершенстве овладеть данным продуктом, напомнить присказку про рыбку :)

Александр Приходько
19.09.2011, 12:31
В данном случае Codesys вообще не при чем.
Дело в том, что во многих задачах требуется сделать "защиту" при кратковременном отключении питания. Потому при снятии внешнего питания ПЛК запитывается от аккумулятора и продолжает работать дальше, сразу при подаче питания ПЛК начинает уже управлять железом по алгоритму и переменные при этом не обнуляются.

Если же при отключении питания нужно все обнулить, то нужно это сделать путем не сложной манипуляции.

В языках программирования высокого уровня это называется начальная инициализация. И не важно на Step7 на ST или на Си++ вы пишите, это актуально везде.