在现场看到一个系统,其中在在现场出差时看到一个系统,用的是西门子319-3PN/DP的plc,一路DP网连了三个S120的从站,另一路DP网连了几个IM153-1从站。其中在OB86块里有一个FB功能块,里面有如下程序。请教一下
1:300PLC只有导轨,没有机架,为什么要用OB86功能块啊?
2: L B [AR1,P#1.0]这个语句是什么意思啊?
3:每段程序开头有个L DW#16#87000000,这个87000000是怎么来的?还有,下面这段程序的意义是什么啊
程序段1:
L DW#16#87000000
LAR1
L B#16#56
L B [AR1,P#3.0]
==I
JC OB86
JU END
程序段2
OB86: L DW#16#87000000
LAR1
L B [AR1,P#1.0]
L B#16#C4
<>I
JC END
L D [AR1,P#12.0]
T #D1
L D [AR1,P#16.0]
T #D2
L #PINRBuffer
T #ID
L B [AR1,P#11.0]
T #SlNumber
T "DB_DP data".DP_data_1
A [AR1,P#0.0]
JC KOMM
L 'G'
T #come_going
T "DB_DP data".DP_data_2
JU WEIT
KOMM: L 'K'
T #come_going
T "DB_DP data".DP_data_2
WEIT: L #PINRBuffer
+ 1
L 256
+ -1
AW
T #PINRBuffer
L #Length
*I
L #Offset
+I
SLD 3
LAR1
L LD 0
T DID [AR1,P#0.0]
L #D1
T DID [AR1,P#4.0]
L #D2
T DID [AR1,P#8.0]
最佳答案
OB86是处理机架故障的。
地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。
当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
AR:0000 0000 0000 0BBB BBBB BBBB BBBB BXXX
这样规定,就意味着AR的取值只能是:0.0 ——65535.7
例如:当AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。
而在区域间寄存器间接寻址中,由于要寻址的区域也要在AR中指定,显然这时的AR中内容肯定于寄存器区域内间接寻址时,对AR内容的要求,或者说规定不同。
AR:1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX
比较一下两种格式的不同,我们发现,这里的第31bit被固定为1,同时,第24、25、26位有了可以取值的范围。聪明的你,肯定可以联想到,这是用于指定存储区域的。对,bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:
区域标识符26、25、24位
P(外部输入输出)
000
I(输入映像区)
001
Q(输出映像区)
010
M(位存储区)
011
DB(数据块)
100
DI(背景数据块)
101
L(暂存数据区,也叫局域数据)
111
如果我们把这样的AR内容,用HEX表示的话,那么就有:
当是对P区域寻址时,AR=800xxxxx
当是对I区域寻址时,AR=810xxxxx
当是对Q区域寻址时,AR=820xxxxx
当是对M区域寻址时,AR=830xxxxx
当是对DB区域寻址时,AR=840xxxxx
当是对DI区域寻址时,AR=850xxxxx
当是对L区域寻址时,AR=870xxxxx
经过列举,我们有了初步的结论:如果AR中的内容是8开头,那么就一定是区域间寻址;如果要在DB区中进行寻址,只需在8后面跟上一个40。84000000-840FFFFF指明了要寻址的范围是:
DB区的0.0——65535.7。
例如:当AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),实际上就是等于DBX26.4。
提问者对于答案的评价:
谢谢。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc215239.html