Страница 75 из 75 ПерваяПервая ... 2565737475
Показано с 741 по 742 из 742

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

  1. #741

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Как-то так, вероятно:
    Вложение 89142
    задержка на 10 сек.

    Код:
    function_block Delay
        
        var_input
            in : bool;                          // Входной сигнал
            t : udint;                          // Сдвиг сигнала
        end_var
        
        var_output 
            Q : bool;                           // Выходной сигнал
        end_var
        
        var 
            dTS : array [0..100] of udint;      // Время фиксации состояния сигнала
            dS : array [0..100] of bool;        // Состояние сигнала
            nState, i : udint;                  // Номер последнего зафисированного состояния и итератор
            rtStart : SYS.RTRIG;                // Триггер начала записи
        end_var
        
        rtStart(I:=true);                       // Фиксируем начальное состояние
        if rtStart.Q then
            nState := 0; dTS[0] := time_to_udint(get_time()); dS[0] := in;
        end_if
        
        if in <> dS[nState] then                // При каждом изменении входного сигнала
            nState := nState + 1;               // Фиксируем новое состояние
            // Ограничим число фиксируемых состояний на всякий случай
            // если частота смены будет больше запланированной
            if nState > 100 then nState := 100; end_if
            dTS[nState] := time_to_udint(get_time());   // Метка времени
            dS[nState] := in;                           // Состояние
        end_if
        
        // Через время t выдаем следующее состояние на выход и смещаем массив
        if time_to_udint(get_time()) - dTS[0] >= t then
            Q := dS[0];
            if nState > 0 then  // Подготовим следующий переход, если есть
                nState := nState - 1;
                for i := 0 to nState do
                    dTS[i] := dTS[i+1]; dS[i] := dS[i+1];
                end_for
            end_if
        end_if
    
    end_function_block
    вот это годное и изящное решение.
    спасибо.

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

    По умолчанию

    Цитата Сообщение от Андрей Владимиров сын Посмотреть сообщение
    убрал из схемы блинк.
    сделал вход на bDelay со входа I1 (от датчика).
    В режиме симулятора bDelay не дожидаясь импульса со входа I1 генерирует сигнал на выход Q2, после чего не реагирует на появление сигнала со входа I1.
    Да, забыл одно условие прописать. Теперь все работает нормально
    Вложения Вложения

Страница 75 из 75 ПерваяПервая ... 2565737475

Похожие темы

  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

Ваши права

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