正确答案
下面的例子解释了系统功能块SFC50“RD_LGADR”(读模块逻辑地址)内参数的确定。例如,为功能块FB1编程可分为下面几个步骤:
•声明一个IN变量“test”和一个TEMP变量“test2”,类型都为ANY(图1)。
•将SFC50的参数“PEADDR”传送到变量“test2”(图1)。
•通过为ANY指针“test”赋值,将数据传送到临时变量“test2”中。
语句LP##test首先将地址装载到Accu1,然后通过LAR1语句装载到地址寄存器AR1中(可能是LAR1P##test的简化格式)。通过寄存器间接寻址将ANY指针(10字节长)中的地址信息读出:
代码注释
0LW[AR1,P#0.0]读出当前Accu1中参数数据类型的代码。
2LW[AR1,P#2.0]读出Accu1中的重复因数。重复因数表明通过参数类型ANY传递的数据类型的大小。
4LW[AR1,P#4.0]读数据块的号或者从ANY指针中读出“0”(这个对应于ANY指针的第4到第5字节)。
6LD[AR1,P#6.0]将区域指针读入Accu1。
每次读地址寄存器AR1之后,数据被保存或者缓存(如TLW0)在临时变量“test2”中(ANY指针)。按照Network1中的语句顺序,传送到功能块FB1的ANY指针被复制到临时变量“test2”中。
试题解析