3.2 定时器与计数器指令
S7-1200使用符合IEC标准的定时器和计数器指令。本节的程序在项目“定时器计数器例程”的OB1中。
3.2.1 定时器指令
1.脉冲定时器
IEC定时器和IEC计数器属于函数块,调用时需要指定配套的背景数据块,定时器和计数器指令的数据保存在背景数据块中。打开右边的指令列表窗口,将“定时器操作”文件夹中的定时器指令拖放到梯形图中适当的位置。在出现的“调用选项”对话框中(见图2-23),可以修改默认的背景数据块的名称。IEC定时器没有编号,可以用背景数据块的名称(例如“T1”,或“1号电机起动延时”),来做定时器的标示符。单击“确定”按钮,自动生成的背景数据块见图3-13。
定时器的输入IN(见图3-14)为启动输入端,在输入IN的上升沿(从0状态变为1状态),启动TP、TON和TONR开始定时。在输入IN的下降沿,启动TOF开始定时。
图3-13 定时器的背景数据块
PT(Preset Time)为预设时间值,ET(Elapsed Time)为定时开始后经过的时间,称为当前时间值,它们的数据类型为32位的Time,单位为ms,最大定时时间为T#24D20H31M23S647MS,D、H、M、S、MS分别为日、小时、分、秒和毫秒。可以不给输出Q和ET指定地址。Q为定时器的位输出,各参数均可以使用I(仅用于输入参数)、Q、M、D、L存储区,PT可以使用常量。定时器指令可以放在程序段的中间或结束处。
脉冲定时器的指令名称为“生成脉冲”,用于将输出Q置位为PT预设的一段时间。用程序状态功能可以观察当前时间值的变化情况(见图3-14)。在IN输入信号的上升沿启动该定时器,Q输出变为1状态,开始输出脉冲。定时开始后,当前时间ET从0ms开始不断增大,达到PT预设的时间时,Q输出变为0状态。如果IN输入信号为1状态,则当前时间值保持不变(见图3-15的波形A)。如果IN输入信号为0状态,则当前时间变为0s(见波形B)。
图3-14 脉冲定时器的程序状态
图3-15 脉冲定时器的波形图
IN输入的脉冲宽度可以小于预设值,在脉冲输出期间,即使IN输入出现下降沿和上升沿(见波形B),也不会影响脉冲的输出。
图3-14中的I0.1为1时,定时器复位线圈(RT)通电,定时器被复位。用定时器的背景数据块的编号或符号名来指定需要复位的定时器。如果此时正在定时,且IN输入信号为0状态,将使当前时间值ET清零,Q输出也变为0状态(见波形C)。如果此时正在定时,且IN输入信号为1状态,将使当前时间清零,但是Q输出保持为1状态(见波形D)。复位信号I0.1变为0状态时,如果IN输入信号为1状态,将重新开始定时(见波形E)。只是在需要时才对定时器使用RT指令。
2.接通延时定时器
接通延时定时器(TON,见图3-16)用于将Q输出的置位操作延时PT指定的一段时间。IN输入端的输入电路由断开变为接通时开始定时。定时时间大于等于预设时间PT指定的设定值时,输出Q变为1状态,当前时间值ET保持不变(见图3-17中的波形A)。
IN输入端的电路断开时,定时器被复位,当前时间被清零,输出Q变为0状态。CPU第一次扫描时,定时器输出Q被清零。如果IN输入信号在未达到PT设定的时间时变为0状态(见波形B),输出Q保持0状态不变。
图3-16中的I0.3为1状态时,定时器复位线圈RT通电(见波形C),定时器被复位,当前时间被清零,Q输出变为0状态。复位输入I0.3变为0状态时,如果IN输入信号为1状态,将开始重新定时(见波形D)。
图3-16 接通延时定时器
图3-17 接通延时定时器的波形图
3.关断延时定时器指令
关断延时定时器(TOF,见图3-18)用于将Q输出的复位操作延时PT指定的一段时间。其IN输入电路接通时,输出Q为1状态,当前时间被清零。IN输入电路由接通变为断开时(IN输入的下降沿)开始定时,当前时间从0逐渐增大。当前时间等于预设值时,输出Q变为0状态,当前时间保持不变,直到IN输入电路接通(见图3-19的波形A)。关断延时定时器可以用于设备停机后的延时,例如大型变频电动机的冷却风扇的延时。
图3-18 关断延时定时器
图3-19 关断延时定时器的波形图
如果当前时间未达到PT预设的值,IN输入信号就变为1状态,当前时间ET被清0,输出Q将保持1状态不变(见波形B)。图3-18的I0.5为1时,定时器复位线圈RT通电。如果此时IN输入信号为0状态,则定时器被复位,当前时间被清零,输出Q变为0状态(见波形C)。如果复位时IN输入信号为1状态,则复位信号不起作用(见波形D)。
4.时间累加器
时间累加器(TONR,见图3-20)的IN输入电路接通时开始定时(见图3-21中的波形A和B)。输入电路断开时,累计的当前时间值保持不变。可以用TONR来累计输入电路接通的若干个时间段。图3-21中的累计时间t1+t2等于预设值PT时,Q输出变为1状态(见波形D)。
复位输入R为1状态时(见波形C),TONR被复位,它的当前时间值变为0,同时输出Q变为0状态。
图3-20中的PT线圈为“加载持续时间”指令,该线圈通电时,将PT线圈下面指定的时间预设值(即持续时间),写入图3-20中TONR定时器名为"T4"的背景数据块DB4中的静态变量PT("T4".PT),将它作为TONR的输入参数PT的实参。用I0.7复位TONR时,"T4".PT也被清0。
图3-20 时间累加器
图3-21 时间累加器的波形图
【例3-2】用接通延时定时器设计周期和占空比可调的振荡电路。
图3-22中的串联电路接通后,左边的定时器的IN输入信号为1状态,开始定时。2s后定时时间到,它的Q输出端的能流流入右边的定时器的IN输入端,使右边的定时器开始定时,同时Q0.7的线圈通电。
图3-22 振荡电路
3s后右边的定时器的定时时间到,它的输出Q变为1状态,使“T6”.Q(T6是DB6的符号地址)的常闭触点断开,左边的定时器的IN输入电路断开,其Q输出变为0状态,使Q0.7和右边的定时器的Q输出也变为0状态。下一个扫描周期因为“T6”.Q的常闭触点接通,左边的定时器又从预设值开始定时,以后Q0.7的线圈将这样周期性地通电和断电,直到串联电路断开。Q0.7线圈通电和断电的时间分别等于右边和左边的定时器的预设值。
5.用数据类型为IECTIMER的变量提供背景数据
图3-23是卫生间冲水控制电路与波形图。I0.7是光电开关检测到的有使用者的信号,用Q1.2控制冲水电磁阀。在项目“定时器计数器例程”中,生成符号地址为“定时器DB”的全局数据块DB15。在DB15中生成数据类型为IEC TIMER的变量T1、T2、T3(见图3-23右下角的图),用它们提供定时器的背景数据。
将TON方框指令拖放到程序区后,单击方框上面的,再单击出现的小方框右边的按钮,单击出现的地址列表中的“定时器DB”,地址域出现“‘定时器DB’.”。单击地址列表中的“T1”,地址域出现“定时器DB”.T1。单击地址列表中的“无”,指令列表消失,地址域出现“定时器DB”.T1。用同样的方法为TP和TOF提供背景数据,和生成触点上各定时器Q输出的地址。
从I0.7的上升沿(有人使用)开始,接通延时定时器TON延时3s,3s后TON的Q输出变为1状态,使脉冲定时器TP的IN输入信号变为1状态,TP输出脉冲。
由波形图可知,控制冲水电磁阀的Q1.2的高电平脉冲波形由两块组成,4s的脉冲波形由TP的触点“定时器DB”.T2.Q提供。TOF的Q输出“定时器DB”.T3.Q的波形减去I0.7的波形得到宽度为5s的脉冲波形,可以用“定时器DB”.T3.Q的常开触点与I0.7的常闭触点的串联电路来实现上述要求。两块脉冲波形的叠加用并联电路来实现。“定时器DB”.T1.Q的常开触点用于防止3s内有人进入和离开时冲水。
图3-23 卫生间冲水控制电路
6.定时器线圈指令
两条运输带顺序相连(见图3-24),为了避免运送的物料在1号运输带上堆积,按下起动按钮I0.3,1号运输带开始运行,8s后2号运输带自动起动。停机的顺序与起动的顺序刚好相反,即按了停止按钮I0.2后,先停2号运输带,8s后停1号运输带。PLC通过Q1.1和Q0.6控制两台电动机M1和M2。
运输带控制的梯形图程序如图3-25所示,程序中设置了一个用起动按钮和停止按钮控制的辅助元件M2.3,用它来控制接通延时定时器(TON)的IN输入端,以及关断延时定时器(TOF)线圈。
图3-24 运输带示意图与波形图
中间标有TP、TON、TOF和TONR的线圈是定时器线圈指令。将指令列表的“基本指令”窗格的“定时器操作”文件夹中的“TOF”线圈指令拖放到程序区。它的上面可以是自动生成的类型为IECTIMER的背景数据块(见图中的DB11),也可以是数据块中数据类型为IECTIMER的变量,它的下面是时间预设值T#8S。定时器线圈通电时被起动,它的功能与对应的TOF方框定时器指令相同。
TON的Q输出端控制的Q0.6在I0.3的上升沿之后8s变为1状态,在停止按钮I0.2的上升沿时变为0状态。综上所述,可以用TON的Q输出端直接控制2号运输带Q0.6。
T11是DB11的符号地址。按下起动按钮I0.3,关断延时定时器线圈(TOF)通电。它的Bool输出"T11".Q在它的线圈通电时变为1状态,在它的线圈断电后延时8s变为0状态,因此可以用"T11".Q的常开触点控制1号运输带Q1.1。
图3-25 运输带控制的梯形图
3.2.2 计数器指令
1.计数器的数据类型
S7-1200有3种IEC计数器:加计数器(CTU)、减计数器(CTD)和加减计数器(CTUD)。它们属于软件计数器,其最大计数频率受到OB1的扫描周期的限制。如果需要频率更高的计数器,可以使用CPU内置的高速计数器。
IEC计数器指令是函数块,调用它们时,需要生成保存计数器数据的背景数据块。
CU(见图3-26)和CD分别是加计数输入和减计数输入,在CU或CD由0状态变为1状态时(信号的上升沿),当前计数器值CV被加1或减1。PV为预设计数值,Q为布尔输出,R为复位输入。CU、CD、R和Q均为Bool变量。
将指令列表的“计数器操作”文件夹中的CTU指令拖放到工作区,单击方框中CTU下面的3个问号(见图3-26的左图),再单击问号右边出现的按钮,用下拉式列表设置PV和CV的数据类型为Int。
PV和CV可以使用的数据类型见图3-26。各变量均可以使用I(仅用于输入变量)、Q、M、D和L存储区,PV还可以使用常数。
图3-26 设置计数器的数据类型
2.加计数器
当接在R输入端的复位输入I1.1为0状态(见图3-27),接在CU输入端的加计数脉冲输入电路由断开变为接通时(即在CU信号的上升沿),当前计数器值CV加1,直到CV达到指定的数据类型的上限值。此后CU输入的状态变化不再起作用,CV的值不再增加。
CV大于等于预设计数值PV时,输出Q为1状态,反之为0状态。第一次执行指令时,CV被清零。各类计数器的复位输入R为1状态时,计数器被复位,输出Q变为0状态,CV被清零。图3-28是加计数器的波形图。
图3-27 加计数器
图3-28 加计数器的波形图
3.减计数器
图3-29中的减计数器的装载输入LD为1状态时,输出Q被复位为0,并把预设计数值PV的值装入CV。LD为1状态时,减计数输入CD不起作用。
LD为0状态时,在减计数输入CD的上升沿,当前计数器值CV减1,直到CV达到指定的数据类型的下限值。此后CD输入信号的状态变化不再起作用,CV的值不再减小。
当前计数器值CV小于等于0时,输出Q为1状态,反之Q为0状态。第一次执行指令时,CV被清零。图3-30是减计数器的波形图。
图3-29 减计数器
图3-30 减计数器的波形图
4.加减计数器
在加减计数器的加计数输入CU的上升沿(见图3-31),当前计数器值CV加1,CV达到指定的数据类型的上限值时不再增加。在减计数输入CD的上升沿,CV减1,CV达到指定的数据类型的下限值时不再减小。
如果同时出现计数脉冲CU和CD的上升沿,CV保持不变。CV大于等于预设计数值PV时,输出QU为1,反之为0。CV小于等于0时,输出QD为1,反之为0。
装载输入LD为1状态时,预设值PV被装入当前计数器值CV,输出QU变为1状态,QD被复位为0状态。
复位输入R为1状态时,计数器被复位,CV被清零,输出QU变为0状态,QD变为1状态。R为1状态时,CU、CD和LD不再起作用。图3-32是加减计数器的波形图。
图3-31 加减计数器
图3-32 加减计数器的波形图