本期擂台为征集题:
程序内容是这样的,
①.当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后、用户可通过用户管理后台申请兑换)。
⑦、这一轮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操作结果的影响。
楼上(№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#“点击”是根本不可能实现其“单击”功能的!
№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的指定输出位在这种情况下也不能做出正确的反应!
既然擂主并没有规定过哪些满足“不足1S”这一条件的时段里发生的两个点击才算“双击”,那么,我们有理由这样理解:凡满足“不足1S”这一条件的任何一段时间内发生的两个点击都无一例外的应该算“双击”!(属“理解乙”的模式)
如下图所示的“点击操作”时序,用图中的“设定时值标尺”去衡量相邻两个点击的间隔(以点击的前沿为始点),我们就能得出该时序图中的6个点击都是“双击”身份:
我们没有理由只承认1#与2#算“双击”,而否认2#与3#也算“双击”!因为这2#与3#也同样是发生在“1S以内”的时段里的两次摁键操作!如果你否认3#的“双击”身份,那无疑你就是对该时序图中“2#与3#之间隔不足1S之客观事实”的否认!
如果没有“设定时值标尺”作参照,恐怕很多人都会把4#点击看成是一个“单击”,但在PLC内部时钟的控制下,按照“理解乙”的概念编写出来的正确答案程序运行的结果就应当是以其设定时值标准自动判断出4#点击是“双击”的身份!(因为4#前沿与5#前沿的间隔略小于1秒)
至于5#与6#俩点击,很明显、很直观:理所当然的它们也是“双击”!
别把问题分析的太复杂了,用手按钮最快的间隔为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”这一条件的时间里发生的两个点击却不可算作“双击。。。”吗?