第3章 S7-200系列PLC的基本指令及应用 3.1 基本逻辑指令 3.2 程序控制指令 3.3 PLC顺序控制程序设计 3.1 基本逻辑指令 3.2 程序控制指令 3.3 PLC顺序控制程序设计 3.4 顺序控制指令
指令是用户程序中最小的独立单位,由若干条指令顺序排列在一起就构成了用户程序。 在S7-200的编程软件中,用户可以选用梯形图LAD(ladder)、功能块图(Function Block Diagram)或语句表STL(Statement List)等编程语言来编制用户程序。 语句表和梯形图语言是一个完备的指令系统,支持结构化编程方法,而且两种编程语言可以相互转化。在用户程序中尽管它们的表达形式不同,但表示的内容却是相同或相似的。 3.1 基本逻辑指令 此类指令是PLC中最基本最常用的一类指令,主要包括位逻辑指令、堆栈操作指令、置位/复位指令、立即指令以及微分指令等。
3.1.1 位逻辑指令 位逻辑指令主要用来完成基本的位逻辑运算及控制。 1. LD、LDN和=(Out)指令 LD(Load)、LDN(Load Not):取指令。启动梯形图任何逻辑块的第一条指令时,分别连接动合触点和动断触点。 =(Out):输出指令。线圈驱动指令,必须放在梯形图的最右端。 LD、LDN指令操作数为:I、Q、M、T、C、SM、S、V。 =指令的操作数为:M、Q、T、C、SM、S。
图3-1 LD、LDN和=指令梯形图及语句表应用示例
A(And):逻辑“与”指令,用于动合触点的串联。 AN(And Not):逻辑“与非”指令,用于动断触点的串联。 A和AN指令的操作数为:I、Q、M、SM、T、C、S、V。 图3-2 A和AN指令梯形图及语句表应用示例
O(Or):逻辑“或”指令,用于动合触点的并联。 ON(Or Not):逻辑“或非”指令,用于动断触点的并联。 3. O和ON指令 O(Or):逻辑“或”指令,用于动合触点的并联。 ON(Or Not):逻辑“或非”指令,用于动断触点的并联。 O和ON指令的操作数为:I、Q、M、SM、T、C、S、V。 图3-3 O和ON指令梯形图及语句表应用示例
ALD(And Load):逻辑块“与”指令。用于并联电路块的串联连接。 ALD指令无操作数。
OLD(Or Load):逻辑块“或”指令。用于串联电路块的并联连接。 OLD指令无操作数。
3.1.2 堆栈指令。 1. 堆栈操作 S7-200有一个9位的堆栈,栈顶用来存储逻辑运算的结果,下面的8位用来存储中间运算结果。堆栈中的数据按“先进后出”的原则存取。 图3-6 OLD指令对堆栈的影响
对堆栈进行操作时,执行各指令的情况如下: 执行LD指令时,将指令指定的位地址中的二进制数据装入栈顶。 执行A指令时,将指令指定的位地址中的二进制数和栈顶中的二进制数相“与”,结果存入栈顶。 执行O指令时,将指令指定的位地址中的数和栈顶中的数相“或”,结果存入栈顶。图3-6 OLD指令对堆栈的影响 执行LDN、AN和ON指令时,取出位地址中的数后,先取反,再做出相应的操作。 执行输出指令“=”时,将栈顶值复制到对应的映像寄存器。 执行ALD、OLD指令时,对堆栈第一层和第二层的数据进行“与”、“或”操作。并将运算结果存入栈顶,其余层的数据依次向上移动一位。最低层(栈底)补随机数。
2. 堆栈操作指令。 堆栈操作指令包含LPS、LRD、LPP、LDS几条命令。各命令功能描述如下: LPS(Logic Push):逻辑入栈指令(分支电路开始指令)。该指令复制栈顶的值并将其压入堆栈的下一层,栈中原来的数据依次向下推移,栈底值推出丢失。 LRD(Logic Read):逻辑读栈指令。该指令将堆栈中第二层的数据复制到栈顶,2~9层的数据不变,原栈顶值丢失。 LPP(Logic Pop):逻辑出栈指令(分支电路结束指令)。该指令使栈中各层的数据向上移一层,原第二层的数据成为新的栈顶值。 LDS(Logic Stack):装入堆栈指令。该指令复制堆栈中第n(n=1~8)层的值到栈顶,栈中原来的数据依次向下一层推移,栈底丢失。
栈操作示意图如图3-7所示。 图3-7 堆栈操作的过程
3.1.3 置位/复位指令 1. 置位指令S S(SET):置位指令,将从bit开始的N个元件置1并保持。 STL指令格式如下: S bit, N 其中,N的取值为1~255。 2. 复位指令R R(RESET):复位指令,将从bit开始的N个元件置0并保持。 R bit, N
置位和复位指令应用的梯形图及指令表如图3-8所示。 图3-8 置位和复位指令应用示例
3.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 立即指令应用示例
3.1.5 微分指令 微分指令又叫边沿触发指令,分为上升沿微分和下降沿微分指令。 EU(Edge UP):上升沿微分指令,其作用是在上升沿产生脉冲。 指令格式如下: 该指令无操作数。 ED(Edge Down):下降沿微分指令,其作用是在下降沿产生脉冲。 在使用EU指令时,当其执行条件从OFF变为ON时,EU就会变成ON一个周期,而使用ED指令时,当其执行条件从ON变成OFF时,ED就会变成为ON一个周期。
NOT:取反指令。将其左边的逻辑运算结果取反,指令没有操作数。 微分指令应用示例如图3-10所示。 3-10 微分指令应用示例及时序图 3.1.6 取反指令 NOT:取反指令。将其左边的逻辑运算结果取反,指令没有操作数。
取反指令应用示例如图3-11所示。 图3-11 NOT指令应用示例 3.1.7 空操作指令 NOP:空操作指令,不影响程序的执行。 指令格式如下: NOP N //N为执行空操作指令的次数,N=0~255。
3.1.8 定时器指令 定时器是PLC常用的编程元件之一,S7-200系列PLC有三种类型的定时器,即:通电延时定时器(TON)、断电延时定时器(TOF)和保持型通电延时定时器(TONR),共计256个。定时器分辨率(S)可分为三个等级:1ms、10ms和100ms。 1. 通电延时型定时器TON(On-Delay Timer) 通电延时型定时器(TON)用于单一时间间隔的定时。输入端(IN)接通时,开始定时,当前值大于等于设定值(PT)时(PT=1~32767),定时器位变为ON,对应的常开触点闭合,长闭触点断开。达到设定值后,当前值仍继续计数,直到最大值32767为止。输入电路断开时,定时器复位,当前值被清零。
2. 断电延时定时器TOF(Off-Delay Timer) 断电延时定时器(TOF)用于断电后的单一间隔时间计时。输入端(IN)接通时,定时器位为ON,当前值为0。当输入端由接通到断开时,定时器的当前值从0开始加1计数,当前值等于设定值(PT)时,输出位变为OFF,当前值保持不变,停止计时。 3. 保持型通电延时定时器TONR(Retentive On-Delay Timer) 保持型通电延时定时器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(Count Up) 指令格式如下: CU:加计数脉冲输入端; R:复位输入端; PV:设定值。
2. 递减计数器CTD(Count Down) 指令格式如下: LD:复位脉冲输入端; CD:减计数脉冲输入端。 3. 增减计数器CTUD(Count UP/Down)
指令格式如下: CU:加计数脉冲输入端; CD:减计数脉冲输入端。 3.1.10 比较指令 比较指令用来比较两个数IN1和IN2的大小。在梯形图中,满足比较关系式给出的条件时,触点接通。 比较运算符有:=、<>、>、<、>=、<=。
3.2 程序控制指令 程序控制类指令主要用于较复杂程序设计,使用该类指令可以用来优化程序结构,增强程序功能。它包括循环、跳转、停止、子程序调用、看门狗及顺序控制等指令。 3.2.1 循环指令 循环指令主要用于反复执行若干次相同功能程序的情况。循环指令包括循环开始指令FOR和循环结束指令NEXT。 FOR指令表示循环的开始,NEXT指令表示循环的结束。当驱动FOR指令的逻辑条件满足时,反复执行FOR和NEXT之间的程序。在FOR指令中,需要设置指针或当前循环次数计数器(INDX),初始值(INIT)和终值(FINAL)。
指令格式如下: INDX操作数为:VW、IW、QW、MW、SW、SMW、LW、T、C、AC、*VD、*AC、和*CD,属INT型。 INIT和FINAL操作数除上面外,再加上常数。也属INT型。
3.2.2 跳转指令 跳转指令包括:跳转指令JMP和标号指令LBL。当条件满足时,跳转指令JMP使程序转到对应的标号LBL处,标号指令用来表示跳转的目的地址。 JMP与LBL指令中的操作数n为常数0~255。JMP和对应的LBL指令必须在同一程序块中。 3.2.3 停止指令STOP 停止指令STOP可使PLC从运行模式进入停止模式,立即停止程序的执行。如果在中断程序中执行停止指令,中断程序立即终止,并忽略全部等待执行的中断,继续执行主程序的剩余部分,并在主程序的结束处,完成从运行方式至停止方式的转换。
3.2.4 结束指令 结束指令包括两条:END和MEND。 1. END 条件结束指令,不能直接连接母线。当条件满足时结束主程序,并返回主程序的第一条指令执行。 2. MEND 无条件结束指令,直接连接母线。程序执行到此指令时,立即无条件结束主程序,并返回第一条指令。 这两条指令都只能在主程序中使用。 3.2.5 看门狗复位指令WDR 看门狗复位指令WDR(Watch Dog Reset)作为监控定时器使用,定时时间为300ms。
3.2.6 子程序 子程序在结构化程序设计中是一种方便有效的工具。S7-200 PLC的指令系统具有简单、方便、灵活的子程序调用功能。与子程序有关的操作有:建立子程序、子程序的调用和返回。 1. 建立子程序 建立子程序是通过编程软件来完成的。 2. 子程序调用 (1) 子程序调用指令CALL 在使能输入有效时,主程序把程序控制权交给子程序。 (2) 子程序条件返回指令CRET 在使能输入有效时,结束子程序的执行,返回主程序中 。
3. 带参数的子程序调用 子程序中可以有参变量,带参数的子程序调用扩大了子程序的使用范围,增加了调用的灵活性。 (1) 子程序参数 子程序最多可以传递16个参数,参数在子程序的局部变量表中加以定义。参数包含下列信息:变量名、变量类型和数据类型。 ① 变量名:变量名最多用8个字符表示,第一个字符不能是数字。 ② 变量类型:变量类型是按变量对应数据的传递方向来划分的,可以是传入子程序(IN)、传入和传出子程序(IN/OUT)、传出子程序(OUT)和暂时子程序(TEMP)4种变量类型。 ③ 数据类型:局部变量表中还要对数据类型进行声明。数据类型可以是:能流、布尔型、字节型、字型、双字型、整数型、双整数和实型。
(2) 参数子程序调用的规则 常数参数必须声明数据类型。 输入或输出参数没有自动数据类型转换功能。 参数在调用时必须按照一定的顺序排列,先是输入参数,然后是输入输出参数,最后是输出参数。 (3) 变量表使用 按照子程序指令的调用顺序,参数值分配给局部变量存储器,起始地址是L0.0。使用编程软件时,地址分配是自动的。 参数子程序调用指令格式为: CALL 子程序, 参数1, 参数2, … 参数n 3.2.7 “与”ENO指令 ENO是LAD中指令块的布尔能流输出端。如果指令块的能流输入有效,且执行没有错误,ENO就置位,并将能流向下传递。ENO可以作为允许位,表示指令成功执行。
3.3 PLC顺序控制程序设计 本节主要介绍顺序功能图(SFC)和梯形图程序设计。顺序功能图设计方法可以向设计者提供控制问题描述方法的规律。 3.3.1 SFC设计方法 SFC功能图设计方法是专用于工业顺序控制程序设计的一种方法。它能完整地描述控制系统的工作过程、功能和特性。是分析、设计电器控制系统控制程序的重要工具。 1. SFC基础 SFC的基本元素为:流程步、有向线段、转移和动作说明。 (1) 流程步 流程步又叫工作步,表示控制系统中的一个稳定状态。
(2) 转移与有向线段 转移就是从一个步向另外一个步之间的切换条件,两个步之间用一个有向线段表示,说明从一个步切换到另一个步,向下转移方向的箭头可以省略。 (3) 动作说明 步并不是PLC的输出触点的动作,步只是控制系统中的一个稳定的状态。这个状态可以包含一个或多个PLC输出触点的动作,也可以没有任何输出动作,步只是启动了定时器或一个等待过程,所以步和PLC的动作是两件不同的事情。 2. SFC图的结构 (1) 顺序结构 顺序结构是最简单的一种结构,该结构的特点是步与步之间只有一个转移,转移与转移之间只有一个步。
(2) 选择性分支结构 选择性分支结构是一个控制流可以转入多个可能的控制流中的某一个,不允许多路分支同时执行。具体进入哪个分支,取决于控制流前面的转移条件哪一个为真。 (3) 并发性分支结构 如果某一个工作步执行完后,需要同时启动若干条分支,这种结构称为并发性分支结构。 (4) 循环结构 循环结构用于一个顺序过程的多次重复执行 。 (5) 复合结构 复合结构就是一个集顺序、选择性分支、并发性分支和循环结构于一体的结构。
3. SFC转换成梯形图 SFC一般不能被PLC软件直接接受,需要将SFC转换成梯形图后才能被PLC软件所识别。 (1) 进入有效工作步 (2) 停止有效工作步 (3) 最后一个工作步 (4) 工作步的转移条件 (5) 工作步的得电和失电 (6) 选择性分支 (7) 并发性分支 (8) 第0工作步 (9) 动作输出
3.3.2 PLC编程举例 1. 汽车自动清洗装置 一台汽车自动清洗机的动作如下: 按下起动按钮后,打开喷淋阀门, 同时清洗机开始移动。当检测到汽 车到达刷洗范围时,启动旋转刷子 开始清洗汽车。当检测到汽车离开 清洗机时,停止清洗机移动、停止 刷子旋转并关闭阀门。当按下停止 按钮时,任何时候均立即停止所有 动作。 图3-31 汽车清洗机SFC
图3-32 汽车清洗机的梯形图及语句表
3.4 顺序控制指令 3.4.1 顺序控制指令介绍 顺序控制指令是PLC生产厂家为用户提供的可使功能图编程简单化和规范化的指令。S7-200 PLC提供了三条顺序控制指令。 一个SCR程序段一般有以下三种功能: (1) 驱动处理 即在该段状态有效时,要做什么工作,有时也可能不做任何工作。 (2) 指定转移条件和目标 即满足什么条件后状态转移到何处。 (3) 转移源自动复位功能 状态发生转移后,置位下一个状态的同时,自动复位原状态。
3.4.2 举例说明 在使用功能图编 程时,应先画出功 能图,然后对应于 功能图画出梯形图 。如图3-35所示为 顺序控制指令使用 3.4.2 举例说明 在使用功能图编 程时,应先画出功 能图,然后对应于 功能图画出梯形图 。如图3-35所示为 顺序控制指令使用 的一个简单例子。
图3-35 顺序控制指令使用举例
3.4.3 使用说明 顺控指令仅对元件S有效,顺控继电器S也具有一般继电器的功能,所以对它能够使用其它指令; SCR段程序能否执行取决于该状态器(S)是否被置位,SCRE与下一个LSCR之间的指令逻辑不影响下一个SCR段程序的执行; 不能把同一个S位用于不同程序中; 在SCR段中不能使用JMP和LBL指令,就是说不允许跳入、跳出或在内部跳转,但可以在SCR段附近使用跳转和标号指令; 在SCR段中不能使用FOR、NEXT和END指令; 在状态发生转移后,所有的SCR段的元器件一般也要复位,如果希望继续输出,可使用置位/复位指令; 在使用功能图时,状态器的编号可以不按顺序编排。
3.4.4 功能图的主要类型 1. 直线流程 这是最简单的功能图,其动作是一个接一个地完成。每个状态仅连接一个转移,每个转移也仅连接一个状态。 2. 选择性分支和联接 在生产实际中,对具有多流程的工作要进行流程选择或者分支选择。即一个控制流可能转入多个可能的控制流中的某一个,但不允许多路分支同时执行。到底进入哪一个分支取决于控制流前面的转移条件哪一个为真。 3. 并发性分支和联接 一个顺序控制状态流必须分成两个或多个不同分支控制状态流,这就是并发性分支或并行分支。但一个控制状态流分成多个分支时,所有的分支控制状态流必须同时激活。当多个控制流产生的结果相同时,可以把这些控制流合并成一个控制流,即并发性分支的联接。
单一顺序、并发和选择是功能图的基本形式。多数情况下,这些基本形式是混合出现的,跳转和循环是其典型代表。 4. 跳转和循环 单一顺序、并发和选择是功能图的基本形式。多数情况下,这些基本形式是混合出现的,跳转和循环是其典型代表。 利用功能图语言可以很容易实现流程的循环重复操作。在程序设计过程中可以根据状态的转移条件,决定流程是单周期操作还是多周期循环,是跳转还是顺序向下执行。