在具有多个 if 条件的循环中更改布尔值

Change a boolean inside a loop with multiple if conditions

我有 4 个 if 条件与一个名为 ValveActive 的变量(从 1 变为 4)相关,在一个每秒执行的程序循环中。 每个 if 条件为真 5 分钟。在每个 if 条件中,我需要将布尔值 PortSet 设置为 true 一段定义的时间,然后将其设置为 false。我希望打开布尔值的过程在循环重复时不重复。布尔值表示打开继电器然后将其关闭,我希望在每个唯一 ValveActive 状态期间只发生一次。

Start of loop

If ValveActive=1
                    PortSet(9,1) 'Activate port
            'Do something 
                    Delay (1,25,mSec)
            PortSet(9,0)          'Deactivate port

ElseIf ValveActive=2
              PortSet(9,1)
            'Do something 
            Delay (1,25,mSec)
            PortSet(9,0)

ElseIf ValveActive=3
              PortSet(9,1)
            'Do something
            Delay (1,25,mSec)
             PortSet(9,0)

Else
              PortSet(9,1)
            'Do something  
            Delay (1,25,mSec)
             PortSet(9,0)

EndIf

Loop

我已经尝试将循环外的布尔值设置为 false,然后在循环内将其变为 true,但这不适用于多个 if 条件。我怎样才能做到这一点?

创建一个新变量,比如PreviousValveActive,它通过循环记住上次ValveActive的值。然后使用 PreviousValveActive 作为测试来确定是否执行在每个状态下应该只发生一次的事情。

Start of loop

If ValveActive=1
    If PreviousValveActive != ValveActive
            PreviousValveActive = ValveActive
            PortSet(9,1) 'Activate port
            'Do something 
            Delay (1,25,mSec)
            PortSet(9,0)          'Deactivate port
    EndIf

ElseIf ValveActive=2
    If PreviousValveActive != ValveActive
            PreviousValveActive = ValveActive
            PortSet(9,1)
            'Do something 
            Delay (1,25,mSec)
            PortSet(9,0)
    EndIf

ElseIf ValveActive=3
    If PreviousValveActive != ValveActive
            PreviousValveActive = ValveActive
            PortSet(9,1)
            'Do something
            Delay (1,25,mSec)
            PortSet(9,0)
    EndIf

Else
    If PreviousValveActive != ValveActive
            PreviousValveActive = ValveActive
            PortSet(9,1)
            'Do something  
            Delay (1,25,mSec)
            PortSet(9,0)
    EndIf

EndIf

Loop