Ох, начинать с JMP & RET при освоении ПЛК...
Вы или ассемблер хорошо знали, или языки высокого уровня?
Так и в языках высокого уровня отношение к GOTO без весомой на то причины сильно не приветствуется (в ассемблере без GOTO никак)
Языки стандарта МЭК 61131 обладают всеми возможностями написания программ без использования GOTO в большинстве случаев - примите это во внимание, если с вашими программами кому-то после вас работать
Программа в ПЛК выполняется циклично (кроме задач Boot & Init) и это нужно иметь в виду
Книга Петрова И.В. "Программируемые контроллеры. Практическое применение языков стандарта МЭК 61131-3" - начните изучать, лишним не будет
1. En - это вход разрешения работы блока (Enable)
При подаче "1" на этот вход запускается программная логика блока (представьте, что в блоке тоже есть написанная программа), если "0" - логика выполняться не будет
После завершения последнего оператора в блоке, на выходе ENO устанавливается "1"
В разных программных средах логика неподключённого En может отличаться.
Здесь - если En не подключён, то он считается всегда в "1"
В моём примере, сделанного для вас программа работает так:
а) Активируется нетворк SEC_3
б) Активируется блок MOVE
в) Передаётся значение 3 в переменную VAL1
г) Активируется выход ENO
д) Активируется переход на нетворк SEC_FIN, проскакивая, через нетворк SEC_4
2. Если вспомнить, для чего вообще в программировании используется оператор RETURN, то и здесь будет похожая ситуация
Conditional returns from functions and function blocks are implemented using a RETURN construction as presented in the following table. Program execution is transferred back to the invoking entity when the boolean input is TRUE, and continues in the normal fashion when the boolean input is FALSE.
Нажмите для просмотра прикрепленного файлаНа рисунке содержимое функционального блока. Если досчитали до предела, программа счёта прекращает работу
Этот пример для демонстрации, я так обычно не пишу - стараюсь обходиться без JMP & RET