我们日常编程中在使用定时器后,发现定时器并没有按照自己的意图去计时,出现了不计时的错误,进而怀疑是否是硬件故障,CPU是否正常等等,浪费了很多的时间去排查,实际上就是由于我们对定时器的特性不了解所造成的误解,下面我们来看看几个例子:

程序设计的本意是:I4.2的上升沿触发T50和T60定时器,并在T60定时结束后复位M12.0。

可是在仿真发现,I4.2可以触发T50和T60定时器,但有时即使I4.2再次将M12.0置位为1,但T50不计时,现象如下图:

问题分析:首先明确不是硬件故障,也不是语句错误引起的,而是定时器使用不正确引起的:

1 某个扫描周期:I4.2的上升沿置位M12.0,I4.2恢复为0

2 数个扫描周期后,假设第N个扫描周期,当T60计时到时,网络2中的M12.0被复位(注意在SD T50语句的后面),此扫描周期末M12.0由1变为0。网络3中的T50和T60被复位。

3 在第N+1个扫描周期,如果此时I4.2恰好出现上升沿,尽管M12.0在上个扫描周期曾经变为0,但在本周期开始就变为了1,定时器T50在上个扫描周期接受到M12.0状态为1,定时器T50在本扫描周期接受的M12.0的状态也为1,所以T50不会工作。

定时器的错误分析如下图所示:

定时器的正确使用应如下图所示:

说的再明白些就是定时器的使用在扫描周期N和N+1之间正确接收到上升沿的变化,这样定时器才会正确工作。

本例中的故障很隐蔽,在我们使用中可能几天运行都不会有定时不工作的情况,突然偶尔出现一次,排查起来很费劲,所以在我们编程中要遵守定时器要想计时工作必须接收到输入端上升沿的变化。

那么遇到这种情况应该怎么改呢?

小编这里提供个思路:可以在置位M12.0之前增加一些限制条件。

另外要说的就是定时器的定时与程序扫描周期

在S7系列CPU中,定时器的最小时基为10ms,也就是说,S7CPU的最小定时时间为10ms,如果用户程序的代码量比较大,程序扫描周期过了10ms可能会出现如下情况:尽管定时时间已经到了,但CPU还没有执行到相关的程序逻辑。

针对这种情况:当用户程序需要非常短的定时功能时,需要考虑程序扫描周期对定时器状态读取的影响,由于CPU中的定时中断是由硬件来保证的,并且高于0B1的优先级,所以这种情况下,考虑使用定时中断功能来替代定时器的功能。

另外的问题就是当编程时遇到CPU提供的硬件定时器不够用的时候,这时候可以使用系统提供的软定时器,例如SFB4,此功能块需要一个背景数据块。

时序图如下:

在使用SFB4的时候要注意的一个问题就是CPU重启后软定时器复位的问题。

由于SFB的定时,计时值存在DB中,由于CPU断电或停机后,DB数据时保持的,如果定时器计时到在停机前已经计时,那么当CPU重新运行后(定时器输入端仍然为1的情况),定时器将会在原来计时位置继续计时,为了避免这种情况的出现,可以在0B100中添加如下语句来初始化SFB4的背景数据块

