Показано с 1 по 10 из 10

Тема: как отключить таймер сторож?

  1. #1

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

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

  2. #2

    По умолчанию

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

  3. #3

    По умолчанию

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

  4. #4

    По умолчанию

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

  5. #5

    По умолчанию

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


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

  6. #6

    По умолчанию

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

  7. #7

    По умолчанию

    спасибо =)

  8. #8

    По умолчанию

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

  9. #9

    По умолчанию

    так я никак не могу понять отсчёт в программном таймере выполняется независимо от основной программы?

  10. #10

    По умолчанию

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


    ...
    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

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •