Добрый день. Помогите начинающему АСУТПшнику.
Суть вопроса будет понятней на абстрактной задачке.
Допустим, у нас есть двигатель которым нужно управлять: включение — при открытии 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;
}