Сообщество Engee

Система автоматического регулирования уровня жидкости

Автор
avatar-mikhailpetrovmikhailpetrov
Notebook

Моделирование системы автоматического регулирования уровня жидкости в резервуаре

В данном примере демонстрируется модель системы регулирования уровня жидкости в резервуаре, построенная на основе физических компонентов.

Модель представляет собой замкнутый контур управления, где жидкость поступает в резервуар через управляемый насос, а вытекает через выходное отверстие, характеризуемое гидравлическим сопротивлением. Датчик уровня непрерывно измеряет текущую высоту столба жидкости в резервуаре и передает этот сигнал в блок управления.

Схема модели:

liquid_level_control_system_1759324713591.png

Определение функции для загрузки и запуска модели:

function start_model_engee()
    try
        engee.close("liquid_level_control_system", force=true) # закрытие модели 
        catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
            m = engee.load("$(@__DIR__)/liquid_level_control_system.engee") # загрузка модели
        end;

    try
        engee.run(m) # запуск модели
        catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
            m = engee.load("$(@__DIR__)/liquid_level_control_system.engee") # загрузка модели
            engee.run(m) # запуск модели
        end
end
start_model_engee (generic function with 2 methods)

Запуск симуляции

start_model_engee();

Выделение из переменной simout сигналов уровня жидкости и уставки:

result = simout;
res = collect(result);

Запись сигналов в переменные:

level = collect(res[15])
sin_sig = collect(res[24]);
tank_mfr = collect(res[11])
pump_mfr = collect(res[25]);

Визуализация результатов моделирования

График уровня жидкости и сигнал уставки:

using Plots
gr()
plot(sin_sig[:,1], sin_sig[:,2], label="Задатчик уровня жидкости", linewidth=3, xlabel="Время, с", ylabel="Уровень жидкости, м")
plot!(level[:,1], level[:,2], label="Уровень жидкости в баке", linewidth=3, linestyle=:dash)

График массового расхода жидкости проходящей через насос и через выходное отверстие бака:

plot(tank_mfr[:,1], tank_mfr[:,2], label="Сток из бака", linewidth=3, xlabel="Время, с", ylabel="Массовый расход, кг/с")
plot!(pump_mfr[:,1], pump_mfr[:,2], label="Массовый расход подачи", linewidth=3, linestyle=:dash)

Выводы:

В данном примере было продемонстрировано моделирование системы автоматического регулирования уровня жидкости в резервуаре, такие модели могут использоваться для оптимизации широкого спектра процессов, начиная с наполнения водонапорной башни и заканчивая сложными процессами в химической промышленности.