间接寻址一段程序求解

LAR1  P##AUFTRAG_START

//;
      L     1
AIN1: T     #LOOPCOUNT
      A      [AR1,P#0.0]
      JC    AIN3
//;
      L     32
      >=I   
      JC    AIN2
//;
      L     #LOOPCOUNT
      +     1
      +AR1  P#0.1
      JU    AIN1
//;
AIN2: L     0
AIN3: T     #AUFTRAG

监控看到   LAR1 P##AUFTRAG_START  值为 84001870
1,#AUFTRAG_START  这个是 struct类型,是不是理解为一个32位指针?
但是块接口,如图三,又是一个指针,具体指向哪里呢?

2,84001870,对应 DB782这个DB块吗,但是程序里面并没有此DB?

图片说明:

间接寻址一段程序求解    间接寻址一段程序求解    间接寻址一段程序求解   

最佳答案

1、#AUFTRAG_START  这个是 struct类型,是不是理解为一个32位指针?
指令LAR1  P##AUFTRAG_START,就是装载指针AR1 。#AUFTRAG_START是地址,AR1是指针。即将#AUFTRAG_START表示的数据装入AR1中。STRUCT是一种数据类型,即表示一个由确定数目组件构成的数据结构。
2、84001870,对应 DB782这个DB块吗?
是的,DBX782.0。
先熟悉AR指针的数据格式:
当是对DB区域寻址时,AR=840xxxxx
AR: 
  1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX
其中最高位第31bit被固定为1。同时,第24、25、26位(YYY)有了可以取值的范围,如为100,即表示DB(数据块)。 3-18位指定byte字节。0-2位,指定bit位。
、例如:
据上述规定的数据格式:
当AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),实际上就是等于DBX26.4。 
、据上述规定的数据格式,解读 84001870 : 
AR=84001870(hex)=1000 0100 0000 0000 0001 1000 0111 0000(b),实际上就是等于DBX782.0。 
3、但是程序里面并没有此DB?
虽然程序里面并没有此DB,但STRUCT与DB有关。
、在此要熟悉STRUCT:
 Struct(结构性类型)是由不同数据类型组成的、属于复合型数据类型,它是用来定义一组相关的数据,其长度由用户定义,它与数组(Array)类型相反(ARRAY是由相同类型的数据组成的数组)。简言之,结构(STRUCT)是将一组同不同类型的数据组合在一起组成一个单位就是结构。
、在什么样的情况下需要用到 Struct 数据类型?
参考:
http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=71462&cid=1029
4、相关·资料:
、STEP 7的STRUCT数据类型:
http://www.xinmanduo.com/plc/177146.html

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

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日 下午10:25
下一篇 2020年10月30日 下午10:26

相关推荐