(已结帖)工控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-05 14:20:29
41楼

 

  因为各人操作情况不一致,而造成各人的感知不同。为了客观公正,我们可以用PLC中的固定间隔的“开关动作”来辅助验证这个问题:


  下图中,用红线框起来的部分是我额外加插在8楼< crf498959881>网友的答案程序前面的辅助验证功能的片断。而红线框外的部分除了两个定时器分辨率用得不同,但实质还是8楼< crf498959881>网友的答案程序(我在原版程序中“LDP   X0”指令的下面,给并联了一个“OR  M6” 指令,用于输入3个“固定间隔脉冲”以替代人工输入“点击”)。




  实验时,先按一下X0 输入“1#的键输入”,经1秒的时间等待之后Y0便置位成“1”。再之后,又按一下X5操作键,PLC就自动的每隔0.9秒的时间输入一个“M6的上升沿”,共输入3次。即模拟X0在“规定间隔时值(1秒)以内输入2#、3#、4#的键操作”。


  实验会让大家看到:因2#、3#两次输入(发生在1秒以内)而让Y0(也能让Y1)复位为“0”,而3#、4#两次输入(同样也是发生在1秒以内,按8楼的理解模式,3#、4#的“输入操作”也应该叫“双击”)但是,4#的“键操作”却让Y0重新置位成“1”。即8楼< crf498959881>网友的答案程序错把4#的“双击”身份误当成“单击”身份了!


wanggq

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

 

  以实验的事实来看,按8楼的理解模式来区分“单击”与“双击”,在逻辑上是存在缺陷的。我们用“波形图”来凸显这一缺陷:


 

bhdxzgp

  • 精华:5帖
  • 求助:8帖
  • 帖子:141帖 | 5451回
  • 年度积分:0
  • 历史总积分:21609
  • 注册:2006年4月16日
发表于:2012-09-06 22:50:25
43楼
写的太精彩了啊!顶!!!

wanggq

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

 

  正因为wanggq清楚的认识到在解这类题目时,把“双击”理解为:1秒时间内的“两次键输入”,必然会出现逻辑上的错误,所以wanggq决定摈弃如8楼对“单击”与“双击”,的理解模式。


  为了避免出现逻辑错误,我们在这个题目里应该把双击”理解成:距前一次“点击”的间隔小于设定时值的“当前点击”称“双击”。即:“点击”操作的密度高于设定密度时的“当前点击”叫“双击;反之,低于设定密度时的“当前点击”叫“单击”。

 

wanggq

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

 

  世界知名的IT大公司微软,他们是怎样理解“单击”和“双击”的涵意呢?我们看看下面这个例子:


  这是微软的“Windows桌面”(局部):




  把鼠标指针移到〈画图〉图标上,“单击”该图标,所发生的功能是“选中〈画图〉”:



  “双击”该图标,所发生的功能是“打开〈画图〉的窗口”:



wanggq

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


  “双击”的操作动作是在设定时值内快速点击两次。


  其实,在你点击前一次时,电脑就立即作出了相应的“选中<画图>”(即:“单击”功能)的反应,紧随着你的后一次点击接踵而至,电脑又立即作出“打开<画图>的窗口”(即:“双击”功能)的反应!




  我们从这个例子也看出:电脑也是把“双击”理解成“点击密度高于设定密度时的‘当前点击’(即当前的这一次点击叫“双击”,而不包括前一次点击。)”

 

wanggq

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


  < crf498959881>网友在32楼这样对我发问:“关于鼠标单双击的问题你仔细看看的你鼠标是怎样动作的。难道是检测你在1S内按了多少次吗?


  所以,我这在45、46两楼举出的例子算是回答了〈 crf498959881 〉网友的发问!但还需要补充:电脑并不是检测你在1S内按了多少次!而是只需判断当前的“点击”距前一次“点击”之间的间隔时值是否小于设定时值就足以了。


  对于这类问题,但凡你用定时加计数的方法,就必然把原本简单的问题给搞复杂了,而且也必然会发生逻辑上的错误!



