接通延时定时器(ton):用于定时单个时间间隔 。
有记忆的接通延时定时器(tonr):用于累积多个定时时间间隔的时间值。
断开延时定时器(tof): 用于在 off(或 false) 条件之后延长一定时间间隔。
定时器号和分辨率
定时器对时间间隔计数。定时器的分辨率(时基)决定了每个时间间隔的长短。
s7-200 smart提供了256个可供使用的定时器,即用户可用的定时器号为t0-t255。
ton、tonr 和 tof 定时器提供三种分辨率:1ms、10ms和100ms。(当前值的每个单位均为时基的倍数。例如,使用 10 ms 定时器时,计数 50 表示经过的时间为 500 ms )。
定时器号的分辨率(时基)及最大计数时间,如下表:
表1. 定时器号和分辨率
定时器类型 分辨率 最大定时值 定时器值 tonr(可保持) 1 ms 32.767s (0.546min.) t0, t64 10 ms 327.67s(5.46min.) t1-t4, t65-t68 100 ms 3276.7s (54.6min.) t5-t31, t69-t95 ton,tof(不保持) 1ms 32.767s (0.546min.) t32, t96 10ms 327.67s (5.46min.) t33-t36, t97-t100 100ms 3276.7s (54.6min.) t37-t63, t101-t255定时器号决定了定时器的分辨率(时基),并且分辨率在指令块上标出。
注意:同一个定时器编号不能同时用于 ton 和 tof 定时器。 例如,不能同时使用 ton t32和 tof t32。
不同分辨率的定时器按以下规律刷新:
1ms:1ms分辨率的定时器,定时器位和当前值的更新不与扫描周期同步。对于大于1ms的程序扫描周期,在一个扫描周期内,定时器位和当前值刷新多次。
10ms:10ms分辨率的定时器,定时器位和当前值在每个程序扫描周期的开始刷新。定时器位和当前值在整个扫描周期过程中为常数。在每个扫描周期的开始会将一个扫描累计的时间间隔加到定时器的当前值上。
100ms:100ms分辨率的定时器,定时器位和当前值在指令执行时刷新。因此为了保证正确的定时值,要确保在一个程序扫描周期中,只执行一次100ms定时器指令。
注意:要确保最小时间间隔,请将预设值 (pv) 增大 1。例如:使用 100 ms 定时器时,为确保最小时间间隔至少为 2100 ms,则将 pv 设置为22。
定时器指令的有效操作数如下表所示:
表2. 定时器指令的有效操作数
输入/输出 数据类型 操作数 txxx word 定时器编号(t0~t255) in booli、q、v、m、sm、s、t、c、l、能流 pt intiw 、qw、vw、mw、smw、sw、t、c、lw、ac、aiw、*vd、 *ld、*ac、常数不同定时器的功能
ton 和 tonr 定时器操作:
在使能输入 in 接通时开始计时。 当前值等于或大于预设时间时,定时器位置为接通。
使能输入置为断开时,清除 ton 定时器的当前值。
使能输入置为断开时,保持 tonr 定时器的当前值。 输入 in 置为接通时,可以使用tonr 定时器累积时间。 使用复位指令 (r) 可清除 tonr 的当前值。
达到预设时间后,ton 和 tonr 定时器继续定时,直到达到最大值 32,767 时才停止定时。
tof 定时器
使能输入接通时,定时器位立即接通,当前值置为 0。输入断开时,定时开始,定时一直持续到当前时间等于预设时间。
达到预设值时,定时器位断开,当前值停止递增;但是,如果在 tof 达到预设值之前使能输入再次接通,则定时器位保持接通。
要使 tof 定时器开始定时断开延时时间间隔,使能输入必须进行接通-断开转换。
如果 tof 定时器在 scr 区域中,并且 scr 区域处于未激活状态,则当前值设置为0,定时器位断开且当前值不递增。
定时器工作规律如下表所示:
表3. 定时器操作和plc上电循环
类型 当前值 >= 预设值 使能输入 in 的状态 上电循环/首次扫描 ton 定时器位接通,当前值继续定时到 32,767on: 当前值 = 定时值
off: 定时器位断开,当前值 = 0
定时器位 = off当前值 = 0
tonr定时器位接通,当前值继续定时到 32,767on: 当前值 = 定时值
off: 定时器位和当前值保持最后状态和值
定时器位 = off当前值可以保持
tof 定时器位断开,当前值 = 预设值,停止定时 on: 定时器位接通,当前值 = 0off: 在接通-断开转换之后,定时器开始定时
定时器位 = off当前值 = 0
接通延时定时器指令举例如下图所示:
图1.接通延时定时器指令程序举例
其中:定时器t37时基为100ms,预置值设定为10,实际延时时间为100ms×10=1s。
图2.时序图
其中:
in为“1”状态时,定时器开始运行,延时到达预置值,t37 置位。
in输入端为“0”状态时,定时器复位。如无复位,当前值继续增至最大值。
定时器在子程序中的表现
在条件调用子程序的主程序中,当停止子程序调用时,如果定时器已经激活正在计时,停止调用这个子程序会造成定时器的失控。不管此时定时器前面的激活条件如何变化,定时器(1ms、10ms 时基的)会一直走到最大值,定时器输出也会在达到设定值时接通;(100ms 时基的定时器会在上述情况下停止计时,但在逻辑上处于失控状态)。
如果用 sm0.0 调用子程序;或者在控制逻辑的时序上做到能够保证定时功能完整执行,定时器会正常运行。使用条件调用含有定时器的子程序时,一定要注意时序逻辑,以免造成程序运行错误。
常见问题
1.利用定时器定时的程序,在编译报错“指令操作数的存储器寻找范围无效”?
这种情况往往是调用的定时器号与定时器类型不配合造成的。参见上面的表格,如t7只能用作tonr,而不能用于ton或tof。
2.为什么子程序中的定时器和计数器不工作或者工作不正常?
如果有下面情况产生:
a.一个在内部使用了定时器或计数器的子程序,在同一时刻被调用了多次
b. 相同编号的定时器或计数器被多个子程序使用,且同一时刻这些子程序有两个或者以上被调用
则定时器或者计数器资源会因重叠使用而相互影响,造成程序逻辑等方面的错误。
,