跳转至子例程 (JSR)、子例程 (SBR) 和返回 (RET)

此信息适用于
CompactLogix
5370、
ControlLogix
5570、
Compact GuardLogix
5370、
GuardLogix
5570、
Compact GuardLogix
5380、
CompactLogix
5380、
ControlLogix
5580、
GuardLogix
5580 和 ControlLogix 5590 控制器。
JSR 指令可调用其他例程。相应例程完成后,执行过程会返回至 JSR 指令。
SBR 指令接收 JSR 传递的输入参数。
RET 指令将返回参数传回 JSR 并结束子例程的扫描。
可用语言
梯形图
JSR_LD_avail_v31
SBR_LD_avail_v31
RET_LD_avail_v31
功能块
JSR_FB_avail_v31
SBR_FB_avail_v31
RET_FB_avail_v31
顺序功能图
SBR_RET_FC_avail_v31
结构化文本
JSR(RoutineName,InputCount,InputPar,ReturnPar);
SBR(InputPar);
RET(ReturnPar);
操作数
重要提示: 如果出现以下情况,可能会发生意外操作:
  • 输出标签操作数被覆盖。
  • 结构操作数的成员被覆盖。
  • 除非另外指定,否则结构操作数由多条指令共用。
警告: 对于 SBR 或 RET 指令中的每个参数,请使用与 JSR 指令中对应的参数相同的数据类型(包括数组维数)。使用不同的数据类型可能导致出现意外的结果。
梯形图
JSR 指令
操作数
数据类型
CompactLogix
5370、
ControlLogix
5570、
Compact GuardLogix
5370 和
GuardLogix
5570 控制器
数据类型
CompactLogix
5380、
ControlLogix
5580、
Compact GuardLogix
5380、
GuardLogix
5580 和 ControlLogix 5590 控制器
格式
说明
Routine Name
ROUTINE
ROUTINE
名称
要执行的子例程
Input Par
BOOL
SINT
INT
DINT
REAL
structure
BOOL
SINT
INT
DINT
LINT
USINT
UINT
UDINT
ULINT
REAL
LREAL
structure
DT
LDT
TIME32
TIME
LTIME
立即数
标签
数组标签
要从该例程中复制到子例程中的某个标签的数据。
  • 输入参数可选
  • 必要时最多可输入 40 个输入参数。
Return Par
BOOL
SINT
INT
DINT
REAL
structure
BOOL
SINT
INT
DINT
LINT
USINT
UINT
UDINT
ULINT
REAL
LREAL
structure
DT
LDT
TIME32
TIME
LTIME
标签
数组标签
该例程中要向其复制子例程的结果的标签。
  • 返回参数可选
  • 必要时最多可输入 40 个返回参数
SBR 指令
操作数
数据类型
CompactLogix
5370、
ControlLogix
5570、
Compact GuardLogix
5370 和
GuardLogix
5570 控制器
数据类型
CompactLogix
5380、
ControlLogix
5580、
Compact GuardLogix
5380、
GuardLogix
5580 和 ControlLogix 5590 控制器
格式
说明
Input Par
BOOL
SINT
INT
DINT
REAL
structure
BOOL
SINT
INT
DINT
LINT
USINT
UINT
UDINT
ULINT
REAL
LREAL
structure
DT
LDT
TIME32
TIME
LTIME
标签
数组标签
  • 此例程中的标签,要向其复制 JSR 指令中相应的输入参数(最大值为 40)。
