Измените логическое значение внутри цикла с несколькими условиями if - PullRequest
0 голосов
/ 10 июля 2019

У меня есть 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.Как мне этого добиться?

1 Ответ

1 голос
/ 10 июля 2019

Создайте новую переменную, такую ​​как 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...