Страница 39 из 58 ПерваяПервая ... 29373839404149 ... ПоследняяПоследняя
Показано с 381 по 390 из 579

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

  1. #381

    По умолчанию

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

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

    По умолчанию

    Andrey G для простоты, расположите все элементы вашей функции на основной экран программы - сколько раз они будут выполнены?

  3. #383

    По умолчанию

    Один раз за цикл ПР. Но в FBD нет циклов, я не понимаю к чему вы клоните

  4. #384

    По умолчанию

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

  5. #385

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    может в документации что найдете Вложение 62731
    Вы намекаете что каждая итерация цикла (например того же repeat) выполняется один цикл ПР?

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

    По умолчанию

    Andrey G я клоню к тому, что функция, не имеющая памяти так же выполнится за один цикл один раз, как будто вы расположили ее потроха на основном экране.
    Вот FBD можно заставить производить вычисления 1-но вычисление за один цикл и накапливать данные, и то придется попотеть... Например вам необходимо выполнить 10 вычислений в программе, но выполняться оно будет 10 циклов...

  7. #387

    По умолчанию

    Да, выполнится один раз за один скан. Если в функции есть цикл, он так же выполнится весь в течение одного скана ПР.
    Промежуточные результаты его работы получить нельзя. Зато можно вычислить за один скан то, на что в FBD понадобилось бы несколько.

  8. #388

    По умолчанию

    Цитата Сообщение от Andrey G Посмотреть сообщение
    Добрый день,

    Приведенный ниже код почему то возвращает 0 или 1 в зависимости от значения inputVariable
    Если убрать оба exit; то возвращает как ожидается - 55 всегда
    Такое ощущение что exit; неправильно работает внутри case of
    может кто сталкивался?
    версия 1.23.301.0

    Код:
    function function1: udint; 
        var_input 
            inputVariable : bool; 
        end_var
        var 
            localVariable : udint := 0; 
        end_var
        repeat
    
            case bool_to_udint(inputVariable) of
            0:
              localVariable := 55;
              exit;
            1:
              localVariable := 55;
              exit;          
          end_case
        until true
        end_repeat
        
        function1 := localVariable;
        
    end_function
    Поддержка отписала что проблема действительно в компиляторе и ее когда-нибудь починят.

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

    По умолчанию

    Цитата Сообщение от Andrey G Посмотреть сообщение
    Зато можно вычислить за один скан то, на что в FBD понадобилось бы несколько.
    Не совсем понимаю, что вы собрались вычислять за один скан при условии что входы у вас неизменны в течении всего цикла ? какой в этом попс?

    могу понять конечно, если у вас цикл с каким-то приращением и расчет конечной переменной связан с этим, а еще что тут можно прикрутить ?

  10. #390
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,276

    По умолчанию

    Цитата Сообщение от Andrey G Посмотреть сообщение
    Поддержка отписала что проблема действительно в компиляторе и ее когда-нибудь починят.
    TRUE для repeat это выход из цикла (это про то, что тут нет бесконечных циклов до которых доколебались)

    А так, видимо exit здесь мастерили сишники)) Описанные симптомы располагают
    Последний раз редактировалось Валенок; 20.09.2022 в 19:02.

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

Похожие темы

  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

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

Ваши права

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