用法说明:
在STEP7间接寻址中,下列两种地址区的间接寻址方式是不同的:n
- 当寻址定时器,计数器和数据块时使用“数字号”.n
- 当寻址输入区,输出区,位地址区,全局数据(DBX),背景数据 (DIX) 和临时数据时使用地址指针。
使用“数字号”进行间接寻址的示例程序如下:n
STEP 7 | 等同于 STEP 5 | ||
L 2 | 装载数字号 | L KF+2 | 装载数字号 |
T MW 33 | 存储在MW33 | T FW 33 | 存储在FW33 |
L T [MW33] | 装载定时器 2 的当前时间值 | DO FW33 | 操作FW33 |
L T0 | 装载定时器 2的当前时间值 | ||
....... | ....... | ....... | ....... |
OPN DB[MW33] | 打开DB2 | DO FW33 | DO FW33 |
C DB0 | 打开DB2 | ||
....... | ....... | ....... | ....... |
CC FC[MW33] | 如果RLO=1调用FC2 | DO FW33 | 操作FW33 |
仅仅工作在FC2没有参数的情况下 | JC FC0 | 如果RLO=1调用FC2n 仅仅工作在FC2没有参数的情况下 |
n
地址操作数存储在MW33,也可以存储在下列区域里:位地址区,全局数据(DBX),背景数据 (DIX) 和临时数据区。在功能块FBs中,地址操作数只能存储在背景数据区DIX 中。n
寄存器间接寻址——使用地址指针:n
内部地址指针的例子如下:n
STEP 7 | 等同于 STEP 5 | ||
L P#4.5 | 指针的值存入累加器1 | L KF +4 | 装载字节号 |
L KF +5 | 装载位号 | ||
SLW 8 | 把位号存入高字节 | ||
OW | 位号在高字节,字节号在低字节 |
交叉地址指针的例子如下:
STEP 7 | 等同于 STEP 5 | ||
L P#M 2.3 | 装载M2.3的指针 | Æ |
指针计算n
区域指针的一个重要性质:指针计算可使用一般的定点运算规则。所以,指针可按照下列规则使用:n
- 加 1: 指针增加指向下一位。n
- 加 8: 指针增加指向下一字节,指向位不变。
例子如下:
STEP 7 | 等同于 STEP 5 | ||
L P#M 2.3 | 装载M2.3的指针 | Æ | |
L P#4.5 | 装载第4个字节,第5位的指针 | ....... | ....... |
+D | 结果:指针指向M7.0。如:所有3个指令均等同于:L P#M7.0 | Æ | |
....... | ....... | ....... | ....... |
L P#DBX 2.3 | 装载全局数据第2.3位的指针 | Æ | |
L 16 | 装载 16 | ....... | |
-D | 指针递减16个位。如:所有3个指令均等同于:L P#DBX0.3 | Æ |
在区域指针计算中,只允许使用一个区域标识符的指针 (不能为0),否则带地址标识符指针进行“加”或“减”,会引起标识的错误。n
存储器间接寻址--地址指针
例子如下:
STEP 7 | 等同于 STEP 5 | ||
L P#2.0 | 装载第2个字节,第0位的指针 | L KF+2 | 装载字节数 |
T MD44 | 保存在位存储区的双字 44的地址内 | L KF +0 | 装载位地址 |
A I [MD44] | 寻址 I 2.0 | SLW 8 | 移位操作 |
OW | 位号在高字节,字节号在低字节 | ||
T FW44 | 结果存储于FW44中 | ||
DO FW44 | 执行FW44 | ||
A I 0.0 | 查询I2.0状态 | ||
......... | .......... | ....... | ....... |
L 123 | 装载 123 | L KF +123 | 装载123 |
T MW [MD44] | 保存 123 到位存储区字2的地址内 | DO FW44 | 执行FW44 |
T FW 0 | 将结果存储于FW123中 |
地址操作数的定位与此相同 (此处为 MD44) ,使用一个数字进行间接寻址 (见上)。 在这里需要使用双字。n
因此存储区间接寻址,指针的地址标识符必须为 0, 所以必须使用内部区域指针。n
间接访问一个字节,字或双字,指针的位地址必须为 0。n
寄存器间接寻址示例程序如下:
STEP 7 | 等同于 STEP 5 | ||
例子 a |
|||
L P#2.0 | 装载指针P#2.0 | Æ | |
LAR1 | 将P#2.0装载到地址寄存器1中 | ....... | |
| |||
A I [AR1, P#0.0] | 查询I2.0的状态 | ||
例子 b | |||
LAR1 P#I 2.0 | 装载指针P#I2.0 | Æ | |
//寄存器区域外部寻址 | ....... | ||
A[AR1, P#0.0] | 查询I2.0的状态 | ....... | |
Æ | |||
例子 c | |||
LAR1 P#DBX 2.0 | 装载指针P#DBX 2.0到地址寄存器1 | Æ | |
L W [AR1, P#0.0] | 装载 MW2 | ||
....... | ....... | ||
例子 d1 | |||
LAR1 P#Q 2.0 | 装载指针P#Q2.0到地址寄存器1 | Æ | |
= [AR1, P#2.2] | 赋值Q4.2 | ||
例子 d2 | |||
+AR1 P#2.0 | 地址寄存器1增加2 | Æ | |
T W [AR1, P#0.0] | 传送到QW4 | ....... | |
L P#4.5 | 装载指针P#4.5到累加器1 | ||
+AR1 | 地址寄存器1增加4.5 | ||
S [AR1, P#1.0] | RLO=1赋值Q9.5 | Æ |
寄存器间接寻址的地址指针可以带有地址标识符:n
- 如果没有地址标识符 (例子 a),必须在指令中定义n
- 如果指针中带有地址标识符 (例子 b),在间接寻址指令中不再使用。注意在使用装载和传送指令时必须定义地址范围,例如字节,字和双字 (例子 d2) 。
如果在指针中定义地址标识符并且在间接寻址指令中再次使用(例子 c),间接寻址指令中的地址标识符将生效,而指针中定义地址标识符被忽略。n
在地址寄存器中可以定义地址偏移量(例子 d)。在程序执行时地址寄存器将加上偏移地址,地址寄存器内容保持不变。n
在旧版本CPU中直接装载带有地址标识符的指针是不允许的。n
在括号内的偏移地址[AR1, <Offset>]范围从 P#0.0到 P#8191.7。
指令"+AR1" 只计算累加器1的低字或带符号的16位数,例如:n
- P#0.0 ..... P#4095.7
"+AR1"加上正的偏移地址n - P#4096.0 ..... P#8191.7
"+AR1"加上负的偏移地址
使用+AR1的示例程序如下:
L P#0.1 | 装载P#0.1到累加器1 |
+AR1 | AR1存储的地址指针增加 P#0.1 |
......... | ......... |
L P#4095.7 | "+AR1"正向最大的偏移地址 |
+AR1 | AR1存储的地址指针增加 P#4095.7 |
....... | ....... |
L P#4096.0 | "+AR1"负向最大的偏移地址 |
+AR1 | AR1存储的地址指针减P#4096.0 |
....... | ....... |
L P#M 8191.0 | 对应"P#-1.0" ("+AR1" 忽略地址标识符"M") |
+AR1 | AR1存储的地址指针减P#1.0 |
....... | ....... |
L P#8191.7 | "+AR1"负向最小的地址,对应于 "P#-0.1" |
+AR1 | AR1存储的地址指针减P#0.1 |
....... | ....... |
L P#I 8192.0 | 对应P#0.0" ("+AR1" 忽略地址标识符"I") |
+AR1 | AR1的内容不改变 |
由于指令"+AR1" 只计算累加器1的低字,指针带有地址标识符也可以使用。在高字中存储地址标识符不会影响操作。n
请注意在地址寄存器间接寻址指令中增加和减少地址是相互独立的,地址寄存器包含指针的范围为 P<地址标识符> 0.0 to P<地址标识符> 65535.7.
一般说明
CPU中的AR2与AR1功能相同。
地址寄存器的使用是有限制的,如果没有注意这些限制将会使用户程序出现不必要的错误。详细信息请参考STEP7在线帮助-关键字 "AR1".
决定使用哪一种间接寻址方式参考下面的建议:
- 当使用地址寄存器进行间接寻址时最好使用区域内部指针。
- 使用储存器进行间接寻址,指令可视,程序清晰不容易出错并且便于维护。
- 使用地址寄存器与DB块的打开,本地数据的操作无关。
使用存储器进行间接寻址的优点如下:
- 不必考虑寄存器的限制。
- 在程序中每个点使用存储器间接寻址没有任何限制。
- 可以并行使用多个地址指针。
- 不必要转化AR1和定义地址偏移。
当使用间接寻址时,编程故障可能没有直接寻址易于查找,必须对整个程序进行认真的测试。
注意:
更多的信息和例子可以在STEP7在线帮助的下列条目中查询:
- Format of the ANY parameter type.
- Format of the POINTER parameter type.
- Using the POINTER parameter type.
- Using the ANY parameter type.
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc337634.html