首页 理论教育 PLC在地铁设备中的子程序应用与注意事项

PLC在地铁设备中的子程序应用与注意事项

时间:2023-10-11 理论教育 版权反馈
【摘要】:S7-200系列PLC把程序主要分为三大类:主程序、子程序和中断程序。表4-29子程序指令2)子程序条件返回指令当子程序完成后,返回主程序中。图4-18所示为程序用外部控制条件分别调用两个子程序的示例。子程序的嵌套深度最多为8级。它将从子程序返回的结果值送到指定的参数位置。4)注意事项程序内一共可有64个子程序。图4-19带有参数的子程序的编程

PLC在地铁设备中的子程序应用与注意事项

S7-200系列PLC把程序主要分为三大类:主程序、子程序和中断程序。实际应用中,有些程序内容可能被反复使用。这些可能被反复使用的程序往往被编成一个单独的程序块,存放在程序的某一个区域中。执行程序时,可以随时调用这些程序块。这些程序块可以带一些参数,也可以不带参数,我们称之为子程序。为了和主程序区别,S7-200编程手册中规定子程序与中断子程序分区排列在主程序的后边,且当子程序或中断子程序数量多于1时,分序列编号加以区别。

1.建立子程序

建立子程序是通过编程软件来完成的。可用编程软件“编辑”菜单中的“插入”选项选择“子程序”,以建立或插入一个新的子程序。同时,在指令树窗口可以看到新建的子程序图标,默认的程序名是SBR-N,编号N从0开始按递增顺序生成,也可以在图标上直接更改子程序的程序名,把它变为更能描述该子程序功能的名字。在指令树窗口双击子程序的图标就可进入子程序,并对它进行编辑。对于CPU 22 6XM,最多可以有128个子程序;对其余的CPU,最多可以有64个子程序。

2.子程序的调用

1)子程序调用指令(CALL)

当子程序调用允许时,主程序把程序控制权交给子程序,系统会保存当前的逻辑堆栈,置栈顶值为1,堆栈的其他值为零。子程序的调用可以带参数,也可以不带参数。它在梯形图中以指令盒的形式编程。指令格式如表4-29所示。

表4-29 子程序指令

2)子程序条件返回指令(CRET)

当子程序完成后,返回主程序中(返回到调用此子程序的下一条指令)。梯形图中以线圈的形式编程,指令不带参数。指令格式如表4-29所示。

图4-18所示为程序用外部控制条件分别调用两个子程序的示例。

图4-18 子程序调用举例

注意事项:

(1)不允许直接递归。例如,不能从SBR0调用SBR0。但是,允许进行间接递归。

(2)如果在子程序的内部又对另一子程序执行调用指令,则这种调用称为子程序的嵌套。子程序的嵌套深度最多为8级。

(3)当一个子程序被调用时,系统自动保存当前的堆栈数据,并把栈顶置1,堆栈中的其他值为0,子程序占有控制权。子程序执行结束,通过返回指令自动恢复原来的逻辑堆栈值,调用程序又重新取得控制权。

3.带参数的子程序调用

子程序中可以有参变量,带参数的子程序调用极大地扩大了子程序的使用范围,增加了调用的灵活性。它主要用于功能类似的子程序块的编程。子程序的调用过程如果存在数据的传递,则在调用指令中应包含相应的参数。

1)子程序参数

子程序最多可以传递16个参数。参数在子程序的局部变量表中加以定义。参数包含下列信息:变量名、变量类型和数据类型。

(1)变量名。变量名最多用8个字符表示,第一个字符不能是数字。

(2)变量类型。变量类型是按变量对应数据的传递方向来划分的,可以是传入子程序(IN)、传入和传出子程序(IN/OUT)、传出子程序(OUT)和暂时变量(TEMP)等4种类型。4种变量类型的参数在变量表中的位置必须按以下先后顺序。

IN类型:传入子程序参数。参数可以是直接寻址数据(如VBl 00)、间接寻址数据(如*ACl)、立即数(如16#2344)或数据的地址值(如&VBl 06)。

IN/OUT类型:传入和传出子程序参数。调用时将指定参数位置的值传到子程序,返回时从子程序得到的结果值被返回到同一地址。参数可以采用直接和间接寻址,但立即数(如16#1234)和地址值(如&VBloo)不能作为参数。

OUT类型:传出子程序参数。它将从子程序返回的结果值送到指定的参数位置。输出参数可以采用直接和间接寻址,但不能是立即数或地址编号。

TEMP类型:暂时变量参数。在子程序内部暂时存储数据,但不能用来与调用程序传递参数数据。(www.xing528.com)

表4-30 局部变量表

(3)数据类型。局部变量表中还要对数据类型进行声明。数据类型可以是:能流、布尔型、字节型、字型、双字型、整数型、双整型和实型。

能流:仅允许对位输入操作,是位逻辑运算的结果。在局部变量表中布尔能流输入处于所有类型的最前面。

布尔型:布尔型用于单独的位输入和输出。

字节、字和双字型:这3种类型分别声明一个1字节、2字节和4字节的无符号输入或输出参数。

整数、双整数型:这2种类型分别声明一个2字节或4字节的有符号输入或输出参数。

实型:该类型声明一个IEEE标准的32位浮点参数。

2)参数子程序调用的规则

(1)常数参数必须声明数据类型。例如,把值为223 344的无符号双字作为参数传递时,必须用DW#223 344来指明。如果缺少常数参数的这一描述,常数可能会被当作不同类型使用。

(2)输入或输出参数没有自动数据类型转换功能。例如,局部变量表中声明一个参数为实型,而在调用时使用一个双字,则子程序中的值就是双字。

(3)参数在调用时必须按照一定的顺序排列,先输入参数,然后输入输出参数,最后输出参数和暂时变量。

3)变量表的使用

按照子程序指令的调用顺序,参数值分配给局部变量存储器,起始地址是L0.0。使用编程软件时,地址分配是自动的。在局部变量表中要加入一个参数,单击要加入的变量类型区可以得到一个选择菜单,选择“插入”,然后选择“下一行”即可。局部变量表使用局部变量存储器。

当在局部变量表中加入一个参数时,系统自动给各参数分配局部变量存储空间。

参数子程序调用指令格式:CALL子程序名,参数1,参数2,…,参数n。

4)注意事项

(1)程序内一共可有64个子程序。可以嵌套子程序(在子程序内放置子程序调用指令),最大嵌套深度为8。

(2)不允许直接递归。例如,不能从SBR0调用SBR0。但是,允许进行间接递归。

(3)各子程序调用的输入/输出参数的最大限制是16个,如果要下载的程序超过此限制,将返回错误

(4)对于带参数的子程序调用指令应遵守下列原则,参数必须与子程序局部变量表内定义的变量完全匹配。参数顺序应为输入参数最先,其次是输入/输出参数,再次是输出参数。

(5)在子程序内不能使用END指令。

【例4-14】图4-19是一个用梯形图语言对带参数子程序调用的编程示例。该程序的功能是:当输入端I0.0=1时,调用子程序0。

图4-19 带有参数的子程序的编程

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