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

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

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

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

    По умолчанию

    Да, мне нужно при каждом изменении значения udiSel, на один цикл изменять выход Start. Спасибо за поправки

    С поправками выше, стало работать, переключает. Но как кратковременно менять значение выхода Start (bool) в цикле программы? При переключении выходов должен сбросится регулятор подключенный к данным выходам.
    Последний раз редактировалось Александр_004; 12.08.2024 в 13:06.

  2. #2

    По умолчанию

    Цитата Сообщение от Александр_004 Посмотреть сообщение
    Да, мне нужно при каждом изменении значения udiSel, на один цикл изменять выход Start. Спасибо за поправки

    С поправками выше, стало работать, переключает. Но как кратковременно менять значение выхода Start (bool) в цикле программы? При переключении выходов должен сбросится регулятор подключенный к данным выходам.
    Для этого можно использовать код R_Trig, включение выхода на 1 цикл, где In и Q вход и выход
    Код:
    var //объявление локальных переменныx
           R:bool; //локальная переменная с типом данных bool
    end_var    
    
        Q:=In and not R;
        R:=In;

  3. #3

    По умолчанию

    Какие еще есть варианты отключить выход на короткий промежуток времени при смене значения на входе? Возможно ли после каждого оператора If поставить условие отключения выхода, к примеру на 1 мс?
    Моргнуть при изменении этапа, кратковременно выключить выход (сбросить Start).

  4. #4

    По умолчанию

    Цитата Сообщение от Александр_004 Посмотреть сообщение
    Какие еще есть варианты отключить выход на короткий промежуток времени при смене значения на входе? Возможно ли после каждого оператора If поставить условие отключения выхода, к примеру на 1 мс?
    Моргнуть при изменении этапа, кратковременно выключить выход (сбросить Start).
    Дописать код в конце и добавить переменную udiSel_ в VAR
    Код:
    if udiSel<> udiSel_ then
        Start:=false;
        udiSel_:=udiSel;
      else Start:=True;
    end_if
    Последний раз редактировалось kondor3000; 12.08.2024 в 14:43.

  5. #5

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Дописать код в конце и добавить переменную udiSel_ в VAR
    Код:
    if udiSel<> udiSel_ then
        Start:=false;
        udiSel_:=udiSel;
    else Start:=True;
    end_if
    Спасибо! Работает!

  6. #6

    По умолчанию

    Цитата Сообщение от Александр_004 Посмотреть сообщение
    Спасибо! Работает!
    Вообще, всё делается гораздо проще на шаговом автомате CASE, тут есть несколько примеров, везде где есть шаги или переключения режимов, только в вашем случае без таймера шагов https://owen.ru/forum/showthread.php...=9&p=429061#81
    Последний раз редактировалось kondor3000; 12.08.2024 в 14:59.

  7. #7

    По умолчанию

    При использовании кода:
    f udiSel<> udiSel_ then
    Start:=false;
    udiSel_:=udiSel;
    else Start:=True;
    end_if
    Происходит сброс выхода при каждом изменении переменной udiSel. Case и If у меня дают одинаковые результаты. Как сделать сброс после этапа выполнения? Переменная udiSel меняется от 2 до 7, при этом сброс выхода делать не нужно, так как происходит регулирование в заданном диапазоне.

    //область кода

    xOut1 := 0;
    xOut2 := 0;
    xOut3 := 0;
    Start := false;

    CASE udiSel OF
    0..1:
    xOut1 := IN0_0;
    xOut2 := IN0_1max;
    xOut3 := D0_1;

    2..7:
    xOut1 := IN0_1max;
    xOut2 := IN2_7max;
    xOut3 := D2_7;

    8..14:
    xOut1 := IN2_7max;
    xOut2 := IN8_14max;
    xOut3 := D8_14;

    END_CASE

    if udiSel <> udiSel_ then
    Start := false;
    udiSel_:= udiSel;
    else Start := True;
    end_if

    END_FUNCTION_BLOCK

    Screenshot 2024-08-12 153905.png
    Последний раз редактировалось Александр_004; 12.08.2024 в 15:39.

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

    По умолчанию

    Цитата Сообщение от Александр_004 Посмотреть сообщение
    Да, мне нужно при каждом изменении значения udiSel, на один цикл изменять выход Start. Спасибо за поправки

    С поправками выше, стало работать, переключает. Но как кратковременно менять значение выхода Start (bool) в цикле программы? При переключении выходов должен сбросится регулятор подключенный к данным выходам.
    Еще раз хочу уточнить.
    У вас первый этап занимает два шага, второй этап - 6 шагов. Вы хотите моргнуть при изменении шага (udiSel) или изменении этапа (выходы)? И как моргнуть - кратковременно сбросить переменную Start или кратковременно взвести ее?

Похожие темы

  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

Ваши права

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