在《求个最简洁的》题目下,我有一个写给<winter938 >网友参考的程序片断(如图1所示)。其程序的构思虽比较简单,但是也有些人在阅读时不动脑筋而对程序的功能理解出了偏差。现在我用图解的方式来讲解,尽量用初学者都能懂的形式把程序的功能讲清楚。
下面这个图1 就是用于实现(在PLC进入RUN状态已达3秒之后)“在任意不足3秒的时间段内,若X1输入的脉冲前沿达到3个,则输出Y1,从X1的任意一个输入脉冲前沿起,3秒以内达不到有3个输入脉冲前沿出现,则停止Y1。”这一目标功能的程序片断:
(图1)
这个片断虽不够是“最简洁的”,但是,它却是能正确实现上述目标功能的程序片断。在程序构思上比较符合一般人的思维顺序,比较容易使人理解。
<Winter938>说“50ms有时够跑数个扫描周期了,那岂不是要计数多次?”。难道<Winter938>以为“数字电路中的计数器”不是“边沿触发型计数器”?
在№27楼的《计时器框图》中<计数器>的计数输入端是一个“与门”。当计时器的驱动条件“M0”与“100ms时钟脉冲”都为ON状态时,该“与门”的输出为ON,(从M0驱动计时器线圈的第2个扫描周期开始,在运算计时器线圈指令的时刻)这个“ON前沿”立刻触发<计数器>增1,随后在这个“ON”的持续时段里,ON状态都不可能使 <计数器>不停的“增1”!所以,不管PLC跑了多少个扫描周期,一个50ms的脉冲也只仅能触发<计数器>产生一次“增1”!
在实践中,我们有时也会用如下所示的片断来虚拟一个“计时器”:
LD M0
AND M8012
OUT C0 K30
然后在需要的地方再插入“RST CO”的片断。这就构成了一个可以累积(间断)定时为3秒的计时器。
请大家看清楚:这个“使用了0.1秒分辨率定时器的程序的扫描周期就应该控制在50ms以下? ”是<winter938 >在№49楼的提问。
应该说是如果程序中前后两个0.1秒分辨率的定时器被扫描的时刻相隔超过50mS,一个处在时钟方波的“ON半周”另一个处在“OFF半周”,那就必定是这一扫描周期里一个计了数,另一个却未计到!
如果程序中有100mS计时器或使用100mS时基的回路,就应该力争把扫描周期尽可能控制在小于100mS以内,这样才能保证使用100mS时基的回路或定时器的准确动作!这就是我一贯提倡“在保证目标功能正确实现的前提下力争把程序写得很简洁”的原因之一!
引用<winter938 >的内容:
“我认为100ms的分辨率并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿‘滴哒’运行,而是告诉计时器每隔0.1秒就该加1了,且只在累计够0.1秒时间后的扫描周期中进行”
----------------------------------------------------------------------------------------------------------------------------------
回复:
你这句“而是告诉计时器每隔0.1秒就该加1了,” 是否在表达PLC中的100ms定时器当前值是“线性”的增加?(譬如,从计时器被驱动开始,经0.1秒的时间该计时器的当前值为“1”,则经0.02秒的时间该计时器的当前值为“0.2”?)
在反驳别人的观点时,应该注意提供实在的证据!
引用<winter938 >的内容:
“我认为100ms的分辨率并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿‘滴哒’运行,而是告诉计时器每隔0.1秒就该加1了,”
----------------------------------------------------------------------------------------------------------------------------------
回复:
你这句“而是告诉计时器每隔0.1秒就该加1了,” 是否在表达PLC中的100ms定时器当前值是“线性”的增加?
在反驳别人的观点时,应该注意提供实在的证据!
所有的数码产品都离不开“时钟信号”。为了保证时钟信号的稳定和准确,都要用石英晶体振荡器来对“时基”信号源稳频。
如下所示的照片是一块FX1s的CPU板。其CPU芯片正下方的一个元件就是一块固有频率为20MHz的“晶振”:
同一块PLC中的所有计时器的“时基”都来自于CPU的“时基”,经过各级“分频”得到几个不同周期单位的(都是50%占空比的)“时钟脉冲”。分别供给同一分辨率的各个计时器共享。这些“时钟信号”客观的存在于PLC中,只要PLC已经上电,不管它是处于RUN,还是处于STOP,也不管PLC用户程序中用没用到“计时器”,各种“时钟信号”都在按步就班的运动着。当PLC程序扫描到计时器线圈指令时,系统程序就把相应分辨率的“时钟信号”跟“驱动条件”的“与”结果用来触发该“计时器”的<当前值计数器>。
一块FX1s中有64个计时器;一块FX2n中有256个计时器;一块FX3U中有512个计时器。如果按<Winter938>空想的那样每个计时都各自单独具备一个(并不是50%占空比的)时基源来线性的增长计时器的<当前值>。可以想象:一块PLC的硬件电路里要做好大一堆定时器的电路啊!光考虑保证时基稳定性的“晶振”元件就是一大堆!!