麻烦高人指点一下S7 300指令什么意思:尤其是L W[AR1,P#0.0]这类指令什么意思,谢谢各位了

OPN #ArbeitsDB

A #FreigabeSteuern
= DBX 135.0
A #FreigabeSteuern
A DBX 134.1
= #SteuernAktiv

A DBX134.0
JCN END1
LAR1 P#DBX 0.0
TAR1 #Save_Zeiger
LAR2 P#DBX 128.0
L 16
Sshl:T #Schleifenzaehler
L W [AR1,P#2.0]
SLW 3
L W [AR1,P#0.0]
SLW 13
SRW 13
OW
LAR1
A I [AR1,P#0.0]
= [AR2,P#0.0]
LAR1 #Save_Zeiger
+AR1 P#4.0
TAR1 #Save_Zeiger
+AR2 P#0.1
L #Schleifenzaehler
LOOP Schl
END1: NOP 0

L DBW 128
CAW
T DBW 128
A DBX 138.0
BLD 100
FP DBX 138.1
= DBX 138.0
A DBX 134.0
AN #SteuernAktiv
O DBX 138.0
= DBX 138.2

A DBX 138.2
JCN END2
LAR1 P#DBX 64.0
TAR1 #Save_Zeiger
LAR2 P#DBX 131.0
L 8
Sch2: T #Schleifenzaehler
L W [AR1,P#2.0]
SLW 3
L W [AR1,P#0.0]
SLW 13
SRW 13
OW
LAR1
A Q [AR1,P#0.0]
= [AR2,P#0.0]
LAR1 #Save_Zeiger
+AR1 P#4.0
TAR1 #Save_Zeiger
+AR2 P#0.1
L #Schleifenzaehler
LOOP Sch2
END2: NOP 0

上面的程序要想看懂的话必须得了解西门子程序的寻址方法,具体是做什么得结合你的各个变量的具体含义才能知道是什么含义。上面用到了直接寻址和间接寻址的方法。不是一两句能说清楚的。L W[AR1,P#0.0]这个个间接寻址中的交叉寻址,其中W指的是你的字符宽度,W代表的是字,就是这个指针的指向宽度为2个字节,AR1为你事先装载进去的指针指向起始地址,例如
L [MW20]
LAR1
这个就是在位存储区中的第20个字的位置,字符宽度为2两个字节。装载到地址寄存器1中。
L W[AR1,P#0.0]这就是以AR1的地址为起始地址偏移0.0个偏移量。这样就找到了你需要使用的地址了。现在国内的程序员对间接寻址的使用比较少,主要是直接寻址。这样的间接寻址就相当于C语言中的指针~!使用比较灵活,如果使用不当的话就会使PLC死机的状况。但是如果使用的好的话可以简便程序结构,并且便于程序的标准化~!如果还有什么问题可以继续留言~!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-20
LOOP:
是循环指令,循环次数由计数寄存器CX指定。是否执行循环体的判断指令在循环体之后,所以,至少执行1次循环体,即至少循环1次。执行LOOP指令时,CPU自动将CX的值减1,若CX=0,则结束循环;否则,重复执行循环体。
第2个回答  2011-04-03
和、
kjij

yjg
yuyuyjugyjyuyguyuyuuyugyubjguubjjgtdrsaea
hgjhjhjhjhjnmhjhjhjgjgj
第3个回答  2011-04-01
c

麻烦高人指点一下S7 300指令什么意思:尤其是L W[AR1,P#0.0]这类指令什...
L W[AR1,P#0.0]这个个间接寻址中的交叉寻址,其中W指的是你的字符宽度,W代表的是字,就是这个指针的指向宽度为2个字节,AR1为你事先装载进去的指针指向起始地址,例如 L [MW20]LAR1 这个就是在位存储区中的第20个字的位置,字符宽度为2两个字节。装载到地址寄存器1中。L W[AR1,P#0....

PIW [AR1,P#0.0]这句话是什么意思
例如:语句L PIW [AR1, P#0.0] 表示将PIW模拟量的值传送到ACCU1中,具体传哪个值由AR1+P#0.0决定。如果AR1=288,那么就把PIW288传入ACCU1中。P#0.0就是0吧。

...s7 300 程序问题:LAR1 P#M 200.0 LAR2 P#DBX 0.0 具体意义是什么?是...
LAR1指令是将地址放入地址寄存器AR1中,而P#M200.0指的是指向以M200为首地址的存储区的指针。下面的语句L B[AR1,P#0.0],属于地址寄存器变址寻址方式,等同于L MB200

关于西门子的一段程序,请高手指点!
P#是指这个是个指针数值,#IN2是个变量,所以,你要根据这个变量的类型来看。从你的问题中看出,#in2应该是格指针类型的变量,内容是DB8.DBX0.0。指针类型的参数结构为第0-16位为DB的块号。因此,你程序第一段是载入了指向这个变量地址的指针。最终结果,你打开的是DB8(也就是#IN2的第一二个...

西门子S7-300\/400PLC中,请问:地址寄存器 AR1里的值为什么是累加器1除 ...
AR1是地址寄存器,里面的值如果按2进制来算应该是2400,但是实际上它显示的是一个地址,地址的实际值应该显示为300.0而不是你说的300,以二进制的形式来看地址的格式如下:0-2这三位代表地址的位数值,3-18这十六位代表的是尺寸数值,比如Q10.3的地址转换成2进制就是:1010011,前面3位1010是尺寸...

西门子PLC S7-300中,在什么情况下用指针P#?比如:P#M12.0与M12.0区别...
LAR1 P#M12.0 T M[AR1,P#0.0]更多的P#M12.0的用法是作为ANY块的使用,即一块数据区域的始终,例如:P#M12.0 BYTE 10 表示MB12开始的连续10个字节的区域。而P#M12.0代表的是一个指针,他储存了一个地址,通过地址寄存器,你可以定位到这个指针指向的地址,在这之前,他一无是处。

...编程的问题?L DID [AR1,P#70.0]是什么意思?
装载当前背景DB块中(地址AR1的值加上70)所对应的双字的数据到累加器1.比如当前背景DB为DB0,AR1的地址为0.0,当 L DID[AR1,P#70.0]后,累加器1的值即为DB0.DBD70所对应的值。

西门子指令 L P#10.8 ; LAR1; A I[AR1,p#21.1] ; A 0.1; = Q0.2...
2个A就是2个点与输出 Q0.2,前面是指针使用但第2个A后面好像是少了东西,是否有丢失

S7 300指令是什么意思?L W[AR1,P#0.0]指令是什么意思?
L W[AR1,P#0.0]这就是以AR1的地址为起始地址偏移0.0个偏移量。这样就找到了你需要使用的地址了。现在国内的程序员对间接寻址的使用比较少,主要是直接寻址。这样的间接寻址就相当于C语言中的指针~!使用比较灵活,如果使用不当的话就会使PLC死机的状况。但是如果使用的好的话可以简便程序结构,...

相似回答