编程思想的图解(深入浅出) 点击: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)

 

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

 




船尾

  • 精华:1帖
  • 求助:0帖
  • 帖子:14帖 | 182回
  • 年度积分:0
  • 历史总积分:260
  • 注册:2004年6月08日
发表于:2010-10-18 22:51:32
41楼
收藏了。有空仔细研究一下。

duwenbo7788

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 57回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2010年9月14日
发表于:2010-10-23 15:24:08
42楼

中国人不比外国人差 。 顶~

zhang5114210

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 538回
  • 年度积分:0
  • 历史总积分:2084
  • 注册:2006年8月01日
发表于:2010-10-26 15:44:22
43楼
顶一下 明天再仔细学习学习 楼主辛苦您了

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-07 12:20:34
44楼
引用wanggq 的回复内容:

 

  现在要讲一讲PLC中100ms的计时器的工作原理:

  当程序扫描至计时器“驱动条件”为“ON”时,还要恰逢100ms时钟信号为“ON”期间(它只有50ms的脉宽)计时器中的“计数器”数据内容才会增1。假如不巧,它恰逢100ms时钟信号的“ON”刚刚翻转为“OFF”(这个期间也是50ms的宽度),那么,它还要等几个甚至十几个扫描周期才会再让计时器的“计数器”数据内容增1!

 

 



你确定可以用这张图去解释100ms定时器的运行机制?

wanggq

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

 

  嘿嘿,如果<Winter938>对这个解释存有“异议”,那就请痛快的讲出来!

 

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-07 14:34:05
46楼
我认为100ms的分辨率并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿"滴哒"运行,而是告诉计时器每隔0.1秒就该加1了,且只在累计够0.1秒时间后的扫描周期中进行.

wanggq

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

 

  我的帖子内容中的观点,都是我能确认的观点!如果是我自己不能确认的观点,我就不会贴出来!

 

wanggq

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

 

  除了100ms计时器之外,10ms计时器也是同样的原理!有一个占空比为50%,周期为10ms的时钟脉冲在那儿“嘀哒”运行。

 

  10ms、100ms时钟脉冲都是来自于CPU的时钟信号(主频)。是“CPU的主频”经“分频”而得到的不同分辨率的“时钟脉冲”。

 

  FX系列PLC中的M8011、M8012、M8013、M8014同样都是从CPU主频上经“分频”而得的!

 

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-07 17:17:56
49楼
50ms有时够跑数个扫描周期了,那岂不是要计数多次?另外如果扫描周期超过50ms的程序中前后两个0.1秒分辨率定时器就可能在计时条件都ON的情况下出现一个计了数另一个却未计到?为了可靠抓住这50ms时钟脉冲的ON时间,那么使用了0.1秒分辨率定时器的程序的扫描周期就应该控制在50ms以下?

wanggq

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

 

  <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秒的计时器。

 

wanggq

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

 

  请大家看清楚:这个“使用了0.1秒分辨率定时器的程序的扫描周期就应该控制在50ms以下? ”是<winter938 >在№49楼的提问。

  应该说是如果程序中前后两个0.1秒分辨率的定时器被扫描的时刻相隔超过50mS,一个处在时钟方波的“ON半周”另一个处在“OFF半周”,那就必定是这一扫描周期里一个计了数,另一个却未计到!

       

  如果程序中有100mS计时器或使用100mS时基的回路,就应该力争把扫描周期尽可能控制在小于100mS以内,这样才能保证使用100mS时基的回路或定时器的准确动作!这就是我一贯提倡“在保证目标功能正确实现的前提下力争把程序写得很简洁”的原因之一!

 

 

wanggq

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

引用<winter938 >的内容:

 

  “我认为100ms的分辨率并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿‘滴哒’运行,而是告诉计时器每隔0.1秒就该加1了,且只在累计够0.1秒时间后的扫描周期中进行”

 

 ----------------------------------------------------------------------------------------------------------------------------------

 

  回复:

 

  你这句“而是告诉计时器每隔0.1秒就该加1了,” 是否在表达PLC中的100ms定时器当前值是“线性”的增加?(譬如,从计时器被驱动开始,经0.1秒的时间该计时器的当前值为“1”,则经0.02秒的时间该计时器的当前值为“0.2”?)

 

  在反驳别人的观点时,应该注意提供实在的证据!

 

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-08 11:23:16
53楼
我手头没有FX的机器,很多是在空想,以上说法可能需要以下这样的实验测试一下:1    在一个扫描周期中N次调用含有0.1秒分辨率的定时指令的子程序,观察一下定时器的当前值是否以N增加.     2   在程序中使用循环把扫描周期拖长到50毫秒以上,再在这段循环程序前后使用定时条件一样的两个定时器指令,最后观察他们动作是否同步.

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-08 11:46:48
54楼
引用wanggq 的回复内容:

