TIA博途中编写的定时器Timer为什么不工作?

本文探讨了在TIA博途中遇到定时器Timer无法正常工作的问题,指出可能的原因包括手册中提到的关于Q和ET输出更新条件,即只有在输出ET或Q互连时,或者访问Q或ET时,定时器状态才会更新。解决方法可能涉及检查并确保正确触发这些更新条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TIA博途中编写的定时器Timer为什么不工作?

如下图所示,有小伙伴有疑问:

在程序中使用的定时器,可就是不工作,用了静态变量来作为背景数据块也不行?

1
针对上图的例子可能有2个原因导致

1.DB10这个IEC背景数据块可能在其他地方被复用。
2.参数Q和ET至少有一个需要连接变量,如果两个都不连接变量,Q和ET是不会更新的。

使用手册里是这样写的

Q 和 ET 输出的实际值在以下情况下更新:

当输出 ET 或 Q 互连时,调用该指令。

访问 Q 或 ET。

值得注意的是:</

当然可以,使用(Step7 TIA Portal)中的程序块,我们可以将上面的逻辑分解成几个关键步骤。这里提供一种可能的实现方案: 1. **初始化定时器和计数器**: - 使用`START`和`STOP`命令创建一个计数器(`Counter`),初始值为0,并将其连接到I0.0触点。 - 创建一个定时器(`Timer`),例如`Timer_Interval`,并设置其预设值为25秒。 2. **触点编程**: - 使用`IF`指令监控I0.0触点。当触点首次激活(计数器从0变为1),启动定时器,并清零计数器。 3. **比较定时器**: - 使用`TIMER_EXPIRED`信号检测定时器是否到期。如果到期,检查计数器的当前值和上次触发之间的时间(通过减法或定时器的剩余时间)。 4. **报警逻辑**: - 使用`ALARM`或`OUTPUT`指令来实现报警逻辑。比如,在满足特定条件时,发送报警信号,并可能增加或减少报警持续时间。 5. **控制流程**: - 根据定时器的剩余时间和计数器的值,调整流程走向。如果未到25秒就触发了第二次,跳转至相应警报处理部分;否则,继续下一轮循环。 6. **循环结构**: - 结合`LOOP`和`ENDLOOP`构建无限循环,保证程序能够持续运行并根据新的触发事件进行调整。 以下是部分FB代码示例(请注意,的具体语法可能会略有同): ```S7-Code FB1: BEGIN Counter(IN=I0.0, OUT=Counter_Count); Timer(TIMER=Timer_Interval, TIMER_PRESET=25000); // 假设单位为毫秒 IF Counter_Count = 1 THEN Timer_Start(); Counter_Reset(); ENDIF WHILE TRUE DO IF TIMER_EXPIRED(Timer) THEN IF Counter_Count < 2 THEN ... (执行报警逻辑) Timer_Reset(); // 清除定时器以防误报警 ELSE ... (处理超过25秒的情况) ENDIF ENDWHILE END. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AAA_自动化工程师

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值