Страница 70 из 70 ПерваяПервая ... 2060686970
Показано с 691 по 700 из 700

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

  1. #691
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    13,316

    По умолчанию

    на 0 не ругается?

  2. #692

    По умолчанию

    Цитата Сообщение от Мамонов Михаил Посмотреть сообщение
    Добрый день.
    Цикл FOR ругается на отрицательное значение в итераторе в строке (конкретно на "BY -1"):
    FOR udiI := 10 TO 1 BY -1 DO
    Как сделать цикл от большего к меньшему?
    Например так, при N=10 и i=0, цикл будет начинаться с N-i =10
    Код:
            for i := 0 to N-1 do
             if i< N-1 then
                x[N-i]:=SelI(rtr1.Q, x_[N-i], x[N-1-i]); 
               else
                x[N-i]:=SelI(rtr1.Q, x_[N-i], Sum );    
             end_if                         
            end_for
    Последний раз редактировалось kondor3000; 06.04.2026 в 16:42.

  3. #693

    По умолчанию

    Цитата Сообщение от Мамонов Михаил Посмотреть сообщение
    Добрый день.
    Цикл FOR ругается на отрицательное значение в итераторе в строке (конкретно на "BY -1"):
    FOR udiI := 10 TO 1 BY -1 DO
    Как сделать цикл от большего к меньшему?
    Вариант:
    Код:
        var 
            vFor, v : udint;
        end_var
    
        for vFor := 1  to 10 do
            v := 11 - vFor;      
        end_for

  4. #694

    По умолчанию

    Неа, на ноль не ругается правда что при этом делает - не проверял

    for vFor := 1 to 10 do
    v := 11 - vFor;
    end_for

    Это то понятно, но как-то костыльно... тем более что по стандарту языка ST BY может быть отрицательным. Просто как всегда не доделано
    Последний раз редактировалось Мамонов Михаил; 06.04.2026 в 15:08.

  5. #695
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    13,316

    По умолчанию

    у Лоджика нет понятия отрицательного числа для целочесленных, может по этому?

  6. #696

    По умолчанию

    А, логично, да. Ведь в BY можно и переменную подставить, не только константу. Ну значит считаем, что такая особенность в лоджике

  7. #697

    По умолчанию

    Можно ещё дуркануть через WHILE, но он опасен: его можно легко загнать в бесконечный цикл.

    Код:
    udiI := 10;
    
    WHILE (udiI > 0) DO
        ***
        ***   
        udiI := udiI -1;
    END_WHILE
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

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

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Эээ, нет, угадаю не с 5 а с 4 нот)))]
    По строкам не считал, но количество операций, вроде, меньше

    Код:
    function_block TOnP // Таймер TON с паузой
        
        var_input 
           In,P : bool;      
           PT : udint; // Задача времени таймера  udint, мс
        end_var
        var_output 
           Q : bool; //
           ET: udint;  // Выход  времени таймера  udint, мс
        end_var
        var 
           clk : bool; 
           tmStart, tmNow :udint;
        end_var  
                
          tmNow := time_to_udint(get_time());      
          if P then tmStart := tmNow - ET; end_if 
          if In and not clk then tmStart := tmNow; end_if 
          clk := In;
          ET := (tmNow - tmStart) * bool_to_udint(In);
          if ET >= PT then ET := PT; end_if          
          Q := In and (ET = PT);
          
    end_function_block
    Последний раз редактировалось Dimensy; 22.04.2026 в 16:16.

  9. #699

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    По строкам не считал, но количество операций, вроде, меньше

    Скрытый текст:
    Код:
    function_block TOnP // Таймер TON с паузой
        
        var_input 
           In,P : bool;      
           PT : udint; // Задача времени таймера  udint, мс
        end_var
        var_output 
           Q : bool; //
           ET: udint;  // Выход  времени таймера  udint, мс
        end_var
        var 
           clk : bool; 
           tmStart, tmNow :udint;
        end_var  
                
          tmNow := time_to_udint(get_time());      
          if P then tmStart := tmNow - ET; end_if 
          if In and not clk then tmStart := tmNow; end_if 
          clk := In;
          ET := (tmNow - tmStart) * bool_to_udint(In);
          if ET >= PT then ET := PT; end_if          
          Q := In and (ET = PT);
          
    end_function_block
    Будем солить, вариантов как огурцов уже))))
    Последний раз редактировалось kondor3000; 24.04.2026 в 18:09.

  10. #700

    По умолчанию

    Пытаясь сделать ввод в массив на 40 начальных значений, столкнулся с проблемой, вывод на экран 40 дисплеев для ввода, 1 Скрин записи массива.jpg
    происходит переполнение визуализации на 136 %.
    Соответственно, надо придумать автоматизацию для ввода.
    Пробовал на циклах и обычную запись. Оказалось лучше и проще, обычная последовательная запись.
    Получилось так.
    После первого ввода, сохранения и пока идёт запись, горит синий индикатор. После ввода РТ, выбрать Запись и нажать Ок,
    после записи, автоматически поменяется номер строки массива, для последующего ввода и сохранения.
    Двумя ФБ, можно записать параллельно и 2 массива, используя всего 6 дисплеев и 1 экран. 1 Скрин записи массива_2.jpg
    Проверил, всё работает, но пример загромождать не стал. Версия Owen Logic3.0.372,
    онлайн отладка массивов в версии Owen Logic3.0.373
    Вложения Вложения
    Последний раз редактировалось kondor3000; 27.04.2026 в 18:09.

Страница 70 из 70 ПерваяПервая ... 2060686970

Похожие темы

  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

Ваши права

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