STEP 7 和 STEP 5 在间接寻址操作上有何不同?

用法说明:
在STEP7间接寻址中,下列两种地址区的间接寻址方式是不同的:n

  1. 当寻址定时器,计数器和数据块时使用“数字号”.n
  2. 当寻址输入区,输出区,位地址区,全局数据(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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论