В статье описана проблематика разработки системы моделирования двигателя внутреннего сгорания.
Ключевые слова: двигатель внутреннего сгорания, разработка системы моделирования, программирование, C++.
При разработке крупных программ могут возникать различные трудности, связанные с тем, что элементы могут быть разработаны по отдельности, и в каждом из них нужно разобраться по отдельности, но не всегда удается предусмотреть процесс работы программы заранее, в следствии чего при работе могут возникать ошибки, и не только те, которые не позволяют скомпилировать программу, но и недоработки программы, влияющие на достоверность получаемых значений. Подобные проблемы встречались и при разработке системы моделирования двигателя внутреннего сгорания(ДВС) [2] и они были решены.
Разрабатываемая система моделирования ДВС предназначена для наглядной демонстрации, как меняются мощность, крутящий момент [3] [4] и обороты их пикового момента, для того чтобы продемонстрировать обучающимся процессы [6], происходящие в двигателе внутреннего сгорания. В дальнейшем те из них, кто заинтересуется автомобилестроением, будут более подготовлены к предстоящей работе.
Для разработки программы был выбран язык C++, так как он имеет высокую производительность среди высокоуровневых языков программирования, также C++ довольно распространенный язык, ведь он используется во многих популярных игровых двигателях, а также для этого языка существует множество библиотек и множество уроков [7].
Для вывода трехмерной графики был выбран OpenGL, так как эта библиотека кроссплатформенная и использует высокоуровневые методы.
Рис. 1 Скриншот с неправильной цветовой гаммой скриншота
Была добавлена opensource библиотека Freeimage, чтобы добавить возможность сохранять скриншоты программы, при её использовании возникла проблема — синий цвет, менялся местами с красным, в следствии чего окно вывода имело неправильную цветовую гамму (Рис.1). Проблема заключалась в том, что Freeimage использует не цветовую модель RGB(Red, Green, Blue), а BGR(Blue, Green, Red) (Рис.2), поменяв синий и красный цвет местами, скриншоты стали сохраняться с правильными цветами — какой программу видит пользователь во время её работы (Рис.3).
Рис. 2 функция, отвечающая за создание скриншота программы. Выделена цветовая модель
Рис. 3 Скриншот с правильной цветовой гаммой скриншота
Во время разработки программы появлялась ошибка, что imgui выводил значение 0 в количестве оборотов, при том что оно было больше нуля, баг был решен тем, что imgui не умеет сам конвертировать переменные из одного типа в другое (из float в int), программа скомпилируется, но значение вывода будет неверным. Проблема была решена тем, что переменная float была изменена на int, так как можно обойтись без дробной части и imgui стал выводить правильное значение оборотов.
Также была задача добавить возможность менять цвет модели двигателя, для этого необходимо было разобраться в языке шейдеров GLSL. Шейдер — программа, описывающая каким образом будет отображаться трехмерная модель на экране. И стояла непростая задача, передать переменную цвета из C++ кода в GLSL код. Перепробовав множество OpenGL методов, были найдены те, которые позволили передать значения переменных из основной программы в шейдер (Рис.4).
Рис. 4. Методы OpenGL, передающие переменные из C++ кода в шейдер
При разработке программ на C++ нужно знать не только сам язык, но и уметь разбираться в библиотеках, которые используешь, благодаря ним можно в одиночку разрабатывать программы, но и могут возникать проблемы, при которых программа откажется запускаться или будут возникать проблема с графикой и расчетами.
Литература:
1. Палагута К. А., Тройков С. М. Полунатурное моделирование электронной системы управления двигателем внутреннего сгорания (ЭСУ ДВС). Надежность и качество: труды международного симпозиума, 2010.
- Заболотский, И. А. Разработка системы моделирования двигателя внутреннего сгорания в рабочем режиме / Молодой ученый. — 2022. — № 46 (441).
3. Луканин. В. Н. Том 1. Двигатели внутреннего сгорания. Теория рабочих процессов, 2005.
4. Луканин. В. Н. Том 3. Компьютерный практикум. Моделирование процессов в ДВС, 2005.
5. Боресков. А. В. Программирование компьютерной графики, 2019.
6. Гришин Ю. А., Хазов Н. В. Моделирование газодинамических течений во впускных системах двигателей внутреннего сгорания, 2008.
- Johnson Bruce. Professional Visual Studio 2017. John Wiley & Sons, Inc., 2018.