Страница 59 из 66 ПерваяПервая ... 9495758596061 ... ПоследняяПоследняя
Показано с 581 по 590 из 658

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

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

    По умолчанию

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

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

  2. #582

    По умолчанию

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

  3. #583

    По умолчанию

    Цитата Сообщение от Александр_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.

  4. #584

    По умолчанию

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

  5. #585

    По умолчанию

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

  6. #586

    По умолчанию

    При использовании кода:
    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.

  7. #587

    По умолчанию

    Селектор работает, но выход не сбрасывается.
    //область кода

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

    if (udiSel >= 0) and (udiSel <= 1) then
    xOut1 := IN0_0;
    xOut2 := IN0_1max;
    xOut3 := D0_1;
    end_if
    if (udiSel<>udiSel_) and ((udiSel=0) or (udiSel=1)) then
    Start := false;
    udiSel_:= udiSel;
    else Start := True;
    udiSel_:= udiSel;
    end_if
    if (udiSel >= 2) and (udiSel <= 7) then
    xOut1 := IN0_1max;
    xOut2 := IN2_7max;
    xOut3 := D2_7;
    end_if
    if (udiSel<>udiSel_) and ((udiSel=2) or (udiSel=7)) then
    Start := false;
    udiSel_:= udiSel;
    else Start := True;
    udiSel_:= udiSel;
    end_if
    if (udiSel >= 8) and (udiSel <= 14) then
    xOut1 := IN2_7max;
    xOut2 := IN8_14max ;
    xOut3 := D2_7;
    end_if
    if (udiSel<>udiSel_) and ((udiSel=8) or (udiSel=14)) then
    Start := false;
    udiSel_:= udiSel;
    else Start := True;
    udiSel_:= udiSel;
    end_if

    end_function_block

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

    По умолчанию

    [QUOTE=Александр_004;443640]Селектор работает, но выход не сбрасывается.
    А если так

    Код:
        var
            flag : udint;
        end_var
        
        xOut1 := 0;
        xOut2 := 0;
        xOut3 := 0;
        Start := false;
    
        case udiSel of
            0, 1:
                xOut1 := IN0_0;
                xOut2 := IN0_1max;
                xOut3 := D0_1;
                Start := true;
                flag := 0;
            2..7:
                if flag = 1 then
                    xOut1 := IN0_1max;
                    xOut2 := IN2_7max;
                    xOut3 := D2_7;
                    Start := true;               
                else
                    flag := 1;
                end_if
    
            8..14:
                if flag = 2 then
                    xOut1 := IN2_7max;
                    xOut2 := IN8_14max;
                    xOut3 := D8_14;
                    Start := true;               
                else    
                    flag := 2;
                end_if
        end_case
    
    end_function_block

  9. #589

    По умолчанию

    Цитата Сообщение от Александр_004 Посмотреть сообщение
    Селектор работает, но выход не сбрасывается.
    Не надо кусками делить, сброс должен быть в конце кода
    Код:
    if (udiSel<>udiSel_) and ((udiSel=2) or (udiSel=7) or (udiSel=8) or (udiSel=14)) then
      Start := false;
      udiSel_:= udiSel;
    else Start := True;
      udiSel_:= udiSel;    
    end_if
    
    end_function_block
    Последний раз редактировалось kondor3000; 12.08.2024 в 19:19.

  10. #590

    По умолчанию

    Спасибо за помощь! Оба варианта работают

Страница 59 из 66 ПерваяПервая ... 9495758596061 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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