请教一个S7-200程序里的堆栈指令 点击:1004 | 回复:4



承龙

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:21帖 | 35回
  • 年度积分:0
  • 历史总积分:166
  • 注册:2004年12月02日
发表于:2006-02-09 16:21:00
楼主
程序1:LD     T37                         
       LPS                                
       MOVB   0, HYDelay1
       MOVB   1, HYDelay2
       A      Auto_I_Flag                 
       S      HYControlFlag, 1            
       LPP                                
       R      T37, 1        
程序2:LDB=   Send_M_Station, Rec_M_Station 
       AB=    Rec_M_Command, 16#0F        
       LPS
       AB=    Rec_Param1, 1
       AB=    Rec_Param2, 1
       AN     Beng1_I_Flag
       S      K_1_Beng, 1
       LRD
       AB=    Rec_Param1, 1
       AB=    Rec_Param2, 2
       AN     Beng1_I_Flag
       S      K_2_Beng, 1

       LRD
       BMW    AD_Result1, Send_A1, 8
       LRD
       MOVW   P_SET, Send_A11
       LRD
       CALL   SBR_Send_Check
       LPP
       CALL   SBR_Tx  
程序2与程序1相比,多了“LRD”指令,对此实在无法理解。盼望高人指点,不胜感激!            
                  



小数

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 14回
  • 年度积分:0
  • 历史总积分:42
  • 注册:2005年5月18日
发表于:2006-02-09 16:26:00
1楼
晕,LRD是读取保存的LPS前一个的内容,随便找书都行

承龙

  • 精华:0帖
  • 求助:0帖
  • 帖子:21帖 | 35回
  • 年度积分:0
  • 历史总积分:166
  • 注册:2004年12月02日
发表于:2006-02-09 16:34:00
2楼
在程序1里执行完MOVB后,并没用LRD指令;但在程序2里,执行完BMW指令后,却用了LRD指令。进行的都是传送数据操作,为何一个用,另一个不用?盼望赐教,不胜感激!

zhongdingjidian

  • 精华:3帖
  • 求助:0帖
  • 帖子:167帖 | 1364回
  • 年度积分:0
  • 历史总积分:2372
  • 注册:2003年5月29日
发表于:2006-02-09 16:56:00
3楼
明白里面的流程才好找毛病。

继续扫盲

  • 精华:1帖
  • 求助:0帖
  • 帖子:28帖 | 186回
  • 年度积分:0
  • 历史总积分:264
  • 注册:2004年11月22日
发表于:2006-02-10 13:49:00
4楼
LRD copies the second stack value to the top of stack. The stack is not pushed or popped, but the old top of stack value is destroyed by the copy.
LPS 复制了堆栈顶的值,并推入第二层堆栈中.
在你的程序中 LRD 读取的就是 LPS复制后的第二层的值,它和堆栈顶,其实是一样的值.显然你的程序并没有LPP 弹出所有的堆栈值.
建议再弹一个.

热门招聘
相关主题

官方公众号

智造工程师