Моделирование насос-форсунки EUI
作者
# =============================================================================
# data_loader.jl — Загрузка и подготовка профиля кулачка
# =============================================================================
using DataInterpolations
function load_flat_amesim_data(filepath::String)
isfile(filepath) || error("Файл $(filepath) не найден.")
lines = filter(l -> !isempty(strip(l)) && !startswith(strip(l), "#") &&
!startswith(strip(l), "Table"), readlines(filepath))
rows = map(l -> parse.(Float64, split(l)), lines)
angles_vec = Float64[r[1] for r in rows]
disp_mm_vec = Float64[r[2] for r in rows]
return angles_vec, disp_mm_vec .* 1e-3
end
function prepare_data(source_file::String = SOURCE_FILE)
raw_angles, raw_disp = load_flat_amesim_data(source_file)
raw_interp = DataInterpolations.LinearInterpolation(raw_disp, raw_angles)
clean_disp = Float64[raw_interp(a) for a in CLEAN_ANGLES]
initial_disp_mm = copy(clean_disp) .* 1e3
println("=== ЯЧЕЙКА 1: ДАННЫЕ УСПЕШНО АДАПТИРОВАНЫ ===")
println("Исходный профиль содержал точек: ", length(raw_angles))
println("Максимальный ход в импортированном файле: ",
maximum(raw_disp) * 1e3, " мм")
return (
raw_angles = raw_angles,
raw_disp = raw_disp,
raw_interp = raw_interp,
clean_angles = CLEAN_ANGLES,
clean_disp = clean_disp,
initial_disp_mm = initial_disp_mm,
)
end