问题:
如何在不使用“S7 Timer” 的条件下为“S7”创建一个定时器?
解答:
“S7 CPU” 有一个时间单元 (TIMETICK),它以毫秒为单位循环地从 0x0 计数到 0x7FFFFFFF。“S7-400 CPU” 和“CPU 318”以“毫秒分辨率”执行此计数,非常精确。其它的“S7-300 CPU” (除 CPU 318 之外) 以 10ms 为计数单位。
“TIMETICK” 还存在于“WinAC”Basic (SoftPLC) 中,以 10ms 为计数单位。
下列概念基于“SFC64” (TIMETICK),它读取“CPU”当前的“TIMETICK”。 这样就可以在不用光“CPU” 的“TIMER 资源”的情况下创建任意数量的定时器。
产生定时的原理非常简单。 如果启动定时,从“CPU” 读取当前的“TIMETICK” 并存储。如果要在随后的某个时刻查询定时器,需要一个功能,该功能计算定时器启动后所经过的时间。
根据此简单的功能,您可以根据需要创建复杂的脉冲和时间功能。
在很多应用中,基于循环的定时能够满足;事实上,出于一致性考虑常常要求使用此种定时。此概念考虑到了这种要求,同时它也适合于毫秒范围内基于调用的定时。
此概念的优势:
- 适用于运行时间;
- 不使用“TIMER” 系统资源;
- 精确的缩放性能 (如示例中的基于循环的,或基于程序调用的,如在启动计时及查询计时的情况下调用 SFC64 );
- 应用使得 FC 可以使用存储器资源 (DW),这样便可以根据需要创建任意多的定时器。
基于循环的 TIMER 的结构
产生定时的基础是“CPU”的“TIMETICK”。对于基于循环的定时,每个周期读取一次“TIMETICK”便足够,将读取的结果保存,使其可以被所有 (FB、FC) 应用访问。重要的是,循环的读取可以节省循环时间。在每个周期中,不必对每个定时器都调用“SFC64 ”。