Re: Извлечение данных наддува из OBDII VAG
Думаю, можно перейти Денис в предыдущую ветку.
"Буст контроллер на CANNY"
Вопрос с "Данные из Can" я с Вашей помощью наконец то решил.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
CANNY forum → Программируемые контроллеры CANNY 7.x (7, 7.2 duo, alfa, gamma, MGX) → Извлечение данных наддува из OBDII VAG
Думаю, можно перейти Денис в предыдущую ветку.
"Буст контроллер на CANNY"
Вопрос с "Данные из Can" я с Вашей помощью наконец то решил.
Денис, не работает Ваша формула.
Р=7722*7,8125=7722*(8-1/8-1/16)= 7722*8 - 7722/8 - 7722/16 = (7722<<3) - (7722>>3) - (7722>>4) =
= 61776 - 965 - 482 = 60239 Па - формула работает ( >> - сдвиг вправо; << - сдвиг влево).
oniava пишет:Денис, не работает Ваша формула.
Р=7722*7,8125=7722*(8-1/8-1/16)= 7722*8 - 7722/8 - 7722/16 = (7722<<3) - (7722>>3) - (7722>>4) =
= 61776 - 965 - 482 = 60239 Па - формула работает ( >> - сдвиг вправо; << - сдвиг влево).
Вы не поняли Денис, если подставлять другие значения, на выходе БЕЛЕБЕРА...
Значения в файле во вложении)
Будьте внимательны!
Во вложении файл с Вашими данными и пересчетом по предложенной формуле: Лист 2 столбец Е, сразу в Па без потери точности - никакой БЕЛЕБЕРды. Плюс решается простыми средствами: сдвиг и вычитание, более экономичными с точки времени машинных ресурсов чем деление и умножение.
Я сделал так, но где то видимо накосячил...
Переполнение. 35000*8 = 280000 > 65535.
Здесь как уже упоминалось раньше - либо работать с декапаскалями, либо переходить на 32бит арифметику.
Будьте внимательны!
Во вложении файл с Вашими данными и пересчетом по предложенной формуле: Лист 2 столбец Е, сразу в Па без потери точности - никакой БЕЛЕБЕРды. Плюс решается простыми средствами: сдвиг и вычитание, более экономичными с точки времени машинных ресурсов чем деление и умножение.
Всё равно у меня не получается.
По Экселю одни значения. по диаграмме - другие
сразу в Па без потери точности
Денис, еще вопрос.
А зачем в Па?
Потом надо будет в гПа.
Затем формула (X - 1000)/1000, где X - значение в гПа, а результат получаем в нужных bar...
Переполнение. 35000*8 = 280000 > 65535.
Здесь как уже упоминалось раньше - либо работать с декапаскалями, либо переходить на 32бит арифметику.
Если честно, для меня пока не понятно...
Как это?
Денис, еще вопрос.
А зачем в Па?
Потом надо будет в гПа.
Затем формула (X - 1000)/1000, где X - значение в гПа, а результат получаем в нужных bar...
Денис,как я и не смог решить вопрос с переполнением.
Денис, CANNY пишет:Переполнение. 35000*8 = 280000 > 65535.
Здесь как уже упоминалось раньше - либо работать с декапаскалями, либо переходить на 32бит арифметику.Если честно, для меня пока не понятно...
Как это?
Снова я без Вас некуда...
Если для отображения требуются именно Бар с сотыми, то тогда изначальная установка, что никакие погрешности не допустимы, на которую я ориентировался, бессмысленна, т.к. сотые Бар это уже точность до 1000 Па (1Бар = 100000Па).
Если требуются Бар с сотыми, то рационально при обработке перевести данные в мБар (миллибарах = 0,001Бар = 1гПа), а привести к Бар с сотыми уже при передаче для отображения, например: в одном байте - целые Бар, в другом - сотые Бар.
При таком подходе нет смысла использовать сложную математику.
Можно успешно использовать Вашу формулу (Х/64)*5 = (Х>>6)*5, а для большей точности ((Х>>3)*5)>>3 (меньше потерь при цельночисленном делении и последующем умножении), в гПа, или 0,001Бар.
Для вычисления дополнительного давления можно просто вычесть из полученного значения 1000 мБар.
Если требуются Бар с сотыми, то рационально при обработке перевести данные в мБар (миллибарах = 0,001Бар = 1гПа), а привести к Бар с сотыми уже при передаче для отображения, например: в одном байте - целые Бар, в другом - сотые Бар.
Опять нюанс.
В сканере разработчики ошиблись и там должно быть не - hPa, а мБар.
Денис, CANNY пишет:Если требуются Бар с сотыми, то рационально при обработке перевести данные в мБар (миллибарах = 0,001Бар = 1гПа), а привести к Бар с сотыми уже при передаче для отображения, например: в одном байте - целые Бар, в другом - сотые Бар.
Опять нюанс.
В сканере разработчики ошиблись и там должно быть не - hPa, а мБар.
И снова вопрос,
Как быть с переполнением?
При использовании формулы ((Х>>3)*5)>>3 переполнения не будет при любых Х (от 0 до 65535) - здесь ведь в общем выполняется деление на 12,8, а последовательность операций я подобрал так, чтобы избежать возможных проблем с переполнением, при этом сохранив максимальную точность.
При использовании формулы ((Х>>3)*5)>>3 переполнения не будет при любых Х (от 0 до 65535) - здесь ведь в общем выполняется деление на 12,8, а последовательность операций я подобрал так, чтобы избежать возможных проблем с переполнением, при этом сохранив максимальную точность.
Пробую что получится...
При использовании формулы ((Х>>3)*5)>>3 переполнения не будет при любых Х (от 0 до 65535) - здесь ведь в общем выполняется деление на 12,8, а последовательность операций я подобрал так, чтобы избежать возможных проблем с переполнением, при этом сохранив максимальную точность.
Пробую что получится...
При использовании формулы ((Х>>3)*5)>>3 переполнения не будет при любых Х (от 0 до 65535) - здесь ведь в общем выполняется деление на 12,8, а последовательность операций я подобрал так, чтобы избежать возможных проблем с переполнением, при этом сохранив максимальную точность.
Да Денис, формула ((Х>>3)*5)>>3 работает безупречно и без переполнения!
Спасибо.
Теперь осталось перевести в bar и нужно думать как вывести на LCD дисплей!
Работа диаграммы:
1)
В DEC = 12981
Получаем по формуле ((Х>>3)*5)>>3 на выходе 1013.
(1013 - 1000)/1000 = 0,013
По диаграмме:
Частное - 0
Остаток - 13
"0" - теряется
-----------------
2)
В DEC = 24689
Получаем по формуле ((Х>>3)*5)>>3 на выходе 1929.
(1013 - 1000)/1000 = 0,928
По диаграмме:
Частное - 0
Остаток - 928
Всё верно!
-----------------
3)
В DEC = 30304
Получаем по формуле ((Х>>3)*5)>>3 на выходе 2667.
(1013 - 1000)/1000 = 0,368
По диаграмме:
Частное - 0
Остаток - 367
Всё верно!
-----------------
В первом примере Денис "0" потерялся.
Как можно исправить?
1)
В DEC = 12981
Получаем по формуле ((Х>>3)*5)>>3 на выходе 1013.
(1013 - 1000)/1000 = 0,013
По диаграмме:
Частное - 0
Остаток - 13
"0" - теряется
-----------------
Ничего не теряется. В остальных примерах по 3 символа а тут 2... подавляется (не отображается) лидирующий 0 - это ведь тысячные доли. 13 тысячных (0,013 Бар) и 928 тысячных (0,928 Бар) - все сходится.
Ничего не теряется. В остальных примерах по 3 символа а тут 2... подавляется (не отображается) лидирующий 0 - это ведь тысячные доли. 13 тысячных (0,013 Бар) и 928 тысячных (0,928 Бар) - все сходится.
Отображаться будет то же 0.013?
Диаграмма пока такая получилась.
Ошибку нашел, подправил.
Коммутаторы, что бы отфильтровать значения меньше 1000.
Или всё равно не нужны?
Да, обратил внимание, но не успел написать.
Осталось как то вывести на LCD.
Не знаю даже, с чего начать...
CANNY forum → Программируемые контроллеры CANNY 7.x (7, 7.2 duo, alfa, gamma, MGX) → Извлечение данных наддува из OBDII VAG