程序请教学习************8 点击:309 | 回复:2



鬼勒和妹妮

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:7帖 | 38回
  • 年度积分:0
  • 历史总积分:162
  • 注册:2007年12月10日
发表于:2019-06-05 17:37:57
楼主

各位大师:下面这段程序什么意思?特别红色字体这部分不是很懂,求赐教!!



OPN   "DB38_FLOW_COUNTERS";

      L     #Datatemp;
      L     L#8;
    
  *D    ;
      T     #dataword_pointer_work;

      L     DBW [#dataword_pointer_work];
      T     LW     4;

      L     #Datatemp;
      L     L#2;
      +D    ;
      T     #Datatemp;
      L     L#8;
      *D    ;
      T     #dataword_pointer_work;

      L     DBW [#dataword_pointer_work];
      T     LW     6;

      L     #Datatemp;
      L     L#2;
      +D    ;
      T     #Datatemp;
      L     L#8;
      *D    ;
      T     #dataword_pointer_work;





yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10210回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2019-06-06 08:54:36
1楼

 L     #Datatemp;                //装入一个变量,然后乘8,相当于左移三位

      L     L#8; 
    
  *D    ; 
      T     #dataword_pointer_work;    //形成X.y的方式

      L     DBW [#dataword_pointer_work]; 
      T     LW     4;


例如dataword.....中的值是20.0,那么就是DBW20的值写入LW4中去,西门子规定,间接寻址必须使用X.y方式的地址形式,为啥用*D呢?因为间接寻址使用32位指针,所以需要使用双字乘法。


Good Luck~


鬼勒和妹妮

  • 精华:0帖
  • 求助:1帖
  • 帖子:7帖 | 38回
  • 年度积分:0
  • 历史总积分:162
  • 注册:2007年12月10日
发表于:2019-06-09 22:46:29
2楼


回复内容:

对: yuanle  L     #Datatemp;          ... 内容的回复!

-----------------------

谢谢大师!

程序的功能我大概能明白,就是搞不懂为什么要乘8?

#Datatemp  接口外面赋值是0, 程序实现的功能是把DB38DBW0送入FC38 temp变量的LW4,为什么要*L #8呢?  而不是直接 

L     #Datatemp;

 T     #dataword_pointer_work;

呢?



热门招聘
相关主题

官方公众号

智造工程师