Страница 358 из 408 ПерваяПервая ... 258308348356357358359360368 ... ПоследняяПоследняя
Показано с 3,571 по 3,580 из 4836

Тема: разные вопросы новичка

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

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

    По умолчанию

    Надо использовать самописные таймеры и получить ET (отсчёт таймера). Тут первые 2 ссылки на TON и TOF, есть с паузой и без.
    В примерах программ есть ещё много всего, есть и таймер TP.
    https://owen.ru/forum/showthread.php...=9&p=429061#81
    Последний раз редактировалось kondor3000; 29.08.2025 в 13:06.

  2. #2

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Надо использовать самописные таймеры и получить ET (отсчёт таймера). Тут первые 2 ссылки на TON и TOF, есть с паузой и без.
    В примерах программ есть ещё много всего, есть и таймер TP.
    https://owen.ru/forum/showthread.php...=9&p=429061#81
    О да, это то что нужно, спасибо! Теперь ни надо ничего самому городить

  3. #3

    По умолчанию

    И все же городить пришлось, там нет ФБ TP (Импульс включения заданной длительности), там по ссылкам нет такого на ST, а я пока на ST не силен, поэтому он у меня получился аляповатым, т.е. по факту считает в 2 раза медленнее, хотя я почти уверен, если считать не миллисекундах а в секундах, то будет норм, в общем вот:
    2025-08-29_144838.png
    Ну и собсно сама программа, если кому такое барахло нужно:
    https://owen.ru/forum/attachment.php...1&d=1756469102

    Если кто напишет на ST, что нить похожее будет полезно...

  4. #4
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,118

    По умолчанию

    Цитата Сообщение от Traveller Посмотреть сообщение
    Если кто напишет на ST, что нить похожее будет полезно...
    Не претендую на оптимальность
    Код:
    function_block fbTP
        
        var_input
            IN : bool;
            PT : udint;
            RST : bool;
        end_var
        
        var_output 
            Q : bool;
            ET : udint;
        end_var
        
        var 
            st, tm : udint;
            fl : bool;
        end_var
        
        tm := time_to_udint(get_time());
        if RST then
             Q := false;
        elsif IN and not fl then
            Q := true;
            st := tm;
        end_if
        if Q then 
            ET := tm - st;
            if ET >= PT then Q := false; end_if
        else 
            ET := PT;
        end_if;
        
        fl := Q or IN;
        
    end_function_block

  5. #5

    По умолчанию

    Цитата Сообщение от Traveller Посмотреть сообщение
    И все же городить пришлось, там нет ФБ TP (Импульс включения заданной длительности), там по ссылкам нет такого на ST, а я пока на ST не силен, поэтому он у меня получился аляповатым, т.е. по факту считает в 2 раза медленнее, хотя я почти уверен, если считать не миллисекундах а в секундах, то будет норм, в общем вот
    Ну и собсно сама программа, если кому такое барахло нужно:
    Если кто напишет на ST, что нить похожее будет полезно...
    Ниже код TP с паузой, умножение на 1000 на входе РТ -задача в секундах (можно убрать),
    разделить на 1000 на выходе ЕТ, не будет миллисекунд (можно добавить).
    Скрытый текст:
    Код:
    function_block TP_P //имя функционального блока
        var_input //объявление входных переменных
           In : bool; // вход таймера
           Pauz : bool; // пауза таймера
           PT : udint; //входная переменная для задачи времени
        end_var
        var_output //объявление выходных переменных
           Q : bool; // выход таймера
           ET: udint;   // время таймера
        end_var
        var
           x: BOOL;
          tx,t0: UDINT;
        end_var
    
       PT:=PT*1000; //  задача в секундах
       tx:= time_to_udint(GET_TIME());
       IF Pauz THEN T0:= tx - ET; END_IF
       IF IN AND NOT x THEN t0:= tx; x:= TRUE; Q:= true; 
        elsif NOT IN AND  x and ET=PT THEN ET:= PT; x:=false; Q:=false;  END_IF
       IF x AND  Q THEN IF PT > (tx - T0) THEN ET:= tx - t0; 
          ELSE  ET:= PT;  END_IF Q:= ET < PT AND x; END_IF 
              
    end_function_block
    Вложения Вложения
    Последний раз редактировалось kondor3000; 21.11.2025 в 22:21.

  6. #6

    По умолчанию

    Вариант 2:
    Owen.jpg
    Код:
    function_block TP
        
        var_input
            I : bool;       // Входной импульс
            T : udint;      // Время в мс
        end_var
        
        var_output 
            Q : bool;       // Выход
            ET : udint;     // Текущее значение таймера с обратным отсчетом
        end_var
        
        var
            ts, d : udint;  // Фиксация системного времени и дельты
            rt : SYS.RTRIG; // Тригер фронта 
        end_var
    
        rt(I := I and not Q);       // Фиксируем начало нового импульса
        if rt.Q then
            ts := time_to_udint(get_time()); ET := T; Q := true;  // Фиксируем продолжительность и начало импульса
        end_if
        if ET > 0 then
            d := time_to_udint(get_time()) - ts; ts := ts + d;    // Прошло времени в мc
            if ET > d then
                ET := ET - d;           // Уменьшаем ET на это время
            else
                ET := 0; Q := false;    // Иначе фиксируем завершение импульса
            end_if
        end_if    
    
    end_function_block

  7. #7

    По умолчанию

    Вот этот подошел, работает как надо, у Dimensy тоже работает как положено, но отсчет времени прямой, это не претензия, просто мне нужон обратный , будет время постараюсь вникнуть и модифицирую под себя, ну типа булевое значение введу, типа 0 прямой счет, 1 обратный или наоборот, но все равно спасибо, буду начинать изучать ST...
    А вот у kondor3000, сначала не понял, потом дошло, в общем нужно в ms, там в коде "PT:=PT*1000" тыщу заменил на единицу и стало как надо, или эту строку вообще можно убрать?
    В общем всем спасибо!
    Последний раз редактировалось Traveller; 01.09.2025 в 14:21.

  8. #8

    По умолчанию

    Цитата Сообщение от Traveller Посмотреть сообщение
    А вот у kondor3000, сначала не понял, потом дошло, в общем нужно в ms, там в коде "PT:=PT*1000" тыщу заменил на единицу и стало как надо, или эту строку вообще можно убрать?
    В общем всем спасибо!
    Если нужны мс, то строку можно удалить или закоментировать //

  9. #9

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Если нужны мс, то строку можно удалить или закоментировать //
    Ок! Я так и понял...

  10. #10
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,719

    По умолчанию

    Вот сто лет тому назад выкладывал таймер с прямым и обратным отсчётом времени:

    https://owen.ru/forum/showthread.php...l=1#post353353

    Вы как будто только сегодня после обеда с луны упали, мне так кажется!
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

Страница 358 из 408 ПерваяПервая ... 258308348356357358359360368 ... ПоследняяПоследняя

Похожие темы

  1. ПЛК 110 - Вопросы новичка?
    от di-s в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 15.04.2025, 16:38
  2. Вопросы новичка!!!
    от sau в разделе ПЛК1хх
    Ответов: 42
    Последнее сообщение: 02.05.2022, 19:57
  3. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 14:39
  4. Вопросы полного новичка
    от Korion в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.02.2010, 10:08
  5. Вопросы новичка по ПЛК
    от Ollegator в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.07.2009, 09:29

Ваши права

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