Jump to Subroutine (JSR), Subroutine (SBR), and Return (RET) in Ladder Logic

The Jump to Subroutine (JSR), Subroutine (SBR), and Return (RET) instructions are used to direct the controller to execute a separate subroutine file within the ladder program and return to the instruction following the JSR instruction.

Jump to Subroutine (JSR), Subroutine (SBR), and Return (RET)

Jump%20to%20Subroutine%20(JSR)%2C%20Subroutine%20(SBR)%2C%20and%20Return%20(RET)%20in%20Ladder%20Logic

Subroutine Usage

If you use the SBR instruction, the SBR instruction must be the first instruction on the first rung in the program file that contains the subroutine.

– Use a subroutine to store recurring sections of program logic that must be executed from several points within your application program

– A subroutine saves memory because you program it only once.

– Update critical I/O within subroutines using immediate input and/or output instructions (IIM, IOM), especially if your application calls for nested or relatively long subroutines

– Otherwise, the controller does not update I/O until it reaches the end of the main program (after executing all subroutines).

Outputs controlled within a subroutine remain in their last state until the subroutine is executed again.

JSR, SBR, and RET Usage

Using JSR

When the JSR instruction is executed, the controller jumps to the subroutine instruction (SBR) at the beginning of the target subroutine file and resumes execution at that point.

You cannot jump into any part of a subroutine except the first instruction in that file.

Using SBR

The target subroutine is identified by the file number that you entered in the JSR instruction.

This instruction serves as a label or identifier for a program file as a regular subroutine file.

The instruction must be programmed as the first instruction of the first rung of a subroutine.

Using RET

This output instruction marks the end of subroutine execution or the end of the subroutine file.

The rung containing the RET instruction may be conditional if this rung precedes the end of the subroutine. In this way, the controller omits the balance of a subroutine only if its rung condition is true.

image

image

image

image

3 Likes