引用<winter938 >的内容:

 

  “我认为100ms的分辨率并不是说有个占空比为50%的周期为100ms的时钟脉冲在那儿‘滴哒’运行,而是告诉计时器每隔0.1秒就该加1了,”

 

 ----------------------------------------------------------------------------------------------------------------------------------

 

  回复:

 

  你这句“而是告诉计时器每隔0.1秒就该加1了,” 是否在表达PLC中的100ms定时器当前值是“线性”的增加?

 

  在反驳别人的观点时,应该注意提供实在的证据!

 



遗憾的是详细的证据很少有人耐心看完,呵呵.大多数人都想直接使用结论我也不例外.

wanggq

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

引用winter938 的内容:

  “遗憾的是详细的证据很少有人耐心看完,呵呵.大多数人都想直接使用结论我也不例外.”


   回复:

 

   呵呵,没有证据的或未经严密逻辑推理的空想的结论等于乱说!

 

wanggq

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

   所有的数码产品都离不开“时钟信号”。为了保证时钟信号的稳定和准确,都要用石英晶体振荡器来对“时基”信号源稳频。

 

  如下所示的照片是一块FX1s的CPU板。其CPU芯片正下方的一个元件就是一块固有频率为20MHz的“晶振”:

  同一块PLC中的所有计时器的“时基”都来自于CPU的“时基”,经过各级“分频”得到几个不同周期单位的(都是50%占空比的)“时钟脉冲”。分别供给同一分辨率的各个计时器共享。这些“时钟信号”客观的存在于PLC中,只要PLC已经上电,不管它是处于RUN,还是处于STOP,也不管PLC用户程序中用没用到“计时器”,各种“时钟信号”都在按步就班的运动着。当PLC程序扫描到计时器线圈指令时,系统程序就把相应分辨率的“时钟信号”跟“驱动条件”的“与”结果用来触发该“计时器”的<当前值计数器>。

 

  一块FX1s中有64个计时器;一块FX2n中有256个计时器;一块FX3U中有512个计时器。如果按<Winter938>空想的那样每个计时都各自单独具备一个(并不是50%占空比的)时基源来线性的增长计时器的<当前值>。可以想象:一块PLC的硬件电路里要做好大一堆定时器的电路啊!光考虑保证时基稳定性的“晶振”元件就是一大堆!!

  

wanggq

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

 

  我侄儿他们用过的教科书里有这样一段话:系统管理程序将有限个数的CTC扩展为几十上百个用户时钟和计数器。通过这部分程序,用户看到的就不是实际机器存贮地址和PIO、CTC的地址了,而是按照用户数据结构排列的元件空间和程序存贮空间了。

 

  (这还是80年代版本的教科书。现在又过去30年了,PLC技术又有了长足的进步,1个主频可以扩展为512个甚至2048个计时器!)

wanggq

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

 

  再出示一张教科书上讲解FX2系列PLC中的“T200~T245”10ms计时器之计时原理的照片:

 

winter938

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

我从不认为每个定时器需要一个硬件时基,并且同意你的说法是同一个时基分频而得到多个时基给对应的多个定时器共享,关键是PLC本身的系统程序如何使各定时器来对这些时基进行计数,所以才有了我前面的测试想法,在我现有的CPM1A上做了测试2,仅仅将扫描周期拖长到27ms就能观察到两个0.1秒分辨率的定时器动作不同步.所以至少你所说的50毫秒ON时间可能还需要进一步证实.下面附测试程序的拷屏图片.

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2010-11-09 17:04:05
60楼
程序中DM1设置一个扫描周期中条2至5的循环次数以调节扫描周期长度,1003,1004分别观察TIM1,2和TIM20,21的动作同步性,当DM1设为400的时候扫描周期达到27毫秒,可以明显观察到1001和1002即TIM1和TIM2动作不同步.

热门招聘
相关主题

官方公众号

智造工程师