第五章S7-200可编程控制器的指令系统第一节S7-200PLC编程的基本概念一、编程语言S7-200PLC有两种指令集:IEC1131-3指令集和SIMATIC指令集;IEC1131-3指令集支持系统完全数据类型检查,只能用梯形图(LAD)和功能块图(FBD)编程语言,指令执行时间较长。SIMATIC指令集:西门子公司为S7-200PLC设计的编程语言,不支持系统完全数据类型检查,可以用梯形图(LAD)、功能块图(FBD)和语句表(STL)编程语言,且指令执行时间较短。(一)梯形图(LAD)编程语言LAD是与电气控制电路图相呼应的一种图形语言,其信号流向清楚、简单、直观、易懂,很适合电气工程人员使用;常作为第一用户语言。(二)功能块图(FBD)FBD类似于普通逻辑功能图,一般用一种功能方框表示一种特定的功能,框内的符号表示该方框图的功能。(三)语句表(STL)STL是用助记符来表达PLC的各种控制功能,类似于计算机的汇编语言。二、数据类型(一)基本数据类型及数据类型检查1.基本数据类型1位布尔型(BOOL)、8位字节型(BYTE)、16位无符号整数型(WORD)、16位有符号整数型(INT)、32位无符号双字整数型(DWORD)、32位有符号双字整数型(DINT)、32位实数型(REAL)。2.数据类型检查数据类型检查分为三级:完全数据类型检查、简单数据类型检查和无数据类型检查。S7-200PLC的SIMATIC指令集不支持完全数据类型检查;使用局部变量时,执行简单数据类型检查;使用全局变量时,指令操作数为地址而不是可选的数据类型时,执行无数据类型检查。(二)数据长度和数值范围数据长度:用字节型(B)、字型(W)、双字型(D)分别表示8位、16位、32位数据;不同的数据长度对应的数据范围如表5-4所示注意:操作数的数据类型应该和指令标识符相匹配。三、存储器区域PLC的存储器分为:程序区、系统区、数据区程序区:存放用户程序,存储器为:EEPROM系统区:存放有关PLC配置结构的参数,存储器为:EEPROM;数据区:是S7-200CPU提供的存储器的特定区域,将数据存储区作了进一步的分区,并为每个存储区域赋予了不同的功能,形成专用的存储单元。包括:I、Q、V、M、S、SM、L、T、C、AI、AQ、AC、HC;存储器为:EEPROM和RAM。(一)数据区存储器的地址表示格式1.位地址格式由存储器区域标识符、字节地址及位号构成例如:V5.42.字节、字、双字地址格式由存储器区域标识符、数据长度以及该字节、字或双字的起始地址构成例:VB100、VW100、VD100分别表示字节、字、双字的地址3.其他地址格式——包括T、C、AC、HC地址格式:区域标示符和元件号eg:T24(二)数据区存储器区域存储器功能地址格式有效地址范围输入映像寄存器(I)存放输入点的状态,每一个输入端子与I的相应位相对应(1)I[字节地址].[位地址]例:I0.1(2)I[数据长度][起始字节地址]例:IB4IW6ID10I(0.0-15.7)IB(0-15)IW(0-14)ID(0-12)输出映像寄存器(Q)存放CPU执行程序运行的结果,且输出模块每一个的端子与Q的相应位相对应(1)Q[字节地址].[位地址]例:Q1.1(2)Q[数据长度][起始字节地址]例:QB5QW8QD2Q(0.0-15.7)QB(0-15)QW(0-14)QD(0-12)内部标志位存储器(M)也称为内部线圈,模拟继电器控制系统中的中间继电器,存放中间操作状态或其他数据(1)M[字节地址].[位地址]例:M26.7(2)M[数据长度][起始字节地址]例:MB11MW2MD26M(0.0-31.7)MB(0-31)MW(0-30)MD(0-28)存储器功能地址格式有效地址范围变量存储器(V)存放全局变量、操作中的中间结果或其他数据,即全局有效(1)V[字节地址].[位地址]例:V10.2(2)V[数据长度][起始字节地址]例:VB20VW100VD2V(0.0-5119.7)VB(0-5119)VW(0-5118)VD(0-5116)局部存储器(L)存放局部变量,是局部有效的,即只能在某一程序分区中使用(1)L[字节地址].[位地址]例:L0.0(2)L[数据长度][起始字节地址]例:LB3LW44LD55L(0.0-63.7)LB(0-63)LW(0-62)LD(0-60)顺序控制继电器存储器(S)用于顺序控制(或步进控制);顺序控制继电器指令(SCR)是基于顺序功能图(SFC)的编程方式(1)S[字节地址].[位地址]例:S1.2(2)S[数据长度][起始字节地址]例:SB3SW12SD20S(0.0-31.7)SB(0-31)SW(0-30)SD(0-28)存储器功能地址格式有效地址范围特殊标志位存储器(SM)SM即特殊内部线圈,是用户程序与系统程序之间的界面,为用户提供一些特殊的控制功能(1)SM[字节地址].[位地址]例:SM0.1(2)SM[数据长度][起始字节地址]例:SMB20SMW100SMD12SM(0.0-549.7)SMB(0-549)SMW(0-548)SMD(0-546)定时器存储器(T)模拟继电器控制系统中的时间继电器,有三种时基:1ms、10ms、100msT[定时器号]例:T24T(0-255)计数器存储器(C)计数器是累计其计数输入端脉冲电平由低到高的次数,有三种类型:增计数、减计数、增减计数C[计数器号]例:C3C(0-255)存储器功能地址格式有效地址范围模拟量输入映像寄存器(AI)外部输入的模拟信号通过模拟输入模块转换成1个字长的数字量存放在模拟量输入映像寄存器(AI)中AIW[起始字节地址]例:AIW4注:AI的地址必须用偶数字节地址来表示AIW(0-62)模拟量输出映像寄存器(AQ)CPU运算的相关结果是驱动外部模拟量控制的设备时,则此结果存放在模拟量输出映像寄存器(AQ)中AQW[起始字节地址]例:AQW4注:AQ的地址必须用偶数字节地址来表示AQW(0-62)累加器(AC)暂时存放计算中间值,也可向子程序传递参数或返回参数AC[累加器号]例:AC0AC(0-3)存储器功能地址格式有效地址范围高速计数器(HC)HC用来累计高速脉冲信号,HC的当前寄存器为32位,则读取高速计数器当前值应以双字(32位)来寻址HC[高速计数器号]例:HC1HC(0-5)四、寻址方式S7-200PLC的寻址方式有:立即寻址、直接寻址、间接寻址(一)立即寻址指令中直接给出操作数,即操作数紧跟在操作码后面,在取出指令的同时也取出了操作数;立即寻址常用来提供常数,设置初始值等;指令中常数表示形式:十进制、十六进制、ASCII码或浮点数(二)直接寻址-指令中直接给出操作数的地址的寻址方式例:位寻址ANDQ5.5字节寻址ORBVB33,LB21字寻址MOVWAC0,AQW200双字寻址MOVDAC1,VD200(三)间接寻址-指令中给出了存放操作数地址的存储单元的地址的寻址方式1.建立指针指针中存放存储器的某个地址,则以指针中内容值为地址就可进行间接寻址;注:只能使用V、L、AC1、AC2、AC3作为指针,AC0不能用作间接寻址的指针例:MOVD&VB200,AC12.使用指针来存取数据使用指针可存取字节、字、双字型的数据例:MOVW*AC1,AC03.修改指针:用自增或自减指令修改指针,则可连续存取存储单元中的数据五、用户程序的结构用户程序可分为三个区:主程序、子程序和中断程序;主程序(OB1):是用户程序的主体,CPU在每一个扫描周期都要执行一次主程序指令;子程序:可选部分,只有主程序调用时才执行;中断程序:可选部分,只有当发生中断事件时,才执行中断程序,可在扫描周期的任意点执行。(六)编程的一般规约(一)网络在梯形图(LAD)中,程序被分成称为网络的一些程序段,而每一个网络由一个或多个梯级组成;功能块图(FBD)中,使用网络概念给程序分段;语句表(STL)中,使用“NETWORK”关键词对程序分段。(二)梯形图(LAD)/功能块图(FBD)梯形图(LAD)中,一个梯级是一个完整的“电路”,不允许“短路”、“开路”,也不允许“能流”反向流动;功能图(FBD)中,输入总在框图的左边,输出总在框图的右边。(三)允许输入端、允许输出端功能框的EN端是允许输入端,只有EN端存在“能流”时,才执行该功能框图的相应功能;在语句表(STL)中,没有EN允许输入端,但允许执行指令的条件是栈顶的值必须为1。功能框的ENO端是允许输出端,即允许功能框的布尔量输出,用于指令的级联;语句表(STL)中,用AENO(ANDENO)指令产生允许输出。(四)条件输入、无条件输入条件输入:在梯形图(LAD)、功能块图(FBD)中,与“能流”有关的功能框或线圈不直接与左母线连接;无条件输入:在梯形图(LAD)、功能块图(FBD)中,与“能流”无关的线圈或功能框直接与左母线连接。例如:LBL、NEXT、SCR、SCRE等(五)无允许输出端的指令无允许输出端(ENO)的指令方框,不能用于级联,例如:CALLSBR_N(N1,…)子程序调用指令和LBL、SCR等。第二节S7-200PLC的基本指令及编程方法一、基本逻辑指令基本逻辑指令以位逻辑操作为主,操作数的有效区域为:I、Q、M、SM、T、C、V、S、L,且数据类型是BOOL(一)标准触点指令梯形图(LAD)中功能块图(FBD)中语句表(STL)中LD(load)指令,表示一个逻辑梯级编程的开始;A(And)指令:表示触点的串联编程;O(Or)指令:表示触点的并联编程;LDN、AN、ON指令则是分别表示对常闭触点的(二)输出指令梯形图(LAD)中,“()”表示线圈,“能流”到线圈端,则线圈被激励,其Q寄存器的相应位为1,反之为0;语句表(STL)中,输出指令为“=”,把栈顶值复制到操作数地址指定的存储器位(bit),堆栈各级栈值不变。(三)置位和复位指令-把从操作数(bit)指定的地址开始的N个点都被置位或复位,其中N=1-255在LAD和FBD中,只要“能流”到,就执行置位并保持或复位并保持,置位后即使“能流”断,仍保持置位,复位后即使“能流”断,仍保持复位;在STL中,当栈顶值为“1”时,才执行置位指令Sbit,N或复位指令Rbit,N;置位后即使栈顶值为“0”,仍保持置位,执行复位指令后即使栈顶值为“0”,仍保持复位。执行该指令时,直接读取物理输入点的值,I寄存器的内容不更新,指令操作数仅限于输入物理点的值;二、立即I/O指令(一)立即触点指令STL中,常开立即触点编程由LDI、AI、OI指令描述,常闭立即触点由LDNI、ANI、ONI指令描述。(二)立即输出指令-操作数地址指定的物理输出点的位(bit)值等于“能流”;在STL中,堆栈操作时,栈顶值被同时复制到物理输出点和相应的Q寄存器中,而不受扫描过程的影响;三、逻辑堆栈指令-只用于语句表(STL)中其中栈装载与(ALD)、栈装载或(OLD)指令用于两个或两个以上的触点组的串联或并联编程,指令无操作数,属于压入/弹出堆栈的操作指令;(三)立即置位和立即复位(N位)指令逻辑推入栈(LPS)、逻辑读栈(LRD)、逻辑弹出栈(LPP),用于一个触点(或一个触点组)同时控制两个或两个以上线圈的编程。(一)栈装载与(ALD)指令-表示两个或两个以上的触点组的串联编程。(二)栈装载或(OLD)指令-表示两个或两个以上的触点组的并联编程。(三)逻辑推入栈(LPS)指令复制栈顶的值并将这个值推入栈顶,原堆栈中各级栈值依次下压一级,栈低值丢失(四)逻辑读栈(LRD)指令执行该指令时,把堆栈中第二级的值复制到栈顶,原栈顶值被新的复制值取代,堆栈中没有推入栈或弹出栈操作。(五)逻辑弹出栈(LPP)指令执行该指令时,将栈顶的值弹出,原堆栈各级栈值依次上弹一级。(六)装入堆栈(LDS)指令执行该指令时,将复制堆栈中第n级的值到栈顶,原堆栈中各级栈值依次下压一级,栈低值丢失。四、取非触点指令和空操作指令空操