caixf25的个人主页

http://www.qtcn.org/bbs/u/191792  [收藏] [复制]

caixf25

  • 0

    关注

  • 0

    粉丝

  • 5

    访客

  • 等级:新手上路
  • 总积分:0
  • 男,1994-07-12

最后登录:2018-11-20

更多资料

日志

S7-200 直接及间接寻址

2018-10-07 12:33
当我们编写程序是,可以使用3种方法来表示指令的地址。一般的PLC都支持这种寻址方式。
  • 直接寻址
  • 符号寻址
  • 间接寻址

Direct Addressing
S7-200通过不同的存储位置来存储不同的地址,我们可以显式的表示一个内存的地址,表明这就是存储的数据的地址。这可以使程序能够直接的读取这些信息。直接弟子可以表明存储的位置,大小等,比如,VW790表明的是字地址,是在内存的V存储区当中。

要读取位的信息,先设定一个存储器的区域,再用点后的数字表明一个位置。下面的例子表明一个位的信息。
I3.4
I是区域,3是字节,4是位信息(0~7)
可以用字节,字,双字来寻址大部分的区域的数据。
VB100                              VW100                              VD100

Symbolic Addressing
符号地址使用字符来表示一个地址。用一个符号的的常量来表示一个地址。

对于一个SIMATIC程序,用一个符号分配表(symbolic table)来分配。对于IEC程序,用全局变量表(global variable table)来分配。

Indirect Addressing
Indirect addressing use a pointer to access the data in memory. 指针使用一个双字内存作为存储另一个地址的信息。可以使用V内存区域,L存储区域,或者是累加寄存器作为指针。要创建一个指针,首先是使用MOVE双字指令来传递为指针地址存储指令。指针也可以是传递一个分程序的参数。

S7-200允许指针来使用下列的内存区域,I,Q,V,M,S,T(当前的数据)及C(当前的值)。我们不能使用单独的位,或者是使用AI,AO,HC,SM,或者是暂存的内存地址L。

要非直接的读取存储器的数据,就需要用ampersand和一个内存的位置符来创建这个非直接存储的地址。这个指令的前面一定是有一个ampersand符号,来表示内存的区域,而不是表明这个区域的内容,这个区域的内容是要是要表示的区域将使用的地址信息。

下面的一个例子
V199                    MOVD          &VB200,    AC1           用VB200的地址(VW200的起始字节)传递到AC1
V200                    MOVW         *AC1          AC0           传递AC1指向字信息到AC0
这里,用*表示一个命令使用的是一个指针。如下面的图所示,用*AC1表示AC1是一个字长度的值的一个指针。用MOVE 字的命令。在这个例子当中,在VB200和VB201存储的内容传递到了AC0中。
简单的就是说,要使用VB1000作为地址传递数据的话,首先,将&VB1000传递到比如VD808的内存中,要使用VW1100作为地址来输送,将&VB1100传递到VD808当中,在使用这个地址时实际上是使用的VW1100作为操作目的。
以上是用间接地址存储数据的信息。会用程序来说明这一点。在后续的文章中。
分类:默认分类|回复:0|浏览:53|全站可见|转载
 

下一篇: 2018.10.07 日志

上一篇: 实战S7-200之间通讯

Powered by phpwind v8.7 Certificate Copyright Time now is:12-14 09:05
©2005-2016 QTCN开发网 版权所有 Gzip disabled