timer定时器_博途定时器的使用介绍及举例说明

S7-1200的定时器为IEC定时器,用户程序中可以使用的定时器数量仅仅受CPU的存储器容量限制。

使用定时器需要使用定时器相关的背景数据块或者数据类型为IEC_TIMER(或TP_TIME、TON_TIME、TOF_TIME、TONR_TIME)的DB块变量,不同的上述变量代表着不同的定时器。

注:S7-1200的IEC定时器没有定时器号(即没有T0、T37这种带定时器号的定时器)。

S7-1200包含四种定时器:

· 生成脉冲定时器(TP)

· 接通延时定时器(TON)

· 关断延时定时器(TOF)

· 时间累加器(TONR)

此外还包含复位定时器(RT)和加载持续时间(PT)这两个指令。

指令位置参见图1,定时器引脚参考表1,定时器使用及时序图参考表2。 这四种定时器又都有功能框和线圈型两种,区别参见常见问题3。

4dddbfc99d1579df9a3c691cd4f8a4a1.png

图1 指令位置

1c78e87ea4903b1e9af3e612b3a1476a.png

表1定时器引脚汇总

296529532f7083b50aff72d0763e4260.png
d371b9a7a3551483b6030c0cad77618b.png
e3ca6bc48d4c856e05e486fa9245d610.png
18d53c382c8ed6be5a499a2ab72bc9a9.png

S7-1200 定时器创建

S7-1200定时器创建有以下几种方法:

1. 功能框指令直接拖入块中,自动生成定时器的背景数据块,该块位于“系统块>程序资源”中,参见图2。

96148e5abee4f85abaa43de1044656cd.png

图2 自动生成定时器的背景数据块

2. 功能框指令直接拖入FB块中,生成多重背景,参见图3。

6e2cb8f0242808518696c88a00476d2a.png

图3 多重背景

3. 功能框指令直接拖入FB、FC块中,生成参数实例,从TIA博途V14开始,参见图4。

8264fdc9f8778903677e746c86a7fe11.png

图4 参数实例

4. 在DB块、FB的静态变量、FC和FB的INOUT变量中新建IEC_TIMER、TP_TIME、TON_TIME、TOF_TIME、TONR_TIME(后面四个从TIA博途V11开始)类型变量,在程序中将功能框定时器指令拖入块中时,在弹出的“调用选项”页面点击“取消”按钮,之后将该建好的变量填入指定位置。对于线圈型指令,这是首选方法。

(1) DB块中新建IEC_TIMER等类型变量(LAD/FBD),如果是IEC_TIMER等类型变量的数组,S7-1200从V2.0版本开始支持,参见图5~图7。

daeb41e04884dc4381867f52668de070.png

图5 DB块中的定义

2fa14d5aff46dcadc99557525b4c7698.png

图6 功能框定时器使用

b1387f07428743328f54198bc77c5bae.png

图7 线圈型定时器使用

(2) FB的静态变量中新建IEC_TIMER等类型变量(LAD/FBD)

77b6b9f3cd136bebead6578c7b231279.png

图8 静态变量中定义

(3) FC和FB的INOUT变量中新建IEC_TIMER等类型变量(LAD/FBD),

640d5295586e9f4aab7496d0b022d78f.png

图9 INOUT中定义

(4) 以上三种方法的SCL版本,从TIA博途V14开始支持,参见图10。

c2b6f75044ff73d717f193046fcceba8.png

图10 SCL中使用

从以上4个示例可以看出,IEC_TIMER、TP_TIME、TON_TIME、TOF_TIME、TONR_TIME五种数据类型没有本质的区别,可以互换使用,为使得程序明确,建议只使用定时器对应名字的数据类型。

5. 在插入DB时,选择IEC_TIMER类型的数据块,将该数据块填在指令上方。此种方法生成的数据块等同于第一种的背景数据块,位于“系统块>程序资源”中,从TIA博途V11开始,线圈型指令同样适用,参见图11。

f49a0ab71549f12fe5f1fb0283f1fac3.png

图11 新建IEC_TIMER类型DB

S7-1200 定时器常见问题

1. 为什么定时器不计时?

答:可能原因如下:

(1)定时器的输入位需要有电平信号的跳变,定时器才会开始计时。如果保持不变的信号作为输入位是不会开始计时的。TP、TON、TONR需要IN从“0”变为“1”启动,TOF需要IN从“1”变为“0”启动。

(2)定时器的背景数据块重复使用。

(3)只有在定时器功能框的Q点或ET连接变量,或者在程序中使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET,定时器才会开始计时,并且更新定时时间。参见下图

a2b93f97a1885b1ad00c5ccc3924f902.png
89e220e3d41128309caca6d60b431a83.png
8a4f6d9f6c85d289f8f40fdde485c04d.png
3636a04a0bb82eda7094bdf9c699f9f5.png

2. 如何编程自复位定时器并产生脉冲?

答:正确答案参考下图,同时附上2种常见错误编程方式。

原因:S7-1200的定时器的时间更新发生在定时器功能框的Q点或ET连接变量时,或者在程序中使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET时。即如果程序中多次使用同一背景DB的Q点,或者既使用定时器功能框的Q点或ET连接变量,又使用背景DB的Q点,以上两种情况都会造成定时器在一个扫描周期内的多次更新,可能造成定时器不能正常使用的情况。

3fdd45537d18dbfb76c84c0fb28c5375.png

正确方法的流程,将程序根据指令分为两部分,如图12所示:

