假如MODULE-ADDRESS=256,那么POINTER-IO-START是多少?

西门子plc 发布于 2年前 分类:S7-300/400

我把程序写清楚点:
L P##START-AXIS-1
LAR1
L #MODULE-ADDRESS
+2
SLD 3
T #POINTER-IO-START
L W[AR1,P#0.0]
T PQW[#POINTER-IO-START]
假如MODULE-ADDRESS=256,那么POINTER-IO-START是多少?
W[AR1,P#0.0]是什么意思?

1个回复

  • plc电工爱好者
    plc电工爱好者

    老外的程序吧,他们经常爱这样编程。
    首先,L #MODULE-ADDRESS的实际把地址放到累加器中,可以认为是256.0。这个.0你可以理解是位;256是字节。
    SLD 3实际上是把2在累加器中左移了3位,正像你所知道的。这样就成为区域内地址寻址的指针2.0。同样.0是位;2是字节。
    这样地址相加的结果256.0+2.0=258.0,这才是地址和正确的结果。
    就你的问题补充有一个疑问:就是+2,在Step7中不是一个正确的表达式啊。我想应该是:
    L 2
    SLD 3
    +D
    T #POINTER-IO-START。这样的结果就是258.0。
    W[AR1,P#0.0]是一个寄存器区域间间接寻址指针。你要看#START-AXIS-1变量所代表是哪一个区域了,即区域标识符的26、25、24位.
    当是对P区域寻址时,AR=800xxxxx
    当是对I区域寻址时,AR=810xxxxx
    当是对Q区域寻址时,AR=820xxxxx
    当是对M区域寻址时,AR=830xxxxx
    当是对DB区域寻址时,AR=840xxxxx
    当是对DI区域寻址时,AR=850xxxxx
    当是对L区域寻址时,AR=870xxxxx
    举个例子,#START-AXIS-1是地址DB1.DBW2,数据为66。那么T PQW[#POINTER-IO-START]就把66传递给PQW258进行输出。
    具体数据需要你看前面的例子了。