S7-200手册里面S7-200的数据的存取讲解 点击:227 | 回复:2



阿水--王者之师

    
  • 精华:24帖
  • 求助:348帖
  • 帖子:1616帖 | 22281回
  • 年度积分:37
  • 历史总积分:98482
  • 注册:2007年3月22日
发表于:2013-05-10 10:06:39
楼主

  对于 S7 200 系列 PLC 中的 & 和 * 的用法我一直搞不清,今天晚上找了点资料与大家一起分享,感觉写得不错.  

  & 取变量地址在物理内存中的位置(16进制的整数),* 地址指针,即指向地址的地址

  直接寻址:已知具体的地址找某人A,例如x街x号x-x-x房间,你到此即可找到该房间里的某人A..。

、间接性寻址:不直接知道具体的地址找某人A,但直接知道某人B的地址,因为某人B知道某人A的地址。因此,你首先据某人B的地址要找到该房间里的某人B.。从某人B那里知道了某人A的地址,然后,你据某人A的地址间找到该房间里的某人A..。俗称,兜圈子。
  参考链接:
《我们为什么要学习间接寻址》
http://blog.plcjs.com/blog-16037-9291.html
《直接寻址,间接寻址,存储器寻址是什么意思》
http://www.it8g.com/XiTong/201002/34911.htm

看看这个:
LD SM0.0
MOVD   &VB0, LD10   建立一个指针。
+D     VD1004, LD10    指针增加的字节数。
MOVB   *LD10, VB1900   把指针里面的起始数据增加到VB1900开始的地址中。

应该改成这样才对
LD SM0.0
MOVD   &VB0, AC0
+D     VD1004, AC0
MOVB   *AC0, VB1900


如果VB200=12,执行MOVB &VB200,AC1,MOVB *AC1 , AC0
后AC0的内容是什么?

答:AC0=12。问题不大。

从这个简单的问题上可以看出来没有什么区别,其实很大的分支的。你要知道指针地址和使用指针就有点区别了。

  MOVB &VB200,AC1
     MOVB *AC1 , AC0
这两条指令的作用应该是等同于:
  MOVB VB200,AC0

也可以用MOVD  $VB200,AC0。但是如果用MOVD  VB200,AC0这个就是错误。另外MOVD   VD200,AC0这个是正确的。


MOVB &VB200,AC1 把VB200的地址(VB200的起始地址)作为指针存入AC1。


MOVB *AC1 , AC0将AC1所指向的字节(VB201)的值送入到AC0。

这里显然可以看出两种不同的地址。




楼主最近还看过



赏月不吃月饼

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 91回
  • 年度积分:0
  • 历史总积分:175
  • 注册:2011年9月08日
发表于:2013-05-10 18:59:05
1楼

&VB0表示vb0的地址, *LD10表示它是一个指针,学过c的应该都知道

huteng

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 266回
  • 年度积分:0
  • 历史总积分:139
  • 注册:2012年3月16日
发表于:2013-05-10 22:17:18
2楼

适合初学者。希望以后能多发些


热门招聘
相关主题

官方公众号

智造工程师