【问题标题】:Change a boolean inside a loop with multiple if conditions在具有多个 if 条件的循环内更改布尔值
【发布时间】:2019-11-20 03:20:27
【问题描述】:

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

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 条件。我怎样才能做到这一点?

【问题讨论】:

    标签: loops if-statement boolean state-machine


    【解决方案1】:

    创建一个新变量,如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
    

    【讨论】:

    • 这非常有效。我在循环外声明了 PreviousValveActive 并将其设置为 0。非常感谢。
    猜你喜欢
    • 2021-05-23
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2018-09-19
    • 2021-02-17
    • 1970-01-01
    相关资源
    最近更新 更多