(已结帖)工控PLC擂台第90期-PLC有关的一道征集题 点击:4622 | 回复:175



玻璃的心

    
  • 精华:30帖
  • 求助:2帖
  • 帖子:962帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2012-08-27 17:43:55
楼主

本期擂台为征集题:

程序内容是这样的,
 ①.当I0.0为自复位按钮输入变量,按一下I0.0,q0.0输出为1,再按一下I0.0,q0.0输出0
 ②.当I0.1为自复位按钮输入变量,按一下I0.1,q0.1输出为1,再按一下I0.1,q0.1输出0
 3③.当双击(1S以内连续按两下按钮算双击)I0.0或I0.1任何一个按钮时,Q0.0,Q0.1都为0,当再次单击I0.0或者I0.1时,Q0.0或者Q0.1仍会延续①与②的逻辑。

 

PLC类型任意选择,回答的最好最完全的,原创最多,阐述最详细者获一等奖!

 

 

工控PLC擂台每周一期,本期待88期结束一周后结贴。奖项设置:一等奖1名:30~50MP,二等奖3名:10MP,三等奖10名:100积分。

MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。

MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。




wanggq

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

 

  在距前面④(2#点击的上升沿)不足1000 ms 的时间段里接连发生⑤、⑥两次“点击”:


  ⑤、点击I0.0 ,(3#)上升沿再次使MB1的内容加1、 MB3的内容减1。


  这时,MB1、 MB2、 MB3 这3个字节的各个bit 的状态:



wanggq

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

 

  ⑥、点击I0.0 ,(4#)上升沿再次使MB1的内容加1、 MB3的内容减1。


  这时,MB1、 MB2、 MB3 这3个字节的各个bit 的状态:

wanggq

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

 

  ⑦、这一轮1000 ms 计时满,M0.0再次翻转为“0”,按该答案程序的理解:任何一段不足1000 ms的时间内接连发生的两次点击(譬如这3#、4#点击)就属于“双击”,就应该执行题目要求的“强制Q0.0及Q0.1状态归零”的功能。但这次,M0.0的下降沿到来时,程序却未能实现强制已经为“ON”状态的Q0.0复位,仍然保持Q0.0=1 的状态!而仅只是执行了恢复MB3=2 。


  这时,MB1、 MB2、 MB3 这3个字节的各个bit 的状态:

  


  因为MB3≠0,所以,在这一轮1000 ms 计时满,M0.0下降沿出现时,MB2的内容和Q0.1的状态并不受I0.0操作结果的影响。


wanggq

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

 

  有了上面这些细节的分析做基础,我们可以简化一下,用时序图来表达:



  本图中对MB1、MB2、MB3这3个字节的内容只关注其最低两位的状态,与№19楼的答案程序中网络7的内容相对比。


wanggq

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

 

  楼上(№84楼)的时序图简洁明了的凸显了:№19楼的答案程序在应对如这个时序图所示的点击操作情况时,其答案程序的功能是有严重的缺陷的。


  如该时序图所示的2#、3#俩“点击”是在设定间隔时值以内接连出现的两次“点击”,所以按№19楼的答案程序中运用的“双击”概念,2#、3#俩“点击”的结果就应当要实现题目要求的“双击”时对两个输出位强制复位这一功能。


  同理,3#、4#俩“点击”也构成“双击”;5#、6#俩“点击”,及6#、7#俩“点击”也都构成“双击”。但是,他们都未能实现题目要求的“强制俩输出位归零”之功能!


  第8#“点击”距前面7#“点击”的间隔及8#“点击”距后面的间隔都是大于设定时值的,所以8#“点击”的身份是“单击”。按题目的要求,它就应当对相应的输出位Q0.0的状态实行翻转。但是,它却未能实现这一“单击”功能!


  它(8#点击)在该时序情况下不能实现“单击”功能的原因是:它的前一轮计时(以5#上升沿为始点的计时)计时满时,MB1的最低两位(M0.0、M0.1)的状态都为“1”,于此基础上再等第8#点击上升沿出现时,MB1再次加1的结果使最低两位(M0.0、M0.1)的状态都翻转为“0”。而№19楼答案程序的“网络7”对Q0.0、Q0.1的“置位”和“复位”都不能用两bit “1”或两bit “0”,所以,在该时序图所示的情况下,I0.0的该8#“点击”是根本不可能实现其“单击”功能的!


  

wanggq

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


  因为版面尺寸受到限制的原因,№84楼的时序图没有把第8#“点击”的计数器数据最终在计时已满时的状态显示出来,在这一楼帖子里把该时序图往左边移动一段,以便显示出I0.0的第8#“点击”对应的计数器MB1、MB3的最低两位在本轮计时已满的状态:



wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-09-24 20:12:47
87楼


  尽管19楼在帖子末尾总结出结论:“该程序经上机运行,符合题目要求。” 但是,这个结论不符合事实。


  不同的人会有不同的操作手法,操作手有慢性子的,也有急性子的。程序应该对所有操作手都应该表现出符合题目要求之意涵的功能,才算是“符合题目要求”。至于“间隔时值”的具体设置数据,完全可以根据实际需要而酌情调整,并不违背题目的实质意涵。



wanggq

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

 

  我认为,本擂台题目有一层实质意涵是:


  编写一个程序片断,让PLC实现自动判断“点击操作”的密度。以某设定密度的标准(譬如:可以设定“点击的间隔”以1000 ms 为准;也可以设定成以300 ms 为准)来衡量,间隔大于“标准”时的点击为“单击”;间隔小于“标准”时的点击为“双击”。“单击”发生时,相应输出位产生状态的“翻转”;“双击”发生时,强制指定的俩输出位归零。



wanggq

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

 

  №19楼<wyb2866255> 答案程序的<网络7>,其中Q0.0的置位之必要条件有:M1.0=1 与 M1.1=0 ;其中Q0.1的置位之必要条件有:M2.0=1与 M2.1=0 。 


  俩输出元件被置位的该必要条件(注意:还不是充分条件),还需要另一个必要条件,这另一个必要条件是:“1秒脉宽的M0.0之下降沿”。


  M0.0之下降沿不仅是指定俩输出元件的置位之必要条件,同时也是其复位之必要条件,但还不是充分条件;其复位还需要另一个“必要条件”,这另一个“必要条件”其实是由一个“或门”来充当的。这个“或门”对于Q0.0是:M1.0=0 与 M1.1=1 或 MB3的内容等于零;而对于Q0.1则是:M2.0=0 与 M2.1=1 或  MB3的内容等于零。


  №19楼之答案程序的<网络7>如下:


  

  我们从<网络7>可以看到:如果1秒计时已满的M0.0之下降沿到来之时MB3不等于零的话,则:Q0.0之状态的改变须满足MB1最低俩 bit 相异这一必要条件;Q0.1之状态的改变须满足MB2最低俩 bit 相异这一必要条件。 由于M0.0之下降沿到来时MB3≠0, 因而MB3对MB1、MB2这俩字节各自的最低俩 bit 就没有“清零”的作用。这就必然会在M1.0、M1.1或M2.0、M2.1相同时造成对“点击”身份的判断无法进行!而PLC的指定输出位在这种情况下也不能做出正确的反应!

  

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-09-25 22:07:03
90楼

 

  对于№19楼的答案程序,只要在1000 ms 之内发生过3个点击,则:接下来之后发生的一个“单击”是根本不可能兑现实现其设计的让相应输出元件状态发生“翻转”之功能。


  我们先看在指定输出元件Q0.0状态为“OFF”的前提下,于1000 ms 之内I0.0发生了3个点击(如下图中1#、2#、3#),接下来隔一个明显大于1000 ms 的时值I0.0再次输入一个点击(如下图中4#)。这个4#点击是非常明确的一个“单击”身份,但这个“单击”却不能将Q0.0的状态翻转为“ON”:




wanggq

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

 

  我们再看,当Q0.0的状态为“ON”的前提下,于1000 ms 之内I0.0发生了3个点击(如下图中2#、3#、4#),接下来隔一个明显大于1000 ms 的时值I0.0再次输入一个点击(如下图中5#)。这个5#点击是非常明确的一个“单击”身份,但这个“单击”却不能将Q0.0的状态翻转为“OFF”:






wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-09-25 22:16:33
92楼

今天看了此贴,发现此贴讨论的很“热闹”,并对我在19楼的帖子分析,谢谢!程序的网络5、6原有比较指令,因太长,觉得删掉这比较指令,强调1秒内最多按2下(这很容易掌握),该程序仍可正常运行,没想到有人对此大做文章,为此将原程序(仅网络5、6)贴上来,这样1秒内按钮有效的只有1或2下,即只按1下为单击,按2下及2下以上为双击。见图:

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-09-25 22:29:07
93楼

 

   即便№19楼的答案程序中<网络5>、<网络6>都加上一个限制条件(MB3>0),№19楼的答案仍然存在破绽!

 

  什么破绽?先留给你自己去发现!如果明天你还发现不了其中的破绽,那我可就要把它讲出来噢。

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-09-25 22:34:20
94楼

 

  说什么“程序的网络5、6原有比较指令,因太长,觉得删掉这比较指令,强调1秒内最多按2下(这很容易掌握),该程序仍可正常运行,” 你这是要求操作者以你规定手法去安排“点击”在时间上的某种分布,你那19楼的答案程序才呈现出所谓的“符合题目要求”。


  但是,若偏离了你所指定的“分布规律”,则你那19楼的答案程序就不能正确判断出“点击”的“单击”或“双击”的身份。


wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-09-26 07:44:33
95楼

 

  与其你删掉网络5、6中(对№19楼的答案程序具有重要作用)的比较指令,还不如你删掉网络1(初始化)中(毫无必要)的“MOV”指令!



wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-09-26 09:14:46
96楼

     1、时间安排不是我规定的,是擂主规定的:“③.当双击(1S以内连续按两下按钮算双击)I0.0或I0.1任何一个按钮时,Q0.0,Q0.1都为0,当再次单击I0.0或者I0.1时,Q0.0或者Q0.1仍会延续①与②的逻辑。”如何不按规定时间按钮:超出1秒时间按2下就是单击。

    2、网络1的0-->MW1可以不用,开始编程时没有用比较指令,只是限制MB1计数器最多计2个数,后改为用MB3减1指令,且用MB3=0比较判断。MW1=0删不删此处无关大局,就没有删掉。

 

wanggq

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

 

  擂主的题目中这个:


  ③.当双击(1S以内连续按两下按钮算双击)I0.0 或 I0.1任何一个按钮时,Q0.0,Q0.1都为0,当再次单击 I0.0 或者 I0.1 时,Q0.0或者 Q0.1 仍会延续①与②的逻辑。


  其中的“1S以内连续按两下按钮算双击”应该是任何一个“1S以内”的时段!0.99秒符合1S以内”;0.3秒也符合1S以内


 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-09-26 16:39:54
98楼

 

  擂主没有规定过要在哪一段符合“不足1S”这一条件的时间里发生的两个点击才算“双击”,而另外的也同样符合“不足1S”这一条件的时间里发生的两个点击却不可算作“双击”吧?!

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-09-26 17:09:24
99楼

 

  既然擂主并没有规定过哪些满足“不足1S”这一条件的时段里发生的两个点击才算“双击”,那么,我们有理由这样理解:凡满足“不足1S”这一条件的任何一段时间内发生的两个点击都无一例外的应该算“双击”!(属“理解乙”的模式)


  如下图所示的“点击操作”时序,用图中的“设定时值标尺”去衡量相邻两个点击的间隔(以点击的前沿为始点),我们就能得出该时序图中的6个点击都是“双击”身份:


  我们没有理由只承认1#与2#算“双击”,而否认2#与3#也算“双击”!因为这2#与3#也同样是发生在“1S以内”的时段里的两次摁键操作!如果你否认3#的“双击”身份,那无疑你就是对该时序图中“2#与3#之间隔不足1S之客观事实”的否认


  如果没有“设定时值标尺”作参照,恐怕很多人都会把4#点击看成是一个“单击”,但在PLC内部时钟的控制下,按照“理解乙”的概念编写出来的正确答案程序运行的结果就应当是以其设定时值标准自动判断出4#点击是“双击”的身份!(因为4#前沿与5#前沿的间隔略小于1秒)


  至于5#与6#俩点击,很明显、很直观:理所当然的它们也是“双击”!


wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-09-26 17:14:32
100楼

      别把问题分析的太复杂了,用手按钮最快的间隔为0.2~0.3秒,即1秒内连续按钮最多3~5下,如要单击,只能按一下,否则就不叫单击。当一个人去按开关,按第一下其前沿使M0.0=1,M0.0=1开始延时,延时1秒,使M0.0=0,用M0.0=1的后沿进行判断,如此1秒内只按1下,MB3是不会=0,此时如MB1=1,使Q0.0=1,如MB1=2,使Q0.0=0,从而实现“按一下I0.0,q0.0输出为1,再按一下I0.0,q0.0输出0”的控制要求。如此1秒内只按2下或更多下时,此时 MB3=0,而MB3=0 会同时使Q0.0、Q0.1复位,从而实现“当双击(1S以内连续按两下按钮算双击)I0.0或I0.1任何一个按钮时,Q0.0,Q0.1都为0,当再次单击I0.0或者I0.1时,Q0.0或者Q0.1仍会延续①与②的逻辑。”的控制要求。

    有必要去分析什么“在哪一段满足“不足1S”这一条件的时间里发生的两个点击才算“双击”,而另外的也同样满足“不足1S”这一条件的时间里发生的两个点击却不可算作“双击。。。”吗?


热门招聘
相关主题

官方公众号

智造工程师