crf498959881

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:226
  • 注册:2008年2月17日
发表于:2012-09-08 20:14:39
48楼
引用 wanggq 的回复内容:  < crf498959881>网友在32楼这样对我发问:“关于鼠标单双击的问题你仔细看看的你鼠标是怎样动作的。难道是检测你在1S内按了多少次吗?”  所以,我这在45、46两楼举出的例子算是回答了〈 crf498959881 〉网友的发问!但还需要补充:电脑并不是检测你在1S内按了多少次!而是只需判断当前的“点击”距前一次“点击”之间的间隔时值是否小于设定时值就足以了。  对于这类问题,但凡你用定时加计数的方法,就必然把原本简单的问题给搞复杂了,而且也必然会发生逻辑上的错误!

哥们,为了证明这个问题可是费尽心思,也充分说明了你的观点!辛苦你了!麻烦不要再发同样的问题好不!

wanggq

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

 

  再发一个《答案程序4》:




  这个答案程序4更为准确。本答案程序设置的相邻两次“点击”的前沿之间的“间隔时值标准”也不会因“点击”操作的时值宽度的不同而受到丝毫的影响。

 

最多两年@原创军团

  • 精华:5帖
  • 求助:13帖
  • 帖子:102帖 | 3516回
  • 年度积分:0
  • 历史总积分:10908
  • 注册:2004年2月14日
发表于:2012-09-09 14:20:00
50楼
是一个关于占空比,和脉宽的问题.            

wanggq

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

 

  <接49楼的内容>

 

  把答案程序4分成两个部分:第1部分是根据题目的①、②的逻辑功能要求而编写的内容,如下图衬有灰底色的部分:



wanggq

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


  答案程序4的第2部分是根据题目③的逻辑功能要求而编写的内容,如下图衬有灰底色的部分:



wanggq

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

 

  当任何一个“点击”发生时,答案程序4首先是执行“ALTP”指令(注意:这时刻的(Y0、Y1)元件映像并不是该扫描周期末程序刷新输出映像锁存器的结果),随即才对该“点击”进行身份判断。


  在没有“点击”操作之前,T200、T201线圈一直处于被驱动的状态,当任何一个“点击”发生时,若对应定时器(T200或T201)是计时已满的,则该“点击”为“单击”的身份;若对应定时器是计时未满的,则该“点击”为“双击”的身份。

 

  若该“点击”为“单击”身份,则因对应定时器b接点的状态已为OFF,故程序将不执行“RST  Y0 ;   RST  Y1 ” ,到该扫描周期末,相应的输出位(Y0或Y1)的实际状态便是由题目①、②的逻辑所决定的;


  若该“点击”为“双击”身份,则因对应定时器b接点的状态还未OFF,程序将随即强制俩输出位(Y0及Y1)归零,到该扫描周期末,俩输出位(Y0及Y1)的实际状态便是由题目③的逻辑功能所决定的

 

wanggq

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

 

  M0、M1是X0、X1“输入”操作分别对应的“点击”脉冲前沿。当有“点击脉冲前沿”发生时,对应的定时器(T200或T201)的“当前值”就被“清零”,从次一个周期重新计时。即每一次“点击脉冲前沿”的次一周期便是新一轮计时的“起点”。这一点保证了对每个“点击”的身份考察都是建立在同一标准之上的,完全不受“点击操作”脉宽的影响。

 

invinliang

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 18回
  • 年度积分:0
  • 历史总积分:90
  • 注册:2011年6月06日
发表于:2012-09-11 14:19:39
55楼

流程图

 

上为流程图。

1

 

 

 

 

plc的定时器不是很标准,定时器几时如果用定时中断 可能会好一点,      一般单片机程序,定时标志都置在定时中断里,主程序不断扫描标志位,有标志位 则执行相应程序,然后清标志位,                                       plc的精度不是这么高,一般应用还是ok了

