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

Тема: Прикол с TP, TON и TOF

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Здраствуйте, я реализую задержку также как и Партизан(если я его правельно понял), вот моя функция:

    Код:
    tmrZ(In:=start_tmr,pt:=T#1450MS);
    IF ACP_get_zapros=1 THEN 
    	start_tmr:=FALSE;
    	//выполняю первую процедуру
    	ACP_get_zapros:=7;
    	start_tmr:=TRUE;
    END_IF
    IF ACP_get_zapros=7 AND tmrZ.Q=TRUE THEN 
    	start_tmr:=FALSE;
    	//выполняю вторую процедуру
    	ACP_get_zapros:=0;
    	start_tmr:=TRUE;
    END_IF
    Где tmrZ:TON

    Проблема в том что tmrZ, get_zapros и start_tmr приходится обьявлять как Глобальные переменные, потому что обьявлять внутри функции както боязно. Как можно их локализовать(кроме конечно ACP_get_zapros управляющая функцией) и гарантировать их жизнь? Потому как подобных процедур у меня много, а плодить стока переменных совсем не хочется.

    И какие ещё есть методы реализации зодержки?

  2. #2

    По умолчанию Таймер не сбрасывается

    Здравствуйте!
    В своем коде я использую функцию задержки из примера со светофором документа CodeSys_V23_RU.pdf

    Экземпляр функции объявлен в области глобальных переменных.

    DELAY:WAIT;

    Перед каждым шагом, в котором я использую задержку
    я сбрасываю таймер:
    DELAY.ZAB(IN:=0)

    Шаг с задержкой выглядит так:
    DELAY(TIME_IN:=время)

    Во время работы шага с задержкой не дожидаясь окончания задержки ПО может сбросить цикл программы на Init (например по нажатию кнопки на панели ОПЕРАТОРА),
    а после этого неостановившийся таймер продолжает считать, и
    команда:
    DELAY.ZAB(IN:=0)
    его не сбрасыывает, т.е. выход Q экземпляра TP ZAB не равен FALSE.

    Как корректно сбросить экземпляр TP?

  3. #3

    По умолчанию

    Цитата Сообщение от Pruvet Посмотреть сообщение
    Экземпляр функции объявлен в области глобальных переменных.
    Функции не имеют экземпляров.

    Цитата Сообщение от Pruvet Посмотреть сообщение
    DELAY.ZAB(IN:=0)
    Это нормальный сброс, но учтите что таймер управляется
    перепадами сигналов. Если перед этим он вызывался с 1, теперь с 0, то будет сброс.

    * При наблюдении значений переменных в отладчике, нужно совершенно четко понимать, что отображает и считывает он данные из контроллера асинхронно, несколько раз в секунду. Контроллер за это время несколько сотен циклов прокрутит. Переменная могла 200 раз поменяться, а на экране видно не будет. См. трассировку.

    * В SFC действие шага выполняется последний раз уже после того как шаг активность потерял!!! В это время уже работает след. шаг. Таково требование стандарта МЭК. В этом есть глубокий смысл (если интересно, то поясню какой).

  4. #4

    По умолчанию

    tmrZ(In:=start_tmr,pt:=T#1450MS);
    IF ACP_get_zapros=1 THEN
    start_tmr:=FALSE; //обнулили вход экземляра ФБ
    ....
    start_tmr:=TRUE; //и сразу опять установили
    //в след. цикле вызываем ФБ с опять установленным
    входом. Итого, никто его со сброшенным входом ни разу не вызвал и сделать свою работ по сбросу шансов у него нет... в ST с этим нужно тщательнее.

    И какие ещё есть методы реализации зодержки?
    См. функцию Time()

Ваши права

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