请教FC中的语句
刘玉蓉
发布于2014-10-31 17:39
128
0
标签:
L DBNO
T #TEMP27
L DINO
T #TEMP28
TAR1 #TEMP29
TAR2 #TEMP30
OPN DB [#TEMP27]
OPN DI [#TEMP28]
LAR1 #TEMP29
LAR2 #TEMP30
这是在被调用FC中的语句,请问有什么作用
佳答案
由于功能FC没有自己的背景数据块,每次调用时必须指定FC的形式参数的实际参数值,其中前面加#为FC中变量声明表中的形式参变量(暂态变量TEMP),在局部变量前必须加#,表示是局部变量。
这段FC中的语句的作用是关于功能调用时的堆栈操作。因为当发生块的调用时,就有相关的块信息存储在块堆栈(B堆栈)里,并影响部分内存的寄存器。
一般在调用功能FC时,会有以下事件发生:调用块的地址和返回位置存储在块堆栈中,调用块的临时变量压入堆栈、数据块DB寄存器内容与DI寄存器内容交换、新的数据块地址装入DI寄存器、被调用块的实参装入DB和L堆栈上部、当功能FC结束时,先前块的现场信息从块堆栈中弹出,临时变量弹出L堆栈、DB和DI寄存器内容交换。
L DBNO //把数据块号DBNO装入累加器1的低字中
T #TEMP27 //把数据块号DBNO传送到暂态变量 #TEMP27
L DINO //将数据块号DINO装入累加器1中的低字中,同时将数据块号DBNO移到累加器2的低字中
T #TEMP28 //将数据块号DINO传送到暂态变量#TEMP28
TAR1 #TEMP29 //将地址寄存器1中的值直接传送到暂态变量 #TEMP29
TAR2 #TEMP30 //将地址寄存器2中的值直接传送到暂态变量 #TEMP30
OPN DB [#TEMP27] //打开数据块号为DBNO的数据块
OPN DI [#TEMP28] //打开数据块号为DINO的数据块
LAR1 #TEMP29 //将暂态变量 #TEMP29的值装入地址寄存器1中,即恢复AR1中的值
LAR2 #TEMP30//将暂态变量 #TEMP30的值装入地址寄存器2中,即恢复AR2中的值