spring定时器突然不执行了_编程中常常遇到了定时器不工作的问题分析相关推荐

  1. python定时器5秒执行一次_PLC编程之“自切断”定时器

    "自切断"定时器 控制要求] PLC 产品生产线中,一个作业员需同时负责将两条传送带上的产品放入到包装箱里.将一条传送带运行 30 秒后,该条流水线停止传送,另外一条流水线开始运行 ...

  2. 编程基础 垃圾回收_编程中的垃圾回收指南

    编程基础 垃圾回收 什么是垃圾回收? (What is Garbage Collection?) In general layman's terms, Garbage collection (GC) ...

  3. 吴枫 python小课怎么样_编程中,有哪些好的习惯从一开始就值得坚持?

    电影<喜剧之王>里,周星驰饰演的尹天仇,是一个渴望成为真正的演员,却不断沦为落魄跑龙套的小人物. 即便如此,他对演戏的态度始终认真而可敬.他每天不但锲而不舍寻找演戏机会,还在街坊福利社开了 ...

  4. 找不到libmmd.dll无法继续执行代码_代码中的软件工程 - xieyupei

    ------------恢复内容开始------------ 本博客基于孟宁老师的menu项目案例,以VS Code + GCC运行环境.对代码开发中的软件工程思想做出一些思考. 相关资料: 项目源码 ...

  5. 最简单的python语言程序设计_编程中最简单的语言Python,这样学或许更容易

    最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...

  6. spring定时器突然不执行了_非标自动化设备之PLC定时器的时间和程序扫描周期

    扫描周期是PLC本身执行指令时的周转时间.PLC执行指令按梯形图是从左向右,从上到下执行.每执行一遍就顺便扫描一遍所有元件状态并按指令执行相应动作.这个是需要时间吧,把这个时间叫扫描周期. 并如此无限 ...

  7. c专家编程/c陷阱_编程中的进取陷阱

    c专家编程/c陷阱 "Gumption traps" are a term introduced by Robert M. Pirsig in Chapter 26 of Zen ...

  8. 可编程电子安全相关系统_编程中的安全生态系统概述

    可编程电子安全相关系统 就像近年来的情况一样,安全漏洞已越来越被接受. 仅以最近的Equifax违规为例. 无论我们在哪里看,似乎总有人会遭受某种形式的恶意攻击或其他形式的攻击. 尽管我们最近想到了最 ...

  9. python开发应用程序错误怎么办_编程中遇到的Python错误和解决方法汇总整理

    开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析,并持续更新,方便以后查询,学习. 知识在于积累嘛!微笑 +++++++++++++++++++++++++++++++++ ...

最新文章

  1. 【PHPWord】从模板创建Word
  2. 关于滴滴智能调度的分析和思考
  3. 文本超出显示省略号/数字英文字母折行有关css 属性/显示两行,第二行省略号显示css方法...
  4. 远洋整站下载器不能用https_这可能是最全最好的爆破百度文库下载指南了!
  5. HBase、Redis、MongoDB、Couchbase、LevelDB 五款主流NoSQL数据库大比拼
  6. VS2015新建C++工程时,Object reference not set to an instance of an object
  7. C#9.0 每个开发人员都必须知道的4个特性
  8. 历久弥新 - 微软万亿市值背后的文化支撑(下)|DevOps案例研究
  9. C#面向对象设计模式第二讲:Singleton Pattern单件模式(创建型模式)
  10. 万字教你如何用 Python 实现线性规划
  11. 【u107】数字游戏(bds)
  12. mysql 导入导出 csv_mysql文件导入导出为csv格式
  13. 关于诺顿误杀系统文件的解决方法
  14. 打开计算机 显示不支持此接口,不支持此接口,教你如何解决电脑Windows系统显示不支持此接口...
  15. STK X教程—C++/CLI
  16. 国际标准智商测试题答案
  17. ID卡线圈和IC卡线圈的区别
  18. 使用JBE(Java Bytecode Editor)修改Java字节码
  19. RepVGG: Making VGG-style ConvNets Great Again
  20. HTML超好看樱花飘落404页面源码+带时间

热门文章

  1. 02、Kubernetes 入门(上)-重新认识Docker
  2. requests.get(url)执行没反应_翟至宇:执行路上,从未停歇
  3. linux下gem卸载,gem 安装卸载pod
  4. 问题 E: 小鱼的数学问题(递推)
  5. layui 日期重置_日期时间插件--日期时间组件文档 - layui.laydate
  6. java web教学大纲_《JAVAWEB程序设计》教学大纲.pdf
  7. getprofile()获取不到路径_做一款RPG游戏,几乎都会用到的Python坐标最短路径计算...
  8. 独家下载!2021前端热门技术解读
  9. 从 Android 到 Java:如何从不同视角解决问题?
  10. 聊聊《战魂铭人》的游戏设计