Страница 67 из 68 ПерваяПервая ... 175765666768 ПоследняяПоследняя
Показано с 661 по 670 из 677

Тема: Функциональные блоки на языке ST

  1. #661

    По умолчанию

    Цитата Сообщение от 66666666 Посмотреть сообщение
    вопрос по работе таймеров в функциональных блоках на ST
    создал проект на ПР103, сделал функциональный блок на ST, добавил таймеры TON и TOF, они себя ведут странно в том плане, что в них будто сохраняется отсчет времени, который был начат при предыдущей подаче сигнала на вход. например таймер на 10 сек, подали сигнал на вход, таймер успел отсчитать 5 сек, потом убираем сигнал, при следующей подче сигнала на вход таймер сразу подавал сигнал на выходе.
    пересобрал то же самое на блоках, там все нормально, если нет сингала на входе, то таймер сбрасывается.
    это потому что у функциональных блоков свои особенности в плане выделения памяти и прочего или чем объяснить такое поведение таймеров на ST?
    Чтобы отсчёт таймера ТОN сбросился - его надо ВЫЗВАТЬ со значением FALSE на входе (примерно так fbTON(I := FALSE). Tсли вы вызываете TON только тогда, когда на входе TRUE - вы получите именно такое поведение, как описали (обычно это вызов тамqера внутри IF).
    Отсутствие в FBD конструкции "IF" исключает возникновение ошибок такого рода

  2. #662

    По умолчанию

    да, таймеры внутри условий
    Код:
    function_block PhaseLoadControl
        
        var_input
            Current : REAL;
            Hight_level : REAL;
            Low_level : REAL;
        end_var
        
        var_output 
           Auto1Cmd, Auto2Cmd : BOOL := TRUE; (* Команды управления автоматами *)
        end_var
        
        var 
         TimerOn1, TimerOn2, TimerOff1, TimerOff2 : sys.TON;
        T_On, T_Off : TIME := T#5S;
        end_var
    
    (* Отключение автоматов, если ток выше Hight_level *)
    IF Current > Hight_level THEN
        TimerOff1(I := Auto1Cmd, T := T_Off);
        IF TimerOff1.Q THEN Auto1Cmd := FALSE; END_IF;
    
        TimerOff2(I := (NOT Auto1Cmd) AND Auto2Cmd AND (Current > Hight_level), T := T_Off);
        IF TimerOff2.Q THEN Auto2Cmd := FALSE; END_IF;
    END_IF;
    
    (* Включение автоматов, если ток ниже Low_level *)
    IF Current < Low_level THEN
        TimerOn1(I := NOT Auto1Cmd, T := T_On);
        IF TimerOn1.Q THEN Auto1Cmd := TRUE; END_IF;
    
        TimerOn2(I := Auto1Cmd AND NOT Auto2Cmd, T := T_On);
        IF TimerOn2.Q THEN Auto2Cmd := TRUE; END_IF;
    END_IF;
    
    (* Удержание состояния в диапазоне Low_level-Hight_level *)
    IF (Current >= Low_level) AND (Current <= Hight_level) THEN
        (* Ничего не делаем, автоматы остаются в текущем состоянии *)
    END_IF;
    
    
    end_function_block

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

    По умолчанию

    Если в 1-ом условии таймер TimerOff1 еще не сработал, и всё ушло в середину, то таймер как запомнил время старта (и состояние работы), так оно там и осталось. А при возврате в 1-е условие (если Auto1Cmd не упал), таймер смотрит прошедшее время с момента старта в прошлом (а может и позапрошлом (а может поза-поза ..(..))) входе в 1-ое условие.

    Вынос из IF типа
    Код:
    TimerOff1(I := (Current > Hight_level) and Auto1Cmd, T := T_Off);
    TimerOn1(I := (Current < Low_level) and NOT Auto1Cmd, T := T_On);
    Auto1Cmd := not TimerOff1.Q and (Auto1Cmd or TimerOn1.Q);
    Аналогично и с другими

  4. #664

    По умолчанию

    да, таймеры внутри условий
    Ага. Оно самое. Причина в этом. Рекомендую мою статью пробежать глазами.
    Почему-то, с тех пор как в ПРках появился ST, все темы про вызов таймеров стали снова актуальны...
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  5. #665

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Почему-то, с тех пор как в ПРках появился ST, все темы про вызов таймеров стали снова актуальны...
    С этим всё просто - дешевизна прибора обеспечила массовое применение, а с применением и спрос на программистов - что привело в сферу так называемых "самоучек" без образования (нахватчиков).
    Отсюда и запрос на автонастройку ПИД, и разные предложения на введение gcc в языки программирования, и требования пояснить как включить датчик, и неумение читать документацию...
    Я не издеваюсь, просто констатирую, что сейчас программируют случайные люди между выполнением монтажных и прочих физических работ, им реально некогда системно учиться, нужно быстрее сдать работу.

  6. #666

    По умолчанию

    Спасибо всем за ответы, действительно не знал об этой особенности.

  7. #667

    По умолчанию

    Побитовые операции типа & | в ST макросах owen logic я так понимаю не поддерживаются?

  8. #668

    По умолчанию

    Цитата Сообщение от Schneider Посмотреть сообщение
    Побитовые операции типа & | в ST макросах owen logic я так понимаю не поддерживаются?
    Ну можно маску приделать:
    bit:= word1 and word2 and mask
    Думаю будет работать... Или нет?

  9. #669

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Ну можно маску приделать:
    bit:= word1 and word2 and mask
    Думаю будет работать... Или нет?
    пишет AND только для булевых переменных

  10. #670
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,466

    По умолчанию

    Цитата Сообщение от Schneider Посмотреть сообщение
    пишет AND только для булевых переменных
    можно реализовать самостоятельно
    Вложения Вложения
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Страница 67 из 68 ПерваяПервая ... 175765666768 ПоследняяПоследняя

Похожие темы

  1. ПЛК73 (Функциональные кнопки)
    от necro в разделе ПЛК63/73
    Ответов: 8
    Последнее сообщение: 18.05.2022, 10:03
  2. Функциональные блоки
    от ribamuka в разделе СПК2xx (архив)
    Ответов: 4
    Последнее сообщение: 08.04.2018, 15:01
  3. Функциональные блоки насосов в CoDeSys
    от Алексей Ермолаев в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 28.03.2017, 13:50
  4. Функциональные блоки- где искать?
    от Xops в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 01.03.2016, 11:07
  5. СПК функциональные клавиши
    от Lyohin в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 30.03.2015, 15:10

Ваши права

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