收到小伙伴的来信,怎样区分按钮的短按(按下后松开)与长按(按下并保持一段时间)。说实话,在工业现场,按钮长按来实现某个功能使用的并不多。我曾经在某个信号需要人工确认时使用了长按功能,当时是结合定时器与按钮的输入信号来实现的。要实现按钮的短按与长按的区分,我提供一种思路供大家参考。
基本思路:
使用沿信号配合定时器指令。如果在短时间内检测到了该信号的上升沿及下降沿,则认为按钮是短按状态;如果在某个时间内(比如2秒钟),只检测到了该信号的上升沿而没有下降沿,则认为按钮是长按状态;
结合这个思路我使用SCL语言实现了一个函数块FB5020_BtnClickHold,其变量声明如下图所示:
其中:
-
signal:要检测的按钮信号(或其它类似信号);
-
R:用于复位内部变量;
-
timeCheck:用于检测的时间,默认2秒;
-
click:按钮是短按状态;
-
hold:按钮是长按状态;
注:短按与长按不会同时为TRUE。为保证正确,应在获取信号后使用R对内部静态变量进行复位;
代码如下图所示:
这段代码我已经测试过,如果你有任何问题或其它思路,欢迎留言交流。
下面是西门子SCL编程的文章归档链接:
我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:
发表评论
为什么不按下按钮后开始将时间存入数据块内,按钮下降沿后再比较时间