S7-PLC把程序主要分为三大类:主程序、子程序和中断程序。在实际应用中有些程序内容可能被反复使用,对那些需要经常执行的程序段,可设计成子程序的形式,并为每个子程序赋以不同的编号,在程序执行的过程中,可随时调用某个编号的子程序。
子程序的优点在于它可以用于对一个大的程序进行分段及分块,使其成为较小的更易管理的程序块。程序调试、程序检查和程序维护时,可充分利用这项优势。子程序只在需要时才被调用、执行。这样就可以更有效地使用PLC,充分利用CPU的时间。
1)子程序的建立。可以采用下列方法创建子程序:
·在编辑环境的程序块中点击鼠标右键,选择“插入子程序SBR_n”(n的范围为:0~63)。
·从编辑菜单中,选择插入子程序SBR_n。
只要插入了子程序,程序编辑器底部就将出现一个新标签,标志新的子程序名。此时,可以对新的子程序编程。
2)为子程序定义参数
根据子程序有无参数,可以将子程序分为有参子程序和无参子程序,如果该子程序带有参数,就要使用该子程序的局部变量表来定义参数。S7-为每个程序都安排了局部变量表,必须利用选定该子程序后出现的局部变量表为该子程序的局部变量,S7-对其局部变量参数有以下规定:
·子程序在带参数调用时,最多可以带16个参数。每个参数包含变量名、变量类型和数据类型。这些参数在子程序的局部变量表中进行定义。
·变量名由不超过8个字符的字母和数字组成,但第一个字符必须是字母。·变量类型:在子程序带参数调用时可以使用4种变量类型,根据数据传递的方向,依次安排这些变量类型在局部变量表中的位置,包含:
①IN类型(传入子程序型)。
②IN/OUT类型(传入/传出子程序型,调用子程序时,将指定地址的参数传入子程序,子程序执行结束时,将得到的结果值返回达到同一个地址)。
③OUT类型(传出子程序型)。
④TEMP类型(暂时型,用于在子程序内部暂时存储数据,不能用来与主程序传递参数数据)。
·变量的数据类型,可以是:
①布尔能流型(BOOL):该数据类型仅对位输入操作有效,它是位逻辑运算的结果。对能流输入类型的数据,要安排在局部变量表的最前面。
②布尔型(BOOL):该数据类型用于单独的位输入和位输出。
③字节型(BYTE)、字型(WORD)、双字型(DWORD):该数据类型分别用于说明1个字节、2个字节和4个字节的无符号的输入参数或输出参数。
④整数(INT)和双整数型(DINT):该数据类型分别用于说明2个字节和4个字节的有符号的输入参数或输出参数。
⑤实数型(REAL):该数据类型用于说明IEEE标准的32位浮点输入参数或输出参数。
SBR1子程序是一个含有4个输入参数、1个输入输出参数、1个输出参数的带参数的子程序。在创建这个子程序时,首先要打开这个子程序的“SIMATICLAD”(局部变量表)。在局部变量表中,为这6个参数赋予名称(如IN1、IN2、IN3、IN4、INOUT、OUT),然后选定变量类型(IN或者INOUT或者OUT),并赋予正确的数据类型(如BOOL、BYTE、BOOL、WORD、DWORD、WORD),见下表:
局部变量表
注:首先完成局部变量表SBR1的编辑,这时再调用SBR1时,这个子程序自然就带参数了。表中局部变量一项(L区)参数是自动形成的,不需用户填写。
3)子程序调用指令和返回指令
子程序调用指令CALL的功能是将程序执行转移到编号为n的子程序。
子程序的入口用指令SBRn表示,在子程序执行过程中,子程序将执行全部指令直至满足返回条件而返回,或者执行到子程序末尾而返回。当子程序返回时,返回到原主程序出口的下一条指令执行,继续向下扫描程序。
在梯形图中,子程序调用指令以功能框形式编程,子程序返回指令以线圈形式编程,如下图所示,其中调用指令“CALLSBR_1”,也可写成“CALL1”。
子程序调用及返回指令
4)子程序编程步骤
①建立子程序(SBR_n)。
②在子程序(SBR_n)中编写应用程序,如果子程序带有参数,应首先在子程序中填写局部变量表,然后再编写应用程序。
③在主程序或其他子程序中编写调用子程序(SBR_n)指令。
5)注意事项
①程序内一共可有64个子程序,允许子程序嵌套调用(在子程序内放置子程序的调用指令),嵌套深度最多为8重。
②S7-不允许直接递归调用(例如,不能在SBR0中调用SBR0),但允许间接递归。
③各子程序的参数最大限制是16个,如果要下载的程序超过此限制,将返回错误。
④用Micro/WIN32软件编程时,编程人员不用手工输入RET指令,而是由软件自动加在每个子程序的结束处,在子程序中不能使用END指令。
采用子程序的形式来控制一台交流电动机的起/停控制,系统的I/O分配为:
电动机起动按钮(常开):I0.0;停止按钮(常开);I0.1;电动机电源接触器:Q0.0编程步骤:
①采用子程序编写电动机的起/停控制,则该子程序一定带有参数,且需要2个输入参数,1个输出参数。所以建立子程序SBR0后,应先填写局部变量表,见下表。
SBR0局部变量表
②填写完局部变量表后,就可以编写应用程序,应采用名称作为指令的操作数。
③在主程序中应一直(采用常闭点SM0.0)调用子程序SBR0。具体的子程序及主程序如下图所示。
子程序编程举例
来源:网络
预览时标签不可点收录于话题#个上一篇下一篇