Типа этого
Типа этого
И как с этой точки зрения выглядит jump из внутреннего блока наружу?
В такой, например, схеме:
OUT1
OUT2in1OUT3
in2 -> OUT4
OUT4
по наружному блоку начнет циркулировать натурально два маркера. "Активный шаг" вполне существующее понятие.
как макароны.И как с этой точки зрения выглядит jump из внутреннего блока наружу?
Про это еще в середине XX века все сказано. Вы решили пройти весь путь с начала ?
Их может быть и больше. А зовётся это - параллельность а не вложенность. Только какой в этом смысл если набор переменных - общийпо наружному блоку начнет циркулировать натурально два маркера.
Так получается, модель со вложенными свитчами - неправда
Они нормальные вложенные свитчи пока не произойдет акт макаронизации в виде goto из вложенного цикла.
Выстрелить в ногу есть и более простые способы.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Да, конечно. Но разве вложенный блок эквивалентен параллельной ветке?
Я просто пытаюсь понять, каким формальными правилами описывается этот самый вложенный блок. Ну, раз есть конструкция, должна же она быть описана. Тот же стандарт МЭК на целую страницу имеет примеров небезопасных конструкций -- и с размножением маркера, и с недостижимыми блоками.
А про то, как происходит передача управления во вложенный блок и возврат --нет ничего.
Наверное, это всем очевидно, а я не понимаю какой-то фундаментальной вещи про ПЛК. Я без иронии, трудности с переключением на подходы ПЛК имеются. Вот и пытаюсь докопаться до того, чего именно я не понимаю, как-то так.
Не понимание, я думаю, связано с особенностью выполнения программы на 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