求解以下37-300 STL程式 点击:459 | 回复:5



工控里的小鱼

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2006年6月28日
发表于:2006-08-29 23:07:00
楼主
请哪个大虾能详解下,小弟先在这里谢了
OPN   DB    10  
LAR1  P#DBX 60.0              
L     1                          
T     #TEMP11                   
L     10                       
M003: T     #TEMP10                    
L     W [AR1,P#0.0]

L     #TEMP12                  
<=I         
JC    M001                       
JU    M002                        
M001: L     #TEMP11                          
+     1                                
T     #TEMP11                     
+AR1  P#2.0                         
L     #TEMP10                    
LOOP  M003                       
M002: LAR1  P#DBX 110.0                
L     #TEMP11                          
T     #OUT6                      
M004: T     #TEMP11                          
+AR1  P#10.0                            
L     #TEMP11                           
LOOP  M004                             
LAR2  P#DBX 530.0    



工控里的小鱼

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2006年6月28日
发表于:2006-08-30 19:21:00
1楼
没人懂?还是不屑?

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2006-08-30 22:53:00
2楼
我觉得应该先理解间接寻址,弄明白了,就很好理解了

工控里的小鱼

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2006年6月28日
发表于:2006-08-30 23:01:00
3楼
谢谢楼上的,我就是不太理解间接寻址才来请教的。
L     W [AR1,P#0.0]以能说下这条的意思吗?

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2006-08-30 23:06:00
4楼
可以理解为把dbw60的数据装载到累加器里

亚星

  • 精华:1帖
  • 求助:0帖
  • 帖子:14帖 | 340回
  • 年度积分:0
  • 历史总积分:394
  • 注册:2001年1月08日
发表于:2006-09-04 13:21:00
5楼
我来试试:
OPN   DB    10  //打开DB10
LAR1  P#DBX 60.0  //把DB10.DBX60.0的地址放到AR1            
L     1                          
T     #TEMP11     //把1付给TEMP11              
L     10          //置循环次数为10             
M003: T     #TEMP10                    
L     W [AR1,P#0.0]   //读DB10.DBW60

L     #TEMP12         //读TEMP12         
<=I                  //如果DB10.DBW60<TEMP12  
JC    M001           //跳转到M001            
JU    M002            //否则跳转到M002            
M001: L     #TEMP11                          
+     1                                
T     #TEMP11         //TEMP11=TEMP11+1            
+AR1  P#2.0           //地址积存器增加2BYTE              
L     #TEMP10                    
LOOP  M003            //循环M003
//上面的循环是依此查找DB10.DBW60~DBW78里小于TEMP12的值的数量并且放到TEMP11;当查找到或查找完后执行下面的程序
          
M002: LAR1  P#DBX 110.0 //把DB10.DBX60.0的地址放到-AR1            

L     #TEMP11                          
T     #OUT6    //TEMP11付给OUT6;并且置循环次数为TEMP11          

M004: T     #TEMP11                          
+AR1  P#10.0   //地址积存器增加10BYTE      
                                 
L     #TEMP11                           
LOOP  M004     //循环M004

//以上这段程序是根据TEMP11的值重新定位AR1
                      
LAR2  P#DBX 530.0    //把DB10.DBX530.0付给AR2
                 
L     5                          
M005: T     #TEMP11   //置循环次数为5
                       
L     W [AR1,P#0.0]   //把AR1指定地址的WORD付给AR2指定的   
T     W [AR2,P#0.0]      
+AR1  P#2.0                             
+AR2  P#2.0          //AR1/2指针增加2BYTE                  
L     #TEMP11                         
LOOP  M005         //循环M005

//这整段程序相当于:
1.查找DB10.DBW60~78小于TEMP12的数的数量,并且由该量来定位要COPY的值的地址
2.定位要COPY的值的地址DB10.DBW[TEMP11*10+AR1]
3.COPY到响应的位置:
      DB10.DBW[TEMP11*10+AR1+0.0]-->DB10.DBW530
      DB10.DBW[TEMP11*10+AR1+2.0]-->DB10.DBW532
      DB10.DBW[TEMP11*10+AR1+4.0]-->DB10.DBW534
      DB10.DBW[TEMP11*10+AR1+6.0]-->DB10.DBW536
      DB10.DBW[TEMP11*10+AR1+8.0]-->DB10.DBW538

热门招聘
相关主题

官方公众号

智造工程师