第3章S7-200系列PLC的基本指令及应用3.1基本逻辑指令3.2程序控制指令3.3PLC顺序控制程序设计3.4顺序控制指令指令是用户程序中最小的独立单位,由若干条指令顺序排列在一起就构成了用户程序。在S7-200的编程软件中,用户可以选用梯形图LAD(ladder)、功能块图(FunctionBlockDiagram)或语句表STL(StatementList)等编程语言来编制用户程序。语句表和梯形图语言是一个完备的指令系统,支持结构化编程方法,而且两种编程语言可以相互转化。在用户程序中尽管它们的表达形式不同,但表示的内容却是相同或相似的。3.1基本逻辑指令此类指令是PLC中最基本最常用的一类指令,主要包括位逻辑指令、堆栈操作指令、置位/复位指令、立即指令以及微分指令等。3.1.1位逻辑指令位逻辑指令主要用来完成基本的位逻辑运算及控制。1.LD、LDN和=(Out)指令LD(Load)、LDN(LoadNot):取指令。启动梯形图任何逻辑块的第一条指令时,分别连接动合触点和动断触点。=(Out):输出指令。线圈驱动指令,必须放在梯形图的最右端。LD、LDN指令操作数为:I、Q、M、T、C、SM、S、V。=指令的操作数为:M、Q、T、C、SM、S。网络1网络2M0.0M0.1Q1.0Q1.1LDLDN==M0.0M0.1Q1.0Q1.1//使用动合装载指令//驱动输出继电器Q1.0//驱动输出继电器Q1.1//使用动断装载指令图3-1LD、LDN和=指令梯形图及语句表应用示例2.A和AN指令A(And):逻辑“与”指令,用于动合触点的串联。AN(AndNot):逻辑“与非”指令,用于动断触点的串联。A和AN指令的操作数为:I、Q、M、SM、T、C、S、V。图3-2A和AN指令梯形图及语句表应用示例网络1网络2I0.1M0.0Q0.0Q0.1=ANLD=Q0.0M0.0I0.2Q1.1//驱动输出继电器Q0.0//驱动输出继电器Q0.1//使用逻辑“与非”指令I0.0I0.2LDAI0.0I0.1//使用逻辑“与”指令M0.1AM0.1//使用逻辑“与”指令3.O和ON指令O(Or):逻辑“或”指令,用于动合触点的并联。ON(OrNot):逻辑“或非”指令,用于动断触点的并联。O和ON指令的操作数为:I、Q、M、SM、T、C、S、V。图3-3O和ON指令梯形图及语句表应用示例网络1M0.1Q0.0OLD=M0.0I0.0Q0.0//驱动输出继电器Q0.0//使用逻辑“或”指令I0.0M0.0ONM0.1//使用逻辑“或非”指令4.ALD指令ALD(AndLoad):逻辑块“与”指令。用于并联电路块的串联连接。ALD指令无操作数。图3-4ALD指令梯形图及语句表应用示例网络1I0.0I0.1M0.1M0.0Q0.0ONLD=M0.1M0.0Q0.0//驱动输出继电器Q0.0//第二个逻辑块开始ALD//使用逻辑块“与”指令OI0.1//第一个逻辑块开始LDI0.05.OLD指令OLD(OrLoad):逻辑块“或”指令。用于串联电路块的并联连接。OLD指令无操作数。图3-5OLD指令梯形图及语句表应用示例网络1I0.0I0.1M0.1M0.0Q0.1ANLD=M0.1I0.1Q0.1//驱动输出继电器Q0.1//第二个逻辑块开始OLD//使用逻辑块“或”指令AM0.0//第一个逻辑块开始LDI0.03.1.2堆栈指令。1.堆栈操作S7-200有一个9位的堆栈,栈顶用来存储逻辑运算的结果,下面的8位用来存储中间运算结果。堆栈中的数据按“先进后出”的原则存取。图3-6OLD指令对堆栈的影响S0S1iV0iV1iV2iV3iV4iV5iV6S2XiV0iV1iV2iV3iV4iV5iV6S2=S1+S0执行前执行后第一层第九层对堆栈进行操作时,执行各指令的情况如下:执行LD指令时,将指令指定的位地址中的二进制数据装入栈顶。执行A指令时,将指令指定的位地址中的二进制数和栈顶中的二进制数相“与”,结果存入栈顶。执行O指令时,将指令指定的位地址中的数和栈顶中的数相“或”,结果存入栈顶。图3-6OLD指令对堆栈的影响执行LDN、AN和ON指令时,取出位地址中的数后,先取反,再做出相应的操作。执行输出指令“=”时,将栈顶值复制到对应的映像寄存器。执行ALD、OLD指令时,对堆栈第一层和第二层的数据进行“与”、“或”操作。并将运算结果存入栈顶,其余层的数据依次向上移动一位。最低层(栈底)补随机数。2.堆栈操作指令。堆栈操作指令包含LPS、LRD、LPP、LDS几条命令。各命令功能描述如下:LPS(LogicPush):逻辑入栈指令(分支电路开始指令)。该指令复制栈顶的值并将其压入堆栈的下一层,栈中原来的数据依次向下推移,栈底值推出丢失。LRD(LogicRead):逻辑读栈指令。该指令将堆栈中第二层的数据复制到栈顶,2~9层的数据不变,原栈顶值丢失。LPP(LogicPop):逻辑出栈指令(分支电路结束指令)。该指令使栈中各层的数据向上移一层,原第二层的数据成为新的栈顶值。LDS(LogicStack):装入堆栈指令。该指令复制堆栈中第n(n=1~8)层的值到栈顶,栈中原来的数据依次向下一层推移,栈底丢失。栈操作示意图如图3-7所示。图3-7堆栈操作的过程LPP执行前执行后第一层第九层LDS3执行前执行后第一层第九层LPS执行前执行后第一层第九层LRD执行前执行后第一层第九层iV0iV1iV2iV3iV4iV5iV6iV7iV8iV0iV0iV1iV2iV3iV4iV5iV6iV7iV0iV1iV2iV3iV4iV5iV6iV7iV8iV1iV2iV3iV4iV5iV6iV7iV8iV1iV0iV1iV2iV3iV4iV5iV6iV7iV8iV1iV2iV3iV4iV5iV6iV7iV8XiV0iV1iV2iV3iV4iV5iV6iV7iV8iV3iV0iV1iV2iV3iV4iV5iV6iV73.1.3置位/复位指令1.置位指令SS(SET):置位指令,将从bit开始的N个元件置1并保持。STL指令格式如下:Sbit,N其中,N的取值为1~255。2.复位指令RR(RESET):复位指令,将从bit开始的N个元件置0并保持。STL指令格式如下:Rbit,N其中,N的取值为1~255。置位和复位指令应用的梯形图及指令表如图3-8所示。图3-8置位和复位指令应用示例网络1网络2I0.3Q0.1Q0.1ONLDI0.3I0.2I0.1I0.2LDSI0.1Q0.1,1//使用置位指令RQ0.1,1//使用复位指令S1R13.1.4立即指令I立即指令I包含LDI、LDNI;OI、ONI;AI、ANI;=I;SI、RI几条命令,各命令功能描述如下:LDI、LDNI:立即取、立即取非指令。OI、ONI:立即“或”、立即“或非”指令。AI、ANI:立即“与”、立即“与非”指令。=I:立即输出指令。SI、RI:立即置位、立即复位指令。立即指令I(Immediate)是为了提高PLC对输入/输出的响应速度而设置的,它不受PLC扫描周期的影响,允许对输入和输出点进行快速直接存取。当用立即指令读取输入点的状态时,对I进行操作,相应的输入映像寄存器中的值并未更新;当用立即指令访问输出点时,对Q进行操作,新值同时写到PLC的物理输出点和相应的输出映像寄存器。立即指令应用示例如图3-9所示。图3-9立即指令应用示例网络1网络2Q0.0Q0.3SI=IQ0.2Q0.1I0.1I0.2LD=I0.1Q0.0LDII0.2//使用立即装载指令Q0.1Q0.2ISI1I//使用立即输出指令//使用立即置位指令=Q0.33.1.5微分指令微分指令又叫边沿触发指令,分为上升沿微分和下降沿微分指令。EU(EdgeUP):上升沿微分指令,其作用是在上升沿产生脉冲。指令格式如下:该指令无操作数。ED(EdgeDown):下降沿微分指令,其作用是在下降沿产生脉冲。指令格式如下:该指令无操作数。在使用EU指令时,当其执行条件从OFF变为ON时,EU就会变成ON一个周期,而使用ED指令时,当其执行条件从ON变成OFF时,ED就会变成为ON一个周期。PN微分指令应用示例如图3-10所示。3-10微分指令应用示例及时序图3.1.6取反指令NOT:取反指令。将其左边的逻辑运算结果取反,指令没有操作数。网络1网络2Q0.0Q0.1EULD==I0.3Q0.0Q0.1//检测I0.3的上升沿I0.3I0.3LDI0.3ED//检测I0.3的下降沿PNTTT-扫描周期I0.3Q0.0Q0.1取反指令应用示例如图3-11所示。图3-11NOT指令应用示例3.1.7空操作指令NOP:空操作指令,不影响程序的执行。指令格式如下:NOPN//N为执行空操作指令的次数,N=0~255。网络1Q0.0NOT=Q0.0//对I0.0的状态取反I0.0LDI0.0NOT3.1.8定时器指令定时器是PLC常用的编程元件之一,S7-200系列PLC有三种类型的定时器,即:通电延时定时器(TON)、断电延时定时器(TOF)和保持型通电延时定时器(TONR),共计256个。定时器分辨率(S)可分为三个等级:1ms、10ms和100ms。1.通电延时型定时器TON(On-DelayTimer)通电延时型定时器(TON)用于单一时间间隔的定时。输入端(IN)接通时,开始定时,当前值大于等于设定值(PT)时(PT=1~32767),定时器位变为ON,对应的常开触点闭合,长闭触点断开。达到设定值后,当前值仍继续计数,直到最大值32767为止。输入电路断开时,定时器复位,当前值被清零。2.断电延时定时器TOF(Off-DelayTimer)断电延时定时器(TOF)用于断电后的单一间隔时间计时。输入端(IN)接通时,定时器位为ON,当前值为0。当输入端由接通到断开时,定时器的当前值从0开始加1计数,当前值等于设定值(PT)时,输出位变为OFF,当前值保持不变,停止计时。3.保持型通电延时定时器TONR(RetentiveOn-DelayTimer)保持型通电延时定时器TONR用于对许多间隔的累计定时。当输入端(IN)接通时,定时器开始计时,当前值从0开始加1计数,当前值大于等于设定值(PT)时,定时器位置1;当输入IN无效时,当前值保持,IN再次有效时,当前值在原保持值基础上继续计数,TONR定时器用复位指令R进行复位,复位后定时器当前值清零,定时器位为OFF。4.定时器当前值刷新方式在S7-200系列PLC的定时器中,定时器的刷新方式是不同的,从而在使用方法上也有所不同。使用时一定要注意根据使用场合和要求来选择定时器。常用的定时器的刷新方式有1ms、10ms、100ms三种。(1)1ms定时器定时器指令执行期间每隔1ms对定时器和当前值刷新一次,不与扫描周期同步。(2)10ms定时器执行定时器指令时开始定时,在每一个扫描周期开始时刷新定时器,每个扫描周期只刷新一次。(3)100ms定时器只有在执行定时器指令时,才对100ms定时器的当前值进行刷新。3.1.9计数器指令计数器主要用于累计输入脉冲的次数。S7-200系列PLC有三种计数器:递增计数器CTU、递减计数器CTD、增减计数器CTUD。三种计数器共有256个。1.递增计数器CTU(CountUp)指令格式如下:CU:加计数脉冲输入端;R:复位输入端;PV:设定值。CURPVCTUCnCTUCn,PV梯形图指令STL指令2.递减计数器CTD(CountDown)指令格式如下:LD:复位脉冲输入端;CD:减计数脉冲输入端。3.增减计数器CTUD(CountUP/Down)CDLDPVCTDCnCTDCn,PV梯形图指令STL指令指令格式如下:CU:加计数脉冲输入端;CD:减计数脉冲输入端。3.1.10比较指令比较指令用来比较两个数IN1和IN2的大小。在梯形图中,满足比较关系式给出的条件时,触点接通。比较运算符有:=、<>、、、=、=。CDLDPVCTUDCnCTU