Задать вопрос
@hexelder

Лишних условий не бывает?

Добрый день. Помогите начинающему АСУТПшнику.

Суть вопроса будет понятней на абстрактной задачке.
Допустим, у нас есть двигатель которым нужно управлять: включение — при открытии 3-х клапанов и достижении темп. в помещении 10.0'C; отключение — если хотя бы один клапан закроется или температура воздуха опустится ниже 5.0'C.

Ниже 2-а варианта реализации. Оба они рабочие, но в чужом коде мне чаще встречается 1-й. Почему и зачем нужны лишние условия? Есть ли этому объяснение и какие-нибудь рекомендации?

Вариант 1
LoopFunc()
{
    if (Valve1.IsOpen && Valve2.IsOpen && Valve3.IsOpen && Sensor.Value >= 10.0)
        Motor.OnCmd = true;

    if (!Valve1.IsOpen || !Valve2.IsOpen || !Valve3.IsOpen || Sensor.Value <= 5.0)
        Motor.OnCmd = false;
}

Вариант 2
LoopFunc()
{
    if (Sensor.Value >= 10.0)
        Motor.OnCmd = true;

    if (!Valve1.IsOpen || !Valve2.IsOpen || !Valve3.IsOpen || Sensor.Value <= 5.0)
        Motor.OnCmd = false;
}


Подозреваю, что у 2-го варианта будут проблемы с многопоточностью (если она конечно появится), но даже в таком случае мне кажется код лучше доработать так (особенно если условий будет много):

// Global variables
bool TmpOnCmd = false;
TSensor Sensor;
TValve Valve1;
TValve Valve2;
TValve Valve3;
TMotor Motor;

LoopFunc()
{
    if (Sensor.Value >= 10.0)
        TmpOnCmd = true;

    if (!Valve1.IsOpen || !Valve2.IsOpen || !Valve3.IsOpen || Sensor.Value <= 5.0)
        TmpOnCmd = false;

    Motor.OnCmd = TmpOnCmd;
}
  • Вопрос задан
  • 2448 просмотров
Подписаться 3 Комментировать
Подписчики вопроса 3 К ответам на вопрос (1)