S7300 STL 语句含义

SET   
      SAVE  
      =     L     66.1
      L     #IN0
      L     0
      >=I   
      JCN   M001
      L     #IN0
      ITD   
      DTR   
      T     #TEMP20[1]
      JU    M002
M001: L     0.000000e+000
      T     #TEMP20[1]
16个赋值程序,字数限制,省略了。
------------------------------------------------------------------
M020: L     1
      T     #TEMP22
M021: L     #TEMP22
      L     8
      <=I   
      JCN   M022
      L     #TEMP22
      ITD   
      L     L#1
      >=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#8
      <=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#-1
      +D    
      L     L#32
      *D    
      TAR2  
      +D    
      L     #TEMP22
      ITD   
      TAK   
      T     LD    68
      TAK   
      L     L#1
      >=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#8
      <=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#-1
      +D    
      L     L#32
      *D    
      L     #TEMP22
      ITD   
      TAK   
      T     LD    72
      TAK   
      L     L#1
      >=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#8
      <=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#-1
      +D    
      L     L#32
      *D    
      TAR2  
      +D    
      LAR1  LD    72
      L     LD [AR1,P#0.0]
      TAK   
      LAR1  
      TAK   
      L     DID [AR1,P#96.0]
      *R    
      L     2.764800e+004
      /R    
      LAR1  LD    68
      T     DID [AR1,P#32.0]
      L     #TEMP22
      ITD   
      L     L#1
      >=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#8
      <=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#-1
      +D    
      L     L#32
      *D    
      TAR2  
      +D    
      L     #TEMP22
      ITD   
      TAK   
      T     LD    68
      TAK   
      L     L#1
      >=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#8
      <=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#-1
      +D    
      L     L#32
      *D    
      L     #TEMP22
      ITD   
      TAK   
      T     LD    72
      TAK   
      L     L#1
      >=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#8
      <=D   
      A     L     66.1
      =     L     66.1
      TAK   
      L     L#-1
      +D    
      L     L#32
      *D    
      TAR2  
      +D    
      LAR1  LD    72
      L     LD [AR1,P#32.0]
      TAK   
      LAR1  
      TAK   
      L     DID [AR1,P#128.0]
      *R    
      L     2.764800e+004
      /R    
      LAR1  LD    68
      T     DID [AR1,P#64.0]
      L     #TEMP22
      L     1
      +I    
      T     #TEMP22
      JU    M021
M022: CLR   
      A     L     66.1
      SAVE  
      BE    
以上是程序,程序是读取16个模拟量的值,并将其转换为实际值,存入DB1001.DBD32至DBD92中,后半段程序只能看明白是在做地址偏移,但不是很明白,望高手解答。

最佳答案

太长了,写了一部分,可供参考

      SET                               //将RLO置位
      SAVE                              //将RLO 存入BR位
      =     L     66.1                  //操作成功,L66.1=1
      L     #IN0                        //将#INO装载入累加器1, ACC1=#IN0
      L     0                           //将累加器1的值存入累加器2,然后将0存入累加器1,执行后,ACC2=#IN0,ACC1=0
      >=I                               //ACC2>=ACC1,则RL0=1;
      JCN   M001                        //若RLO=0,则跳转到M001;
      L     #IN0
      ITD                               //将#IN0转为32位整数;
      DTR                               //将#IN0转为32位浮点数;
      T     #TEMP20[1]                  //将#IN0存储在#TEMP20[1] 中;
      JU    M002                        //无条件跳转到M002;
M001: L     0.000000e+000               //ACC1=0.0;
      T     #TEMP20[1]                   // #TEMP20[1]=ACC1;
16个赋值程序,字数限制,省略了。
------------------------------------------------------------------
M020: L     1                           //将1载入到累加器1;ACC1=1
      T     #TEMP22                     //将累加器1的值传送到#TEMP22;
M021: L     #TEMP22                     //将#TEMP22载入到累加器1;ACC1=#TEMP22;
      L     8                           //将累加器1的值存入累加器2,然后将8载入到累加器1;ACC1=8;
      <=I                               //ACC2<=ACC1,则RL0=1
      JCN   M022                        //若RLO=0,则跳转到M022
      L     #TEMP22
      ITD                               //将#TEMP22转为32位整数;
      L     L#1                         //载入长整数1
      >=D                               // ACC2>=ACC1,则RLO=1;
      A     L     66.1
      =     L     66.1                  //L66.1=1,则L66.1=1;
      TAK                               //累加器1的值与累加器2的值互换;指令执行后,ACC1=#TEMP22,ACC2=1;
      L     L#8                         // 将累加器1的值存入累加器2,然后将8载入到累加器1
      <=D                               //ACC2<=ACC1,则RL0=1
      A     L     66.1
      =     L     66.1                  //L66.1=1,则L66.1=1;
      TAK                               //累加器1的值与累加器2的值互换;指令执行后,ACC1=#TEMP22,ACC2=8
      L     L#-1                        // 将累加器1的值存入累加器2,然后将-1载入到累加器1
      +D                                //累加器1的值与累加器2的值相加,结果保存在累加器1中;
      L     L#32                        //将累加器1的值存入累加器2,然后将32载入到累加器1;ACC1=32
      *D                                //累加器1的值与累加器2的值相乘,结果保存在累加器1中
      TAR2                              //将地址寄存器AR2的内容传送到累加器1中,累加器1的值传送到累加器2中;
      +D                                //累加器1的值与累加器2的值相加,结果保存在累加器1中;

提问者对于答案的评价:
回复晚了,谢谢了兄台!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年8月15日 上午12:40
下一篇 2017年8月15日

相关推荐