编程思想的图解(深入浅出) 点击:4823 | 回复:111



wanggq

    
  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-09-27 14:25:38
楼主

 

  在《求个最简洁的》题目下,我有一个写给<winter938 >网友参考的程序片断(如图1所示)。其程序的构思虽比较简单,但是也有些人在阅读时不动脑筋而对程序的功能理解出了偏差。现在我用图解的方式来讲解,尽量用初学者都能懂的形式把程序的功能讲清楚。

 

  下面这个图1 就是用于实现(在PLC进入RUN状态已达3秒之后)“在任意不足3秒的时间段内,若X1输入的脉冲前沿达到3个,则输出Y1,从X1的任意一个输入脉冲前沿起,3秒以内达不到有3个输入脉冲前沿出现,则停止Y1。”这一目标功能的程序片断:

                      (图1)

 

  这个片断虽不够是“最简洁的”,但是,它却是能正确实现上述目标功能的程序片断。在程序构思上比较符合一般人的思维顺序,比较容易使人理解。

 




winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-09 17:33:01
61楼
顺便做了测试1,在一个扫描周期中3次调用含有0.1秒分辨率的定时指令的子程序,观察到定时器的当前值不是以3增加.TIM0和TIM1是同步动作的.

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-09 18:17:58
62楼

另外测试了S7  200的0.1秒分辨率定时器,发现它和CPM1A运行机制不同,附图片参考,感觉没机器测试的确不能想当然.

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-10 08:20:39
63楼

<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计时器的时基单位”这一观点的啊?!

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-10 13:39:28
64楼

 

  我又翻阅了一下《FX1s,FX1n,FX2n,FX2nc 编程手册》关于定时器(即:计时器)的章节。这《编程手册》也把这定时器功能说得很清楚:定时器累计可编程序控制器内的1ms,10ms,100ms等的时钟脉冲,当达到所定的设定值时输出触点动作。

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-10 14:00:06
65楼
引用<winter938> 的:

  “关键是PLC本身的系统程序如何使各定时器来对这些时基进行计数,”


 


 

  
  回复:


  在PLC用户程序扫描到计时器线圈指令时,PLC系统程序就把系统内的“时钟脉冲”跟计时器“驱动条件”的“逻辑与”结果的输出前沿去触发计时器的“当前值计数器”。

 

  “如何使计时器对时基进行计数”,这在第27楼的《100mS计时器框图》中已经表达得很形象、很清楚了:

  只是这张图片由工人出生的老王贴出来,<938>就有点怀疑不能用这张《100mS计时器框图》去解释100ms定时器的运行机制了!

 

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-10 14:12:31
66楼
我觉得你太过敏了,你看看我贴的S7 200的图片,两次使用同一定时指令其当前值的变化和CPM1A的就不同,所以把时基丢开不说仍可以发现他们的定时运行机制并不同,FX的我没机器测试再不敢怀疑你的说法.

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-10 14:16:43
67楼

另外1毫秒级的定时器运行机制应该是定时中断刷新,0.5毫秒的ON时段恐怕一般手段检测不到.

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-10 20:56:01
68楼

 

  嘿嘿,没关系的啦!任何人的观点都是可以质疑的呀!我这个人是坚持“真理”的,但决不是坚持“错误”或靠“诡辩”来掩盖“错误”的人。只要是我的观点有错误或者是帖子内容中有误笔,我是会坦然承认的!比如:《图1》所示的梯形图最初贴出来的时候,由于粗心落掉了一个“=”字符,可造成最初3秒之后的第1个脉冲会使Y1误输出。<robotH >一提出“有问题,脉冲出现在0.0秒Y1有输出”,我立马就向网友们道歉了!并说明了Y1在0.0秒产生误输出的原因。但是,在2.0、4.0时刻分别输入第2个、第3个脉冲是绝对不可能使<图1>所示程序产生“误输出”的!所以,一码归一码,我是要坚持证明这一点的!

 

  在提出异议时,最好要想仔细,要有理有据的提出质疑。没有证据只凭“空想”得出的“结论”实在是经不起实践检验的!

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-11 13:47:35
69楼

 

  请<伪通>(魏东)不要进来捣乱!否则……         

     

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-26 14:36:14
70楼

 

