Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 26

Тема: Как работает шаг SFC, написанный на SFC?

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

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

    По умолчанию Как работает шаг SFC, написанный на SFC?

    Может быть, я проглядел документацию..

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

    Т.е. в программе такого вида:

    OUT1
    OUT2 (*OUT2 написан на SFC и состоит из шагов IN1, IN2, IN3*)
    IN1
    IN2
    IN3
    OUT3

    маркер ходит так:

    OUT1 =>IN1=>OUT3=>OUT1=>IN2=>OUT3=>OUT1=>IN3>OUT3 ...

    Логика в этом может и присутствует, но не самая очевидная.

    Вопросы:
    1) Это так и есть?
    2) А в каком месте это описано, ткните пож?

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

    По умолчанию

    1 Так есть
    2 Зачем описывать одно и тоже. Автоматы в ПОУ - их локальные (static) переменные. Отсюда и пляшите коли поняли
    Последний раз редактировалось Валенок; 04.12.2015 в 23:33.

  3. #3
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Цитата Сообщение от rapucha Посмотреть сообщение
    Может быть, я проглядел документацию..

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

    Т.е. в программе такого вида:

    OUT1
    OUT2 (*OUT2 написан на SFC и состоит из шагов IN1, IN2, IN3*)
    IN1
    IN2
    IN3
    OUT3

    маркер ходит так:

    OUT1 =>IN1=>OUT3=>OUT1=>IN2=>OUT3=>OUT1=>IN3>OUT3 ...

    Логика в этом может и присутствует, но не самая очевидная.

    Вопросы:
    1) Это так и есть?
    2) А в каком месте это описано, ткните пож?
    Почитайте статьи Петрова на сайте Пролога http://prolog-plc.ru/pb1
    начните с этой Отладка прикладных ПЛК программ в CoDeSys (часть 6)
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #4

    По умолчанию

    Прочел.
    Но не понял, откуда вытекает что маркер пойдет так, а не прошагает весь внутренний шаг подряд. Те почему не
    OUT1 =>IN1=>IN2=>IN3=>OUT3..

    Видимо, я не понимаю, что такое шаг SFC, написанный на SFC. Во что "раскрывается" эта вложенная структура.
    Последний раз редактировалось rapucha; 05.12.2015 в 13:47.

  5. #5
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Цитата Сообщение от rapucha Посмотреть сообщение
    Может быть, я проглядел документацию..

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

    Т.е. в программе такого вида:

    OUT1
    OUT2 (*OUT2 написан на SFC и состоит из шагов IN1, IN2, IN3*)
    IN1
    IN2
    IN3
    OUT3

    маркер ходит так:

    OUT1 =>IN1=>OUT3=>OUT1=>IN2=>OUT3=>OUT1=>IN3>OUT3 ...

    Логика в этом может и присутствует, но не самая очевидная.

    Вопросы:
    1) Это так и есть?
    2) А в каком месте это описано, ткните пож?
    Цитата Сообщение от rapucha Посмотреть сообщение
    Прочел.
    Но не понял, откуда вытекает что маркер пойдет так, а не прошагает весь внутренний шаг подряд. Те почему не
    OUT1 =>IN1=>IN2=>IN3=>OUT3..

    Видимо, я не понимаю, что такое шаг SFC, написанный на SFC. Во что "раскрывается" эта вложенная структура.
    Не понимание, я думаю, связано с особенностью выполнения программы на SFC.
    А именно в том, что в любом другом языке вся программа полностью выполняется при каждом вызове программного компонента (POU).
    При вызове POU на SFC выполняются не вся диаграмма, а только действия, связанные с активными шагами (имеющими маркер).
    По этому "OUT1 =>IN1=>IN2=>IN3=>OUT3.." не возможно по определению.
    Предположим, что все переходы для шагов OUT1, OUT2, OUT3, IN1, IN2, IN3 заданы просто TRUE.
    Когда в текущем цикле ПЛК первый раз шаг OUT2 станет активным, то будет вызвано его действие, которое "IN1=>IN2=>IN3", и в этом действии появится новый маркер, который будет жить собственной жизнью. Этот маркер получит шаг -"IN1". Вот он один и выполнится, потому как в текущем цикле "выполняются не вся диаграмма,а только действия, связанные с активными шагами". А шаги IN2 и IN3 могут быть выполнены только при следующем вызове действия "IN1=>IN2=>IN3".
    Таким образом, после выполнения шага IN1 управление вернется в шаг OUT2 и если условие перехода за ним TRUE, то первый маркер перейдет к шагу OUT3. При следующем вызове программы OUT1=>OUT2=>OUT3 активным будет уже шаг OUT3, а не OUT2.
    Вот и получится "OUT1 =>IN1=>OUT3=>OUT1=>IN2=>OUT3=>OUT1=>IN3>OUT3 ..."

    ЗЫ. Важно!
    Даже если переход в текущем вызове имеет значение TRUE, то следующий шаг (который за переходом) начнет работу при следующем вызове POU, а не в текущем.
    Последний раз редактировалось petera; 09.12.2015 в 18:08.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  6. #6

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    По этому "OUT1 =>IN1=>IN2=>IN3=>OUT3.." не возможно по определению.
    Да, это бесспорно.
    Таким образом, после выполнения шага IN1 управление вернется в шаг OUT2
    Вот этот момент и кажется мне плохо освещенным. Ведь, казалось бы - есть активный шаг IN1, есть разрешенный переход на IN2.

    Всем спасибо, потихоньку укладывается в голове.

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

    По умолчанию

    Видимо, я не понимаю, что такое шаг SFC, написанный на SFC
    Вы ж вроде в жаве юзаете - банальный switch в switche. Чего непонятно-то ?
    Вложенная вызывается только при вызове "владельца". "Владелец" отдыхает - все вложенные "морская фигура замри"

    откуда вытекает что маркер пойдет так, а не прошагает весь внутренний шаг подряд. Те почему не
    OUT1 =>IN1=>IN2=>IN3=>OUT3..
    А откуда вытекает что при вызове OUT1 1 раз, он должен самовызваться 3 раза ?
    Хотите что внутрянку прошагал от начала до конца - при входе в OUT1 сброс внутрянки на IN1, а в условиях выхода из OUT1 : .. AND "внутренний автомат завершил IN3". Тока получится обычный линейный switch/case c просто вынесенной частью кода
    Последний раз редактировалось Валенок; 05.12.2015 в 14:48.

  8. #8

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Вы ж вроде в жаве юзаете - банальный switch в switche. Чего непонятно-то ?
    Вложенная вызывается только при вызове "владельца". "Владелец" отдыхает - все вложенные "морская фигура замри"
    То, что он там -- это я вижу) Мне было неочевидно, что у внутреннего свой по сути источник тактовых циклов.
    А откуда вытекает что при вызове OUT1 1 раз, он должен самовызваться 3 раза ?
    Ващет на первый взгляд из правил перехода -- IN1 отработал, переход после него стоит в TRUE -- значит поехали туда, куда этот TRUE указывает, то есть в IN2.
    Я понимаю, что это было бы засадой, потому что эти IN1 IN2 IN3 образовали бы бесконечный цикл, для отдачи управления наружу пришлось бы делать явный переход.

    Хотите что внутрянку прошагал от начала до конца - при входе в OUT1 сброс внутрянки на IN1, а в условиях выхода из OUT1 : .. AND "внутренний автомат завершил IN3"
    Я, еще раз -- не понимаю, из какого места в описании SFC вытекает то поведение, что есть. Это меня беспокоит, потому как я очевидно не умею это описание читать правильно.

    Вот единственное что похожего нашел -- в разделе 2.6.1 собственно стандарта МЭК 61131:

    If any part of a program organization unit is partitioned into SFC elements, the entire program organization unit shall be so partitioned. If no SFC partitioning is given for a program organization unit, the entire program organization unit shall be considered to be a single action which executes under the control of the invoking entity.

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

    По умолчанию

    Деццтво какое-то.
    Вы даже не различаете пользовательский цикл (из нескольких шагов, далее - ПЦ )) и сам автомат (SFC)
    Впилили in1-2-3 и решили шо это и есть автомат. А это просто случайное совпадение Вашего ПЦ и шагов автомата.
    Автомат не имеет начала и конца. ПЦ может начаться где угодно и закончится где угодно, иметь параллельные ветки и любую последовательность исполнения шагов. И как система определит Ваши замыслы по завершению ?

  10. #10

    По умолчанию

    Раскройте мысль, если не трудно. Что именно вы называет автоматом -- сам движок SFC?

    Он, вроде, обещано, находит активные шаги для следующего цикла из двух вещей -- активных шагов на текущем цикле, и условий перехода из этих шагов.

    Когда мы перешли на OUT2, у нас два активных шага -- OUT2, и in1. Из обоих переход разрешен. Откуда вытекает то, что управление получит именно OUT3? Если можете объяснить, буду благодарен.

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. Программа для ПЛК на языке SFC
    от corsar в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.05.2013, 03:53
  2. Программирование на SFC
    от TYER в разделе ПЛК1хх
    Ответов: 32
    Последнее сообщение: 02.11.2012, 19:02
  3. SFC внутри SFC
    от drvlas в разделе ПЛК1хх
    Ответов: 32
    Последнее сообщение: 24.09.2011, 20:38
  4. Вопрос по программированию на языке SFC
    от Илья ИТ в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 19.12.2008, 13:02
  5. Как программировать вложенные SFC
    от Антон в разделе ПЛК1хх
    Ответов: 24
    Последнее сообщение: 04.02.2008, 10:44

Ваши права

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