在《求个最简洁的》题目下,我有一个写给<winter938 >网友参考的程序片断(如图1所示)。其程序的构思虽比较简单,但是也有些人在阅读时不动脑筋而对程序的功能理解出了偏差。现在我用图解的方式来讲解,尽量用初学者都能懂的形式把程序的功能讲清楚。
下面这个图1 就是用于实现(在PLC进入RUN状态已达3秒之后)“在任意不足3秒的时间段内,若X1输入的脉冲前沿达到3个,则输出Y1,从X1的任意一个输入脉冲前沿起,3秒以内达不到有3个输入脉冲前沿出现,则停止Y1。”这一目标功能的程序片断:
(图1)
这个片断虽不够是“最简洁的”,但是,它却是能正确实现上述目标功能的程序片断。在程序构思上比较符合一般人的思维顺序,比较容易使人理解。
<winter938 >在№46楼这样说:“我认为100ms的分辨率并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿"滴哒"运行,而是告诉计时器每隔0.1秒就该加1了,且只在累计够0.1秒时间后的扫描周期中进行. ”
<winter938 >在№59楼又这样说:“我从不认为每个定时器需要一个硬件时基,并且同意你的说法是同一个时基分频而得到多个时基给对应的多个定时器共享,关键是PLC本身的系统程序如何使各定时器来对这些时基进行计数”
---------------------------------------------------
<938>的两个回帖内容放在一起,显得有点矛盾。46楼的说法让我误会了!让我以为<938>的这句“并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿"滴哒"运行,”是对占空比为50%的“100ms时钟作为给计时器当前值增1的信号”持有异议!
原来<938>是用“并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿"滴哒"运行”这样的语句来表达:“同意”<Wanggq>的“系统中有一个占空比为50%的周期为100ms的时钟脉冲客观存在着,并将它作为100ms计时器的时基单位”这一观点的啊?!
嘿嘿,没关系的啦!任何人的观点都是可以质疑的呀!我这个人是坚持“真理”的,但决不是坚持“错误”或靠“诡辩”来掩盖“错误”的人。只要是我的观点有错误或者是帖子内容中有误笔,我是会坦然承认的!比如:《图1》所示的梯形图最初贴出来的时候,由于粗心落掉了一个“=”字符,可造成最初3秒之后的第1个脉冲会使Y1误输出。<robotH >一提出“有问题,脉冲出现在0.0秒Y1有输出”,我立马就向网友们道歉了!并说明了Y1在0.0秒产生误输出的原因。但是,在2.0、4.0时刻分别输入第2个、第3个脉冲是绝对不可能使<图1>所示程序产生“误输出”的!所以,一码归一码,我是要坚持证明这一点的!
在提出异议时,最好要想仔细,要有理有据的提出质疑。没有证据只凭“空想”得出的“结论”实在是经不起实践检验的!
引用<winter938 >的内容:
“程序中DM1设置一个扫描周期中条2至5的循环次数以调节扫描周期长度,1003,1004分别观察TIM1,2和TIM20,21的动作同步性,当DM1设为400的时候扫描周期达到27毫秒,可以明显观察到1001和1002即TIM1和TIM2动作不同步。”
<Wanggq>的回复:
TIM 1 和 TIM 2 动作明显不同步能说明什么问题?两个定时器线圈的驱动虽然采用同一个“位元件0.00”,但是,它们是在程序中的不同位置驱动的,而且这两个位置发生的扫描运算时刻有较大的差异。所以,它们各自在运算线圈驱动时刻对应同一个“时基”方波的“相位”就明显不同!
俩计时器开始计时的起点不同,因而当然的造成它们的当前值计数器内容的“改变”不同步!这个“不同步”并不是表明了它们各自的“时基标准”不同步!它们所依据的“时基”本质上就是同一个“时基”!
(还要申明一下:三菱FX与欧姆龙CPM1A的计时器运行机制是不同的,前者的当前值计数器是“加法动作”,而后者是“减法动作”。)
<winter938 >的这两个帖子到底表达了一个什么观点呢?
是在同意<Wanggq>的“PLC系统中有一个占空比为50%的周期为100ms的时钟脉冲客观存在着,并将它作为100ms计时器的时基单位”这一观点吗? 如果是,那么就等于是否定<winter938 >在46楼说的:“我认为100ms的分辨率并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿"滴哒"运行,而是告诉计时器每隔0.1秒就该加1了 ”
在小学的语文功课里,我们就练习过用“并不是………而是………”造句。小学语文老师讲过:“并不是………而是………”这样的句型是用来表达“在否定的基础上加以纠正”之意思的,并带有“反驳”的意味。
我手头也没有欧姆龙PLC实体,不便以欧姆龙PLC做载体给你设计一个实验程序。即便是欧姆龙PLC,它的各个分辨率的计时器“时基”信号也都是“占空比50%”的方波。
下面是欧姆龙PLC-《CPM1A操作手册》第7章、第2节相关内容的照片(№116页)
其中就有描述“254.00,254.01,255.00,255,01,255.02”这5个不同分辨率的“时基”信号,它们都是占空比50%的方波。
“255,00”是0.1秒时钟脉冲,图表中用括号引出:(0,05秒ON / 0.05秒OFF)。这就是《CPM1A操作手册》告诉我们的0.1秒周期时钟脉冲是50毫秒ON时间的依据。<winter938 >如果认为它不是“50毫秒ON时间”,就请<winter938 >网友举出一个实在的“反例”来推翻《CPM1A操作手册》的这个描述吧!
<winter938 >的这个测试1 和他在№49楼的“50ms有时够跑数个扫描周期了,那岂不是要计数多次?”这个疑问相互呼应。说明了<winter938 >对定时器的“当前值计数器”动作原理的误解是:在驱动条件为ON期间定时器线圈每被扫描运算一次,“当前值计数器”就像是<INC>指令那样“增1”一次。所以他才认为子程序在一个扫描周期里调用了3次,就该有3次“增1”,而实践的结果不是以3增加,他就误以为找出了三菱FX《100mS计时器原理框图》的破绽!
其实,三菱FX上的定时器“当前值计数器”的动作原理和普通计数器指令的工作原理是一样的,只在驱动条件ON的“前沿”才计数一次。即便这个ON持续500毫秒、又假设程序扫描周期只有1毫秒,在500毫秒时间里,它也仅只计一个“1”而已!决不是<winter938 >误解的那样要计500个“1”!
(重申一下:三菱FX与欧姆龙CPM1A的计时器运行机制是不同的,前者的当前值计数器是“加法动作”,而后者是“减法动作”。所以,不能对欧姆龙CPM1A的程序中的 TIM 01 说它的当前值没有按什么数字“增加”。)
我贴在№77楼的实验片断太简单了,主要是考虑到照顾一下№74楼的 <ye191255859 > 这类人的思维!他们但凡看到文字稍微多了几个,或者看到梯形图稍微多了几行就会觉得太复杂,觉得是把问题复杂化了!因而他们便觉得很困惑!所以,为了不致让他们困惑,我仅仅只用了一行梯形图程序来表达。
但是,光有这一行梯形图程序,另有一些人不喜欢动手去实践,也可能会觉得不好理解:你那C0上的当前值“300”代表着什么呢? 所以,我又用了一点点文字来加以说明。如果<ye191255859 >网友觉得这些用于说明的文字也把问题复杂化了,那就建议您撇开“说明文字”单看那一行梯形图。