引用<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的计时器运行机制是不同的,前者的当前值计数器是“加法动作”,而后者是“减法动作”。)

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-26 14:55:02
71楼

 

 <winter938 >的这两个帖子到底表达了一个什么观点呢?

  是在同意<Wanggq>的“PLC系统中有一个占空比为50%的周期为100ms的时钟脉冲客观存在着,并将它作为100ms计时器的时基单位”这一观点吗? 如果是,那么就等于是否定<winter938 >在46楼说的:“我认为100ms的分辨率并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿"滴哒"运行,而是告诉计时器每隔0.1秒就该加1了 ”

  在小学的语文功课里,我们就练习过用“并不是………而是………”造句。小学语文老师讲过:“并不是………而是………”这样的句型是用来表达“在否定的基础上加以纠正”之意思的,并带有“反驳”的意味。

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-26 15:33:02
72楼

           

  我手头也没有欧姆龙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操作手册》的这个描述吧!

          

yuming1231

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 7回
  • 年度积分:0
  • 历史总积分:47
  • 注册:2010年11月17日
发表于:2010-11-26 23:48:57
73楼

楼佩服楼主!plc程序真是易学难精啊

ye191255859

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 104回
  • 年度积分:0
  • 历史总积分:509
  • 注册:2009年8月14日
发表于:2010-11-27 14:01:39
74楼

看了,好像思维太复杂,问题复杂化,建议上机运行试

其实可以不复杂分析,把大脑的思维看成PLC扫描,从开机到每个时间段运行,输出的变化,不知道你们是怎么分析的,很困惑

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-27 17:41:20
75楼

 

  我在《Mitsubishi PLC》版块里贴出《100mS计时器框图》当然是关于三菱的计时器原理,<winter938 >就喜欢拿西门子、拿欧姆龙CPM1A的机器来跟我反驳。

 

  即便是欧姆龙的CPM1A,其《操作手册》也指出:必须实施使扫描周期缩短、中断程序、响应性能加快等措施来克服PLC在计时功能上的误动作:

图表中的“循环时间”指扫描周期。

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-27 20:29:44
76楼

 

  <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 说它的当前值没有按什么数字“增加”。

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-27 21:15:08
77楼

 

  我们用最简单的实验来说明这个问题:

 

  图片中C0的当前值“300”是经历了300秒的时间才逐一累积而来的。

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-27 22:50:58
78楼
我的表达能力有问题可能有些没说清楚,0.1秒分辨率的定时器时基如果是50毫秒ON50毫秒OFF的话,20多毫秒的扫描周期下PLC对其计数在程序首尾的定时器如果定时条件一样的话也就不过相差1,因为在下一个扫描周期总能采集到时基的50毫秒ON状态的某一点,但我观察到的差别很明显,输出灯先后亮起是明显的。不是我喜欢故意拿S7 200和CPM1A来跟你反驳,就像你熟悉FX喜欢用它举例和实验一样,我只是手头有这么两种机器实验而已。我主要想表达的是定时器运行机制是多样的。其实你贴的OMRON扫描周期的注意事项图片按照50%占空比的话应该将循环时间打五折才对。

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-28 17:57:01
79楼

 

  我贴在№77楼的实验片断太简单了,主要是考虑到照顾一下№74楼的 <ye191255859 > 这类人的思维!他们但凡看到文字稍微多了几个,或者看到梯形图稍微多了几行就会觉得太复杂,觉得是把问题复杂化了!因而他们便觉得很困惑!所以,为了不致让他们困惑,我仅仅只用了一行梯形图程序来表达。

 

  但是,光有这一行梯形图程序,另有一些人不喜欢动手去实践,也可能会觉得不好理解:你那C0上的当前值“300”代表着什么呢? 所以,我又用了一点点文字来加以说明。如果<ye191255859 >网友觉得这些用于说明的文字也把问题复杂化了,那就建议您撇开“说明文字”单看那一行梯形图。

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2010-11-28 18:24:56
80楼

 

  实际上,要把问题讲得明明白白,还是要稍微的细致一点才能把问题的细节表现出来!我现在把№77楼那个太过简单的实验片断稍微的补充一下:

 

  我们可以从这个监视图片上看到:在X0和M8013同为ON的一个期间(≤500毫秒)内,程序经历了1290个扫描周期(如这个每周期都要加“1”的D0之当前值所示),而计数器C0才计了一个“1”。这个实践得出来的一对数据充分说明:不管程序在时钟脉冲的“ON半周”里跑了多少个扫描周期,类似于普通计数器的“计时器之当前值计数器”对一个时钟脉冲仅只计一个“1”!

         


热门招聘
相关主题

官方公众号

智造工程师