PDA

Просмотр полной версии : как отключить таймер сторож?



MagicCat
11.02.2010, 14:10
Дурацкий таймер сторож в GoDeSys (или в конфигурации контроллера) не даёт делать нормальные циклы (((((

Филоненко Владислав
11.02.2010, 14:31
учитесь программировать плк. сторож - не выключается никогда. один вечный цикл уже есть, другого не надо.

MagicCat
11.02.2010, 14:42
скажите а отсчёт в таймере выполняется независимо получается от основной программы? (в частности интересует стандартный тр) т.е. программа запустила таймер и пошла дальше? мне вот нужно чтобы программа шла дальше после того как таймер отработает... и сколько одновременно таймеров может быть запущено если таймер выполняется отдельно?

Николаев Андрей
11.02.2010, 14:47
А при чем здесь таймер сторож и программные таймера в проекте???
Программных таймеров TP можно ставить ооооочень много. Они никак не влияют на работу WatchDog.
Если у Вас программа состоит из конкретных шагов - возможно стоит воспользоваться языком SFC

MagicCat
11.02.2010, 15:02
я делал зацикливание обычным циклом в котором условие выхода было присвоение переменной значения True, которое в свою очередь определялось в тр (из стандартной библиотеки). Таймер сторож от этого конечно же ругался ...


из шагов, но я бы хотел сделать программу именно на St, он мне ближе всего ... возможно как то делать остановку выполнения программы пока работает таймер именно на St?

Николаев Андрей
11.02.2010, 15:11
1. Совет: забудьте про СИ. То, что одинаковые команды не значит что код будет работать. Априори. У ПК и ПЛК разные принципы работы - контроллер выполняет обсчет циклически с верху вниз. ПОСТОЯННО.
То есть с вержу вниз проходит все вычисления один раз (не стоит в цикле - не надо пробовать его туда загнать - перезагрузится, а просто проверяет свершилось ли условие), записывает результаты, считывает входы и снова выполняет программу один раз...
На семинаре я стараюсь показать это простым примером. Вспомните что будет на Си от такой строчки a:=a+1; Потом прошу написать эту строчку в CoDeSys и смотрю на удивленные лица...
2. Выполнение по таймеру очень просто:
if timer_TP.q=true then
"Вызвать подпрограмму работы"
"не проверять больше предыдущее условие"
А на SFC делается вообще просто
Первый шаг - в нутри шага на ST пишете какие переменные в какое состояние перевести, запускаете таймеры...
Переход после шага - ставите любое логическое условие...То же окончание таймера
Ну а во втором шаге пишете свою программу на ST...
Только не забудьте во втором шаге сбросить таймер, который Вы в первом шаге использовали. Ну и почитайте про SFC - там есть свои особенности - например контроллер обсчитывает только активный шаг...

MagicCat
11.02.2010, 15:20
спасибо =)

Николаев Андрей
11.02.2010, 16:52
опечатался в предыдущем посте - не на St, на Sfc...
то есть Plc_prg - на Sfc, а описание действия на St в каждом шаге

MagicCat
11.02.2010, 17:51
так я никак не могу понять отсчёт в программном таймере выполняется независимо от основной программы?

MagicCat
11.02.2010, 17:59
Мой код, который никак не хочет работать:


...
IF %QX3.0.0=FALSE THEN
IF DELAY.ZAB.Q=FALSE THEN
TIMER:=%QX3.0.0;
DELAY(TIME_IN:=t1);
END_IF;
END_IF;
...

далее на IL, так как в примере (от себя только добавление в предпоследнюю строку ST TIMER), TIMER определена как глобальная BOOL


LD ZAB.Q
JMPC mark

CAL ZAB(IN:=FALSE)
LD TIME_IN
ST ZAB.PT
CAL ZAB(IN:=TRUE)
JMP end

mark:
CAL ZAB
end:
LDN ZAB.Q
ST OK
ST TIMER
RET