您现在的位置是:首页 > PLC技术 > PLC技术

S7-200系列PLC的子程序指令

来源:艾特贸易2017-06-04

简介子程序在结构化程序设计中是一种方便有效的工具。与子程序相关的操作有:建立子程序、子程序的调用和返回等。 1 .建立子程序 可用编程软件 Edit 菜单的 Insert 选项,选择 Subrouti

    子程序在结构化程序设计中是一种方便有效的工具。与子程序相关的操作有:建立子程序、子程序的调用和返回等。    1.建立子程序    可用编程软件Edit菜单的Insert选项,选择Subroutine,以建立或插入一个新的子程序,同时在指令树窗口可以看到新建的子程序图标,默认的程序名是SBR_N,编号N0开始按递增顺序生成,可以在图标上直接更改子程序的程序名。在指令树窗口双击子程序的图标就可对它进行编辑。    2.子程序调用    主程序可以用子程序调用指令来调用一个子程序。子程序执行结束必须返回主程序。    (1)子程序调用和返回指令    1)子程序调用指令( CALL):使能输入有效时,将程序控制权交给子程序SBR_N。调用子程序时可以带参数也可以不带参数。在LAD中用功能框的形式编程,如图5-47a所示,功能框名为子程序名SBR_N    指令格式:CALL SBR_ N    例:CALL SBR_0    影响允许输出ENO正常工作的出错条件为SM4.3(运行时间),0008(子程序嵌套超界)。    2)子程序条件返回指令(CRET):使能输入有效时,结束子程序的执行,返回主程序中此子程序调用指令的下一条指令。LAD中以线圈的形式编程,如图5-47b所示,指令不带参数。    STL中指令格式:CRET (条件返回)    例:LD I0.1    CRET (条件返回)
子程序调用和返回指令
    5-47    子程序调用和返回指令    a)子程序调用b)子程序条件返回    (2)注意事项    1)在主程序中可以嵌套调用子程序(在子程序中还可调用子程序),最多嵌套8层。在中断服务程序中,不能嵌套调用子程序。    2)当有一个子程序被调用时,系统会保存当前的逻辑堆栈,置栈顶值为1,堆栈的其他值为0,把控制交给被调用的子程序。当子程序完成之后,恢复逻辑堆栈,把控制权交还给调用程序。    3)因为累加器可在主程序和子程序之间传递,所以在子程序调用时,累加器的值既不保存也不恢复。    3.带参数调用子程序    子程序的调用过程如果存在数据的传递,则调用指令中应包含相应的参数。    (1)子程序参数子程序最多可以传递16个参数。参数在子程序的局部变量表中加以定义。参数包含下列信息:变量名、变量类型和数据类型。    1)变量类型。变量类型是按变量对应数据的传递方向来划分的,可以是传人子程序(IN)类型、传人和传出子程序(IN/OUT)类型、传出子程序(OUT)类型、暂时(TEMP)类型4种类型。4种变量类型的参数在变量表中的位置必须按以下先后顺序。    IN类型:传人子程序参数。所接的参数可以是:直接寻址数据(如VB100)、间接寻址数据(如* AC1)、立即数(如16 #2344)、数据的地址值(如&VB106)。    IN/OUT类型:传人/传出子程序参数。调用时将指定参数位置的值传到子程序,返回时从子程序得到的结果被返回到同一地址。参数可采用直接和间接寻址,但立即数和地址编号不能作为参数。    OUT类型:传出子程序参数。将从子程序返回的结果送到指定的参数位置。输出参数可以采用直接和间接寻址,但不能是立即数或地址编号。    TEMP类型:暂时变量类型。在子程序内部暂时存储,不能用来与主程序传递参数的数据。    2)数据类型。局部变量表中还要对数据类型进行声明。数据类型可以是:“能流”、布尔型、字节型、字型双字型、整数型、双整型和实型。    “能流”:仅允许对位输入操作,是位逻辑运算的结果。在局部变量表中布尔能流输入处于所有类型的最前面。    布尔型:布尔类型用于单独的位输入和输出。    字节、字和双字型:这3种类型分别声明一个1B2B4B的无符号输入或输出参数。    整数、双整数型:这2种类型分别声明一个2B4B的有符号输入或输出参数。    实型:该类型声明一个IEEE标准的32位浮点参数。    (2)参数子程序调用的规则 常数参数必须声明数据类型。例如,把值为223344的元符号双字作为参数传递时,必须用DW#223344来指明。如果缺少常数参数的这一描述,常数可能会被当作别的类型使用。    输入或输出参数没有自动数据类型转换功能。例如,局部变量表中声明一个参数为实型,而在调用时使用一个双字,则子程序中的值就是双字。    参数在调用时必须按照一定的顺序排列,先是输人参数,然后是输入/输出参数,最后是输出参数。    (3)变量表使用 在局部变量表中要加入一个参数,右击要加入的变量类型区可得到一个选择菜单,选择“插入”,然后选择“下一行”即可。局部变量表使用局部变量存储器。当在局部变量表中要加入一个参数时,系统自动给各参数分配局部变量存储空间。    使能流输出ENO0的出错条件:SM4.3(运行时间),0008(子程序嵌套超界)。    STL程序中,参数子程序调用指令格式:CALL NVar1Var2...Varm(其中N为子程序号,Var1~Varm为参数)    例:CALL   SBR0, I0.2,VB20, VD30    4.子程序和子程序返回指令程序举例    含调用指令的主程序如图5-48所示。
主程序段
    5-48    主程序段    被调用的SBR_0子程序如图5-49所示。
子程序段
    5-49    子程序段