执行任何一条指令都需要操作数。寻址方式就是指令中用于说明操作数所在地址的方法,操作数可直接或间接给出。
S7-300/400 PLC的寻址方式有:立即寻址、直接寻址、间接寻址,其中间接寻址又可分为存储器间接寻址和寄存器间接寻址。
1.立即寻址
立即寻址方式是在指令中直接给出操作数,出现在指令中的操作数叫立即数,所以称为立即操作数或立即寻址。立即寻址方式可用来提供常数,设置初始值等。指令中经常使用常数。常数值可分为字节、字、双字型等数据。CPU以二进制方式存储所有常数。指令中可用十进制、十六进制、ASCII码或浮点数形式来表示。十进制、十六进制、ASCII码浮点数的表示,见表4-5。
表4-5 十进制、十六进制、ASCII码浮点数的表示
2#用来表示二进制常数,例如2#01011110,#为常数的进制格式说明符。如果常数无任何格式说明符,系统默认为十进制。
立即寻址举例如下:
2.直接寻址
直接寻址方式是,指令直接使用存储器或寄存器的元件名称和地址编号,根据这个地址就可以立即找到该数据。操作数的地址应按规定的格式表示。指令中,数据类型应与指令标识符相匹配。
不同数据长度的寻址指令举例如下:
3.间接寻址
间接寻址方式是指在指令中到指定的存储单元地址(也称地址指针)取操作数地址。寻址中要用到寄存器,常用的寄存器有累加器、状态字寄存器、地址寄存器。间接寻址包括存储器间接寻址和寄存器间接寻址。
(1)累加器(ACCUx)
S7-300/400的累加器(ACCUx)均为32位的累加器,用于处理字节、字或双字的寄存器。送入累加器的操作数在累加器中运算处理,并可保存在累加器中,处理的8位或16位数据结果放在累加器的低端。S7-300有两个累加器而S7-400有4个。
(2)状态字寄存器
状态字寄存器是一个逐位定义的16位寄存器,用做程序运行状态的标志。它是一个程序可访问的寄存器,可按位和字节访问和设置,格式如图4-6所示。
图4-6 状态字寄存器格式
状态字的第0位为首先检查位(/FC),为0时表示逻辑网络开始或逻辑串的第一条指令,但在逻辑串指令执行过程中为1,输出指令或结束逻辑串指令时清0。
状态字的第1位为逻辑运算结果ROL,为0时表示运算点无能流,为1时表示该点有能流,亦即存储的是逻辑运算前的结果。可用其来触发跳转指令。
状态字的第2位为状态位(STA),其值总是与执行位逻辑指令时该位的值保持一致。
状态字的第3位为或位(OR),除了在“与”“或”运算时,OR位暂存“与”操作结果方便后面“或”外,OR位均为0。
状态字的第4位为溢出(OV)位,在指令执行出现溢出、非法操作、非法浮点数等错误时置1,若后续指令运行正常则被清0。
状态字的第5位为溢出状态保持(OS)位,当OV位为1时被置1后一直保持,用于记载之前运行指令时是否产生过错误。在执行三种指令(块调用或块结束以及OS为1时跳转的JOS指令)的情况下被复位为0。
状态字的第6位和第7位为条件代码0(CC0)和条件代码1(CC1),两位条件代码用于表示在累加器1中运算结果与0的关系,比较指令的执行结果,移位指令的移出位状态。
执行指令后的CC1和CC0见表4-6。(www.xing528.com)
表4-6 执行指令后的CC1和CC0
状态字的第8位为二进制结果位(BR),在具有位操作和字操作的一段程序中表示字操作结果正确与否。在梯形图中,BR位与方框指令使能输出ENO一致,在编写FB和FC语句表程序中必须用SAVE指令将RLO存入BR来管理BR位,执行正确时为1,错误时为0。
状态字的第9~15位未赋值使用。
(3)地址寄存器(32位)
地址寄存器AR1和AR2(32位)的长度为32位,包括直接寻址指令的内部地址区或交叉地址区,存放完成寄存器间接寻址命令的区域内或区域间指针。其指针可访问存储区域P、I、Q、M、DBX、DIX和L的位、字节和双字。指针格式见寄存器间接寻址。
(4)存储器间接寻址
在存储器间接寻址中,指令要处理的数值单元(操作数所在地址)被放在地址指针所在的存储区域中,该存储区域必须是M(位存储区)、DI(背景数据块)、DB(数据块)和L(局部数据)中之一。
存储器间接寻址有字和双字两种指针格式,编号范围小于65535的定时器(T)、计数器(C)、数据块(DB)、功能块(FB)和功能(FC)用字指针,缩写以W结尾(如DIW)。字指针格式如图4-7所示。
其他地址用双字指针格式,指针缩写以D结尾(如DID)。双字指针格式如图4-8所示,位0~2(xxx)为被寻址位的位编号(范围0~7),位3~18为被寻址字节的字节编号(范围0~65535)。用双字指针访问字、字节或双字存储器是指针位编号必须为0。当存储器的间接地址存放在数据块中,调用时要先用OPN指令打开数据块。存储器间接寻址(黑体字部分)举例如下:
图4-7 存储器间接寻址的字指针格式
(5)寄存器间接寻址
S7的寄存器间接寻址是指利用地址寄存器(AR1或AR2)的内容加上偏移量形成的地址指针,取得该指针所在单元存放的操作数的寻址方式。一个进行寄存器间接寻址的语句不改变地址寄存器中的数值。用寄存器指针访问一个字节、字或双字时,位编号必须为0。
寄存器间接寻址的地址寄存器指针格式为双字指针,如图4-8所示,其中0~2位(xxx)为被寻址的位编号(0~7),第3~18位(bbbb bbbb bbbb bbbb)为被寻址的字节编号(0~65535),第24~26位(yyy)为被寻址地址的区域标识符,第31位x为地址区符号。
图4-8 寄存器间接寻址的地址寄存器双字指针格式
地址寄存器包括直接寻址指令的内部地址区和交叉地址区,寄存器间接寻址因此分为区域内寄存器间接寻址和区域间寄存器间接寻址。其双字指针格式亦因此分为两种,由第31位来区分。
区域内寄存器间接寻址,第31位为0,第24~26位(yyy)也为0,存储区的类型在指令中给出,其指针可访问存储区域P、I、Q、M、DBX、DIX和L的位、字节和双字。双字指针格式与存储器间接寻址的双字指针格式一样。区域内寄存器间接寻址(黑体字部分)举例如下:
区域间寄存器间接寻址,第31位为1,通过改变存储区域标识位rrr实现区域间跨区寻址。区域间寄存器间接寻址的区域标识位见表4-7。
表4-7 区域间寄存器间接寻址的区域标识位(yyy,第24~26位)
其指针可访问存储区域P、I、Q、M、DBX、DIX和L的位、字节和双字。存储区域由地址寄存器的第24~26位(yyy)确定。被寻址信息存放在地址寄存器中。区域间寄存器间接寻址举例如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。