在《求个最简洁的》题目下,我有一个写给<winter938 >网友参考的程序片断(如图1所示)。其程序的构思虽比较简单,但是也有些人在阅读时不动脑筋而对程序的功能理解出了偏差。现在我用图解的方式来讲解,尽量用初学者都能懂的形式把程序的功能讲清楚。
下面这个图1 就是用于实现(在PLC进入RUN状态已达3秒之后)“在任意不足3秒的时间段内,若X1输入的脉冲前沿达到3个,则输出Y1,从X1的任意一个输入脉冲前沿起,3秒以内达不到有3个输入脉冲前沿出现,则停止Y1。”这一目标功能的程序片断:
(图1)
这个片断虽不够是“最简洁的”,但是,它却是能正确实现上述目标功能的程序片断。在程序构思上比较符合一般人的思维顺序,比较容易使人理解。
本人遇到一奇怪问题,用的是深圳公元科技有限公司的32点板型PLC,该PLC用的是三菱的编辑软件。
程序中用了M8014分钟时钟继电器,按理说,该继电器应该是30秒ON,30秒OFF。可运行中发现,M8014震荡的特别快,经现场监控(与标准时钟比较),发现M8014在一分钟内有两次上升沿,由此导致在0.5小时内,M8014就产生了60脉冲。
无奈,只好将错就错,把程序中60秒改成120秒,运行时间才算正常。
后咨询了深圳厂家,厂家也说不可能,说是应该与日本三菱的一样,即30秒ON,30秒OFF。但实际情况就这样。
以下是修改后的计时程序:
我把<winter938 >在№62楼的测试S7 200的0.1秒分辨率定时器的图片整理成左右对比的形式:
我把<winter938 >在№62楼的测试S7 200的0.1秒分辨率定时器的图片整理成左右对比的形式:
我对这个西门子S7-200上的实验有几点看法:
1、用这个实验的现象还构不成否定三菱FX系列的《100mS计时器框图》所表达的对应计时器原理的理由。
2、在一个非SFC程序或非跳转的程序里重复的对同一个计时器进行驱动是没有实用意义的,犯了“双线圈”错误。即便是用来说明不同PLC有不同的内核编译程序,不同的PLC在计时器运行机制上有差异。也不能因此说西门子计时器的当前值就不是对“时基信号”进行计数来实现的计时。
3、如果把这个 S7-200 监视图片上的内容移植到三菱 FX1S 上,我们就能看到在三菱 FX1S 上,T37 同样还是在一个程序里有两处驱动,但是,它的当前值仍然和程序中只有一处驱动的T38 一样正确的对 100mS 时基信号计数(见下图所示):
在这一点上,FX1S 是不是要比S7-200 优良一些呢?!我看FX1S在这一点上确实是要优良一点!
<winter938 >网友在№67楼引用《FX1s,FX1n,FX2n,FX2nc编程手册》第46页<定时器动作的细节与定时器的精度>的内容来表达什么观点呢?
<winter938 >网友在№67楼的帖子内容如下图所示:
<winter938 >网友用红色下划线凸出这句“中断执行的1mS定时器在执行线圈指令后,以中断方式对1mS时钟脉冲计数。”是要说明一个什么观点呢?
我们并没有说过1mS定时器的计时原理不是以中断方式对1mS时钟脉冲计数!它以中断方式对1mS时钟脉冲计数并不代表1mS时钟的“占空比”不是50%嘛,它仍然还是跟100mS时钟一样为“占空比等于50%”!只是1mS定时器在线圈驱动之后开始的计时动作不受程序扫描周期的影响而已。请网友们注意:<winter938 >用红线勾划出来的这句解释中所提到的“中断执行”及“中断方式”都不是指“中断程序”的意义!《编程手册》所指的原本的意义是:1mS定时器的当前值计数动作是独立于用户程序之外的,由专用的硬件电路来完成的。
这个《编程手册》第46页的内容并不与《100mS计时器框图》发生矛盾。这个1mS定时器的计时原理完全不能够用来否定《100mS计时器框图》!
科学技术上的林林总总的“说明”形式是分层面的。有时需要从宏观的层面上概括的说明,有时又需要从微观的层面上深入的说明。而这“宏观”与“微观”的概念又是相对的,没有绝对的“宏观”与“微观”的划分。
《编程手册》第44页中关于定时器<功能>的“说明”相对于第46页中关于<定时器动作的细节与定时器的精度>的“说明”来讲,前者是“宏观”的,而后者是“微观”的。
前者是这样描述定时器的:
“定时器累计可编程控制器内的1mS,10mS,100mS等的时钟脉冲,当达到所定的设定值时输出触点动作。”
而后者是这样描述定时器的:
“除了中断执行型的定时器外,在线圈驱动后,定时器开始计时,在计时完了后的最初的线圈指令执行时,输出触点动作。”
这两者的“说明”文字虽然不同,但我们也不能因此把前后两个“说明”看成是矛盾的,以一个“说明”去否定另一个“说明”!它们的“不同”只是“描述”所依从的“层面”不同而已。
更何况,《编程手册》第46页关于“中断形式执行”的1mS定时器计数动作并不是对10mS、100mS的定时器讲的,怎么能用“中断形式执行”来否定《100mS计时器框图》所表达的普通定时器的计时原理?!
我在№27楼贴出《100mS计时器框图》来说明三菱FX系列PLC的100mS计时器的工作原理,相对于《编程手册》第44、第46页上对100mS定时器工作原理的说明又细致了一些。而且是与《编程手册》有别的,从不同的“角度”的“描述”。
当然,《框图》仍是一个粗略的描述方法。有些更加细微的细节仍然没有给细致的描述出来。譬如:当最初扫描运算计时器线圈指令时的一个周期里,即使驱动条件M0跟100mS时钟脉冲的“ON半周”的“逻辑与”结果为“1”,计时器的“当前值计数器”也不会立即计数,要等第2个周期里运算定时器线圈时若这个“逻辑与”结果仍为“1”时才开始计第1个“1”。不过,当程序很简短时,一个扫描周期的时值是微不足道的,我们为什么就不可以忽略它的这个微不足道的差别呢!
我们把《编程手册》第44页的关于“一般用”的定时器的描述提出来:
这个“说明”的定时器时序图,因为它是粗略的表达,所以给很多人造成误解:以为在设定值范围内定时器当前值的改变是完全“线性”的(意思是指:当计时开始后,时间在横坐标上经过1个时钟单位,则当前值在纵坐标上就上升1个数字单位;那么,按照“线性函数”的性质,时间经过0.1个时钟单位,则当前值在纵坐标上就上升0.1个数字单位)。误认为当前值的斜线是一条没有“阶梯坎坎”的直线段。
其实,从“微观”的层面上观察PLC定时器的当前值曲线是一条“阶梯状折线”。从“宏观”的层面上看时它给我们的印象才是一条“直线段”。