step7编程之地址概念详解 (2).pdf
《step7编程之地址概念详解 (2).pdf》由会员分享,可在线阅读,更多相关《step7编程之地址概念详解 (2).pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、主题:step7 编程之地址概念详解完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如 NOT 等).其中的操作数是指令要执行的目标,也就是指令要进行操作的地址.我们知道,在 PLC中划有各种用途的存储区,比如物理输入输出区P,映像输入区I,映像输出区Q,位存储区M,定时器 T,计数器 C,数据区 DB 和 L 等,同时我们还知道,每个区域可以用位(BIT),字节(BYTE),字(WORD),双字(DWORD)来衡量,或者说来指定确切的大小.当然定时器 T,计数器 C 不存在这种衡量体制,它们仅用位来衡量.由此我们可以得到,要描述一个地址,至少应该包含两个要素:1,存储的区域2
2、,这个区域中具体的位置比如:A Q2.0其中的 A 是指令符,Q2.0 是 A 的操作数,也就是地址.这个地址由两部分组成:Q:指的是映像输出区2.0:就是这个映像输出区第二个字节的第 0 位.由此,我们得出,一个确切的地址组成应该是:存储区符 存储区尺寸符 尺寸数值.位数值,例如:DBX200.0.DB X 200.0其中,我们又把存储区符 存储区尺寸符这两个部分合称为:地址标识符.这样,一个确切的地址组成,又可以写成:地址标识符+确切的数值单元【间接寻址的概念】寻址,就是指定指令要进行操作的地址.给定指令操作的地址方法,就是寻址方法.在谈间接寻址之前,我们简单的了解一下直接寻址.所谓直接寻
3、址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于 A 这个指令来说,Q2.0 就是它要进行操作的地址.这样看来,间接寻址就是间接的给出指令的确切操作数.对,就是这个概念.比如:A QMD100,A TDBW100.程序语句中用方刮号 标明的内容,间接的指明了指令要进行的地址,这两个语句中的 MD100 和 DBW100 称为指针 Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置.间接由此得名.西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址.【存储器间接寻址】存储器间接寻址的地址给定格式是:地址标识符+指
4、针.指针所指示存储单元中所包含的数值,就是地址的确切数值单元.存储器间接寻址具有两个指针格式:单字和双字.单字指针是一个 16bit 的结构,从 0-15bit,指示一个从 0-65535 的数值,这个数值就是被寻址的存储区域的编号.双字指针是一个 32bit 的结构,从 0-2bit,共三位,按照 8 进制指示被寻址的位编号,也就是 0-7;而从3-18bit,共 16 位,指示一个从 0-65535 的数值,这个数值就是被寻址的字节编号.指针可以存放在 M,DI,DB 和 L 区域中,也就是说,可以用这些区域的内容来做指针.单字指针和双字指针在使用上有很大区别.下面举例说明:L DW#16
5、#35/将 32 位 16 进制数 35 存入 ACC1T MD2/这个值再存入 MD2,这是个 32 位的位存储区域L+10/将 16 位整数 10 存入 ACC1,32 位 16 进制数 35 自动移动到 ACC2T MW100/这个值再存入 MW100,这是个 16 位的位存储区域OPN DBWMW100/打开 DBW10.这里的MW100就是个单字指针,存放指针的区域是 M 区,MW100 中的值 10,就是指针间接指定的地址,它是个 16 位的值!-L L#+10/以 32 位形式,把 10 放入 ACC1,此时,ACC2 中的内容为:16 位整数 10T MD104/这个值再存入
6、MD104,这是个 32 位的位存储区域A IMD104/对 I1.2 进行与逻辑操作!=DIXMD2/赋值背景数据位 DIX6.5!-A DBMW100.DBXMD2/读入 DB10.DBX6.5 数据位状态=QMD2/赋值给 Q6.5-A DBMW100.DBXMD2/读入 DB10.DBX6.5 数据位状态=QMW100/错误!没有 Q10 这个元件-从上面系列举例我们至少看出来一点:单字指针只应用在地址标识符是非位的情况下.的确,单字指针前面描述过,它确定的数值是 0-65535,而对于 byte.bit 这种具体位结构来说,只能用双字指针.这是它们的第一个区别,单字指针的另外一个限制
7、就是,它只能对 T,C,DB,FC 和 FB 进行寻址,通俗地说,单字指针只可以用来指代这些存储区域的编号.相对于单字指针,双字指针就没有这样的限制,它不仅可以对位地址进行寻址,还可以对 BYTE,WORD,DWORD寻址,并且没有区域的限制.不过,有得必有失,在对非位的区域进行寻址时,必须确保其 0-2bit 为全 0!总结一下:单字指针的存储器间接寻址只能用在地址标识符是非位的场合;双字指针由于有位格式存在,所以对地址标识符没有限制.也正是由于双字指针是一个具有位的指针,因此,当对字节,字或者双字存储区地址进行寻址时,必须确保双字指针的内容是 8 或者 8 的倍数.现在,我们来分析一下上述
8、例子中的 A IMD104 为什么最后是对 I1.2 进行与逻辑操作.通过 L L#+10,我们知道存放在 MD104 中的值应该是:MD104:0000 0000 0000 0000 0000 0000 0000 1010当作为双字指针时,就应该按照 3-18bit 指定 byte,0-2bit 指定 bit 来确定最终指令要操作的地址,因此:0000 0000 0000 0000 0000 0000 0000 1010=1.2【地址寄存器间接寻址】在先前所说的存储器间接寻址中,间接指针用M,DB,DI和L直接指定,就是说,指针指向的存储区内容就是指令要执行的确切地址数值单元.但在寄存器间接
9、寻址中,指令要执行的确切地址数值单元,并非寄存器指向的存储区内容,也就是说,寄存器本身也是间接的指向真正的地址数值单元.从寄存器到得出真正的地址数值单元,西门子提供了两种途径:1,区域内寄存器间接寻址2,区域间寄存器间接寻址地址寄存器间接寻址的一般格式是:地址标识符 寄存器,P#byte.bit,比如:DIXAR1,P#1.5 或 MAR1,P#0.0.寄存器,P#byte.bit统称为:寄存器寻址指针,而地址标识符在上帖中谈过,它包含存储区符+存储区尺寸符.但在这里,情况有所变化.比较一下刚才的例子:DIX AR1,P#1.5X AR1,P#1.5DIX 可以认为是我们通常定义的地址标识符,
10、DI 是背景数据块存储区域,X 是这个存储区域的尺寸符,指的是背景数据块中的位.但下面一个示例中的 M 呢 X 只是指定了存储区域的尺寸符,那么存储区域符在哪里呢毫无疑问,在 AR1 中!DIX AR1,P#1.5 这个例子,要寻址的地址区域事先已经确定,AR1 可以改变的只是这个区域内的确切地址数值单元,所以我们称之为:区域内寄存器间接寻址方式,相应的,这里的AR1,P#1.5 就叫做区域内寻址指针.X AR1,P#1.5 这个例子,要寻址的地址区域和确切的地址数值单元,都未事先确定,只是确定了存储大小,这就是意味着我们可以在不同的区域间的不同地址数值单元以给定的区域大小进行寻址,所以称之为
11、:区域间寄存器间接寻址方式,相应的,这里的AR1,P#1.5 就叫做区域间寻址指针.既然有着区域内和区域间寻址之分,那么,同样的 AR1 中,就存有不同的内容,它们代表着不同的含义.【AR 的格式】地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1 和 AR2,每个 32 位.当使用在区域内寄存器间接寻址中时,我们知道这时的 AR 中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:其 0-2bit,指定 bit 位,3-18bit 指定 byte 字节.其第 31bit 固定为 0.AR:00
12、00 0000 0000 0BBB BBBB BBBB BBBB BXXX这样规定,就意味着 AR 的取值只能是:0.0 65535.7例如:当 AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于 26.4.而在区域间寄存器间接寻址中,由于要寻址的区域也要在 AR 中指定,显然这时的 AR 中内容肯定于寄存器区域内间接寻址时,对 AR 内容的要求,或者说规定不同.AR:1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX比较一下两种格式的不同,我们发现,这里的第31bit被固定为1,同时,第24,
13、25,26位有了可以取值的范围.聪明的你,肯定可以联想到,这是用于指定存储区域的.对,bit24-26 的取值确定了要寻址的区域,它的取值是这样定义的:26,25,24 位P(外部输入输出)000I(输入映像区)001Q(输出映像区)010M(位存储区)011DB(数据块)100DI(背景数据块)101L(暂存数据区,也叫局域数据)111如果我们把这样的 AR 内容,用 HEX 表示的话,那么就有:当是对 P 区域寻址时,AR=800 xxxxx当是对 I 区域寻址时,AR=810 xxxxx当是对 Q 区域寻址时,AR=820 xxxxx当是对 M 区域寻址时,AR=830 xxxxx当是对
14、 DB 区域寻址时,AR=840 xxxxx当是对 DI 区域寻址时,AR=850 xxxxx当是对 L 区域寻址时,AR=870 xxxxx经过列举,我们有了初步的结论:如果 AR 中的内容是 8 开头,那么就一定是区域间寻址;如果要在 DB 区中进行寻址,只需在 8 后面跟上一个 40.84000000-840FFFFF 指明了要寻址的范围是:DB 区的 0.065535.7.例如:当 AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),实际上就是等于 DBX26.4.我们看到,在寄存器寻址指针 AR1/2,P#byte.
15、bit 这种结构中,P#byte.bit 又是什么呢【P#指针】P#中的 P 是 Pointer,是个 32 位的直接指针.所谓的直接,是指 P#中的#后面所跟的数值或者存储单元,是 P直接给定的.这样 P#XXX 这种指针,就可以被用来在指令寻址中,作为一个常数来对待,这个常数可以包含或不包含存储区域.例如:L P#Q1.0/把 Q1.0 这个指针存入 ACC1,此时 ACC1 的内容=82000008(hex)=Q1.0 L P#1.0/把 1.0 这个指针存入 ACC1,此时 ACC1 的内容=00000008(hex)=1.0 L P#MB100/错误!必须按照 byte.bit 结构
16、给定指针.L P#M100.0/把 M100.0 这个指针存入 ACC1,此时 ACC1 的内容=83000320(hex)=M100.0 L P#DB100.DBX26.4/错误!DBX 已经提供了存储区域,不能重复指定.L P#DBX26.4/把 DBX26.4 这个指针存入 ACC1,此时 ACC1 的内容=840000D4(hex)=DBX26.4我们发现,当对 P#只是指定数值时,累加器中的值和区域内寻址指针规定的格式相同(也和存储器间接寻址双字指针格式相同);而当对P#指定带有存储区域时,累加器中的内容和区域间寻址指针内容完全相同.事实上,把什么样的值传给AR,就决定了是以什么样的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- step7编程之地址概念详解 2 step7 编程 地址 概念 详解
限制150内