wanggq

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

 

  看来很多人爱把一个简单的问题弄得复杂一点!误以为程序愈复杂,就标志着程序质量愈上乘。其实不然,而事实上,在保证功能效果完全相同的前提下,程序愈简洁合理,其程序质量才是愈上乘!


  在这个擂台题目中,但凡把“双击”理解成在1秒时间内的“两次点击”,并用计时加上计数的方法来解这个题目,必然会出现逻辑上的错误!


  若在№55楼之答案程序的前面加插一个检验功能片断,就能用实验来验证该答案程序能否完全避免发生逻辑错误。


  如下图红线框所示插入一个检验功能的片断:(№55楼之原程序中输入信号的地方也如红线所示加插M6接点指令)



       

  实验时,对于这个实验对象,先按一下X1 输入“1#的键输入”,经1秒的时间等待之后Y0便置位成“1”。再之后,又按一下X5操作键,PLC就自动的每隔0.6秒的时间输入一个“M6的上升沿”,共输入3次。即模拟X1在“规定间隔时值(1秒)”以内输入2#、3#的“键输入操作”,同时也模拟了X1在1秒之内输入3#、4#的“键输入操作”。



  因为:如上输入时序图所示的3#、4#的“点击操作”同样也是在1秒之内连续按键两次的操作,所以,4#点击的身份理所应当是“双击”。按题目③之逻辑要求,这4#点击的结果就应该是强制俩输出位(Y0及Y1)都归零!而不应该让输出位Y0置“1” !


  实验的结果同样也证明:№55楼之原程序中X1输入情形在如上输入时序图所示情形时,原程序的运行结果也是错把第4#点击的“双击”身份误当成“单击”身份了


wanggq

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

 

  楼上这个红线框内的片断,就象一块“试金石”。把它加插在这个题目的各个答案程序的前面与答案程序一起运行,当操作一下“输入键X5”,该片断就自动连续产生3个“输入脉冲”。相邻两个脉冲的间隔时值由T202(10 mS 的分辨率)来设置,我们将其间隔时值设置为略比答案程序中设定的最大“双击间隔时值”小一点点,这样既保证了第3#脉冲为“双击”身份,同样又保证了第4#脉冲具有“双击”的身份,而且也不至于让第4#脉冲的“双击”身份被以第2#脉冲起始计时的设定间隔所淹没。这样就能试出某些答案程序在识别4#脉冲身份时所产生的逻辑错误!

 

  用这3个脉冲替代人工操作“点击”,完全保证在客观公正的前提下比较各答案程序。

 

wanggq

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


  对于楼上的输入时序图所示4个“点击”,按照对双击”的这种理解:距前一次“开关操作”之间隔小于设定时值的“当前操作”称“双击”。即输入开关的操作密度高于设定密度时的“当前操作”叫“双击”;反之,低于设定密度时的“当前操作”叫“单击”。


  则有:


  如果第2#脉冲距1#脉冲的间隔大于答案程序所设定的时值标准,则2#脉冲的身份为“单击”;


  如果第2#脉冲距1#脉冲的间隔小于答案程序所设定的时值标准,则2#脉冲的身份为“双击”。

 

wanggq

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

 

  当然,各人对“双击”的理解可以不同,对“间隔”起始点的理解也可以不同,并不强求每个人的理解标准都要一致。但是,根据逻辑思维最基本的规律(同一律)的规矩,对于每一个具体的答案程序来说,在同一答案中必须保证其运行结果不能与该答案程序中运用的“理解”内涵自相矛盾!否则,其答案程序就必定是一个“错误的答案”!

 

wanggq

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

 

  距前一次“开关操作”之间隔小于设定时值的“当前操作”称“双击”。即输入开关的操作密度高于设定密度时的“当前操作”叫“双击”;反之,低于设定密度时的“当前操作”叫“单击”。(我姑且把这种模式的理解简称为“理解甲”)


  有些人不能接受“理解甲”,而坚持要把“双击”理解成:


  “双击”包括设定时值标准之内的所有“点击”。


  (我把这后一种模式的“理解”简称为“理解乙”)



热门招聘
相关主题

官方公众号

智造工程师