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

Тема: ПР205

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для Солнечный заяц
    Регистрация
    16.08.2009
    Адрес
    г. Рыбинск, Яр.обл.
    Сообщений
    241

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    А с зависимыми то какая проблема?
    Код:
    If aaa= false then
       aaa:= true
       eee:= 100
       sss:= 210
    end if
    Переделать на FBD, если там нет ST не проблема...

    Или проблема в чем то другом?
    В переменных индексы массива. При запуске эмуляции выдает ошибку "индекс вне диапазона". Не знаю, будет ли работать на реальном железе. Я подозреваю, что подпрограмма где используются индексы запускается раньше, чем подпрограмма, которая исправляет переменные, хотя расположена ниже. Последовательность запуска ФБ установить нельзя, как я понимаю.

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

    По умолчанию

    Цитата Сообщение от Солнечный заяц Посмотреть сообщение
    В переменных индексы массива. При запуске эмуляции выдает ошибку "индекс вне диапазона". Не знаю, будет ли работать на реальном железе. Я подозреваю, что подпрограмма где используются индексы запускается раньше, чем подпрограмма, которая исправляет переменные, хотя расположена ниже. Последовательность запуска ФБ установить нельзя, как я понимаю.
    Немножко не так. Блоки, грубо говоря, работают одновременно, но блок инициализации записывает значение в выходную переменную, и во входную переменную это значение попадает только в следующем цикле. Это можно обмануть, подключив вход с помощью линии связи а не через переменную

    1.png 2.png

    Или же, обработку второго блока делать с задержкой

    Код:
    function_block functionblock1 //имя функционального блока.
    
        var_input //объявление входных переменных
           U : udint; //входная переменная с типом данных bool
        end_var
    
        var_output //объявление выходных переменных
           Q : udint; //выходная переменная с типом данных udint
        end_var
        
        var
            init : bool;
        end_var
    
        if init then
            Q := 100 mod U;
        end_if
        init := true;
    
    end_function_block
    3.png

  3. #3
    Пользователь Аватар для Солнечный заяц
    Регистрация
    16.08.2009
    Адрес
    г. Рыбинск, Яр.обл.
    Сообщений
    241

    По умолчанию

    Dimensy, спасибо за подробное объяснение, как это работает. Не знал, что входная и выходная переменные, это разные переменные внутри цикла. Это переворачивает всю логику программирования, я практически везде использую промежуточные переменные, потому что это упрощает отладку и читаемость программы. Никогда не встречал такой логики в других средах разработки. Надеюсь, эту особенность когда нибудь поправят.
    FPavel, спасибо за варианты решения. В конечном итоге я пришел к варианту проверки в каждом блоке, но в данном случае ФБ - единственный способ использования языка st, и по сути это одна программа. Хотелось выполнить проверку в начале программы и все.

Похожие темы

  1. Бета тест ПР205 в Owen Logic
    от Денисов Максим Сергеевич в разделе Среда программирования OWEN Logic
    Ответов: 66
    Последнее сообщение: 30.05.2023, 15:02
  2. Пр205 в новом каталоге
    от игорь68 в разделе Программируемые реле
    Ответов: 75
    Последнее сообщение: 10.04.2023, 12:48
  3. судьба пр205
    от Regedit в разделе Трёп (Курилка)
    Ответов: 3
    Последнее сообщение: 01.04.2022, 19:46

Ваши права

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