请问这段语句怎么解释的?

这是西门子plc与丹佛斯变频器DP通信的程序,用的是profidrive profile

  L     0
   A     #I_EnableSetPointSetting    //~ falls Sollwertvorgabe 黚er Bus erlaubt
      JCN   SWDR                        //~ --> aufbereiten Sollwert an Frequenzumformer ausgeben

      L     #I_SetPointSetting          //~ Sollwert vorbereitend laden
      A     #I_SetPointType             //~ Normierung gew黱scht?
      JC    SWDR

//~ --- Sollwertnormierung ---
      ITD                               //~ umwandeln in 32-Bit Ganzzahl
      DTR                               //~ umwandeln in Gleitpunktzahl
      L     1.638400e+001               //~ mit 16,384 multiplizieren   (0.0% - 100.0% entspricht 0 - 16384)
      *R    
      RND                               //~ zur點kwandeln in 32-Bit Ganzzahl
      L     L#0                         //~ mit "0" vergleichen
      >=I   
      JCN   SWDR

      TAK                               //~ 0 <= Sollwert <= 4000 hex  (= 16384 dez)
      L     W#16#4000
      <=I                               //~******************************************************************
      JCN   SWDR
      TAK   

SWDR: NOP   0
      T     #Control.SetPoint
这是给定值处理,请问为什么乘以  1.638400e+001 ,我知道16384是对应100%,哪位大虾能逐句解释下,谢谢了!

问题补充:
为什么要乘以16,384,还有为什么要TAK交换低高字,16.384对应是10%,哪位大侠帮帮我谢谢了!

最佳答案

看了这段程序感觉有点问题,前面的第一个JCN和第一个JC跳转觉得没有什么问题,因为跟具体的应用有关;而后面再数据处理的过程中的JCN跳转,感觉有点问题,都跳转到NOP 0
时,只要跳转到该位置不论什么值都会被传送给#Control.SetPoint,就失去了数据处理的意义了;所以我觉实际的应用中#I_SetPointType常为1 ,数据的处理过程被跳过。
我认为的程序:
L     0
      A     #I_EnableSetPointSetting   //为0时直接跳转并将0给#Control.SetPoint;
      JCN   SWDR                        
      L     #I_SetPointSetting          //ACC1的值为 #I_SetPointSetting 
      A     #I_SetPointType           //为1时直接跳转并ACC1里的值直接转入#Control.SetPoint中,这里与数据的类型有关;
      JC    SWDR
// 以下这段程序就是对设定值#I_SetPointSetting进行处理:
      ITD                               
      DTR                              
      L     1.638400e+001                
      *R    
      RND             //      #I_SetPointSetting乘以16.384后取整后保存在ACC1里。                          
      L     L#0                         
      >=I              // 小于0时跳转到SWDR  1     
      JCN   SWDR1
      TAK                               
      L     W#16#4000
      <=I              //大于 W#16#4000跳转到SWDR1                
      JCN   SWDR1
      TAK   
SWDR:  T    #Control.SetPoint
        BEC
SWDR1 : L  0
        JU   SWDR
         NOP 0

提问者对于答案的评价:
谢谢了!!!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午7:05
下一篇 2018年12月1日 下午7:06

相关推荐