文章目录[隐藏]
指令是程序的最小独立单位,用户程序是由若干条顺序排列的指令构成。指令一般由操作码和操作数组成,其中的操作码代表指令所要完成的具体操作(功能),操作数则是该指令操作或运算的对象。
一、PLC用户存储区的分类及功能
PLC的用户存储区在使用时必须按功能区分使用,所以在学习指令之前必须熟悉存储区的分类、表示方法、操作及功能。S7 - 300/400 PLC存储器区域划分、功能、访问方式及标识符如表1所示。
PLC的物理存储器以字节为单位,所以存储器单元规定为字节(Byte) 单元。存储单元可以以位(bit)、 字节(B)、字(W)或双字(DW)为单位使用。每个字节单位包括8个位;一个字包括2个字节,即16个位;一个双字包括4个字节,即32个位。
例如: IW0 是由IB0和IB1两个字节组成,其中IB0为高8位,IB1为低8位。在使用字和双字时要注意字节地址的划分,防止出现字节重叠造成的读写错误。如MW0和MW1不要同时使用,因为这两个元件都占用了MB1。
二、指令操作数
指令操作数(又称编程元件)一般在用户存储区中,操作数由操作标识符和参数组成。操作标识符由主标识符和辅助标识符组成,主标识符用来指定操作数所使用的存储区类型,辅助标识符则用来指定操作数的单位( 如位、字节、字、双字等)。
主标识符有: I (输人过程映像寄存器)、Q ( 输出过程映像寄存器)、M (位存储器)、PI (外部输人寄存器)、PQ (外部输出寄存器)、T (定时器)、C (计数器)、DB (数据块寄存器)和L (本地数据寄存器)。
辅助标识符有: X (位)、B (字节)、W (字)、D (双字)。
例如,对于指令“A M0.0O”,A为操作码(逻辑与运算),M为主标识符,0. 0为辅助标识符,是位地址。
三、寻址方式
所谓寻址方式就是指令执行时获取操作数的方式,可以直接或间接方式给出操作数。S7 - 300/400 PLC有4种寻址方式,即立即寻址、存储器直接寻址、存储器间接寻址和寄存器间接寻址。
1.立即寻址
立即寻址是对常数或常量的寻址方式,其特点是操作数直接表示在指令中,或以唯一形式隐含在指令中。下面各条指令操作数均采用了立即寻址方式,其中“//”后面的内容为指令的注释部分,对指令没有任何影响。
L 66 / /表示把常数66 装人累加器1中
AW W#16#168 / /将十六进制数168与累加器1的低字进行“与”运算
SET / /默认操作数为RLO,该指令实现对RLO置“1”操作
2.存储器直接寻址
存储器直接寻址,简称直接寻址。该寻址方式在指令中直接给出操作数的存储单元地址。存储单元地址可用符号地址(如SB1、KM等)或绝对地址(如I0.0、Q4.1等)。下面各条指令操作数均采用了直接寻址方式。
A I0.0 / /对输人位I0.0执行逻辑“与”运算
=Q4.1 //将逻辑运算结果送给输出继电器Q4.1
L MW2/ /将存储字MW2的内容装人累加器1
DBW4 / /将累加器1低字中的内容传送给数据字DBW4
3.存储器间接寻址
存储器间接寻址,简称间接寻址。该寻址方式在指令中以存储器的形式给出操作数所在存储器单元的地址,也就是说该存储器的内容是操作数所在存储器单元的地址。该存储器一般称为地址指针,在指令中需写在方括号“[ ]”内。地址指针可以是字或双字,对于地址范围小于65535的存储器,如T、C、DB、FB、FC等,可以用字指针;对于其他存储器,如I、Q、M等,则要使用双字指针。
4.寄存器间接寻址
寄存器间接寻址,简称寄存器寻址。该寻址方式在指令中通过地址寄存器和偏移量间接获取操作数,其中的地址寄存器及偏移量必须写在方括号“[]”内。在S7-300中有两个.地址寄存器AR1和AR2,用地址寄存器的内容加上偏移量形成地址指针,并指向操作数所在的存储器单元。地址寄存器的地址指针有两种格式,其长度均为双字,指针格式如图1所示。
说明:位0~2 (xxx) 为被寻址地址中位的编号(0 ~7);
位3~8为被寻址地址的字节的编号(0 ~65535);
位24~26 (rr)为被寻址地址的区域标识号;
位31的x=0为区域内的间接寻址,x=1为区域间的间接寻址
第一种地址指针格式适用于在确定的存储区内寻址,即区内寄存器间接寻址。
第二种地址指针格式适用于区域间寄存器间接寻址。
第一种地址指针格式包括被寻址数据所在存储单元地址的字节编号和位编号,至于对哪个存储区寻址,则必须在指令中明确给出。这种格式适用于在确定的存储区内寻址,即存储区内寄存器间接寻址。
第二种地址指针格式包含了数据所在存储区的说明位( 存储区域标识位),可通过改变标识位实现跨区域寻址,区域标识由位26~24确定。具体含义如表2所示,这种指针格式适用于区域间寄存器间接寻址。
四、CPU中的寄存器
1.累加器(ACCUx)
累加器用于处理字节、字或双字的寄存器。S7 -300有2个32位的累加器( ACCU1和ACCU2),S7-400有4个32位的累加器( ACCU1 ~ ACCU4)。数据放在累加器的低位(右对齐)。
2.状态字寄存器
CPU状态字寄存器为16位的字元件,如图3- 14所示。它的各位给出了执行有关指令状态或结果的信息以及所出现的错误,我们可以将二进制逻辑操作状态位信号状态直接集成到程序中,以控制程序执行的流程。
先简单介绍一下CPU中的状态字。
(1) 首次检查位FC
状态字的0位称作首次检查位,如果FC位的信号状态为“0”,则表示伴随着下一条逻辑指令,程序中将开始一个新的逻辑串。FC. 上面的杠表示对FC取反。
(2)逻辑运算结果RLO
状态字的第1位为RLO位(RL0=“逻辑运算结果”),在二进制逻辑运算中用作暂时存储位。比如,一串逻辑指令中的某个指令检查触点的信号状态,并根据布尔逻辑运算规则将检查的结果(状态位)与RLO位进行逻辑门运算,然后逻辑运算结果又存在RLO位中。
(3)状态位STA
状态位(第2位)用以保存被寻址位的值。状态位总是向扫描指令(A、AN、0等)或写指令( =、S、R)显示寻址位的状态(对于写指令,保存的寻址位状态是本条写指令执行后的该寻址位的状态)。
(4)OR位
在先执行逻辑与,后执行逻辑或的逻辑串中,OR位暂存逻辑与的操作结果,以便进行后面的逻辑或运算。其他指令将OR位清零。
(5)OV位
溢出表示算术或比较指令执行时出现了错误。根据所执行的算术或逻辑指令结果对该位进行设置。
(6) OS位
溢出存储位是与0V位一起被置位的,而且在更新算术指令之后,它能够保持这种状态,也就是说,它的状态不会由于下一个算术指令的结果而改变。这样,即使是在程序的后面部分,也还有机会判断数字区域是否溢出或者指令是否含有无效实数。OS位只有通过如下这些命令进行复位: JOS (若OS = 1,则跳转)命令、块调用命令和块结束命令。
(7) CC1及CCO位:
CC1和CCO (条件代码1和0)位。这两位结合起来用于表示在累加器1中产生的算术运算或逻辑运算结果与0的大小关系。比较指令的执行结果或移位指令的移出位状态。分别如表3-4和3-5所示。
(8)BR位
状态字的第8位称为二进制结果位。它将字处理程序与位处理联系起来,在一段既有位操作又有字操作的程序中,用于表示字逻辑是否正确。将BR位加入程序后,无论字操作结果如何,都不会造成二进制逻辑链中断。在梯形图的方块指令中,BR位与ENO位有对应关系,用于表明方块指令是否被正确执行:如果执行出现了错误,BR位为0,ENO位也为0;如果功能被正确执行,BR位为1, ENO位也为1。
在用户编写的FB/FC程序中,应该对BR位进行管理,功能块正确执行后,使BR位为1,否则使其为0。使用SAVE指令将RLO存人BR中,从而达到管理BR位的目的。状态字的9 ~15位未使用。
3.数据块寄存器
DB和DI分别用来保存打开的共享数据块和背景数据块的编号。