RET 指令
操作数
数据类型
CompactLogix
5370、
ControlLogix
5570、
Compact GuardLogix
5370 和
GuardLogix
5570 控制器
数据类型
CompactLogix
5380、
ControlLogix
5580、
Compact GuardLogix
5380、
GuardLogix
5580 和 ControlLogix 5590 控制器
格式
说明
Return Par
BOOL
SINT
INT
DINT
REAL
structure
BOOL
SINT
INT
DINT
LINT
USINT
UINT
UDINT
ULINT
REAL
LREAL
structure
DT
LDT
TIME32
TIME
LTIME
立即数标签
数组标签
此例程中的数据,要将其复制到 JSR 指令中相应的返回参数(最大值为 40)。
影响数学状态标志
严重/轻微故障
在以下情况下会发生严重故障:
故障类型
故障代码
JSR 指令的输入参数比 SBR 指令的输入参数少
4
31
JSR 指令跳转到故障例程
4
990 或用户提供
RET 指令的返回参数比 JSR 指令的返回参数少
4
31
主例程内含有 RET 指令
4
31
操作
重要提示: 任何例程都可能包含一个 JSR 指令,但 JSR 指令不能调用(执行)主例程。
JSR_SBR_RET
JSR 指令可启动指定例程(称为子例程)的执行:
  • 子例程在每次被扫描时执行。
  • 子例程执行后,逻辑执行将返回到含有 JSR 指令的例程,并在 JSR 后的指令处继续。
要对指向子例程的跳转进行编程,请遵循以下指导原则。
JSR
  • 要将数据复制到子例程中的标签内,请输入输入参数。
  • 要将子例程的结果复制到该例程中的标签内,请输入返回参数。
  • 必要时最多可输入 40 个输入参数和 40 个返回参数。
SBR
  • 如果 JSR 指令具有输入参数,请输入 SBR 指令。
  • 将 SBR 指令作为第一条指令放入例程中。
  • 对于 JSR 指令中的每个输入参数,输入要向其中复制数据的标签。
RET
  • 如果 JSR 指令具有返回参数,请输入 RET 指令。
  • 将 RET 指令作为最后一条指令放入例程中。
  • 对于 JSR 指令中的每个返回参数,输入要发送到 JSR 指令的返回参数。
  • 在梯形图例程中,必要时可放置其他 RET 指令,以便根据不同的输入条件来退出子例程(功能块例程只允许使用一个 RET 指令)。
最多可调用 25 个嵌套子例程,最多可以将 40 个参数传递到一个子例程中,以及最多可从一个子例程返回 40 个参数。
JSR_ex
小贴士: 选择
编辑 > 编辑梯形图元素 (Edit > Edit Ladder Element)
菜单,添加和删除变量操作数。对于 JSR 和 SBR 指令,添加输入参数。对于 JSR 和 RET 指令,添加输出参数。对于所有三个指令,删除指令参数。
执行
梯形图
条件/状态
执行的操作
预扫描
梯级设置为假。
控制器执行所有子例程。为确保子例程内的所有梯级都经过预扫描,控制器将忽略 RET 指令(即,RET 指令不会使子例程退出)。
不传递输入和返回参数。
如果多次调用同一个子例程,则只对其进行一次预扫描。
梯级输入条件对于 JSR 指令为假
不适用
梯级输入条件为真
传递参数并执行子例程。
后扫描
操作与预扫描相同
功能块
条件/状态
执行的操作
预扫描
请参阅“梯形图”表中的“预扫描”行。
EnableIn 为假
不适用
EnableIn 为真
传递参数并执行子例程
指令首次运行
不适用
指令首次扫描
不适用
后扫描
请参见“梯形图”表中的“后扫描”行。
结构化文本
条件/状态
执行的操作
预扫描
请参阅“梯形图”表中的“预扫描”行。
正常执行
传递参数并执行子例程。
后扫描
请参见“梯形图”表中的“后扫描”行。
示例
示例 1
梯形图
JSR_SBR_RET_LD_ex_v31
结构化文本
例程
程序
主例程
JSR(routine_1,2,value_1,value_2,float_value_1);
子例程
SBR(value_a,value_b);
<statements>;
RET(float_a);
示例 2
梯形图
主例程
JSR_LD_ex_v31
subroutine_1
RET_LD_ex.png_v31
示例 3
功能块
L5K_JSR_SBR_RET_FB_ex_v31.png
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal