Во всех температурах второй байт обычно от 00 до 99 это и есть от 1 до 10 гр. Единственный байт из температу не цифровой EB это масло. Но я посмотрю , может не правильно скопировал.
первый байт он использует только значения из поста 401. например 0x1B 0x00 дает 417гр
вот значение температуры масла
0x0C, //Engine Oil Temperature // 57гр
0xEB, //Engine Oil Temperature
0x0c= DEC 12 c нулевым вторым байтом он выдает 34гр
0xEB= DEC 235 превращаются в остальные 23 гр
в формуле возможно что второй байт делится на 10, 235/10=23,5 понятно что он округляет до 23 и прибавляется уже к 12 переведенном в 34гр
меняем на F
0x0C, //Engine Oil Temperature // 59гр
0xFB, //Engine Oil Temperature
0xFB= DEC 251 превращаются в остальные 25 гр здесь тоже, 251/10=25,1
еще пример 0x0F c нулевым байто это 111гр
0x0F ,0xFB выдает 136. тут опять видно что FB добавил тех же 25гр 251/10=25,1
уже есть какаято закономерность
но если такая фича
0x0С, //Coolant Temperature (с нулевым вторым байтом байтом это 34гр)
0x37, //Coolant Temperature с этим байтом имеем 39гр тоесть 0x37 превратились в 5гр
0x0С, //Coolant Temperature (с нулевым вторым байтом байтом это 34гр)
0x76, //Coolant Temperature с этим байтом имеем 46гр тоесть 0x76 превратились в12гр
0x0D, //Coolant Temperature (с нулевым вторым байтом байтом это 59гр)
0x37, //Coolant Temperature с этим байтом имеем 59гр тоесть 0x37 превратились в 6гр
0x0D, //Coolant Temperature (с нулевым вторым байтом байтом это 59гр)
0x37, //Coolant Temperature с этим байтом имеем 71гр тоесть 0x37 превратились в 2гр
все я запутался, тихо медля неспеша, крыша едет с чердака
Что разгадано
0x0A,0x00, 25,6 % //Accelerator Position Sensor Signal // ((256*A)+B)/100 0k
0x11,0x89, 499 mg/strk //Mass Air Flow Sensor // ((256*A)+B)/10 0k
0x04,0x30, 1,1 bar //Boost Pressure // ((256*A)+B)/1000 0k
0x03,0x20, 800 rpm //Engine Speed // (256*A)+B ok
0x0B,0x55, 290 mg/strk //EGR Command (Exhaust-Gas Recirculation Command)// ((256*A)+B)/10 0k
0x03,0xA3, 0,9 bar //Barometer Sensor //((256*A)+B)/1000 0k
0x04,0x2D, 1,1 bar //Boost Pressure Command // ((256*A)+B)/1000 0k
0x03,0x20, 800 rpm //Desired Engine Idle Speed // (256*A)+B ok
0x0C,0x36 31 km/h //Vehicle Speed // (256*A)+B ok
0x0C,0x36 31 km/h //Vehicle Speed Command // (256*A)+B ok
0x03,0x0A, 7,8 mg/strk //Desired Injection Quantity // ((256*A)+B)/100 0k
0x02,0xD9, 7,3 mg/strk //Injection Quantity // ((256*A)+B)/100 0k
0x08,0xA3, 22,1 *CA //Start of Delivery // ((256*A)+B)/100 0k
0x01,0x90, 400 rpm //Pump Speed // (A*255)+B ok
0x01,0x5C, 3 % //EGR Pulse Ratio (Exhaust Gas Recirculation) // ((256*A)+B)/100 0k
0x02,0x76, 6,3 % //Swirl Level Control Solenoid Valve Pulse Ratio // ((256*A)+B)/100 0k
0x12,0x03, 46,1 % //Pulse Ratio Boost Pressure Solenoid Valve // ((256*A)+B)/100 0k
что не разгадано
0x01,0x7B, 4,4 *CA //Desired Injection Start
0x01,0x92, 4,7 *CA //Actual injection start
0x0B,0xDB, 30 *C //Intake Air Temperature
0x0C,0x37, 39 *C //Coolant Temperature
0x0C,0xEB, 57 *C //Engine Oil Temperature
0x0C,0x27, 38 *C //Fuel Temperature
все формулы одинаковые, единственное различие, это всею формулу (А*256)+В либо не делишь вообще либо на 10,100 или 1000. это чуток пугает или удивляет, не знаю. по идеи и к *CA и к *C должно было подойти , но увы не выходит. вот такие вот пироги. шифрую дальше, хотя нет, спать, мозги уже не варят.
дело в том что там четыре температуры , масло, двеигатель, входящего воздуха, и топлива. жалко упускать. надо немного отключится от этого, попробую скетч сообразить, а потом свежим взглядом опять шифровать
"a" послал, это значит выбран байт A для изменения отправкой + или -. Т.е. послал "b" далее посылаешь "+" например. байт B изменяется на +0x01. Не обязательно каждый раз "b" отправлять. Один раз выбрал b и далее шлешь плюсы или минусы, потом опять можно "a" выбрать и т.д.
по идее ошибка должна быть не более 1 градуса, так как округление нада настраивать, ну где то может 2 градуса из-за суммы ошибок преобразования первого байта и корявого округленгия второго
просто округление вообще не настроено - апример число 13,9 он воспринимает как 13. Надо учиться программировать, там через double делается или float. Все не сложно, надо почитать просто. А так то хорошая точность
измени мой скетч под байты этого параметра, и сделай статистику побольше, чтоб 0 был байт А потом 0 байт B, потом вместе изменяеются. С моим скетчем проще статистику собирать
0x01,0x00 = -247гр
0x0A,0x00 = -17гр
0x0B,0x00 = 8гр
0x0C,0x00 = 34гр
0x0D,0x00 = 59гр
0x0E,0x00 = 85гр
0x0F,0x00 = 111гр
со вторым байтом я разобрался
у тебя странно на втором байте порядок с шагом 0х05 - 0х10 0х15 0х20 0х25 а надо вроде как 0х10 0х15 0х1А 0х1F 0х24
Если начинать с 0А, то тоже по градуса прибавляет.
Надо с первым разобраться а потом прибавлять второй.
странно что шаг у первого байта, то 25 то 26, может там десятичное число, например 25,25 и за четыре набегает 26
Я просто вводил 0D а мог ввести допустим 5С и было бы какое то среднее значение между 0C и 0D примерно 49гр.дома проверю.
Во всех температурах второй байт обычно от 00 до 99 это и есть от 1 до 10 гр. Единственный байт из температу не цифровой EB это масло. Но я посмотрю , может не правильно скопировал.
первый байт он использует только значения из поста 401. например 0x1B 0x00 дает 417гр
вот значение температуры масла
0x0C, //Engine Oil Temperature // 57гр
0xEB, //Engine Oil Temperature
0x0c= DEC 12 c нулевым вторым байтом он выдает 34гр
0xEB= DEC 235 превращаются в остальные 23 гр
в формуле возможно что второй байт делится на 10, 235/10=23,5 понятно что он округляет до 23 и прибавляется уже к 12 переведенном в 34гр
меняем на F
0x0C, //Engine Oil Temperature // 59гр
0xFB, //Engine Oil Temperature
0xFB= DEC 251 превращаются в остальные 25 гр здесь тоже, 251/10=25,1
еще пример 0x0F c нулевым байто это 111гр
0x0F ,0xFB выдает 136. тут опять видно что FB добавил тех же 25гр 251/10=25,1
уже есть какаято закономерность
но если такая фича
0x0С, //Coolant Temperature (с нулевым вторым байтом байтом это 34гр)
0x37, //Coolant Temperature с этим байтом имеем 39гр тоесть 0x37 превратились в 5гр
0x0С, //Coolant Temperature (с нулевым вторым байтом байтом это 34гр)
0x76, //Coolant Temperature с этим байтом имеем 46гр тоесть 0x76 превратились в12гр
0x0D, //Coolant Temperature (с нулевым вторым байтом байтом это 59гр)
0x37, //Coolant Temperature с этим байтом имеем 59гр тоесть 0x37 превратились в 6гр
0x0D, //Coolant Temperature (с нулевым вторым байтом байтом это 59гр)
0x37, //Coolant Temperature с этим байтом имеем 71гр тоесть 0x37 превратились в 2гр
все я запутался, тихо медля неспеша, крыша едет с чердака
Что разгадано
0x0A,0x00, 25,6 % //Accelerator Position Sensor Signal // ((256*A)+B)/100 0k
0x11,0x89, 499 mg/strk //Mass Air Flow Sensor // ((256*A)+B)/10 0k
0x04,0x30, 1,1 bar //Boost Pressure // ((256*A)+B)/1000 0k
0x03,0x20, 800 rpm //Engine Speed // (256*A)+B ok
0x0B,0x55, 290 mg/strk //EGR Command (Exhaust-Gas Recirculation Command)// ((256*A)+B)/10 0k
0x03,0xA3, 0,9 bar //Barometer Sensor //((256*A)+B)/1000 0k
0x04,0x2D, 1,1 bar //Boost Pressure Command // ((256*A)+B)/1000 0k
0x03,0x20, 800 rpm //Desired Engine Idle Speed // (256*A)+B ok
0x0C,0x36 31 km/h //Vehicle Speed // (256*A)+B ok
0x0C,0x36 31 km/h //Vehicle Speed Command // (256*A)+B ok
0x03,0x0A, 7,8 mg/strk //Desired Injection Quantity // ((256*A)+B)/100 0k
0x02,0xD9, 7,3 mg/strk //Injection Quantity // ((256*A)+B)/100 0k
0x08,0xA3, 22,1 *CA //Start of Delivery // ((256*A)+B)/100 0k
0x01,0x90, 400 rpm //Pump Speed // (A*255)+B ok
0x01,0x5C, 3 % //EGR Pulse Ratio (Exhaust Gas Recirculation) // ((256*A)+B)/100 0k
0x02,0x76, 6,3 % //Swirl Level Control Solenoid Valve Pulse Ratio // ((256*A)+B)/100 0k
0x12,0x03, 46,1 % //Pulse Ratio Boost Pressure Solenoid Valve // ((256*A)+B)/100 0k
что не разгадано
0x01,0x7B, 4,4 *CA //Desired Injection Start
0x01,0x92, 4,7 *CA //Actual injection start
0x0B,0xDB, 30 *C //Intake Air Temperature
0x0C,0x37, 39 *C //Coolant Temperature
0x0C,0xEB, 57 *C //Engine Oil Temperature
0x0C,0x27, 38 *C //Fuel Temperature
все формулы одинаковые, единственное различие, это всею формулу (А*256)+В либо не делишь вообще либо на 10,100 или 1000. это чуток пугает или удивляет, не знаю. по идеи и к *CA и к *C должно было подойти , но увы не выходит. вот такие вот пироги. шифрую дальше, хотя нет, спать, мозги уже не варят.
может температуру все таки стандартным пидом запрашивать? ))
дело в том что там четыре температуры , масло, двеигатель, входящего воздуха, и топлива. жалко упускать. надо немного отключится от этого, попробую скетч сообразить, а потом свежим взглядом опять шифровать
может по поводу температуры охл. жидости такая формула? A*26-278+B/5
все таки если ты понял как второй байт себя ведет, напиши все байты прибавляющие от 1 до 10
ок. секунду, щас
хотя второй байт всё таки больше 10 тоже может прибавлять . Вот ещё такая формула кое где подходит масла или входящего воздуха)) A*26-278+B/10
B/5 кстати вообще не катит
A*26-278+B/10 короче вот эта формула и округлять B/10 после 0,6 это 1
щас проверю
блин, вроде канает. :). осталась это
0x01,0x7B, 4,4 *CA //Desired Injection Start
0x01,0x92, 4,7 *CA //Actual injection start
и кряк кwp закончин, Хе Хе Хе......
так правильно ((A*26)-278)+B/10 или так ((A*26)-278)+(B/10) ?
единственное для если первый байт 0x0B или 0x0C то такая формула A*26-278+B/10
если 0х0А или меньше A*26-277+B/10
если 0х0D или больше A*26-279+B/10
получается до 0A 277 после до 0D 278 и поле 279. на трех этапах 1 градус разница. я думаю можно оставить среднее 278
так правильно ((A*26)-278)+B/10 или так ((A*26)-278)+(B/10) ?
и что думаешь по последнему гвоздю в гроб KWP ? с этой формулой
0x01,0x7B, 4,4 *CA //Desired Injection Start
0x01,0x92, 4,7 *CA //Actual injection start
да зачем сделаем все три так точнее
щас скетч для проверки сделаю
ок, как скажишь ты у нас шеф повор а я поворешка
вот накидал то что мне нужно
тока нужно глянуть или байты правильно подсчитал, вроде правильно, считал от "0"
вот скетч, отсылает в сериал температуру двигала и значения байтов, отправляешь с сериал порта + или - для изменения значение байта
Только в мониторе сериал порта установи "Нет конца строки" справа внизу.
Выбор байта для изменения значение осуществляется отправкой символа "a" или "b"
ну и сравниваешь температуру в сериал порте с опкомом, узнаешь точность нашего измерения))
ок. щас попробую
а как изменять байт. сразу скажу что в опкоме -273 а сериале -277
послать а и ввести значение?
отправляешь с сериал порта "+" или "-". как в сериале -277 ? у меня в сериал сначала 0 температура пока байты не начнешь менять.
на температуру ниже -40 не стоит обращать внимания, там точность нас не интересует
"a" послал, это значит выбран байт A для изменения отправкой + или -. Т.е. послал "b" далее посылаешь "+" например. байт B изменяется на +0x01. Не обязательно каждый раз "b" отправлять. Один раз выбрал b и далее шлешь плюсы или минусы, потом опять можно "a" выбрать и т.д.
по идее ошибка должна быть не более 1 градуса, так как округление нада настраивать, ну где то может 2 градуса из-за суммы ошибок преобразования первого байта и корявого округленгия второго
первый байт меняет и совпадения идеальные. меняя воторой байт такое
до 8E... serial 21 opcom 22
после serial 22 opcom 22
от 98... serial 23 opcom 23
после 99... serial 23 opcom 24
от 9A... serial 23 opcom 24
от A0... serial 24 opcom 24
от A3... serial 24 opcom 25
от AA... serial 25 opcom 25
гдето так.
просто округление вообще не настроено - апример число 13,9 он воспринимает как 13. Надо учиться программировать, там через double делается или float. Все не сложно, надо почитать просто. А так то хорошая точность
да. точность супер. глаянь последнюю формулу. я уже тут ее мучаю, никак не дается.
0x01,0x7B, 4,4 *CA //Desired Injection Start
0x01,0x92, 4,7 *CA //Actual injection start если есть желание и возможность, конечно.
у меня выходит что то в этом роде (((A*256)+B)+70)/100 щас проверю на других показаниях
измени мой скетч под байты этого параметра, и сделай статистику побольше, чтоб 0 был байт А потом 0 байт B, потом вместе изменяеются. С моим скетчем проще статистику собирать
ок. потом буду щарапать скетч для этого
вот скетч actual inj с твоей формулой
формула для actinj неправильная A: 0x04 B: 0x92 Actual Injection: 12.40 а должно быть 13,7
да , подбераю по скетчу, блин очень удобно
подобрал вроде формулу. есть проблема
0x01(DEC=1), 0x95(DEC=149) отображение 4,7 *CA
формула такая ((A*3)+B/100)+0.3 получаем ((1*3)+149/100)+0.2 итог 3+1.49+0.2 = 4.69
проблема такая что в мониторе показывает 4.2 тоесть 0.49 гдето теряется. если делать без +0.2
(A*3)+B/100 получает (1*3)+149/100 итог 3+1.49 = 4.49 но отображает в сериале 4.00 , где засада?
Там где 149/100 попробуй 149/100.00
да сработало. формула работает. берусь за скетч
(A*3)+(B/100.00)+0.30;
MaksVV накидал сетч, что то не так, глянь пожалуйста.
у меня не компилится, из за конфликта библиотек походу
у меня компилится. такое ощущение что он не читает сообщение и не пересчитывает, на мониторчике бред, по ходу пересчитаный из ноля что ли
вот что у меня на экране
дак конечно, где у тебя проверка на принятое сообщение 2101? щас поправлю
блин , вот я лапух. да еще глянь может там че можно выкинуть лишнее, так будет красивее.