Страница 41 из 58 ПерваяПервая ... 31394041424351 ... ПоследняяПоследняя
Показано с 401 по 410 из 579

Тема: Создать функцию на ST

  1. #401

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    так на скрине же пишеться о том что break не нужен, программа сама выйдет из кейса не выполнив нижеследующие, я об этом с самого начала не пишу, но такой код бесмсленный об этом упоминал и по поводу Вашего радостного согласия с Валенком, прочитайте справку из ОЛ, бесконечный это цикл или не очень Вложение 62740
    Да, там ошибка в справке.
    попробуйте такую функцию на холст кинуть. Будет ошибка "программа зашла в бесконечный цикл"
    Код:
    function function1: bool; 
        var_input 
            inputVariable : bool; 
        end_var
        repeat
            
        until false
        end_repeat
        function1 := true;
    end_function
    Я Вас использовать exit таким образом не агитирую. Обходитесь без него - прекрасно. Зачем и в каких случаях я им пользуюсь написал, так как были заданы такие вопросы

  2. #402

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    я за документацию не отвечаю, я ей обычно верю. Хорошо ошибка, тогда все работает и exit и тот способ который я бы использовал вместо констант
    У Вас case 2: никогда не выполняется.
    Это так же видно по тому что блок на выходе всегда дает 1. Если бы цикл выполнился дважды, было бы 2
    Код:
        repeat
            count := count + 1;
            case count of
                2:
                    exit;
                1:
                    foo := true;     // в первый проход цикла попадаем сюда
                else
            end_case;
        until foo  // условие выполнилось, выходим из цикла
    В остальном я сейчас так же делаю, поскольку exit не работает.
    exit не работает, по крайней мере после выполнения кода ниже count = 2. Правда с поддержки написали что вроде бы починили в последней версии.
    Код:
        repeat
            count := count + 1;
            case count of
                2:
                    count := 100;
                    foo := true;
                    exit;
                1:
                    foo := false;
                else
            end_case;
        until foo
        end_repeat

  3. #403

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    в эмуляции отредактировать с 1 на 3 и проверить необходмио 10 секунд, считаете это проблема
    попробуйте перед exit присвоение сделать, как ниже
    Блок будет выдавать на выходе 2 вместо 100

    Код:
        repeat
            count := count + 1;
            case count of
                2:
                    count := 100;
                    exit;
                3:
                    foo := true;
                else
            end_case;
        until foo
        end_repeat

  4. #404

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну а я о чем говорил, exit тут не причем, с самим repeat что то не так
    Это пусть разработчики разбираются, с exit, repeat или case у них проблема. Или со всем сразу )
    Мне кажется что exit неправильно работает если вызывается внутри case, если его не использовать то отлично все работает

    В функции вызывается exit, и она возвращает 2 вместо 105
    Код:
            repeat
            count := count + 1;
            case count of
                1:
                    foo := false;
                2:
                    count := 105;
                    foo := true;
                    exit;
                else
            end_case;
        until foo
        end_repeat
        function1 := count;
    та же функция, но вызов exit закомментирован. Работает правильно. Возвращает 105
    Код:
            repeat
            count := count + 1;
            case count of
                1:
                    foo := false;
                2:
                    count := 105;
                    foo := true;
                    //exit;
                else
            end_case;
        until foo
        end_repeat
        function1 := count;

  5. #405

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Ну раз верно работает теперь уберите все что относится к репит и убедитесь что он лишний
    Если убрать repeat то функция будет выдавать 1, а не 105

  6. #406
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

    Ну так exit не относится к case, чего вы от него хотите? мозги ожидают либо следующего case, если вдруг не совпало предыдущее, а ему НА на выход иди

    пытаюсь переварить код со своей колокольни, а чего там еще else делает? он от кого там?

  7. #407

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Ну так exit не относится к case, чего вы от него хотите? мозги ожидают либо следующего case, если вдруг не совпало предыдущее, а ему НА на выход иди

    пытаюсь переварить код со своей колокольни, а чего там еще else делает? он от кого там?
    else в данном примере не нужен, просто у capzap был, я не стал убирать.
    ограничений на использование exit не накладывается. Главное чтобы внутри цикла был. По крайней мере в в реализации CodeSys работает.
    Может есть реализации где во вложенных операторах ветвления нельзя exit вызывать. Но в этом случае компилятор должен ошибку выдать, хотя бы.

  8. #408

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Ну ведь потому что заходя в кейс счётчик имеет значение 1, а в единице ни каких присвоений нет, так что все верно
    Верно. А в кейс 2, где есть присваивание он никогда не попадает, потому что нет repeat.
    То есть repeat там не был лишним, если мы по прежнему ожидаем 105 на выходе

  9. #409

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Для чего он?
    Чтоб в одном блоке что то посчитать, перейти в другой опять что то посчитать, допустим перейти в третий и ещё продолжить вычисления и дать результат на выход При всех этих шагах входные условия не изменяются, зачем эта карусель?
    Надеюсь хоть идемпотентность функции не нарушается иначе не место таким программистами в промавтоматике
    Не знаю для чего. Пример то Вы написали

  10. #410

    По умолчанию

    Добрый день. подскажите как в Функции на ST в Owen Logic работать с датами и временем

Страница 41 из 58 ПерваяПервая ... 31394041424351 ... ПоследняяПоследняя

Похожие темы

  1. Ответов: 14
    Последнее сообщение: 01.07.2023, 21:30
  2. Ответов: 6
    Последнее сообщение: 22.12.2021, 10:50
  3. Ответов: 3
    Последнее сообщение: 13.09.2021, 13:31
  4. ПЛК160. Чем заменить функцию записи 0x05?
    от FallenDAY в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 26.08.2017, 13:19
  5. Как написать собственную функцию wait()
    от PavelKazakov в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 23.07.2009, 12:37

Метки этой темы

Ваши права

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