电子说
收到小伙伴的来信,怎样区分按钮的短按(按下后松开)与长按(按下并保持一段时间)。
说实话,在工业现场,按钮长按来实现某个功能使用的并不多。我曾经在某个信号需要人工确认时使用了长按功能,当时是结合定时器与按钮的输入信号来实现的。
要实现按钮的短按与长按的区分,我提供一种思路供大家参考。
基本思路:
使用沿信号配合定时器指令。如果在短时间内检测到了该信号的上升沿及下降沿,则认为按钮是短按状态;如果在某个时间内(比如2秒钟),只检测到了该信号的上升沿而没有下降沿,则认为按钮是长按状态;
结合这个思路我使用SCL语言实现了一个函数块FB5020_BtnClickHold,其变量声明如下图所示:
其中:
signal:要检测的按钮信号(或其它类似信号);
R:用于复位内部变量;
timeCheck:用于检测的时间,默认2秒;
click:按钮是短按状态;
hold:按钮是长按状态;
注:短按与长按不会同时为TRUE。为保证正确,应在获取信号后使用R对内部静态变量进行复位;
代码如下图所示:
这段代码我已经测试过,如果你有任何问题或其它思路,欢迎留言交流。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !