Структуры данных в блоке управления

Про байтики и логику ЭБУ
Post Reply
User avatar
acab
provoker
provoker
Posts: 263
Joined: Wed Dec 18, 2013 7:27 pm
Location: Minsk, BY

Структуры данных в блоке управления

Post by acab »

Обнаружил дикую особенность, нет как таковой структуры единой для данных в блоке управления двигателем.
Подобня структура(структуры) будут полезны, для всего мозга в целом, например, для того чтобы узнать текущую температуру двигла или обороты в любом из модулей. Плюс будут данные о конфиге, например о включенных ништяках и их настройках(буст контроллер, режим работы вентилятора и прочее).

Так как я немного перешёл с самодельного минимозга от Atmel с ARM архитектурой. Немного поделюсь кодом, который я имел под рукой:

Code: Select all

struct ecu_info
{
        U8              ecu_status,
                        ecu_version,
                        fan_speed_status,
                        cruise_control_status,
                        cruise_control_last_speed,
                        car_speed;
                       
        U16             engine_rpm_request_idle_1,
                        engine_rpm_request_idle_2,
                        // Vars for Electronic Throttle
                        throttle_accelerator_1,
                        throttle_accelerator_min_1,
                        throttle_accelerator_max_1,
                        throttle_accelerator_2,
                        throttle_accelerator_min_2,
                        throttle_accelerator_max_2,
                        throttle_body_1,
                        throttle_body_min_1,
                        throttle_body_max_1,
                        // End
                        engine_rpm;
        S16             engine_clt;
} rusefi;

User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

Мысль, которую у тебя не получается выразить, звучит примерно так:
"если бы у нас было бы ООП, то нам нужен бы был объект Engine"

Да, если у нас был бы ООП - у нас был бы объект Engine, в котором бы всё было удобно в одном месте. Перейти на С++ кстати ПОТЕНЦИАЛЬНО можно подумать, КСТАТИ. В отдельном топике, конечно же. И кому-то нужно будет про это думать, конечно же...

Вернёмся к объекту Engine. У нас тут бедность языка С. Структура EngineState - это конечно в чём-то да, похоже - но меня смущет, что это структура, а не объект. А структуру кто-то когда-то должен наполнять. Кто и когда будет писать значение currentMapSensorValue в это значение? По какому расписанию? Получается дикий шайтан.

Вывод: что делать - не ясно. Но структура EngineState мне кажется добавит граблей только. Я бы посоветовал изучить вопрос С++, если чешутся руки.
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Структуры данных в блоке управления

Post by Sergey89 »

То что в первом посте описано похоже на god object со всеми его недостатками. Но если его разбить на несколько структур, то вроде как и можно с ним работать.

Можно ведь и в си передавать указатель на структуру.

Code: Select all

set_value(object_t *this, int value) {
    this->property = value;
}
Похоже на работу с объектами?

Наследование заменить на делегирование.

Или это всё печально?
User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

Да, я примерно так и делаю уже сейчас - но всё-таки это решение не идеальное. Например понять список всех методов объекта как? И так далее.
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Структуры данных в блоке управления

Post by Sergey89 »

ClassName_MethodName только такой вариант приходит в голову. Он кстати и применяется во многих библиотеках.
User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

Sergey89 wrote:ClassName_MethodName только такой вариант приходит в голову. Он кстати и применяется во многих библиотеках.
Да, есть разные сорта извратов - зачаток ''ClassName_MethodName' в виде '[classPrefix]MethodName' у меня тоже есть.
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

acab wrote:Плюс будут данные о конфиге, например о ... настройках
Все настройки живут в EngineConfiguration
Если пока не живут - значит нужно рефакторить, например #31
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
Kot_dnz
contributor
contributor
Posts: 29
Joined: Mon Dec 16, 2013 6:12 pm

Re: Структуры данных в блоке управления

Post by Kot_dnz »

russian wrote:
acab wrote:Плюс будут данные о конфиге, например о ... настройках
Все настройки живут в EngineConfiguration
Если пока не живут - значит нужно рефакторить, например #31
Я в общем понимаю идею acab-а и уже говорил об этом, но т.к. есть более важные сейчас вопросы, то нужно решать их.
EngineConfiguration - это структура окружения (объем цилиндров, их кол-во, т.п.)
EngineStatus (или как то там) - это структура, которую заполняют все обработчики периферии (текущиие значения обротов, ДАД, AFR...) - ведь мы же не знаем когда они заканчивают свою работу? Кто за 0,5сек, кто-то за 0,005... В итоге событийные прерырвания не начинают опрашивать "что у нас там?", а делают очень быстрые вычисления по тому, что в этой структуре.
User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

Kot_dnz wrote:В итоге событийные прерырвания не начинают опрашивать "что у нас там?", а делают очень быстрые вычисления по тому, что в этой структуре.
А в чём именно ты видишь проблему в опрашивании "что у нас там?"

Ничего на бывает бесплатно. За как-бы "оптимизацию" (в ковычках) того, что данные уже готовы - нам придётся заплатить хитровыебанностью кода. Я просто не вижу смысла, мы тут кажется решаем проблему, которой просто нет.
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
frig
contributor
contributor
Posts: 569
Joined: Wed Oct 23, 2013 8:05 pm

Re: Структуры данных в блоке управления

Post by frig »