731038cbd891d65602643dd55495dbb7.png

图12 分解正确指令

阶段1.初始"DB2".脉冲=False,于是"DB2".脉冲取反为True,触发计时器开始计时,输出的"DB2".脉冲=False,状态不变;定时时间不到,则始终在阶段1;

阶段2.当定时时间到发生在①所处的位置,在TON处定时器更新,Q输出True,因此输出的"DB2".脉冲=True,等到下周期时"DB2".脉冲取反为False,导致输出的"DB2".脉冲=False,等再到下周期时就回到了阶段1;

阶段3.当定时时间到发生在②所处的位置,不影响定时器的更新,需要到下一周期才会改变输出,就回到了阶段2。

从上可知,定时器实现了自复位,并且"DB2".脉冲=True只保持一个周期,形成了脉冲。

以第一个错误方法解释一下为什么这种方法不能实现自复位定时器并产生脉冲,如图13所示,将程序根据指令分为三部分:

dd0fd79bc0815ed9c327071ad423c1f1.png

图13 分解错误指令

阶段1.初始第一行"IEC_Timer_0_DB".Q=False,触发计时器开始计时,第二行,当定时时间不到,"IEC_Timer_0_DB".Q=False保持不变,输出的"DB2".脉冲=False;定时时间不到,则始终在阶段1;

阶段2.当定时时间到发生在①所处的位置,在第一行的"IEC_Timer_0_DB".Q处定时器更新,更新后,"IEC_Timer_0_DB".Q=True,取反为False,此时作为TON的输入,使得定时器复位,第二行的"IEC_Timer_0_DB".Q=False,输出的"DB2".脉冲=False,到下周期时就回到了阶段1;

阶段3.当定时时间到发生在②所处的位置,在第二行的"IEC_Timer_0_DB".Q处定时器更新,更新后,"IEC_Timer_0_DB".Q=True,输出的"DB2".脉冲=True,等到下周期时,"IEC_Timer_0_DB".Q=True,取反为False,此时作为TON的输入,使得定时器复位,第二行的"IEC_Timer_0_DB".Q=False,输出的"DB2".脉冲=False,等再到下周期时就回到了阶段1;

阶段4.当定时时间到发生在③所处的位置,不影响定时器的更新,需要到下一周期才会改变输出,就回到了阶段2。

从上可知无论定时器时间到发生在哪个点,定时器都可以实现自复位,但是只有当定时时间到发生在②所处的位置时,"DB2".脉冲=True只保持一个周期,形成了脉冲,而在①和③时"DB2".脉冲始终为False无法形成脉冲。在正常程序中②的执行时间在整个扫描周期中占比很小,因此只有很低的概率可以实现脉冲。所以不能使用此种方法,第二个错误方法与之类似。

3. 如何使用定时器实现精确定时?

答:不能做到。

举例来说,定时1s的接通延时定时器,当程序扫描到定时器功能框的Q点或ET时或者扫描到背景DB(或IEC_TIMER类型的变量)中的Q点或者ET时,如果时间为997ms,只会继续定时等下一次扫描,而下一次扫描到可能就是1003ms,此时定时器接通。也就是说几乎不可能正好1s接通,如果再配合计数器实现更长时间的定时,误差只会越来越大。

所以精确定时还是推荐使用循环中断(OB30)配合计数器来实现。

4. 定时器指令中,功能框和线圈型的区别?

答:原理上是完全一样的,细微区别:

(1) 功能框定时器上可以定义Q点或ET,在程序中可以不必出现背景DB(或IEC_TIMER类型的变量)中的Q点或者ET;而线圈型定时器必须使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET;

(2) 功能框定时器在使用时可以自动提示生成背景块,或者选择不生成;而线圈型定时器只能通过手动方式建立背景块;

(3) 线圈型定时器如果出现在网络段中间时不影响RLO的变化,如图14所示,"DB46".Static_1和I1.0同步变化。

2c5d51761046ebd075acafd6ff854796.png

图14 线圈型定时器示例

通过上文的介绍,相信大家能对博途定时器有一定的了解,博途IEC定时器还是与S5定时器有区别的,博途IEC定时器需要背景数据块,在使用中会产生很多背景数据块,那么怎么减少背景数据块的使用呢?下面通过一个小例子跟大家一起分享下:

控制功能说明:

b7eca49b86a6689637f176736f8448cb.png

当一辆车到达检票栏杆时,司机按下停车卡按钮PB1(i0.0),栏杆抬起,延迟10s后栏杆自动落下。

根据上述说明:我们用到了定时器10s,按钮I0.0,抬栏杆Q0.0。

下面看看如何编程:

首先建立一个全局数据块,新建 3 个数据类型是 IEC_TIMER 的变量(Timer1、Timer2、Timer3),新建 3 个数据类型是 IEC_COUNTER 的变量(Counter1、Counter2、Counter3),如图15所示

fde64901b922855723f8db636e5a2e76.png

图15

在调用定时器时,会提示生成背景数据块,按取消。如图16所示

7f42a9a9a88c8538766da18c89bf04b1.png

在程序段中的TON指令上面有3个红色问号,点击图中类似文本框的图标,从下拉列表中选择“DB1.Timer”

ba9a896ea15218a1cf24a8e76fc81503.png

结合本例,具体程序如下:

51d08b41f868d504b9fdcc0eb71fc2f1.png

打开仿真器:进行仿真如下:

88e749cb3e66ebb8747c1dca5967093c.png
a9c3cb66adb463a257cc2899142aefed.png
  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值