在《求个最简洁的》题目下,我有一个写给<winter938 >网友参考的程序片断(如图1所示)。其程序的构思虽比较简单,但是也有些人在阅读时不动脑筋而对程序的功能理解出了偏差。现在我用图解的方式来讲解,尽量用初学者都能懂的形式把程序的功能讲清楚。
下面这个图1 就是用于实现(在PLC进入RUN状态已达3秒之后)“在任意不足3秒的时间段内,若X1输入的脉冲前沿达到3个,则输出Y1,从X1的任意一个输入脉冲前沿起,3秒以内达不到有3个输入脉冲前沿出现,则停止Y1。”这一目标功能的程序片断:
(图1)
这个片断虽不够是“最简洁的”,但是,它却是能正确实现上述目标功能的程序片断。在程序构思上比较符合一般人的思维顺序,比较容易使人理解。
对应于楼上这个试验程序的测试数据如下:
<robotH>网友的测试片断采用设置分辨率“临界点”去考验PLC计时器的分辨率,不仅仅能够让图1所示的程序片断发生测试误差,对于所有的采用相同分辨率(100ms)计时器的程序片断都不可避免的会发生测试误差!譬如<robotH>网友自己在《求个最简洁的》第32楼的那个片断也一样在“期望值5.1秒时刻”Y1发生误输出。但是,<robotH>网友就没有认为这是“程序有问题”,他在紧接的第33楼说他“在PLC上做了验证,没有问题”:
在“期望值5.1秒时刻”Y1会输出,确实不是“输入脉冲密度判别”之程序片断的“问题”。但是,<robotH>网友的这个片断却确确实实的存在“当输入脉冲密度下降后,Y1继续有输出”的毛病。从第3# 输入脉冲起计算的3秒时间内第4#输入脉冲以后仍然没有出现第5#输入脉冲的情况下Y1没有停止其输出。