我们日常编程中在使用定时器后,发现定时器并没有按照自己的意图去计时,出现了不计时的错误,进而怀疑是否是硬件故障,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中的T