1.寄存器间接寻址的指针格式
S7-300/400有两个用于寄存器间接寻址的地址寄存器AR1和AR2,可以用它们对各存储区的地址作寄存器间接寻址。地址寄存器中的地址指针值加上地址偏移量,形成地址指针,指向数据所在的存储单元。
图4-22 寄存器间接寻址的双字指针格式
图4-22是地址寄存器间接寻址的双字地址指针的格式,其中第0~2位(xxx)为被寻址地址中位的编号(0~7),第3~18位为被寻址地址的字节的编号。第24~26位(rrr)为被寻址地址的区域标识号(见表4-3),第31位x=0为区域内的间接寻址,为1则为区域间的间接寻址。如果OB1调用FC1,对于FC1来说,OB1(主调块)的局部数据区称为V区。
表4-3 区域间寄存器间接寻址的区域标识符
2.与地址寄存器有关的指令
可以不经过累加器1,直接将操作数装入地址寄存器AR1和AR2(见表4-4),或者从AR1和AR2将数据传送出来。也可以将两个地址寄存器的内容直接交换,指令TAR1<D>和TAR2<D>的目的区为双字MD、LD、DBD和DID。
表4-4 与AR1和AR2有关的指令
下面是应用实例:
+AR1指令将地址寄存器AR1的内容加上作为地址偏移量的累加器1的低字的内容,或者加上指令中的16位常数,结果在AR1中。+AR2指令具有类似的功能。16位有符号整数首先被扩充为24位,其符号位不变,然后与AR1中的低24位有效数字相加。地址寄存器中的存储区域标识符rrr(第24~26位,见图4-22)保持不变。下面是应用实例:
3.寄存器区域内间接寻址
区域内间接寻址的地址指针格式与存储器间接寻址的相同(见图3-81),指针给出了被寻址数值所在的存储单元的字节地址和位地址,存储区的类型在指令中给出。这种指针格式适用于在某一存储区内寻址。最高字节中的第24~26位(rrr)和第31位为0。
图4-23给出了区域内间接寻址的例子(见随书光盘中的项目“寄存器间接寻址”),图中累加器1(STANDARD)的显示格式为十六进制数。AR1的监控值5.0是P#5.0的简写。(www.xing528.com)
图4-23 寄存器间接寻址
指针常数P#5.0对应的二进制数为2#00000000000000000000000000101000(16#28)。
因为AR1中的地址值为P#5.0,程序中的M[AR1,P#2.3]和Q[AR1,P#0.2]的地址分别为M7.3和Q5.2。可以用仿真实验检查是否可以用M7.3控制Q5.2。
用寄存器间接寻址访问一个字节、字或双字时,必须保证指针的位地址编号为0。
4.寄存器区域间的间接寻址
区域间的间接寻址的地址指针格式的第24~26位还包含了说明地址所在存储区的区域标识符rrr(见表4-3)。图4-23给出了区域间间接寻址的例子。
P#M6.0对应的二进制数为2#10000011000000000000000000110000(16#83000030)。因为地址指针P#M6.0已经包含有区域信息,间接寻址的指令“L W[AR1,P#20.0]”省略了地址标识符M(见图4-23)。
5.参数类型
参数类型是为逻辑块的形参定义的数据类型,用于在调用逻辑块时传递参数。除了简单数据类型和复杂数据类型(见4.2节)之外,还可以使用下列参数类型:
(1)Timer与Counter
使用参数类型Timer(定时器)和Counter(计数器),可以在调用逻辑块时,分别将定时器和计数器的编号(例如T3、C21)作为实参传递给块的形参(见图4-9)。
(2)Block
使用参数类型Block_FC、Block_FB、Block_DB和Block_SDB,可以在调用逻辑块时分别将FC、FB、DB和系统数据块SDB的编号作为实参传送给块的形参。块参数类型的实参应为同类型的块的绝对地址编号(例如FB2)或块的符号名。
参数类型Timer、Counter、Block只能用于块的输入参数(IN)。
参数类型POINTER和ANY将在下一节和4.4.3节介绍。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。