S7-200 PLC的程序主要包括三大类:主程序(OB 1)、子程序(SBR_N)和中断程序(INT_N)。子程序在结构化程序设计中是一种方便有效的工具。S7-200 PLC的指令系统具有简单、方便、灵活的子程序调用功能。与子程序有关的操作有:建立子程序、子程序的调用和返回。
1.建立子程序
建立子程序是通过编程软件来完成的。可用编程软件“编辑”菜单中的“插入”选项,选择“子程序”,以建立或插入一个新的子程序,同时在指令树窗口可以看到新建的子程序图标,默认的程序名是SBR N,编号N从0开始按递增顺序生成,也可以在图标上直接更改子程序的程序名,把它变为更能描述该子程序功能的名字。在指令树窗口双击子程序的图标就可进入子程序,并对它进行编辑。
2.子程序调用
(1)子程序调用指令CALL。在使能输入有效时,主程序把程序控制权交给子程序。子程序的调用可以带参数,也可以不带参数。它在梯形图中以指令盒的形式编程。指令格式见表5-10所示。
(2)子程序条件返回指令CRET。在使能输入有效时,结束子程序的执行,返回主程序中(此子程序调用的下一条指令)。梯形图中以线圈的形式编程,指令不带参数。指令格式见表5-10所示。
表5-10 子程序调用指令格式
(3)应用举例。如图5-40所示的程序实现用外部控制条件分别调用两个子程序。
图5-40 子程序调用程序
使用说明如下。
(1)CRET多用于子程序的内部,由判断条件决定是否结束子程序调用,CRET用于子程序的结束。用Micro/Win V4.0编程时,编程人员不需要手工输入RET指令,而是由软件自动加在每个子程序结尾。
(2)子程序嵌套:如果在子程序的内部又对另一子程序执行调用指令,则这种调用称为子程序的嵌套。子程序的嵌套深度最多为8级。
(3)当一个子程序被调用时,系统自动保存当前的堆栈数据,并把栈顶置1,堆栈中的其他置为0,子程序占有控制权。子程序执行结束,通过返回指令自动恢复原来的逻辑堆栈值,调用程序又重新取得控制权。
(4)累加器可在调用程序和被调用子程序之间自由传递,所以累加器的值在子程序调用时既不保存也不恢复。
3.带参数的子程序调用
子程序中可以有参变量,带参数的子程序调用扩大了子程序的使用范围,增加了调用的灵活性。子程序的调用过程如果存在数据的传递,则在调用指令中应包含相应的参数。
(1)子程序参数。子程序最多可以传递16个参数。参数在子程序的局部变量表中加以定义。参数包含下列信息:变量名、变量类型和数据类型。
①变量名:变量名最多用8个字符表示,第一个字符不能是数字。
②变量类型:变量类型是按变量对应数据的传递方向来划分的,可以是传入子程序(Ⅲ)、传入和传出子程序(IN/OUT)、传出子程序(OUT)和暂时(TEMP)4种类型。4种变量类型的参数在变量表中的位置必须按以下先后顺序。
IN类型:传入子程序参数。所接的参数可以是直接寻址数据(如VB100)、间接寻址数据(如AC 1)、立即数(如16#2344)和数据的地址值(如&VB106)。
IN/OUT类型:传入传出子程序参数。调用时将指定参数位置的值传到子程序,返回时从子程序得到的结果值被返回到同一地址。参数可以采用直接和间接寻址,但立即数(如16#1 234)和地址值(如&VB100)不能作为参数。(www.xing528.com)
OUT类型:传出子程序参数。它将从子程序返回的结果值送到指定的参数位置。输出参数可以采用直接和间接寻址,但不能是立即数或地址编号。
TEMP类型:暂时变量类型。在子程序内部暂时存储数据,不能用来与主程序传递参数数据。
③数据类型:局部变量表中还要对数据类型进行声明。数据类型可以是:能流、布尔型、字节型、字型、双字型、整数型、双整型和实型。
能流:仅允许对位输入操作,是位逻辑运算的结果。在局部变量表中布尔能流输入处于所有类型的最前面。
布尔型:布尔型用于单独的位输入和输出。
字节、字和双字型:这3种类型分别声明一个1字节、2字节和4字节的无符号输入或输出参数。
整数、双整数型:这2种类型分别声明一个2字节或4字节的有符号输入或输出参数。
实型:该类型声明一个IEEE标准的32位浮点参数。
(2)参数子程序调用的规则。常数参数必须声明数据类型。例如,把值为223344的无符号双字作为参数传递时,必须用DW#223 344来指明。如果缺少常数参数的这一描述,常数可能会被当作不同类型使用。
输入或输出参数没有自动数据类型转换功能。例如,局部变量表中声明一个参数为实型,而在调用时使用一个双字,则子程序中的值就是双字。
参数在调用时必须按照一定的顺序排列,先是输入参数,然后是输入输出参数,最后是输出参数。
(3)变量表使用。按照子程序指令的调用顺序,参数值分配给局部变量存储器,起始地址是L0.0。使用编程软件时,地址分配是自动的。在局部变量表中要加入一个参数,右击要加入的变量类型区可以得到一个选择菜单,选择“插入”,然后选择“下一行”即可。局部变量表使用局部变量存储器。当在局部变量表中加入一个参数时,系统自动给各参数分配局部变量存储空间。
参数子程序调用指令格式:CALL子程序,参数1,参数2,……参数n。
(4)程序实例。如图5-41所示为一个带参数调用的子程序实例,其局部变量分配见表5-11所列。
表5-11 局部变量表
图5-41 带参数子程序调用程序
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。