第3章 基本逻辑指令的应用
3.1 指令基础
3.1.1 指令的基本知识
1.指令的组成
指令是组成程序的最小独立单位,用户程序由若干条顺序排列的指令构成。指令一般由操作码和操作数组成,其中的操作码代表指令要完成的具体功能,操作数则是该指令操作或运算的对象。例如,对于STL指令“A I0.0”,其中“A”是操作码,表示该指令的功能是逻辑“与”操作;“I0.0”是操作数,也就是数字量输入模块的第0字节的第0位;该指令的功能就是对I0.0进行“与”操作。
2.变量、常数及其数据类型
指令操作数既可以是变量,也可以是常量或常数。如果指令的操作数是变量,则该变量既可以用绝对地址表示,也可以用符号地址表示。绝对地址是数字地址;符号地址是用户在符号表或声明表中定义的与绝对地址相对应并具有一定意义的字符串。
(1)变量的绝对地址
对于一个信号输入模块或输出模块而言,每个输入/输出点或输入/输出通道的绝对地址都是确定的,可以采用系统默认地址,也可以由用户在硬件组态时为模块指定起始地址。但对数字量信号和模拟量信号的表示是有区别的。
数字量信号包含二进制“位”信息,该“位”信息可以是一个限位开关、按钮等操作机构对数字量输入模块的输入信号,也可以是数字量输出模块对指示灯、接触器等执行机构的输出信号。
模拟量信号包含16位信息,对应模拟量信号模块的一个通道,在PLC中用1字(Word)或2B(Byte)表示。
PLC中的数字量信号以布尔(BOOL)类型存储,而模拟量信号则以整数(INT)或者实数(REAR)类型存储。在STEP 7中有4种数据类型长度可以被变量的绝对地址引用。
1)1位(Bit)适用于布尔数据类型。布尔类型变量通过一个变量标识符、一个字节数字、一个间隔符(小数点)和一个位数字引用一个绝对地址。字节数字的编号从每个存储区域的0地址开始,其上限受CPU限制;位数字范围是0~7。例如:I1.0表示数字量输入区域的第1B的第0位;Q16.4表示数字量输出区域的第16B的第4位。
2)8位适用于字节(BYTE)类型或其他长度为8位的布尔数据类型。字节类型变量通过一个地址标识符B和一个字节数字编号来引用一个绝对地址。例如:IB2表示数字量输入区域的第2B;QB18表示数字量输出区域的第18B。
3)16位适用于字(WORD)类型或其他长度为16位的数据类型。字类型变量通过一个地址标识符W和一个字数字编号来引用一个绝对地址。1字由2B组成,其中高地址字节位于字的低位、低地址字节位于字的高位。为了避免两个字变量出现字节重叠,一般规定字的地址用偶数表示。例如:IW4表示数字量输入区域地址是4的字,它包含IB4(高字节)和IB5(低字节);QW20表示数字量输出区域地址是20的字,它包含QB20(高字节)和QB21(低字节)。
4)32位适用于双字(DWORD)类型或其他长度为32位的数据类型。双字类型变量通过一个地址标识符D和一个双字数字编号来引用一个绝对地址。1双字由4字节组成,其中最高地址字节位于双字的最低位、最低地址字节位于双字的最高位。为了避免两个双字变量出现字节重叠,一般规定双字的地址用4的倍数表示。例如:ID8表示数字量输入区域地址是8的双字,它包含IB8(高字节)、IB9(次高字节)、IB10(次低字节)和IB11(低字节);QD24表示数字量输出区域地址是24的双字,它包含QB24(高字节)、QB25(次高字节)、QB26(次低字节)和QB27(低字节)。字节、字及双字的关系如图3-1所示。
图3-1 字节、字及双字的关系
(2)变量的符号地址
符号地址就是用户给绝对地址所起的名字(字符串),可以用来代替对应的绝对地址。符号必须先定义再使用,定义的符号可以由大小写字母、数字及下画线构成,且必须以字母开头,长度不超过24个字符,所定义的符号不能是系统关键词。根据使用场合不同,符号分为全局符号和局部符号。
● 全局符号:SIMATIC Manager的符号表中定义的符号,可以适用于所有的程序块。
● 局部符号:在某个程序块(OB、FC、FB等)的变量声明表中定义的符号,只能应
用于该程序块。如果定义的局部符号与全局符号重名,该局部符号前会自动添加一
个“#”。
(3)常数及其数据类型
常数是预先给定的数据。在STEP 7中,每个常数都有一个前缀来表示其数据类型。
数据类型决定数据的属性。在STEP 7中,数据类型分为3大类:基本数据类型、复杂数据类型和参数类型。
1)基本数据类型定义不超过32位的数据(符合IEC1133-3的规定),可以装入S7处理器的累加器中,利用STEP 7基本指令处理。基本数据有布尔型(BOOL)、整数型(INT)、实数型(REAT)和BCD码4种类型,具体分为16种,每一个数据类型都具备关键词、数据长度、取值范围及常数表示形式等属性,表3-1列出了S7-300 PLC支持的基本数据类型。
表3-1 S7-300 PLC支持的基本数据类型
在表3-1中,布尔数据为无符号数据,可以是一个位(bit)、一个字节(B)、一个字(W)和一个双字(D),可以用二进制或十六进制表示。
整数数据为有符号数据,其最高位为符号位,0为正数,1为负数,用二进制补码表示,正数的补码是它本身,负数的补码是各位取反后再加1为其绝对值。有16位整数和32位双整数两种,取值范围是-32768~+32767(16位)或-2147483648~+2147483647(32位)。
实数数据为32位有符号的浮点数,其最高位为符号位,0为正数,1为负数。浮点数的优点是用有限的存储空间可以表示一个非常大或非常小的数。浮点数的数据范围为:±1.175495×10−38~±3.402823×10+38。
2)复杂数据类型定义超过32位或由其他数据类型组成的数据。复杂数据类型要预定义,其变量只能在全局数据块中声明,可以作为参数或逻辑块的局部变量。STEP 7支持数组(ARRAY)、结构(STRUCT)、字符串(STRING)、日期和时间(DATE_AND_TIME)、用户定义的数据类型(UDT)、功能块类型(FB、SFB)等6种复杂数据类型。STEP 7的指令不能一次处理一个复杂的数据类型(大于32位),但是一次可以处理一个元素。
3)参数类型是一种用于逻辑块(FB、FC)之间传递参数的数据类型,主要有定时器(TIMER)、计数器(COUNTER)、块(BLOCK)、指针(POINTER)和ANY等类型。
3.S7-300系列PLC用户存储区的分类及功能
PLC的用户存储区在使用时必须按功能区分使用,所以在学习指令之前必须熟悉存储区的分类、表示方法、操作及功能。S7-300系列PLC的存储区域的划分、功能、访问方式及标识符如表3-2所示。
表3-2 S7-300系列PLC的存储区域的划分、功能访问方式及标识符
3.1.2 寻址方式和累加器
1.操作数的寻址方式
所谓寻址方式就是指令执行时获取操作数的方式,可以用直接或间接方式给出操作数。STEP 7系统支持4种寻址方式:立即寻址、存储器直接寻址、存储器间接寻址和寄存器间接寻址。
(1)立即寻址
立即寻址是对常数或常量的寻址方式,其特点是操作数直接表示在指令中,或以唯一形式隐含在指令中。下面各条指令操作数均采用了立即寻址方式,其中“//”后面的内容为指令的注释部分,对指令的功能及执行没有任何影响。
(2)存储器直接寻址
存储器直接寻址简称为直接寻址。该寻址方式在指令中直接给出操作数的存储单元地址。存储单元地址可用符号地址(如SB1、KM等)或绝对地址(如I0.0、Q4.1等)。下面各条指令操作数均采用了直接寻址方式。
(3)存储器间接寻址
存储器间接寻址简称为间接寻址。该寻址方式在指令中以存储器的形式给出操作数所在存储器单元的地址,也就是说该存储器的内容是操作数所在存储器单元的地址。该存储器一般称为地址指针,在指令中需写在方括号“[]”内。地址指针可以是字或双字,对于地址范围小于65535的存储器(如T、C、DB、FB、FC等)可以用字指针;对于其他存储器(如I、Q、M等)则要使用双字指针。如果要用双字指针访问字节、字或双字存储器,必须保证指针的位编号为0。存储器间接寻址的双字指针的格式如图3-2所示。其中,位0~2(xxx)为被寻址地址中位的编号(0~7),位3~18为被寻址地址的字节的编号(0~65535)。
图3-2 存储器间接寻址的双字指针的格式
【例3-1】存储器间接寻址单字格式的指针寻址实例。
【例3-2】存储器间接寻址双字格式的指针寻址实例。
(4)寄存器间接寻址
寄存器间接寻址简称为寄存器寻址。该寻址方式在指令中通过地址寄存器和偏移量间接获取操作数,其中的地址寄存器及偏移量必须写在方括号“[]”内。在S7-300 PLC中有两个地址寄存器AR1和AR2,用地址寄存器的内容加上偏移量形成地址指针,并指向操作数所在的存储器单元。地址寄存器的地址指针有两种格式,其长度均为双字,寄存器间接寻址的双字指针格式如图3-3所示。其中,位0~2(xxx)为被寻址地址中位的编号(0~7),位3~18为被寻址地址中字节的编号(0~65535),位24~26(rrr)为被寻址地址的区域标识号,位31的x=0为区域内的间接寻址,x=1为区域外的间接寻址。
图3-3 寄存器间接寻址的双字指针格式
第1种地址指针格式包括被寻址数据所在存储单元地址的字节编号和位编号,至于对哪个存储区寻址,则必须在指令中明确给出。这种格式适用于在确定的存储区内寻址,即区域内寄存器间接寻址。
第2种地址指针格式包含了数据所在存储区的说明位(存储区域标识位),可通过改变标识位实现跨区域寻址,区域标识由位26~24确定,地址指针区域标识位的含义如表3-3所示。这种指针格式适用于区域间寄存器间接寻址。
表3-3地址指针区域标识位的含义
2.累加器
累加器是用于处理字节、字或双字的32位累加器。S7-300 PLC有两个累加器(累加器ACCU1和累加器ACCU2),可以把操作数送入累加器,并在累加器中进行运算和处理。处理8位或16位数据时,数据放在累加器中的低位(右对齐),空出的高位用0填补。