Документация Engee
Notebook

Моделирование движения электромобиля по циклу WLTC

В данном примере будет продемонстрировано моделирование движения электромобиля по ездовому циклу WLTC. Параметры автомобиля, электрической и механической систем повторяют характеристики электромобиля подобного Nissan Leaf.

Описание параметров и структуры модели

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

Основные параметры модели:

Название блока Основной параметр
Электромобиль Масса 1000 кг
Батарея Напряжение 390 В
Электродвигатели Постоянная крутящего момента 4 Нм/А
Колёса Радиус 0,32 м
Дифференциалы Передаточное отношение 0,5
Коэффициент сопротивления воздуха 0.28

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

electrocar_disc_brake_drive_mod_1_1739965487918.png

Блок Электромобиль

Схема подсистемы Электромобиль:

electrocar_disc_brake_drive_mod_1_1740063224412_2.png

Сила сопротивления воздуха в данной подсистеме определяется по формуле:

$$F_d = \frac{1}{2} C_x \rho S v^2,$$

где: $Cx$ - коэффициент лобового сопротивления, $\rho$ - плотность воздуха, $кг/м^3$, $S$ - площадь миделя (наибольшая площадь поперечного сечения объекта, перпендикулярная направлению движения), $м^2$, $v$ - скорость электромобиля.

Основные параметры, определяемые в подсистеме Электромобиль:

image_2.png

Схема подсистемы Водитель:

electrocar_disc_brake_drive_mod_1_1740063684238.png

Подсистема Водитель представляет собой систему управления, которая генерирует управляющие сигналы для исполнительных устройств, которыми являются тормоза и электродвигатели электромобиля. Электродвигатели представлены блоками Электродвигатель передней оси и Электродвигатель задней оси, а тормоза блоком Тормозная система. В блоке Add вычисляется сигнал рассогласования между заданной и измеренной скоростями, который затем поступает на PID-регуляторы, генерирующие управляющие сигналы.

Схема подсистемы Тормозная система:

electrocar_disc_brake_drive_mod_1_1740068897907.png

Подсистема состоит из 4-х тормозных дисков. Входной сигнал, поступающий на порт P, определяет давление в тормозной системе, порт S передаёт тормозной момент на каждое из колёс.

Блок WLTC

Блок WLTC представляет собой блок From Workspace в который, из обратных вызовов модели, поступают данные о ездовом цикле WLTC, преобразованные из формата XLSX.

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

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

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

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

In [ ]:
start_model_engee() # запуск симуляции с помощью специальной функции, реализованной выше
Out[0]:
SimulationResult(
    "Крутящий момент электродвигателя" => WorkspaceArray("electric_vehicle_performance/Расчёт мощности/Крутящий момент электродвигателя"),
    "Скорость в км/ч" => WorkspaceArray("electric_vehicle_performance/Электромобиль/Скорость в км/ч"),
    "Мощность электродвигателя, кВт" => WorkspaceArray("electric_vehicle_performance/Расчёт мощности/Мощность электродвигателя, кВт"),
    "WLTC.1" => WorkspaceArray("electric_vehicle_performance/WLTC.1"),
    "Тормозной момент, Н*м" => WorkspaceArray("electric_vehicle_performance/Тормозная система/Тормозной момент, Н*м"),
    "Частота вращения электродвигателя" => WorkspaceArray("electric_vehicle_performance/Расчёт мощности/Частота вращения электродвигателя"),
    "Перемещение в км" => WorkspaceArray("electric_vehicle_performance/Электромобиль/Перемещение в км"),
    "Сила сопротивления воздуха" => WorkspaceArray("electric_vehicle_performance/Электромобиль/Сила сопротивления воздуха"),
    "Заряд батареи" => WorkspaceArray("electric_vehicle_performance/Заряд батареи"),
    "From-2.1" => WorkspaceArray("electric_vehicle_performance/From-2.1"),
    "Сила со стороны трансмиссии" => WorkspaceArray("electric_vehicle_performance/Электромобиль/Сила со стороны трансмиссии")
)

Запись из simout в переменные сигналов, полученных в ходе симуляции (данных много, процесс может занимать около 4-х минут):

In [ ]:
t = simout["electric_vehicle_performance/Электромобиль/Скорость в км/ч"].time[:]; # время
T = simout["electric_vehicle_performance/Расчёт мощности/Крутящий момент электродвигателя"].value[:]; # крутящий момент электродвигателя
speed = simout["electric_vehicle_performance/Электромобиль/Скорость в км/ч"].value[:]; # скорость автомобиля
forces_left = simout["electric_vehicle_performance/Электромобиль/Сила со стороны трансмиссии"].value[:]; # силы, действующие на автомобиль со стороны трансмиссии 
forces_right = simout["electric_vehicle_performance/Электромобиль/Сила сопротивления воздуха"].value[:]; # силы, действующие на автомобиль со стороны окружающей среды
w = simout["electric_vehicle_performance/Расчёт мощности/Частота вращения электродвигателя"].value[:]; # частота вращения электродвигателя
q = simout["electric_vehicle_performance/Заряд батареи"].value[:]; # заряд батареи
P = simout["electric_vehicle_performance/Расчёт мощности/Мощность электродвигателя, кВт"].value[:]; # мощность электродвигателя
WLTC1 = simout["electric_vehicle_performance/WLTC.1"].value[:]; # цикл WLTC
pos = simout["electric_vehicle_performance/Электромобиль/Перемещение в км"].value[:]; # перемещение электромобиля
;

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

Запуск библиотеки для построения графиков:

In [ ]:
using Plots
gr()
Out[0]:
Plots.GRBackend()

Построение графиков сил, действующих на электромобиль и его скорости:

In [ ]:
p1 = plot(t, forces_left, label="Усилие от трансмиссии, Н", linewidth=2)
p2 = plot(t, forces_right, label="Сопротивление воздуха, Н", linewidth=2, linecolor=2)
p3 = plot(t, speed, label="Скорость, км/ч", linewidth=2, linecolor=3)
plot(p1, p2, p3, layout=(3,1))
Out[0]: