1、一、基本指令二、程序控制指令三、PLC 编程规则四、典型环节程序示例五、PLC程序的简单设计法 逻辑取及线圈驱动指令 触点串联指令 触点并联指令 串联电路块的并联连接指令 并联电路块的串联连接指令 置位复位指令 RS触发器指令 立即指令 边沿脉冲指令 逻辑堆栈操作指令 定时器 计数器 比较指令 NOT及NOP指令一、PLC的基本逻辑指令及举例 S7200系列PLC逻辑指令共有106条,厂家提供了梯形图(LAD)、语句表(STL)、功能块图(FBD)和顺序流程图几种编程语言,其中LAD和STL是最基本的也是最常用的编程语言。本章以这两种语言为例介绍其应用。1. 装入触点指令及驱动指令 LD(LO
2、AD):装入触点指令。用于网络块逻辑运算开始的常开触点与母线的连接。 LDN( LOAD NOT):取反指令。用于网络块逻辑运算开始的常闭触点与母线的连接。 (OUT):线圈的驱动指令 图31 为上面三条指令的用法注意事项:3n LD、LDN指令不只是用于网络块逻辑计算开始时与母线相连的常开和常闭触点,在分支电路块的开始也使用LD、LDN指令,与后面要讲的LD、OLD指令配合完成块电路的编程。 n 指令不能用于输入继电器。n 指令可连续使用任意次。n 在同一线圈中不要使用双线圈输出。nLD、LDN操作数为I、Q、M、SM、T、C、V、S 的操作数为Q、M、S、VA (And):与指令。用于单个
3、常开触点的串联连接。AN(And Not):与反指令。用于单个常闭触点的串联连接。注意事项:n A、AN是单个触点串联连接指令,可连续使用,编程时只受到打印宽度和屏幕显示的限制。n 例中可以反复使用=指令,但次序必须正确。n A、AN指令的操作数为:I、Q、M、SM、T、C、V、S和L。( )( )M0.0M0.1Q0.0Q0.1LD M0.0LPS A M0.1= Q0.0LPP = Q0.1网络1I0.0M0.1网络2 连续输出 I0.2Q0.0M0.3T5Q0.3M0.4Q0.1LD I0.0 A M0.0 = Q0.0LD M0.1AN I0.2 = M0.3A T5 = Q0.3 A
4、N M0.4 = Q0.1(a)梯形图(b)语句表M0.03 . 触点并联指令 O(or)或指令。用于单个常开触点的并联连接 ON(or not)或反指令。用于单个常闭触点的并联连接n单个触点的O、ON指令可连续使用nO、ON指令的操作数为:I、Q、M、SM、T、C、V、S、和L注意事项:M0.0M0.1M0.2I0.1I0.0Q0.0LD M0.0O M0.1ON M0.2A I0.0O I0.1= Q0.0(a)梯形图(b)语句表网络1 触点的并联电路举例4 串联电路块的并联连接指令 OLD(or load)或块指令:用于串联电路块的并联连接两个以上触点串联形成的支路叫串联电路块n 在电路
5、块的开始也要使用LD、LDN指令n 每完成一次块电路的并联时要写上OLD指令n OLD指令无操作数注意事项I0.0I0.1I0.2M0.0M0.1M0.2M0.3Q0.0LD I0.0A M0.0LD I0.1AN M0.1OLDLDN I0.2A M0.2OLDA M0.3= Q0.0(a)梯形图(b)语句表网络1 OLD指令使用举例5 并联电路块的串联连接指令 ALD(And Load)与块指令 。 用于并联电路块的串联连接 两条以上支路并联形成的电路叫并联电路块注意事项n 在块电路开始时要使用LD和LDN指令n 在每完成一次块电路的串联连接后要写上ALD指令n ALD指令无操作数网络1
6、ALD指令使用举例I0.0I0.1M0.0M0.2M0.1M0.3Q0.0LD I0.0 O I0.1 LD M0.0A M0.1LD M0.2AN M0.3OLD ALD= Q0.0 (a)梯形图(b)语句表6. 置位、复位指令LADSTL功能置位指令 bit S NS bit,N从bit开始的N个元件置1并保持复位指令 bit R NR bit,N从bit开始的N个元件清零并保持表1 置位复位指令的功能表( )( )网络1 置位网络2 复位 I0.0Q0.0I0.1S2Q0.0R2LD I0.0S Q0.0,2LD I0.1R Q0.1, 2I0.0I0.1(a)梯形图(b)语句表(c)时
7、序图Q0.0,Q0.1n 对元件来说一旦被置位,就保持在通电状态,除非在对它复位;而一旦被复位,就保持在断电状态,除非在对它置位n S/R指令可以互换次序使用,但由于PLC采用扫描工作方式,所以写在后面的指令具有优先权n 如果对记数器和定时器复位,则记数器和定时器的当前值被清零n N的常数范围为1-255,N也可为:VB、IB、QB、MB、SMB、SB、LB、AC、常数、*VD、*AC、*LD。一般情况下使用常数n S/R指令的操作数为:I、Q、M、SM、T、C、V、S、和L注意事项:7. RS触发指令 SR(set dominant bistable)置位优先触发指令。当置位信号和复位信号都
8、为真时,输出为真 RS(reset dominant bistable)复位优先触发指令。当置位信号和复位信号都为真时,输出为假RS1SROUTbitR1SRSOUTbit 指令S1R输出(bit)置位优先触发指令(SR)00保持前一状态010101111 指令SR1输出(bit)复位优先触发指令RS)00保持前一状态010101110RS触发器指令的真值表S1RSROUTSR1RSOUT网络1网络2I0.0I0.1I0.0I0.1Q0.0Q0.1I0.0I0.1Q0.0Q0.1(a)梯形图(b)时序图8. 立即指令(Immediately)nRI bitn立即复位1.Bit只能为Q2.N的范
9、围:1-1283.N的操作数同S/R指令nSI bitn立即置位nBit只能为Qn=I bitn立即输出nANI bitn立即与反nAI bitn立即与nONI bitn立即或反nOI bitn立即或LDNI bitn立即取反nBit只能为ILDI bitn立即取n使用说明nLADnSTL指令名称bitIIbitbitISINbitbitNRI立即指令是为了提高PLC对输入输出的响应速度而设置,不受PLC循环工作方式的影响,允许对输入和输出点进行快速直接存取。对I 操作,相应的输入映像寄存器的值并未更新;当用立即指令访问输出点时,对Q操作,新值同时写到PLC的物理输出点和相应的输出映像寄存器。
10、网络1 立即指令举例网络2I0.0Q0.0IQ0.11SIQ0.2Q0.3II0.0LD I0.0= Q0.0=I Q0.1SI Q0.2,1LDI I0.0= Q0.3(a)梯形图(b)语句表扫描周期nn+1n+2n+3Q0.0映像寄存器Q0.1映像寄存器Q0.2映像寄存器Q0.3映像寄存器Q0.0物理触点Q0.1物理触点Q0.2物理触点Q0.3物理触点(c)时序图输入采样输出刷新I0.0注意:用立即输出指令访问输出点时,在输入采样时刻,对注意:用立即输出指令访问输出点时,在输入采样时刻,对Q进行进行操作,新值既写物理输出点,也写输出映像寄存器操作,新值既写物理输出点,也写输出映像寄存器tt
11、9. 边沿脉冲指令指令名称LADSTL功能说明上升沿脉冲EU在上升沿产生脉冲无操作数下降沿脉冲ED在下降沿产生脉冲PNQ0.0R1PN网络1 边沿脉冲指令举例网络2网络3网络4I0.0M0.0I0.1M0.1M0.1M0.0LD I0.0EU= M0.0LD M0.0S Q0.0,1LD I0.1ED= M0.1LD M0.1R Q0.0,1I0.0M0.0I0.1M0.1Q0.0(a)梯形图(b)语句表(c)时序图Q0.0S110. 逻辑堆栈操作指令 LPS(logic push) 逻辑入栈指令 LRD(logic read) 逻辑读栈指令 LPP(logic pop) 逻辑出栈指令 LDS
12、(load stack) 装入堆栈指令使用举例1使用举例2使用举例3s7-PLC 使用9层堆栈来处理所有的逻辑操作,逻辑堆栈指令主要完成对触点进行的复杂连接。注意事项分支电路开始指令。其作用是把栈顶值复制后压入堆栈开始第二个以后的从逻辑块的编程,其作用是读取最近LPS压入堆栈的内容,而本身不进行PUSH和POP工作分支电路结束指令。其作用把堆栈弹出一级,堆栈内容依次上移复制堆栈中的n个值到栈顶,而栈底丢失。STL: LDS n (n 为08的整数)网络1 LPS、LRD、LPP指令使用举例1M1.2Q0.3M1.1Q0.2M1.0M0.5M0.4Q0.1M0.3M0.2M0.1Q0.0M0.0
13、I0.0LD I0.0LPSLD M0.0O M0.1ALD= Q0.0LRDLD M0.2A M0.3LDN M0.4A M0.5OLDALD= Q0.1LPPA M1.0= Q0.2LD M1.1ON M1.2ALD = Q0.3(a)梯形图(b)语句表BACK网络1 LPS、LRD、LPP指令使用举例2Q0.0Q0.1Q0.2Q0.3M0.3M0.6M0.5M0.4M0.2M0.1M0.0LD M0.0LPS A M0.1LPSAN M0.2= Q0.0LPPA M0.3= Q0.1(a)梯形图(b)语句表 LPPA M0.4 LPSA M0.5= Q0.2LPPAN M0.6= Q0.
14、3M0.3M0.2Q0.0Q0.1M0.1Q0.2Q0.3M0.0网络1 LPS、LRD、LPP指令使用举例3LD M0.0LPS A M0.1LPSA M0.2LPSA M0.3= Q0.0LPP= Q0.1LPP= Q0.2LPP= Q0.3(a)梯形图(b)语句表n受堆栈空间的限制(9层堆栈),LPS、LPP指令连续使用时应少于9次。nLPS和LPP指令必须成对使用,它们之间可以使用LRD指令。nLPS、LRD、LPP指令无操作数。入栈前入栈后iv0iv3iv1iv0iv2iv1iv3iv2iv4iv3iv5iv4iv6iv5iv7iv6iv8iv7LDS 指令使用举例例:LDS 3 接
15、通延时定时器(TON)有记忆接通延时定时器(TONR)断开延时定时器(TOF)1)种类 定时器可分为2)分辨率与定时时间的计算 单位时间的时间增量称为定时器的分辨率。 定时器定时时间T的计算:T=PTS T:实际定时时间 PT:定时时间 S:分辨率 PT数据类型为INT型,操作数可为:VW、IW、QW、MW、SW、 SMW、LW、AIW、T、C、AC、VD、 AC、LD和常数3)定时器的编号 定时器的编号用定时器的名称和它的常数编号(最大为255)。即TXXX,如T40 定时器的编号包含两方面的信息:定时器位和定时器当前值。 定时器位:当定时器的当前值达到设定值PT时,定时器的触点动作。 定时
16、器当前值:存储定时器当前所累计的时间,它用16位符号的整数来表 示,最大计数值为32767 使能输入:BOOL型,可以是I、Q、M、SM、T、C、V、S、L1ms10ms100msINPTTXTXXXTXXXTXXX定时器类型分辨率/ms当前最大值/s定时器编号 TONR132.767T0,T6410327.67T1T4,T65T681003276.7T5T31,T69T95TON,TOF132.767T32,T9610327.67T33T36,T97T1001003276.7T37T61,T101T2554).定时器指令使用说明定时器指令使用说明 (1)接通延时定时器 TON (On-Del
17、ay Timer) 接通延时定时器用于单一时间间隔的定时。 其LAD符号: STL格式: TON TXXX, PT ; 如: TON T120, 8;(8100ms)INPTTONTXXXTXXXTXXXINTXXX位T(2)记忆接通延时定时器 TONR (Retentive On-Delay Timer) 记忆接通延时定时器具有记忆功能,它用于对许多间隔的累计定时 。 上电周期或者首次扫描时,定时器位为OFF,当前值保持在掉电前的 值。 当输入接通时,当前值从上次所保持值继续计时,当累计当前 值达到设定值 时, 定时器为ON,当前值可继续计数到32767。 需注意TONR定时器只能用复位指令
18、R对其进行复位操作。 INPTTONRTXXXTXXXTXXXLAD:STL: TONR TXXX,PT 如 TONR T20, 63INTXXX位T(3)断开延时定时器断开延时定时器 TOF (Off-Delay Timer) 断开延时定时器用于断电后的单一间隔时间计时。断开延时定时器用于断电后的单一间隔时间计时。 上电周期或首次扫描,定时器位为上电周期或首次扫描,定时器位为OFF,当前值为,当前值为0。输入接通时,。输入接通时,定时器位为定时器位为ON,当前值为,当前值为0, 当输入端由接通到断开时,定时器开始当输入端由接通到断开时,定时器开始计时,当达到设定值时,定时器位为计时,当达到设
19、定值时,定时器位为OFF,当前值等于设定值,停止计,当前值等于设定值,停止计时。输入端再次由时。输入端再次由OFFON时,时,TOF复位,如果,输入端再从复位,如果,输入端再从ONOFF,则,则TOF可实现再次启动。可实现再次启动。INPTTOFTXXXTXXXTXXXLAD:STL: TOF TXXX,PT 如 TOF T35,6INTXXX位TI0.0INT35TONPT+4T2 INPT+10T36INPT+3TONRTOF(a)梯形图(b)语句表LD I0.0 TON T35,+4 /接通延时定时器 TONR T2,+10 /有记忆接通延时定时器 TOF T36,+3 /断电延时定时器
20、 应用举例5).5).定时器的刷新方式和正确使用定时器的刷新方式和正确使用(1)定时器的刷新方式n1ms定时器:1ms定时器由系统每隔1ms刷新一次,与扫描周期及程序处理无关。它采用的是中断方式。n10ms定时器:10ms定时器由系统在每个扫描周期开始时自动刷新,由于每个扫描周期只刷新一次,故在一个扫描周期内定时器位和定时器的当前值保持不变。n100ms定时器:100ms定时器在定时器指令执行时被刷新,它仅用在定时器指令在每个扫描周期执行一次的程序中。(2)定时器的正确使用定时器的正确使用错误正确T32T32T32T32T32Q0.0300300Q0.0Q0.0ININTONTONPTPT1
21、ms定时器的使用错误正确ININT33T33T33T33Q0.0T33Q0.0Q0.03030TONTONPTPT10 ms定时器的使用100 ms定时器的使用正确最好ININT37TONTONPTPTQ0.0T37T37Q0.0Q0.033T37T371.几种基本概念几种基本概念(1)种类 S7200系列PLC的计数器有3种: 增计数器CTU,增减计数器CTUD,减计数器CTD。(2)编号 计数器的编号用计数器名称和数字组成,如C6。 计数器的编号包含两方面的信息:计数器的位和计数器当前值。 计数器位:表示计数器是否发生动作的状态。 计数器当前值:用来存储计数器当前所累计的脉冲数,用16位符
22、号整数表示,最大值为32767。2.计数器指令使用说明计数器指令使用说明 (1)增计数器CTU (Count Up)RCUPVCTUCXXXCXXXCXXXCU:脉冲输入端R:复位信号端PV:预设定端计数值计数器位CXXX:计数器编号首次扫描,计数器位为OFF,当前值为0。在计数脉冲输入端CU的每个上升沿,计数器计数一次,当前值增加一个单位。当前值达到设定值时,计数器位ON,当前值可继续计数到32767 后停止计数。复位输入端有效,计数器自动复位,计数器位为OFF,当前值为0。STL指令格式: CTU CXXX, PV例 CTU C20, 3I0.0I0.1C20Q0.0C20CUCTU+3R
23、PV(a)梯形图(b)语句表LD I0.0 /计数脉冲信号输入LD I0.1 /复位脉冲信号输入CTU C20,+3 /增计数,设定计数值LD C20 /计数值为3时输出 Q0.0I0.0I0.1C20 当前值C20 位(c)时序图(2)增减计数器CTUD (Count Up/Down)CDCURCTUDCXXXCXXXCXXXPVCU:脉冲递增计数输入端CD:脉冲递减计数输入端R:复位信号端PV:预设定端计数值计数器位CXXX:计数器编号首次扫描时,计数器位为OFF,当前值为0。CU输入的每个上升沿计数器当前值增加一个单位,CD输入的每个上升沿,计数器当前值减少一个单位,当前值达到设定值时,
24、计数器位置位为ON。32768327670CUCDSTL指令格式: CTUD CXXX, PV例 CTUD C30, 5(3)减计数器CTD (Count Down)LD CD PVCTD CXXXCXXXCXXXCD:脉冲递减输入端LD:复位输入端 PV:预设定端首次扫描,计数器位为OFF,当前值等于预设值PV。计数器检测到CD输入端的上升沿时,计数器当前值减少一个单位,当前值减为0时,计数器位为ON。复位输入端有效时,计数器位为OFF,当前值为PV。STL指令格式: CTD CXXX, PV例 CTD C40, 4I0.0I0.1C40Q0.0C40CDCTD+4LDPV(a)梯形图(b)
25、语句表LD I0.0 /减计数脉冲信号输入LD I0.1 /复位脉冲信号输入CTD C40,+4 /减计数,设定计数值LD C40 /计数值为0时输出 Q0.0注意:以上三种计数器如果将计数器位作为复位输入信号,则可实现循环计数。 比较指令类型:字节比较,整数比较,双字节比较,实数比较和字符串比较。 数值比较指令的运算符:,和等6种,而字符串比较指令只有和两种。 对比较指令可进行LD,A和O编程。LAD: IN1IN2XXTXX:比较关系符(,=,=,=,;注意:n 对于LAD的=, 在STL为=;n 对于LAD的整数比较,数据类型为I,而STL为W;Q0.2Q0.1Q0.0网络1网络3网络2
26、I0.0I0.1C30 =I +30 VD1 B VB2 BACK梯形图语句表LDW= C30,+30 = Q0.0 LD I0.0 AR VB1,VB2 = Q0.21).取反指令取反指令NOT 将复杂逻辑结果取反,为用户使用反逻辑提供方便。该指令无操作数,其LAD和STL形式如下。 STL形式:NOT LAD形式:| NOT |2).空操作指令NOP (No Operation) 该指令用在跳转指令结束处,或在调试程序中使用。其对用户程序的执行无影响,其LAD和STL形式如下。 STL形式:NOP N N的范围:0255 LAD形式: NOPN使用说明:(1) 结束指令只能用在主程序中,不
27、能在子程序和中断程序中使用。而有条件结束指令可用在无条件结束指令前结束主程序。(2) 在调试程序时,在程序的适当位置插入无条件结束指令可实现程序的分段调试。(3) 可以利用程序执行的结果状态、系统状态和外部设置切换条件来调用有条件结束指令,使程序结束。(4) 使用Micro/Win32编程时,编程人员不需手工输入无条件结束指令,该软件会自动在内部加上一条无条件结束指令到主程序的结尾。STOP指令有效时,可以使主机CPU的工作方式由RUN切换到STOP,从而立即中止用户程序的执行。STOP指令可以用在主程序、子程序和中断程序中。LAD: (STOP) ;STL: STOP结束指令和停止指令的用法
28、如下图所示:1).结束指令 END(有条件结束指令)和MEND(无条件结束指令)LAD: (END)或 (MEND);STL: END或MEND二 、程序控制指令1 结束及暂停指令2).停止指令STOPSTOP和END指令通常在程序中用来对突发紧急事件进行处理。网络1 STOP、END、WDR使用举例SM5.0(STOP)I0.3网络2I0.5(END)网络3M0.4(WDR)LD SM5.0 / 检查I/O错误O SM4.3 / 运行时检查编程O I0.3 / 外部切换开关STOP / 条件满足,由RUN切换到 / STOP方式LD I0.5 / 外部停止控制ENDLD M0.4 / 用触点
29、重新触发WDR / 看门狗定时器图 结束、停止及看门狗指令举例SM4.32 看门狗指令WRD(Watchdog Reset ) 称为看门狗复位指令,也称为警戒时钟刷新指令。它可以把警戒时钟刷新,即延长扫描周期,从而有效地避免看门狗超时错误。使用WDR指令时要特别小心,如果因为使用WDR指令而使扫描时间拖的过长(如在循环结构中使用WDR),那么在中止本次扫描前,下列过程将被禁止:(1) 通信(自由口I/O除外);(2) I/O 刷新(直接I/O除外);(3) 强制刷新;(4) SM 位刷新(SM0、SM5-SM29的位不能被刷新);(5) 运行时间诊断;(6) 扫描时间超过25s时,使10ms和
30、100ms定时器不能正常计时;(7) 中断程序中的STOP指令。返回3 跳转及标号指令跳转指令可以使PLC编程的灵活性大大提高,使主机可根据对不同条件的判断,选择不同的程序段执行程序。跳转指令 JMP (Jump to Label ): 当输入端有效时,使程序跳转到标号处执行。标号指令 LBL ( Label ): 指令跳转的目标标号。操作数N为0-255。(1) 跳转指令和标号指令必须配合使用,而且只能使用在同一程序块中,如主程序、同一个子程序或同一个中断程序。(2) 执行跳转后,被跳过程序段中的各元件状态为:a.Q、M、S、C 等元件的位保持跳转前的状态;b.计数器 C 停止计数,当前值存
31、储器保持跳转前的计数值;c.对定时器来说,因刷新方式不同而工作状态不同。跳转指令的使用方法如下图所示。使用说明使用说明N( JMP )LAD:STL:JMP NLBLNLAD:STL:LBL NI0.03(JMP)3LBL LD I0.0JMP 3. LBL 3图 跳转指令使用举例4 循环指令1.) 循环指令循环开始指令 FOR:用来标记循环体的开始。循环结束指令NEXT:用来标记循环体的结束。无操作数。FOR和NEXT之间的程序段称为循环体,每执行一次循环体,当前计数值增1,并且将其结果同终值作比较,如果大于终值,则终止循环。循环指令的引入为解决重复执行相同功能的程序段提供了极大的方便,并且
32、优化了程序结构。特别是在进行大量相同功能的计算和逻辑处理时,循环指令非常有用。循环指令的LAD和STL形式如图FORENENOINDXINITFINAL(NEXT)FOR INDX,INIT,FINAL.NEXT图 循环指令的LAD和STL形式2.) 参数说明从图中可以看出,循环指令盒中有三个数据输入端:当前循环计数INDX(index value or current loop count)、循环初值INIT(starting value)和循环终值FINAL(ending value)。在使用时必须给FOR指令指定当前循环计数(INDX)、初值(INIT)和终值(FINAL)。INDX操作
33、数:VW、IW、QW、MW、SW、SMW、LW、T、C、AC、*VD、*AC、和*CD。这些操作数属INT型。INIT和FINAL操作数:VW、IW、QW、MW、SW、SMW、LW、T、C、AC、常数、*VD、*AC、*CD。这些操作数属INT型。使用说明:(1) FOR、NEXT 指令必须成对使用。(2) FOR和NEXT 可以循环嵌套,最多8层,各嵌套不可有交叉现象。(3) 每次使能输入(EN)重新有效时,指令将自动复位各参数。(4) 初值大于终值时,循环体不被执行。(5)注意在循环体中对INDX的控制。循环指令使用举例如下图所示。网络5I1.0FORENENOINDXINITFINALV
34、W1001100ABFORENENOINDXINITFINALVW22512网络10I1.1网络15网络20(NEXT)(NEXT)(a)梯形图LD I.0FOR VW100,1,100.LD I1.1FOR VW225,1,2.NEXT.NEXT(b)语句表图 循环指令使用举例返回5 子程序子程序在结构化程序设计中是一种方便有效的工具。S7-200 PLC的指令系统具有简单、方便、灵活的子程序调用功能。与子程序有关的操作有:建立子程序、子程序的调用和返回。建立子程序是通过编程软件来完成的。对于CPU226XM ,最多可以有128个子程序,对其余的CPU ,最多有64个子程序。(1) 子程序调
35、用指令(CALL)在使能输入有效时,主程序把程序控制权交给子程序。子程序的调用可以带参数,也可以不带参数。它在梯形图中以指令盒的形式编程。指令格式如表下表所列。在使能输入有效时,结束子程序的执行,返回主程序中(返回到调用此子程序的下一条指令)。梯形图中以线圈的形式编程,指令不带操作数。指令格式如表下表所列。(3) 应用举例。如后图所示。使用说明: 2). 子程序的调用 1) 建立子程序(2) 子程序返回指令无条件返回无条件返回(RET):用于子程序结束。:用于子程序结束。条件返回(条件返回(CRET):只能用于子程序内部。):只能用于子程序内部。表 子程序调用指令格式指令子程序调用指令子程序返
36、回指令LADSBR-0EN(RET)或STLCALL SBR_0RET 或CRET网络1I0.0网络2I0.1WYHENENSBR_0(a) 梯形图LD I0.0 /使能输入CALL WYH /调用子程序WYH LD I0.1 /使能输入CALL SBR_0 /调用子程序WYH(b) 语句表返回图5-25 所示的程序实现用外部控制条件分别调用两个子程序。(CRET)使用说明:a.CRET 多用于子程序的内部,由判断条件决定是否结束子程序调用,RET 用于子程序的结束。b.如果在子程序的内部又对另一子程序执行调用指令,则这种调用称为子程序的嵌套。子程序的嵌套深度最多为8级。c.当一个子程序被调用
37、时,系统自动保存当前的堆栈数据,并把栈顶置1,堆栈中的其他值为0,子程序占有控制权。子程序执行结束,通过返回指令自动恢复原来的逻辑堆栈值,调用程序又重新取得控制权。d.累加器可在调用程序和被调用程序之间自由传递,所以累加器的值在子程序调用时既不保存也不恢复。返回3) .带参数的子程序调用子程序最多可以传递16个参数。参数在子程序的局部变量表加以定义。参数包含下列信息:变量名、变量类型和数据类型。a.变量名 变量名最多用8个字符表示,第一个字符不能是数字。b.变量类型 变量类型是按变量对应数据的传递方向来划分的,可以是传入子 程序(IN)、传入和传出子程序 (IN/OUT)、传出子程序(OUT)
38、和暂时变量(TEMP)等4种类型。4种变量类型的参数在变量表中的位置必须按照一定的先后顺序。c.数据类型 局部变量表中还要对数据类型进行声明。数据类型可以是:能流、布尔型、字节型、字型、双字型、整数型、双整数型和实型。a.常数参数必须声明数据类型。b.输入或输出参数没有自动数据类型转换功能。c.参数在调用时必须按一定的顺序排列。(1) 子程序参数(2) 参数子程序调用的规则(3) 变量表的使用按照子程序指令的调用顺序,参数值分配给局部变量存储器,起始地址是L0.0。使用编程软件时,地址分配是自动的。参数子程序调用指令格式:CALL 子程序名,参数1,参数2,参数n。(4) 程序实例下图 为一个
39、带参数调用的子程序实例,其局部变量分配如表 下表所列。说明: 下图中的STL程序并不是从下图中的LAD转换过来的,而是单独编写的。同样从图STL也转换不成图中的LAD。LD I0.0CALL SBR_1,I0.1,VB10,I1.0,&VB100,*AC1,VD200I0.0I0.1VB10I01.0*AC1SBR_1ENIN1IN2IN3IN4IN/OUT1OUT1VD200图 带参数子程序调用举例L地址参数名参数类型数据类型说明无L0.0LB1LW7LD3LB2.0ENIN1IN2IN3IN4IN/OUT1ININININININ/OUTBOLLBOLLBOLLBYTEDWORDWORD指
40、令使能输入参数第1个输入参数,布尔型第3个输入参数,布尔型第2个输入参数,字节型第4个输入参数,双字型第1个输入/输出参数,字型表 局部变量表返回&VB100LD9OUTDWORD第1个输出参数,双字型OUT16 与ENO指令ENO是LAD中指令盒的布尔能流输出端。如果指令盒的能流端有效,则执行没有错误,ENO就置位,并将能流向下传递。ENO可以作为允许位表示指令成功执行。STL指令没有EN输入,但对要执行的指令,其栈顶值必须为1。可用“与”ENO(AENO)指令来产生和指令盒中的ENO位相同的功能。指令格式:AENOAENO指令无操作数,且只在STL中使用,它将栈顶值和ENO 位的逻辑进行与
41、运算,运算结果保存到栈顶。AENO指令使用较少。AENO指令的用法如图3-27所示。图3-27 AENO 指令用法举例网络1 与ENO使用举例I0.0ADD_IENENATCHENOENOIN1IN2INTEVNTINT_010VW204VW200VW204LD I0.0 /使能输入+I VW200,VW204 /整数加法,VW200+VW204=VW204AENO /与ENO指令ATCH INT_0,10 /如果+I指令执行正确,则调用中断程序 INT_0,中断事件号为10三 、PLC初步编程指导1 .梯形图编程的基本规则 梯形图编程的基本规则如下: (1)PLC内部元器件触点的使用次数是无
42、限制的。 (2)梯形图的每一行都是从左边母线开始,然后是各种触点的逻辑连接,最后以线圈或指令盒结束。触点不能放在线圈的右边。线圈连接时必须用并联,不能出现串联形式。如图 所示。但如果是以有能量传递的指令盒结束的指令,可以使用AENO指令在其后面连接指令盒(较少使用),如图 所示。3-273-28 (3)线圈和指令盒一般不能连接在左边的母线上。如需要的话可通过特殊的中间继电器SM0.0(常ON特殊中间继电器)完成,如图 所示。 (4)在同一程序中,同一编号的线圈使用两次及两次以上称为双线圈输出。双线圈输出非常容易引起误动作,所以应避免使用。S7-200PLC中不允许双线圈输出。如图 所示。 (5
43、)内外触点的配合。在LAD中应正确选择设备所连的输入继电器的触点类型,使用常开触点还是常闭触点与外部触点有关。如图 所示 (6) 在手工编写梯形图程序时,触点应画在水平线上,从习惯和美观的角度来讲,不要画在垂直线上,如图 。使用编程软件则不可能把触点画在垂直线上。3-29A3-303-29B3-35 (7) 不包括触点的分支线条应放在垂直方向,不要放在水平方向,以便于读图和图形的美观,如图 所示。使用编程软件则不可能出现这种情况。 (8) 应把串联多的电路块尽量放在最上边,把并联多的电路块尽量放在最左边,这样一是节省指令,二是美观,如图 所示。 (9) 图 所示为梯形图的推荐画法。3-313-
44、323-332. LAD和STL编程形式的区别 利用PLC指令对梯形图编程时,可以把整个梯形图程序看成由很多网络块组成,每个网络块均起始于母线。所有的网络块组合在一起就是梯形图程序,这是S7-200PLC的特点。LAD程序可以通过编程软件直接转换为STL形式。S7-200PLC用STL编程时,如果也以每个独立的网络块为单位,则STL程序和LAD程序基本上是一一对应的,而且两者可以通过编程软件相互转换;如果不以每个独立的网络块为单位编程,而是连续编写,则STL程序和LAD程序不能通过编程软件相互转换。大家在使用时要注意。 LAD是使用最多的编程语言,它非常直观易懂,对每个人都适用;特别老练的人在
45、某些情况下会直接使用STL形式编程,用STL形式编写的程序简短,但不直观。n 但不管怎么说,大家对这两种形式的程序都应该熟悉。特别是会用手工把一个LAD程序转换为STL程序,这对进一步理解PLC程序执行的原理有很大的帮助。下面的一个典型例子说明了从LAD到STL的转换步骤。n 对每一个独立的LAD网络块中的程序,可分成若干小块,对每个小块按照从左到右,从上到下的原则进行编程。然后将程序块连接起来,就完成了该网络块的STL编程。图 详细介绍了语句表编程的步骤。3-34(a) 错误错误(b) 错误错误1243122344图3-28 梯形图画法示例1返回返回45(c) 正确1234445(a) 错误
46、错误(b)正确Q 0.0SM0.0 Q0.0返回返回图3-29A 梯形图画法示例I0.0I0.1Q0.0PLC+24V( )I0.0I0.1Q0.0Q0.0LLN启动启动停止停止I0.0I0.1Q0.0PLC+24V( )I0.0I0.1Q0.0Q0.0LLN启动启动停止停止图图 335返回返回( )( )M0.0M0.0I0.0I0.1返回返回图3-29 B梯形图画法示例(a) 错误错误(b)正确图3-30 梯形图画法示例3返回返回(a) 不好不好(b)正确正确图3-31 梯形图画法示例4返回返回(a) 把串联多的电路块放在最上边(b) 把并联多的电路块放在最左边图3-32 梯形图画法示例5
47、返回返回图3-33 梯形图的推荐画法返回返回12345678910111213(1)(2)(3)(4)(8)(5)(6)(7)(9)(10)(11)(12)(1)LD 1 AN 2(2)LD 3 A 4(3)OLD(4)O 5(5)LD 6 A 7(6)LD 8 AN 9(7)OLD(8)ALD(9)A 10(10)= 12(11)A 11(12)= 13(a) 梯形图(b) 语句表编写顺序示范图3-34 语句表编写举例四、典型的简单电路编程四、典型的简单电路编程 1 延时脉冲产生电路延时脉冲产生电路 2 瞬时接通瞬时接通/延时断开电路延时断开电路 3 延时接通延时接通/延时断开电路延时断开电
48、路 4 脉冲宽度可控制电路脉冲宽度可控制电路 5 计数器的扩展计数器的扩展 6 长定时电路长定时电路 7 闪烁电路闪烁电路 8 报警电路报警电路 9 抢答器电路抢答器电路10 多个传送带控制示例多个传送带控制示例 1. 延时脉冲产生电路延时脉冲产生电路 在有输入信号后,停一段时间产生一个脉冲。在有输入信号后,停一段时间产生一个脉冲。主要用于获取启动或关断信号。主要用于获取启动或关断信号。电路的程序及时序电路的程序及时序2 瞬时接通瞬时接通/延时断开电路延时断开电路 在输入信号有效时,马上有输出,而输入信号在输入信号有效时,马上有输出,而输入信号OFF后,输出信号延时后才后,输出信号延时后才OF
49、F.电路的程序及时序电路的程序及时序3. 延时接通延时接通/延时断开电路延时断开电路该电路要求有信号输入后,停一段时间输出信号才该电路要求有信号输入后,停一段时间输出信号才为为ON,而输入信号,而输入信号OFF后,输出信号延时一段时间后,输出信号延时一段时间才才OFF.电路的程序及时序电路的程序及时序4. 脉冲宽度可控制电路脉冲宽度可控制电路在输入信号宽度不规范的情况下,要求每一个输入在输入信号宽度不规范的情况下,要求每一个输入信号的上升沿产生一个宽度固定的脉冲,该脉冲的信号的上升沿产生一个宽度固定的脉冲,该脉冲的宽度可以调节。宽度可以调节。 注意:如果输入信号的两个上升沿之间的距离小注意:如
50、果输入信号的两个上升沿之间的距离小于脉冲的宽度,则忽略输入信号的第二个上升沿,于脉冲的宽度,则忽略输入信号的第二个上升沿,电路的程序及时序电路的程序及时序5. 计数器的扩展 一个计数器最大计数值为32767。实际应用中,如果计数范围超过该值,就需要对计数器进行扩展。计数器扩展电路的程序计数器扩展电路的程序6 长定时电路 S7-200PLC中的定时器最长定时时间不到1h,但在一些 实际应用中,往往需要几小时甚至几天或更长时间的定时控制,这样仅用一个定时器就不能完成该任务。 在输入信号I0.0有效后,经过10h 30min后将输出Q0.0置位。定时电路的梯形图程序定时电路的梯形图程序7. 闪烁电路