文档视界 最新最全的文档下载
当前位置:文档视界 › 项目22-子程序和局部变量表(2011-7-16)

项目22-子程序和局部变量表(2011-7-16)

For personal use only in study and research; not for

commercial use

项目22 子程序指令和局部表变量表

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

子程序调用指令(CALL)将程序控制权交给子程序SBR_N。调用子程序时可以带参数也可以不带参数。子程序执行完成后,控制权返回到调用子程序的指令的下一条指令。子程序条件返回指令(CRET)根据它前面的逻辑决定是否终止子程序。要添加一个子程序可以在命令菜单中选择:Edit > Insert >Subroutine。

在主程序中,可以嵌套调用子程序(在子程序中调用子程序),最多嵌套8层。在中断服务程序中,不能嵌套调用子程序。在被中断服务程序调用的子程序中不能再出现子程序调用。不禁止递归调用(子程序调用自己),但是当使用带子程序的递归调用时应慎重。

图1:子程序指令的有效操作数

1 必须偏移1个或1个以上的单位

2 必须偏移30个或30个以上的单位

提示:STEP 7--Micro/WIN为每个子程序自动加入返回指令。

当有一个子程序被调用时,系统会保存当前的逻辑堆栈,置栈顶值为1,堆栈的其他值为零,把控制交给被调用的子程序。当子程序完成之后,恢复逻辑堆栈,把控制权交还给调用程序。因为累加器可在主程序和子程序之间自由传递,所以在子程序调用时,累加器的值既不保存也不恢复。

当子程序在同一个周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器指令。

2.带参数调用子程序

子程序可以包含要传递的参数。参数在子程序的局部变量表中定义。参数必须有变量名(最多23个字符)、变量类型和数据类型。一个子程序最多可以传递16个参数。

局部变量表中的变量类型区定义变量是传入子程序(IN)、传入和传出子程序(IN_OUT)或者传出子程序(OUT)。表6-79中描述了一个子程序中的参数类型。要加入一个参数,把光标放到要加入的变量类型区(IN、IN_OUT、OUT)。点击鼠标右键可以得到一个菜单选择。选择插入选项,然后选择下一行选项。这样就出现了另一个所选类型的参数项。

图2:子程序的参数类型

如图2中所示,局部变量表中的数据类型区定义了参数的大小和格式。参数类型如下所示:

1.布尔:该数据类型用于单独位的输入和输出。下例中的IN3是布尔输入。

2.字节、字和双字:这些数据类型分别指明一个1、2或者4个字节的无符号输入或输出参数。

3.整数、双整数:这些数据类型分别指明1、2或者4个字节的有符号输入或输出参数。

4.实数:该数据类型指明一个(4字节)IEEE浮点值。

5.STRING:该数据类型用作一个指向字符串的四字节指针。

6.能流:布尔能流仅允许对位输入操作。该变量声明告诉STEP 7--Micro/WIN 32此输入参数是位逻辑指令组合的能流结果。在局部变量表中布尔能流输入必须出现在其它类型的前面。只有输入参数可以这样使用。下例中的使能输入(EN)和IN1输入使用布尔逻辑。

图3:子程序调用示例

地址参数(如IN4处的&VB100)以一个双字(无符号)的值传送到子程序。在带常数调用程序时必须指明常数类型。例如,把值为12345的无符号双字作为参数进行传递,常数参数必须用DW#12345指明。如果参数中缺少了常数描述符,常数可能被当作不同的类型。输入或输出参数上没有自动数据类型转换功能。例如,如果局部变量表明一个参数具有实型,而在调用时使用一个双字,子程序中的值就是双字。

当给子程序传递值时,它们放在子程序的局部存储器中。局部变量表的最左列是每个被传递参数的局部存储器地址。当子程序调用时,输入参数值被拷贝到子程序的局部存储器。当子程序完成时,从局部存储器区拷贝输出参数值到指定的输出参数地址。数据单元的大小和类型用参数的代码表示。在子程序中局部存储器的参数值的分配如下所示:

1.按照子程序指令的调用顺序,参数值分别给局部存储器,起始地址是L0。

2.1到8连续位参数值分配一个字节,从Lx.0到Lx.7。

3.字节、字和双字值按照所需字节分配在局部存储器中(LBx、LWx或LDx)。

在带参数调用子程序指令中,参数必须按照一定顺序排列,输入参数在最前面,其次是输入/输出参数,然后是输出参数。

如果用语句表编程,CALL指令的格式是:CALL子程序号,参数1,参数2,…,参数

图4:子程序和子程序返回指令

图5:带字符串的子程序调用

举例1:

设计求圆周长得子程序,输入量为直径(小于32768的整数),输出量为圆周长(双字整数)。在I0.0 的上升沿调用该子程序,直径为10000mm,运算结果存放在VD10中,设计出程序。

主程序:

子程序:

举例2:

设计求V存储区连续的若干个字的累加和的子程序,在主程序中调用它,在I0.0的上升沿,求VW100开始的10个数据字的和,并将运算结果存放在VD10中。

主程序:

子程序:

仅供个人用于学习、研究;不得用于商业用途。

For personal use only in study and research; not for commercial use.

Nur für den pers?nlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet wer den.

Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales.

толькодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях.

以下无正文

相关文档
相关文档 最新文档