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

在现场看到一个系统,其中在在现场出差时看到一个系统,用的是西门子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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年11月19日 下午2:01
下一篇 2017年11月19日 下午2:01

相关推荐