Страница 6 из 6 ПерваяПервая ... 456
Показано с 51 по 60 из 64

Тема: ST, паузы, async/await/coroutines

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Вы ж предлагает часть работы автоматизировать : блокирующая нитка => неявный кейс.
    Ну так я и спрашиваю - когда дойдем до события => поллинг флажков ?
    Вопрос хороший, но тут же мозги нужны.
    coroutine легко подсмотреть (и ничего кроме спинного мозга для этого не нужно), например, у Kotlin: https://kotlinlang.org/docs/reference/coroutines.html

    И тут же оказывается, что в Kotlin'е не предлагается никаких "автоматизированных" механизмов для отправки событий-флажков.


    Технически, если перед каждым "пинком" вложенного автомата ему заново переприсваивать INPUT переменные, то как раз флажки сами собой и будут пробрасываться.
    Код:
    FB modbus_mddv_16r(..., cancel: bool)
    ...
    выполнить_полностью lib_modbus_send(cancel := cancel);  (* этот самый cancel может пробасываться *)
    Но нужно смотреть зачем вообще эти флажки могут быть нужны.

  2. #2

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Так у вас же неявный автомат. И как другие автоматы без событий поймут что этот - готов/не готов ?
    1) Разумеется, "просто 1 раз вызвать автомат недостаточно". Нужно сначала его сбросить, потом вызывать (пока он не закончится). Поэтому, да, у "сгенерированного автомата" должен быть какой-то признак, что он "закончился".
    2) Но тут стоит понимать, что и сам автомат и вызывающий код генерирует один и тот же компилятор. Он-то может сам с собой договориться, как он будет определять, что "вызываемый автомат закончился"? Например, использовать state=-1 как признак "самого финального" состояния. Или просто var_output done:bool. Мало ли способов?

    А, если автомат вызывается "из обычного кода", то он ничем не отличается от других "асинхронных" ФБ, у которых признак "done:bool" появляется за несколько циклов.

  3. #3

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Так у вас же неявный автомат. И как другие автоматы без событий поймут что этот - готов/не готов ?
    Ну и ещё: "послать событие" можно через установку input переменной. Например, "cancel=TRUE". И потом ждать, пока он "закончится".
    И "асинхронный ФБ" будет проверять в нужных местах этот cancel флаг и делать что нужно. Например, если успел открыть файл, то переходить к закрытию и т.п.

    Вполне норм, нет?

  4. #4

    По умолчанию

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

    Цитата Сообщение от Валенок Посмотреть сообщение
    Когда бабка продает семечки - это тоже можно назвать
    Ась? Как раз coroutine это и есть одно слово и ровно обозначающее то, о чём я говорю.

    Сопрограмма (англ. coroutine) — компонент программы, обобщающий понятие подпрограммы, который дополнительно поддерживает множество входных точек (а не одну, как подпрограмма), остановку и продолжение выполнения с сохранением определённого положения.
    Семечки уж точно мимо кассы.

Страница 6 из 6 ПерваяПервая ... 456

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 11.05.2018, 13:01
  2. Режим паузы в ТРМ251 на прошивке 2.10
    от Brewer в разделе Эксплуатация
    Ответов: 2
    Последнее сообщение: 29.03.2016, 16:10
  3. Реализация паузы в SFC
    от KoT'86 в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 05.06.2013, 21:28
  4. ПЛК63 - непонятные паузы в исполнении при опросе по 485
    от Alex_yu в разделе Помощь Разработчикам
    Ответов: 9
    Последнее сообщение: 02.07.2011, 22:54

Ваши права

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