首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当从高到低时才为真

仅当从高到低时才为真
EN

Stack Overflow用户
提问于 2021-03-18 20:40:08
回答 2查看 126关注 0票数 0

我正在尝试想一种通用的方式来编程,只有当从高到低的时候,它才是真的(做一些逻辑)。

编程语言无关紧要,但我更喜欢JAVA或结构化文本。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2021-03-18 21:06:43

在使用ST的IEC61131-3标准中,这可以使用F_TRIG (下降触发器)来实现。

只需声明一个F_TRIG并使用布尔值调用它,然后检查是否启用了F_TRIG (Q):

代码语言:javascript
复制
VAR
   yourFTrig : F_TRIG;
END_VAR
------------------------
yourFTrig(CLK := yourBoolean);
IF yourFTrig.Q THEN
   // Your code that shall be executed only when we have a falling trigger
END_IF
票数 1
EN

Stack Overflow用户

发布于 2021-03-19 13:12:39

为了检测上升沿或下降沿,程序必须循环工作。在PLC IEC 61131-3中,它已经循环工作。有两种方法可以检测边缘。其中一个已经被@Jacob描述过了。它使用的是F_TRIGR_TRIG功能块。

让我来演示一下这个逻辑的基本原理。

代码语言:javascript
复制
PROGRAM demo
  VAR
    xStart : BOOL; (* Bit that we detect edge on *) 
    xStartM: BOOL; (* Bit to store value from last cycle *)
  END_VAR
  
  IF xStart AND NOT xStartM THEN
      (* Rising edge detected *)
  END_IF

  IF NOT xStart AND xStartM THEN
      (* Falling edge detected *)
  END_IF
  xStart := xStartM;
END_PROGRAM;

请注意xStart := xStartM;。这条线以上的所有内容都将使xStartM等于上一个循环中的xStart的值。这意味着如果我们在该行之前使用ёШАё,我们可能会发现xStartTRUE,但xStartM仍然不是,因此是我们切换的时刻。

在JAVA中,你可以使用相同的技术,但你必须在一段时间内完成所有这些工作。我不知道JAVA,但下面是它在PHP中的样子。

代码语言:javascript
复制
<?php
$am = false;
while(true) {
    $a = getA();
    if ($a && !$am) {
        // rise edge
    }
    if (!$a && $am) {
        // fall edge
    }
    $am = $a;
    sleep(1);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66691273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档