子程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
不使用RET指令终止子程序 (返回顶端 )
在子程序中不得使用END(结束)指令。 编辑器自动插入无条件POU终止指令(END用于OB1,RET用于SBR,RETI用于INT)。以下显示一个范例。
箭头表示指令由Micro/WIN 自动处理
如何调用子程序 (返回顶端 )
插入新子程序并在该子程序的局部变量表中定义参数(如果有)后,您可在程序的另一个POU中放置一个子程 序调用。(您可以从OB1、另一个子程序或中断例行程序调用子程序;您不能从子程序本身调用子程序。) LAD、FBD
用于LAD和FBD 建立子程序和定义调用参数后,STEP 7-Micro/WIN自动生成子程序调用方框指令。根据局部变量表中对该子 程序的说明,调用指令包含输入/输出参数的正确数目和类型。建立子程序后,则将出现在指令树中。欲在另 一个POU中插入子程序,从指令树中拖出子程序块 图标,放入另一个POU中。
的正确的网络单元格中,或将光标放在程序编辑器中的单元格上,然后双击指令树中的调用指令。 3. 编辑程序中的调用指令参数并为每个参数指定有效操作数。有效操作数为:内存地址、常数、总
体符号以及调用指令被放置的POU中的局部变量(并非被调用子程序中的局部变量)。 注释:如果您在子程序中插入一个调用指令,然后修改该子程序的局部变量表,调用指令则无效。您 必须删除无效调用,并用反映正确参数的最新调用指令代替该调用。
程序中总共可有64个子程序(CPU 226XM可有128个子程序)。在主程序中,您可以嵌套子程序(在子程序中 放置子程序调用指令),最大嵌套深度为8。您无法从中断例行程序嵌套子程序。子程序调用无法被放置在任 何从中断例行程序调用的子程序中。递归(子程序调用自身)不被禁止,但您在子程序中使用递归时应当小心。
STL 欲在STL程序中插入调用,使用调用指令。
调用子程序时,保存整个逻辑堆栈,堆栈顶值被设为1,其他所有堆栈位置均设为0,控制转移至被调用的子程
序。该子程序完成后,用调用时保存的数值恢复堆栈,控制返回调用例行程序。 子程序和调用例行程序共用累加器。不因使用子程序对累加器执行保存或恢复操作。
嵌套和递归 (返回顶端 )
如何建立子程序 (返回顶端 )
可采用下列一种方法建立子程序: • 从"编辑"菜单,选择插入(Insert)> 子程序(Subroutine) • 从"指令树",用鼠标右键点击"程序块"图标,并从弹出菜单选择插入(Insert)> 子程序(Subroutine) • 从"程序编辑器"窗口,用鼠标右键点击并从弹出菜单选择插入(Insert)> 子程序(Subroutine)
局部变量表中的数据类型域定义参数的大小和格式。下表列出了参数类型。
参数数据类型
说明
布尔
该数据类型用于单位输入和输出。下例中的IN3是布尔输入。
字节、字、双字
这些数据类型分别识别1、2或4个字节不带符号的输入或输出参数。
整数、双整数
这些数据类Baidu Nhomakorabea分别识别2或4个字节带符号的输入或输出参数。
实数
该数据类型识别单精度(4个字节)IEEE浮点数值。
• 建立子程序
• 在子程序局部变量表中定义参数(如果有)
• 从适当的POU(从主程序或另一个子程序)调用子程序
当子程序被调用时,整个逻辑堆栈被保存,堆栈顶端被设为一,所有其他堆栈位置被设为零,控制被传送至 调用子程序。当该子程序完成时,堆栈恢复为在调用点时保留的数值,控制返回调用例行程序。
子程序和调用例行程序共用累加器。由于子程序的使用,对累加器不执行保存或恢复操作。
用参数调用子程序
子程序可能包含交接的参数。参数在子程序的局部变量表中定义。参数必须有一个符号名(最多为23个字符)、 一个变量类型和一个数据类型。可向子程序交接16个参数或从子程序交接16个参数。 局部变量表中的变量类型域定义参数是否交接至子程序(IN)、交接至或交接出子程序(IN_OUT)或交接出 子程序(OUT)。下表说明子程序的参数类型。欲增加参数条目,将光标放在您希望增加的类型的变量类型域 上(IN、IN_OUT或OUT)。单极鼠标右键,获得选项菜单。选择"插入"选项,然后选择"下一行"选项。在当前 条目的下方会显示所选类型的另一个参数条目。
对于LAD和FBD程序,在子程序局部变量表中为该子程序指定参数后,会生成一个定制调用方框指令。 该调用指令自动包括子程序输入和输出参数的正确数目和类型。
欲在LAD或FBD程序的POU中插入调用指令: 1. 打开程序编辑器窗口中所需的POU,滚动至您希望插入子程序调用的网络处。 2. 在指令树中,双击打开的"子程序"文件夹。您可将适当的调用指令从指令树拖放至程序编辑器中
程序编辑器从先前的POU显示更改为新子程序。程序编辑器底部会出现一个新标记,代表新子程序。
此时,您可以对新子程序编程,或者保留子程序,返回您先前作业的POU位置: • 如果您现在希望为子程序指定参数,您可以使用该子程序的局部变量表定义参数。 注释: * 请记住程序中每个POU都有一个独立的局部变量表。必须在选择该子程序标记后出现的局部变量表中 为该子程序定义局部变量。编辑局部变量表时,必须确保已选择适当的标签。 ** 每个子程序调用的最大输入/输出参数限制为16。如果您尝试下载超过该限制的程序,则会返回一则 错误信息。 • 选择子程序标记时,如果您希望为该子程序写入逻辑,在程序编辑器窗口中即可写入。 • 如果您希望对不同的POU编程,点击该POU的标签,以便在程序编辑器窗口中显示该POU。
调用参数类型 IN
IN_OUT
OUT TEMP
说明
参数被交接至子程序。如果参数是直接地址(例如VB10),在指定位置的数值 被交接至子程序。如果参数是间接地址,(例如*AC1),位于指向位置的数值 被交接至子程序。如果参数是数据常数(16#1234)或地址(&VB100),常数 或地址数值被交接至子程序。
字符串 使能位
此数据类型被用作字符串的四字节指针
布尔使能位只可用于位 (布尔) 位。此说明告诉STEP 7-Micro/WIN,这个输入 参数是基于某位逻辑指令组合的使能位结果。布尔使能位输入必须在局部变量 表中最先出现,早于任何其他类型的输入。唯有输入参数可以此方式使用。下 例中的启用输入 (EN) 输入和IN1输入使用了布尔逻辑。
位于指定参数位置的数值被交接至子程序,来自子程序的结果数值被返回至相同
的位置。输入/输出参数不允许使用常数(例如16#1234)和地址(例如&VB100 )。
来自子程序的结果数值被返回至指定的参数位置。常数(例如16#1234)和地址 (例如&VB100)不允许用作输出。 未用作交接参数的任何本地内存不得用于子程序中的临时存储。
子程序
调用指令
本标题讨论下列主题: 使用子程序 如何建立子程序 如何终止子程序 如何调用子程序 嵌套和递归
使用子程序 (返回顶端 )
子程序帮助您对程序进行分块。主程序中使用的指令决定具体子程序的执行状况。当主程序调用子程序并执行 时,子程序执行全部指令直至结束。然后,系统将控制返回至调用子程序网络中的主程序。 子程序用于为程序分段和分块,使其成为较小的、更易管理的块。在程序中调试和维护时,您可以利用这项优 势。通过使用较小的程序块,对这些区域和整个程序简单地进行调试和排除故障。只在需要时才调用程序块, 可以更有效地使用PLC,因为所有的程序块可能无须执行每次扫描。 最后,如果子程序仅引用参数和局部内存,则可移动子程序。为了移动子程序,应避免使用任何全局变量/符 号(I、Q、M、SM、AI、AQ、V、T、C、S、AC内存中的绝对地址)。如果子程序无调用参数(IN、OUT或 IN_OUT)或仅在L内存中使用局部变量,您就可以导出子程序并将其导入另一个项目。 欲在程序中使用子程序,必须执行下列三项任务:
子程序调用举例 用于SBR_0的局部变量表
LAD 主程序
FBD主程序
用Micro/WIN从LAD/FBD图形建立的STL代码在LAD、FBD或STL视图中启用显示。 注释:Micro/WIN 保留L内存(LB60-LB63)的四个上方字节,将其用于调用参数数据。
NETWORK 1 // L内存被用于保存布尔输入参数状态, // 该参数在LAD和FBD中显示为使能位输入。这样可允许 // 本网络在LAD、FBD和STL编辑器中显示。 LD I0.0 = L60.0 LD I0.1 = L63.7 LD L60.0 CALL SBR_0 L63.7 VB10 I1.0 &VB100 *AC1 VD200
在STL编辑器中输入与以上显示相同的子程序调用的仅限STL的范例 注释:STL程序员可使用该简化的调用程序
NETWORK 1 // 该网络只能在STL编辑器中显示, // 因为被用作使能位输入的布尔参数 // 未保存至L内存。 LD I0.0 CALL SBR_0 I0.1 VB10 I1.0 &VB100 *AC1 VD200
在子程序中不得使用END(结束)指令。 编辑器自动插入无条件POU终止指令(END用于OB1,RET用于SBR,RETI用于INT)。以下显示一个范例。
箭头表示指令由Micro/WIN 自动处理
如何调用子程序 (返回顶端 )
插入新子程序并在该子程序的局部变量表中定义参数(如果有)后,您可在程序的另一个POU中放置一个子程 序调用。(您可以从OB1、另一个子程序或中断例行程序调用子程序;您不能从子程序本身调用子程序。) LAD、FBD
用于LAD和FBD 建立子程序和定义调用参数后,STEP 7-Micro/WIN自动生成子程序调用方框指令。根据局部变量表中对该子 程序的说明,调用指令包含输入/输出参数的正确数目和类型。建立子程序后,则将出现在指令树中。欲在另 一个POU中插入子程序,从指令树中拖出子程序块 图标,放入另一个POU中。
的正确的网络单元格中,或将光标放在程序编辑器中的单元格上,然后双击指令树中的调用指令。 3. 编辑程序中的调用指令参数并为每个参数指定有效操作数。有效操作数为:内存地址、常数、总
体符号以及调用指令被放置的POU中的局部变量(并非被调用子程序中的局部变量)。 注释:如果您在子程序中插入一个调用指令,然后修改该子程序的局部变量表,调用指令则无效。您 必须删除无效调用,并用反映正确参数的最新调用指令代替该调用。
程序中总共可有64个子程序(CPU 226XM可有128个子程序)。在主程序中,您可以嵌套子程序(在子程序中 放置子程序调用指令),最大嵌套深度为8。您无法从中断例行程序嵌套子程序。子程序调用无法被放置在任 何从中断例行程序调用的子程序中。递归(子程序调用自身)不被禁止,但您在子程序中使用递归时应当小心。
STL 欲在STL程序中插入调用,使用调用指令。
调用子程序时,保存整个逻辑堆栈,堆栈顶值被设为1,其他所有堆栈位置均设为0,控制转移至被调用的子程
序。该子程序完成后,用调用时保存的数值恢复堆栈,控制返回调用例行程序。 子程序和调用例行程序共用累加器。不因使用子程序对累加器执行保存或恢复操作。
嵌套和递归 (返回顶端 )
如何建立子程序 (返回顶端 )
可采用下列一种方法建立子程序: • 从"编辑"菜单,选择插入(Insert)> 子程序(Subroutine) • 从"指令树",用鼠标右键点击"程序块"图标,并从弹出菜单选择插入(Insert)> 子程序(Subroutine) • 从"程序编辑器"窗口,用鼠标右键点击并从弹出菜单选择插入(Insert)> 子程序(Subroutine)
局部变量表中的数据类型域定义参数的大小和格式。下表列出了参数类型。
参数数据类型
说明
布尔
该数据类型用于单位输入和输出。下例中的IN3是布尔输入。
字节、字、双字
这些数据类型分别识别1、2或4个字节不带符号的输入或输出参数。
整数、双整数
这些数据类Baidu Nhomakorabea分别识别2或4个字节带符号的输入或输出参数。
实数
该数据类型识别单精度(4个字节)IEEE浮点数值。
• 建立子程序
• 在子程序局部变量表中定义参数(如果有)
• 从适当的POU(从主程序或另一个子程序)调用子程序
当子程序被调用时,整个逻辑堆栈被保存,堆栈顶端被设为一,所有其他堆栈位置被设为零,控制被传送至 调用子程序。当该子程序完成时,堆栈恢复为在调用点时保留的数值,控制返回调用例行程序。
子程序和调用例行程序共用累加器。由于子程序的使用,对累加器不执行保存或恢复操作。
用参数调用子程序
子程序可能包含交接的参数。参数在子程序的局部变量表中定义。参数必须有一个符号名(最多为23个字符)、 一个变量类型和一个数据类型。可向子程序交接16个参数或从子程序交接16个参数。 局部变量表中的变量类型域定义参数是否交接至子程序(IN)、交接至或交接出子程序(IN_OUT)或交接出 子程序(OUT)。下表说明子程序的参数类型。欲增加参数条目,将光标放在您希望增加的类型的变量类型域 上(IN、IN_OUT或OUT)。单极鼠标右键,获得选项菜单。选择"插入"选项,然后选择"下一行"选项。在当前 条目的下方会显示所选类型的另一个参数条目。
对于LAD和FBD程序,在子程序局部变量表中为该子程序指定参数后,会生成一个定制调用方框指令。 该调用指令自动包括子程序输入和输出参数的正确数目和类型。
欲在LAD或FBD程序的POU中插入调用指令: 1. 打开程序编辑器窗口中所需的POU,滚动至您希望插入子程序调用的网络处。 2. 在指令树中,双击打开的"子程序"文件夹。您可将适当的调用指令从指令树拖放至程序编辑器中
程序编辑器从先前的POU显示更改为新子程序。程序编辑器底部会出现一个新标记,代表新子程序。
此时,您可以对新子程序编程,或者保留子程序,返回您先前作业的POU位置: • 如果您现在希望为子程序指定参数,您可以使用该子程序的局部变量表定义参数。 注释: * 请记住程序中每个POU都有一个独立的局部变量表。必须在选择该子程序标记后出现的局部变量表中 为该子程序定义局部变量。编辑局部变量表时,必须确保已选择适当的标签。 ** 每个子程序调用的最大输入/输出参数限制为16。如果您尝试下载超过该限制的程序,则会返回一则 错误信息。 • 选择子程序标记时,如果您希望为该子程序写入逻辑,在程序编辑器窗口中即可写入。 • 如果您希望对不同的POU编程,点击该POU的标签,以便在程序编辑器窗口中显示该POU。
调用参数类型 IN
IN_OUT
OUT TEMP
说明
参数被交接至子程序。如果参数是直接地址(例如VB10),在指定位置的数值 被交接至子程序。如果参数是间接地址,(例如*AC1),位于指向位置的数值 被交接至子程序。如果参数是数据常数(16#1234)或地址(&VB100),常数 或地址数值被交接至子程序。
字符串 使能位
此数据类型被用作字符串的四字节指针
布尔使能位只可用于位 (布尔) 位。此说明告诉STEP 7-Micro/WIN,这个输入 参数是基于某位逻辑指令组合的使能位结果。布尔使能位输入必须在局部变量 表中最先出现,早于任何其他类型的输入。唯有输入参数可以此方式使用。下 例中的启用输入 (EN) 输入和IN1输入使用了布尔逻辑。
位于指定参数位置的数值被交接至子程序,来自子程序的结果数值被返回至相同
的位置。输入/输出参数不允许使用常数(例如16#1234)和地址(例如&VB100 )。
来自子程序的结果数值被返回至指定的参数位置。常数(例如16#1234)和地址 (例如&VB100)不允许用作输出。 未用作交接参数的任何本地内存不得用于子程序中的临时存储。
子程序
调用指令
本标题讨论下列主题: 使用子程序 如何建立子程序 如何终止子程序 如何调用子程序 嵌套和递归
使用子程序 (返回顶端 )
子程序帮助您对程序进行分块。主程序中使用的指令决定具体子程序的执行状况。当主程序调用子程序并执行 时,子程序执行全部指令直至结束。然后,系统将控制返回至调用子程序网络中的主程序。 子程序用于为程序分段和分块,使其成为较小的、更易管理的块。在程序中调试和维护时,您可以利用这项优 势。通过使用较小的程序块,对这些区域和整个程序简单地进行调试和排除故障。只在需要时才调用程序块, 可以更有效地使用PLC,因为所有的程序块可能无须执行每次扫描。 最后,如果子程序仅引用参数和局部内存,则可移动子程序。为了移动子程序,应避免使用任何全局变量/符 号(I、Q、M、SM、AI、AQ、V、T、C、S、AC内存中的绝对地址)。如果子程序无调用参数(IN、OUT或 IN_OUT)或仅在L内存中使用局部变量,您就可以导出子程序并将其导入另一个项目。 欲在程序中使用子程序,必须执行下列三项任务:
子程序调用举例 用于SBR_0的局部变量表
LAD 主程序
FBD主程序
用Micro/WIN从LAD/FBD图形建立的STL代码在LAD、FBD或STL视图中启用显示。 注释:Micro/WIN 保留L内存(LB60-LB63)的四个上方字节,将其用于调用参数数据。
NETWORK 1 // L内存被用于保存布尔输入参数状态, // 该参数在LAD和FBD中显示为使能位输入。这样可允许 // 本网络在LAD、FBD和STL编辑器中显示。 LD I0.0 = L60.0 LD I0.1 = L63.7 LD L60.0 CALL SBR_0 L63.7 VB10 I1.0 &VB100 *AC1 VD200
在STL编辑器中输入与以上显示相同的子程序调用的仅限STL的范例 注释:STL程序员可使用该简化的调用程序
NETWORK 1 // 该网络只能在STL编辑器中显示, // 因为被用作使能位输入的布尔参数 // 未保存至L内存。 LD I0.0 CALL SBR_0 I0.1 VB10 I1.0 &VB100 *AC1 VD200