求高手详细解读s7-300程序

L     #IN1
      L     IW     0
      SRW   
      SLW   
      T     MW    10
      L     8
      L     #IN1
      -I    
      L     IB     1
      SRW   
      T     MB    12
      L     20
      T     MW    14
      LAR1  P#0.0
      LAR2  P#0.0
      L     #IN0
M002: T     MW    40
      L     #IN1
M001: T     MW    42
      OPN   DB [MW 14]
      A     M [AR1,P#10.0]
      A     M [AR2,P#12.0]
      =     DBX [AR2,P#0.0]
      A     DBX [AR2,P#0.0]
      JC    M003
      L     P#0.1
      +AR2  
      L     MW    42
      LOOP  M001
      LAR2  P#0.0
      L     MW    14
      L     1
      +I    
      T     MW    14
      L     20
      -I    
      L     #IN0
      >I    
      JC    M003
      L     P#0.1
      +AR1  
      L     MW    40
      LOOP  M002
M003: BE

最佳答案

L     #IN1//装载in1到累加器1,此处的数据无用
      L     IW     0//装载in1到累加器2,装载iw0到累加器1
      SRW   //16位数据右移一个位
      SLW   //16位左移一个位,两个移位指令合计是把iw0的最低位清零了。
      T     MW    10//累加器1中的结果保存到mw10
      L     8//装载8到累加器1
      L     #IN1//装载8到累加器2,装载in1到累加器1
      -I //累加器2结果减去累加器1的结果   
      L     IB     1//装载ib1到累加器1
      SRW  //16位数据右移一个位 
      T     MB    12//结果保存到累加器1中
      L     20
      T     MW    14//mw14=20
      LAR1  P#0.0//从累加器1中读取地址寄存器1,偏移量为0
      LAR2  P#0.0//从累加器1中读取地址寄存器2,偏移量为0
      L     #IN0
M002: T     MW    40//mw40初始值为in0
      L     #IN1
M001: T     MW    42//mw42初始值为in1
      OPN   DB [MW 14]//打开mw14保存的db号
      A     M [AR1,P#10.0]
      A     M [AR2,P#12.0]
      =     DBX [AR2,P#0.0]//如果m位的ar1对应的地址偏移10个字节和m位的ar2对应的地址偏移12个字节都为1则db块中ar2对应的地址的位为1,否则为0
      A     DBX [AR2,P#0.0]//如果db块中ar2对应的地址的位为1则跳转到M003否则执行下面的程序
      JC    M003
      L     P#0.1
      +AR2  
      L     MW    42//mw42保存的地址为ar2增加一个位
      LOOP  M001//跳转到M001循环
      LAR2  P#0.0//从累加器1中读取地址寄存器2,偏移量为0
      L     MW    14
      L     1
      +I    
      T     MW    14//mw14=mw14+1
      L     20
      -I    
      L     #IN0
      >I    
      JC    M003//mw14-20>in0则跳转到M003,否则执行下面的程序
      L     P#0.1
      +AR1  
      L     MW    40//mw40=ar1的地址增加一个位
      LOOP  M002//跳转到M002继续循环
M003: BE程序结束。

提问者对于答案的评价:
谢谢你!
  如果IN0:=7 IN1:=5,那么MW10中字节0的1-5位是不是为0 而IB1是不是右移3位然后送到MB12中,那MB12中是什么数呢,看后面的程序M001循环结束后,应是DB20中M10.0分别和M12.0-M12.4与后结果存在DBX0.0-DBX0.4中。M002循环结束后,分别对应DB20- DB26,这样理解对不对?1540390704我qq,能否经常请教?

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc212731.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年11月16日
下一篇 2017年11月16日

相关推荐