S7-1200使用定时器时,必须先指定一个定时器数据结构,否则无法使用,定时器的数据结构创建有3种方法:在全局数据块中创建,在单重背景数据块中创建,在多重背景数据块中创建。其中全局数据块中创建的定时器结构只适用于LAD指令,多重背景数据块中创建的定时器结构只适用于FB编程中。
1) 定时器数据结构创建
1.1 全局数据块中创建

说明:可在标准或优化调用的全局数据块中创建定时器数据结构,但是在优化的数据块中创建数据结构时可分别对每一变量设定“保持”特性。
1.2 创建FC或FB时在单重背景数据块中创建

说明:在FC中调用IEC定时器(只能是创建单重背景数据块)或在FB中以单重背景创建定时器数据结构时出现以上画面,其会创建一个背景数据块,数据块中只包含一个定时器数据结构。
如上图,在FC中调用定时器时,会创建一个单重背景数据块IEC_Timer_0_DB(数据块命名可自行更改),此数据块只包含一个定时器数据结构,如图30所示。
注意与全局数据块中创建的定时器数据结构对比,其无变量名及数据类型。

1.3 多重背景数据块中创建定时器数据结构


说明:在FB中调用定时器时,可选择以多重背景创建数据块,此时数据块与FB共享其背景数据块,并且定时器数据结构就创建在静态变量区,从图32可看出,有定时器变量名及数据类型,如同在全局数据块中创建一样,定时器变量数据类型为“IEC_TIMER”。
如果是在SCL编程语言时,调用定时器如上所选多重背景数据块,则在FB静态变量区的定时器数据结构类型与LAD下有所不同,其类型为“TON_TIME”或“TOF_TIME”,“TP_TIME”,“TONR_TIME”,依调用时所选定时器不同而不同。

2)在程序中对定时器进行编程
创建了定时器数据结构,如何在程序中进行使用?依据编程语言及所选用的定时器数据类型不同而不同,以下分几种情况进行说明:
2.1 LAD中调用
LAD中调用定时器时,若是调用的是IEC定时器,会首先要求创建背景数据块(因IEC定时器属于SFB),创建相应的单重或多重背景数据块后,自动在指令上填写所创建的数据结构(若为单重,则为背景数据块名,若为多重,则为静态变量区变量名),如图34所示。

此定时器背景数据块可更改为在全局数据块中预先定义的数据结构名,编译可通过,如下图36所示。
此种定时器调用时需指定定时器名,启动位,预定义时间及当前值存储器。
在LAD中还可以调用另一种类型定时器,即线圈型定时器,此定时器调用时与前述定时器不同,只需指定定时器名(即数据块名),启动位及设定时间,如下图所示:

以上调用线圈型定时器时数据块也可不用全局DB中预先定义的定时器数据结构,选用单重背景数据块(FB或FC中)或多重背景数据块(FB中)也可以,编译可通过,但不知执行时是否有问题。
2.2 SCL中调用
在SCL中调用定时器指令时,会自动将创建的单重背景数据块名称或多重背景数据块的静态变量名插入到调用的指令中,并且不能更改。
与在LAD中调用不同,其需设定参数包含输出位,随后程序中可直接引用。

注意以上区别:单重背景数据块时其定时器类型为IEC_TIMER,故调用时区分定时器种类(以TON等进行区分,但可手动更改如TOF),而多重背景调用时在变量类型中已指定为TON_TIME,故后直接跟参数,但如果在参数接口表中手动更改为TOF_TIME(无选择,只能手动输入)。
这也是为什么不能变更定时器数据块的原因(但是可以在相同数据块定义方式中变更,如图37中数据块名称可变更为“IEC_Timer_0-DB”,因为同属单重背景数据块。
注意:参数“ET”用于存储当前时间,按Step7 V11语法,IEC时间存储器为32位,故只能用DWord数据类型,若为其它数据类型会报错。