russian, если говорить про прозрачности и простоте кода, то доступ к конкретным полям конкретной структуры в которой хранятся переменные текущего состояния - это проще и изящнее. В данный момент нельзя узнать как получить положение дроссельной заслонки, надо копать код. Причем после того, как ты раскопаешь код, в следующий раз тебе опять придется копать код, чтобы узнать как получить текущее напряжение бортовой сети или еще что. Каждый раз.
В случае с единой структурой будет точно известно в каком месте лежит структура состояния и ее местоположение надо будет определить один раз. Затем обращаясь к этому месту будет очень просто получить значения. Сейчас куча вызовов разных функций между которыми нет связи. Так что с точки зрения простоты и прозрачности структура это гут и я за структуру состояния.
НО
Структуру эту надо будет заполнять и актуальность данных в ней становится серьезным вопросом. Например при вычислении количества топлива или УОЗ мне нужен фактор нагрузки, не важно какой. Этот фактор нагрузки, что в структуре состояния он от предыдущего оборота или от нынешнего? Или на два оборота отстает? В какой последовательности отрабатывает код?
Сейчас все понятно - в тот момент когда я вызываю функцию получения значения температуры я получаю текущее значение температуры.

Второй момент - как часто какие значения нам там нужно обновлять? Сейчас значения получаются тогда, когда они нужны. Это позитив.

Если бы у нас было ООП, то мы бы просто завели объект состояния и вызовом методов получали бы наши значения. Сейчас можно похожего достичь просто рефакторингом, правильным именованием и может быть извратом со структурой содержащей имена функций состояния, чтобы каждый раз не искать нужную по всему коду.
skype: frig_frig
User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

Итак, у нас тут значит выделилось три разные темы в этой ветке :)

1) проблема навигации по коду. Я открыт к предложениям :) Пока как вариант сделал

Code: Select all

 * @file engine_state.h
 * @brief One header which acts as gateway to current engine state
2) струтура либо для оптимизации, либо для читаемости. Решать проблему навигации через изменение (усложнение?) програмы я не согласен, необходимостии в оптимизации пока не вижу

3) С++ выделяю в отдельную тему
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
Kot_dnz
contributor
contributor
Posts: 29
Joined: Mon Dec 16, 2013 6:12 pm

Re: Структуры данных в блоке управления

Post by Kot_dnz »

frig wrote: Структуру эту надо будет заполнять и актуальность данных в ней становится серьезным вопросом. Например при вычислении количества топлива или УОЗ мне нужен фактор нагрузки, не важно какой. Этот фактор нагрузки, что в структуре состояния он от предыдущего оборота или от нынешнего? Или на два оборота отстает? В какой последовательности отрабатывает код?
Сейчас все понятно - в тот момент когда я вызываю функцию получения значения температуры я получаю текущее значение температуры.
Как одно из решений, когда нужно 100% иметь актуальные данные - вызвать функцию самостоятельно перед вычислениями.
Разница от сейчас будет только в том, что ответ функцией вернется не вам, а через эту структуру.
User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

Kot_dnz wrote: Как одно из решений, когда нужно 100% иметь актуальные данные - вызвать функцию самостоятельно перед вычислениями.
Разница от сейчас будет только в том, что ответ функцией вернется не вам, а через эту структуру.
Это попытки заткнуть проблему навигации по коду. Проблемы навигации по коду нужно решать лучшей организацей кода, а не изменением поведения кода от естественного к неестественному.
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

Re: Структуры данных в блоке управления

Post by XDA »

маааааааленькое замечание в пользу хранения всех параметров и карт в отдельной структуре:
это позволит легко редактировать бинарный файл прошивки, без перекомпиляции исходника
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

XDA wrote:маааааааленькое замечание в пользу хранения всех параметров и карт в отдельной структуре:
это позволит легко редактировать бинарный файл прошивки, без перекомпиляции исходника
Теоретик :( Параметры уже сто лет в одной структуре. И вообще, ты промахнуля темой :)
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

Re: Структуры данных в блоке управления

Post by XDA »

russian wrote:
XDA wrote:маааааааленькое замечание в пользу хранения всех параметров и карт в отдельной структуре:
это позволит легко редактировать бинарный файл прошивки, без перекомпиляции исходника
Теоретик :( Параметры уже сто лет в одной структуре. И вообще, ты промахнуля темой :)
я такой же "теоретик", как и ты ;)
только практики побольше 8-)
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

В контексте появления у нас ООП можно помечтать по-новой :)
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
User avatar
rus084
contributor
contributor
Posts: 678
Joined: Sun Dec 01, 2013 1:40 pm
Location: Russia , Stavropol

Re: Структуры данных в блоке управления

Post by rus084 »

я пока не сильно понимаю зачем менять последовательность структуры .
User avatar
AndreyB
Site Admin
Posts: 11287
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Структуры данных в блоке управления

Post by AndreyB »

rus084 wrote:я пока не сильно понимаю зачем менять последовательность структуры .
Дима, ты единсвенный кто в теме изменения последовательности в мега-структуре engine_configuration_s

Поля нужно переставить местами, чтобы разбить мега-кашу в этой структуре на несколько структур помельче - см. как там уже сделано с trigger_config_s и cranking_parameters_s и ThermistorConf
https://rusefi.com/s/howtocontribute
very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions
my skype is arro239
User avatar
rus084
contributor
contributor
Posts: 678
Joined: Sun Dec 01, 2013 1:40 pm
Location: Russia , Stavropol

Re: Структуры данных в блоке управления

Post by rus084 »

вот теперь я понимаю отлично
Post Reply