Страница 431 из 446 ПерваяПервая ... 331381421429430431432433441 ... ПоследняяПоследняя
Показано с 4,301 по 4,310 из 4460

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

  1. #4301

    По умолчанию

    Вариант 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

  2. #4302

    По умолчанию

    Цитата Сообщение от 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.

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

    По умолчанию

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

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

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

  4. #4304
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,047

    По умолчанию

    Раз пошла такая пьянка то тоже выложу свое.
    Принципиальным считаю имена. Одно имя - одно поведение для портаций туды-сюды
    Лишних полей не люблю
    Запись без уступов терпеть не могу

    Код:
    function_block TP
    //полный эквивалент Кодесис/Standart/TP с ТЕМ ЖЕ дебильным мерцанием при PT = 0 IN = TRUE
    
        var_input //описание полей - см справка Кодесис
            IN: bool;
            PT: udint; //мс
        end_var
        
        var_output 
            Q : bool;
            ET: udint; //мс
            
        //++ к Кодесис/Standart/TP 
            REM: udint; //мс, оставшееся время работы
        end_var
        
        var 
            StartTime: time;
        end_var
        
        if Q then
            ET := time_to_udint(get_time() - StartTime);
            if ET >= PT then
                ET := PT;
            end_if
            Q := ET < PT;
            REM := PT - ET;
        elsif not IN then
            ET := 0;
            REM := PT;
        elsif ET = 0 then
            StartTime := get_time();
            Q := true;
        end_if
    
    end_function_block
    Последний раз редактировалось Валенок; 29.08.2025 в 17:14.

  5. #4305

    По умолчанию

    Добрый день! Подскажите пожалуста, вот на ST выражениеЖ
    if LE_PR AND PUSK OR PUSK_F_RIGT AND NOT L_KONC AND NOT STOP then
    MOTOR :=TRUE;
    PUSK_F_RIGT:=true;

    ELSE
    MOTOR :=false;
    PUSK_F_RIGT:=false;
    А это скрин сииммуляцциии его в лоджике
    end_ifbandicam 2025-08-30 10-03-58-419.jpg. вопрос _почему когда входные переменные:
    LE_PR=1 PUSK=1 и L_KONC=1 выходная переменная MOTOR тоже равна 1 хотя условие and not L_KONC должно запрещать выходной переменной MOTOR true? Наверное я чегото с синтаксисом не так написал?

  6. #4306

    По умолчанию

    Влияет
    OR PUSK_F_RIGT

    Если написать например так
    if (LE_PR AND PUSK OR PUSK_F_RIGT) AND NOT L_KONC AND NOT STOP then
    то будет работать

  7. #4307

    По умолчанию

    спасибо, сейчас попробую. Только сейчас заметил что задал вопрос не втой ветке и продублировал его в ,,правильной,,

  8. #4308

    По умолчанию

    Да все верно, работает.БЛАГОДАРЮ

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

    По умолчанию

    Цитата Сообщение от дрю Посмотреть сообщение
    Добрый день! Подскажите пожалуста, вот на ST выражениеЖ
    if LE_PR AND PUSK OR PUSK_F_RIGT AND NOT L_KONC AND NOT STOP then
    MOTOR :=TRUE;
    PUSK_F_RIGT:=true;

    ELSE
    MOTOR :=false;
    PUSK_F_RIGT:=false;
    А это скрин сииммуляцциии его в лоджике
    end_ifbandicam 2025-08-30 10-03-58-419.jpg. вопрос _почему когда входные переменные:
    LE_PR=1 PUSK=1 и L_KONC=1 выходная переменная MOTOR тоже равна 1 хотя условие and not L_KONC должно запрещать выходной переменной MOTOR true? Наверное я чегото с синтаксисом не так написал?
    Операция and - это логическое умножение, or - сложение. И приоритеты у ниж такие же как в обычной математике. Т.е., в вашем случае получилось:
    1 * 1 + 1 * 0 * 1 = 1 + 0 = 1. Так что выделяйте нужный порядок скобками

    А еще, так, для справки, выражение not A and not B можно записать как not (A or B), ну и, также not A or not B = not (A and B)
    Последний раз редактировалось Dimensy; 30.08.2025 в 11:31.

  10. #4310
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,047

    По умолчанию

    Я б ещё добавил, что если юзается чисто бинарное выражение (if else) да ещё и и с присвоением по сути результата if, то сам if не нужен, можно просто присвоить
    Мотор := логическое выражение //выше норм сказали
    А второй переменной (здесь) присвоить Мотор

    В кодесис можно было бы сделать сквозное присвоение
    Мотор := вторая переменная := логическое выражение

Страница 431 из 446 ПерваяПервая ... 331381421429430431432433441 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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