当前位置: 主页 > PLC控制

请教关于OB86功能块和语句表的问题

在现场看到一个系统,其中在在现场出差时看到一个系统,用是西门子319-3PN/DPPLC,一路DP网连了三个S120的从站,另一路DP网连了几个IM153-1从站。其中在OB86块里有一个fb功能块,里面有如下程序。请教一下
1:300PLC只有导轨,没有机架,为什么要用OB86功能块啊?
2:LB[AR1,P#1.0]这个语句是什么意思啊?
3:每段程序开头有个LDW#16#87000000,这个87000000是怎么来的?还有,下面这段程序的意义是什么啊

程序段1:
LDW#16#87000000
LAR1
LB#16#56
LB[AR1,P#3.0]
==I
JCOB86
JUEND

程序段2
OB86:LDW#16#87000000
LAR1
LB[AR1,P#1.0]
LB#16#C4
<>I
JCEND

LD[AR1,P#12.0]
T#D1
LD[AR1,P#16.0]
T#D2
L#PINRBuffer
T#ID
LB[AR1,P#11.0]
T#SlNumber
T"DB_DPdata".DP_data_1


A[AR1,P#0.0]
JCKOMM
L‘G’
T#come_going
T"DB_DPdata".DP_data_2
JUWEIT
KOMM:L‘K’
T#come_going
T"DB_DPdata".DP_data_2


WEIT:L#PINRBuffer
+1
L256
+-1
AW
T#PINRBuffer
L#Length
*I
L#Offset
+I
SLD3
LAR1
LLD0
TDID[AR1,P#0.0]
L#D1
TDID[AR1,P#4.0]
L#D2
TDID[AR1,P#8.0]

最佳答案

OB86是处理机架故障的。
  地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。
  当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:  
  其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
    AR:0000000000000BBBBBBBBBBBBBBBBXXX
    这样规定,就意味着AR的取值只能是:0.0——65535.7
    例如:当AR=D4(hex)=00000000000000000000000011010100(b),实际上就是等于26.4。
  而在区域间寄存器间接寻址中,由于要寻址的区域也要在AR中指定,显然这时的AR中内容肯定于寄存器区域内间接寻址时,对AR内容的要求,或者说规定不同。
    AR:10000YYY00000BBBBBBBBBBBBBBBBXXX
  比较一下两种格式的不同,我们发现,这里的第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)=10000100000000000000000011010100(b),实际上就是等于DBX26.4。

提问者对于答案的评价:
谢谢。

  • 关注微信

猜你喜欢

微信公众号