Моделирование управления давлением в трубопроводе
В данном примере продемонстрировано моделирование управления давлением в трубопроводе.
Принцип работы модели
Трубопровод описывается блоками библиотеки физического моделирования, в частности, за его объём отвечает блок Объём.
Через Клапан 1 жидкость поступает из блока Источник в блок Объём. К нему, в свою очередь, присоединён Датчик давления, с которого сигнал поступает на систему управления, представленную сумматором, задатчиком и PID-регулятором.
Схема модели:

PID-регулятор посылает управляющий сигнал на Клапан 1, чтобы тот открылся или закрылся, обеспечивая регулирование давления.
Справа от блока Объём, по пути движения жидкости, находится блок Утечка, который представляет собой, как и Клапан 1 управляемый дроссель.
Блок Утечка создаёт некоторое "случайное" истечение жидкости из моделируемого трубопровода.
Жидкость, проходящая через этот блок по итогу поступает в Сброс, который описывается бесконечным резервуаром с заданным давлением.
Граничные условия
- В источнике давление всегда поддерживается 151,3 кПа.
- В резервуаре, характеризующем пространство, куда осуществляется сброс жидкости через утечку, давление всегда равно 50 кПа.
Начальные условия:
- Начальное давление в трубопроводе равно 100 кПа.
- Сигнал задатчика равен 100000, что в контексте регулирования означает 100 кПа.
Определение функции для загрузки и запуска модели:
function start_model_engee()
try
engee.close("liquid_pressure_regulator", force=true) # закрытие модели
catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
m = engee.load("$(@__DIR__)/liquid_pressure_regulator.engee") # загрузка модели
end;
try
engee.run(m) # запуск модели
catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
m = engee.load("$(@__DIR__)/liquid_pressure_regulator.engee") # загрузка модели
engee.run(m) # запуск модели
end
end
Запуск симуляции
try
start_model_engee() # запуск симуляции с помощью специальной функции, реализованной выше
catch err
end;
Выделение из переменной simout данных о температуре участков и их запись в переменные:
result = simout;
res = collect(result)
Запись в переменные сигналов задатчика и датчика давления:
control_signal = collect(res[4])
pressure = collect(res[12])
Визуализация результатов моделирования
using Plots
plot(control_signal[:,1], control_signal[:,2], label="Задатчик", linewidth=3)
plot!(pressure[:,1], pressure[:,2], label="Датчик давления", linewidth=3)
Вывод:
В данном примере было продемонстрировано моделирование физического объекта с системой автоматического управления. Время переходного процесса составляет около 15 с, давление стабилизируется в допустимых пределах, его незначительные колебания связаны с утечкой жидкости из трубопровода.