2017. augusztus 16., szerda

ECU #9

Az elmúlt időben elég sok feltétlenül szükséges teendő adódott az autóval, így egy darabig mellőztem az ECU-val kapcsolatos további vizsgálódást. Továbbá eléggé jól is viselkedett az autó, így nem sürgetett semmi.
Az egyik hosszabban elhúzódó elfoglaltság a már említett kinyomócsapágyas történet volt, amit tulajdonképpen körülölelt egy klímával kapcsolatos hiba is. Nevezetesen az, hogy a télen elszökött belőle a gáz egy része. Működött, de inkább csak langyosat fújt hideg helyett, így még tavasszal lefejtésre került a maradék. A szivárgás helyének megkeresésére és a feltöltésre csak júniusban került sor, azonban a javítás után annak ellenére sem akart bekapcsolni, hogy látszólag minden rendben volt. A mechanikus részek jól működtek, mivel a kompresszor direktben kötve működött és hűtött rendesen. Miután egy autóvillamosságis is feladta a keresést 1-2 nap után, magamnak kellett megtalálnom és kijavítanom a hibát. Egy tárolt hibakód (P0530 - A/C Refrigerant Pressure Sensor Circuit Malfunction) alapján elég jól be tudtam szűkíteni a forrást, de a szenzor többszöri, köztük egy újra való cseréje sem hozott javulást. Természetesen megvolt a kapcsoló, a biztosítékok és a relék ellenőrzése is. Mind jó volt. A vezetékek ellenőrzéséhez viszont be kellett szereznem egy megfelelő kapcsolási rajzot beszereznem. Ezen az látszott, hogy a szenzor 3 vezetéke egyenesen az ECU-ba megy. Kimértem és szerencsére nem volt szakadás sem. Nem maradt más mint maga az motorvezérlő. Vagyis a program.
Még akkor tavasszal éppen úgy jött ki, hogy a gáz lefejtése után pár nappal írtam fel az 12594688AH (12594690) programot, ami minden más tekintetben hibátlanul működött hónapokon át. Viszont a klíma nem működik vele. Visszaírtam hát a korábbi 09391263BA programot, amiben nulláztam az EGR térképet, és a klíma megjavult.
Azt gyanítom továbbá, hogy a 12594688AH-val vesztettem némi dinamikát is, és elképzelhető, hogy (részben) ennek is köszönhető a Referencia #4 gyengébb eredménye. Az előtte-utána közvetlen összehasonlítás kicsit nehézkes, mivel a programok felírása után a korrekciós értékek beállásáig mindig kicsit élettelenebb az autó, de a 09391263BA-val mintha picit jobban húzna.

Ezután újra elkezdtek motoszkálni a fejemben az ECU-val kapcsolatos kérdések, így ismét szántam egy kis időt a régi módszernek, de semmi újat nem sikerült felfedeznem. A figyelmem egyre erősebben a disassemble felé terelődött.

Checksum
Rövidre fogom. Sikerült megfejtem a checksum számítási algoritmust és programot írnom rá. Ezt számos (10+) nálam lévő különböző programon teszteltem, és mindegyiken a megfelelő eredményt produkálta. Továbbá kipróbáltam élesben is. Felírtam egy olyan módosítást MPPS-el, ahol előzőleg manuálisan korrigáltam a checksum értékét.

Újabb pipa. Nem vagyok többé a KESS-hez kötve.

A korábbiakkal ellentétben azonban most nem adom ki a kezemből sem a metódust, sem a megtaláláshoz vezető út leírását. Legalábbis egyelőre.
Ha a jövőben mégis megteszem, akkor ezt a posztot fogom frissíteni.

Ha valakinek addig szüksége van checksum korrekcióra, vagy EGR kiírásra (térkép nullázással) az nyugodtan keressen meg.

------------------------
    Update
------------------------

Eltelt közel egy hónap. Hezitálásom oka azzal kapcsolatosan, hogy megosszam-e a checksum számítás módját abból adódott, hogy sejtésem szerint a világon összesen sincsenek túl sokan, akik ezt ismerik. Amit pedig csak kevesen ismernek, annak jelentős az értéke, ennél fogva jobban is vigyázunk rá. Az, hogy kevesen ismerik részben annak is köszönhető, hogy viszonylag keveseknek fűződik hozzá érdeke, hogy időt és energiát fordítsanak a tudás megszerzésére. És az is lehet, hogy tévedek, de valószínűsítem, hogy akik chiptuning-al foglaloznak csak hardveres vagy szoftveres eszközt vásárolnak és sohasem jutnak a know-how birtokába. Z22SE-től függetlenül, rendkívül kevés konkrét számítási metódus leírásával akadtam össze, pedig elég sokat kutattam a témában. Mindamelett az információ szabad áramlásának jelentős előnyei vannak. Ha valaki ezt előttem nyilvánosságra hozta volna, akkor az ezzel eltöltött időmet más hasznosabb tevékenységre is tudtam volna fordítani. Remélem, hogy segíthetek vele valakinek, aki majd más hasznos dolgot tud végezni ehelyett. A számítás visszafejtésében nem mellesleg én sem jutottam volna el idáig, ha nem lett volna segítségemre számos különböző publikusan elérhető információ. Egyszóval nincs több titkok. Lássuk a medvét!

Azt már említettem, hogy az idők folyamán egyértelművé vált, hogy az ECU valamilyen Motorola mikroprocesszorra épül. Később kristályosodott ki, hogy ez az m68000-es szériának, amelyet m68k-nak is neveznek valamelyik tagja lehet. Azt a mai napig nem tudom, hogy pontosan melyik, de szerencsére eddig úgy tűnik ennek nincs is különösebb jelentősége. A processzor típusának meghatározása elengedhetetlen annak érdekében, hogy megtaláljuk a megfelelő disassembler-t, amely a binárisból előállítja a gépi kódot. A gépi kód már jól struktúrált és messze jobban olvasható, mint a hexa kód, de az értelmezése még így sem könnyű feladat. Ráadásul a konkrét esetben borzalmasan nagy méretű a program. Csak a lényegi részt számítva körülbelül 75000(!) sor.

Számos ingyenes disassembler létezik (68kd , vda68k , dasm68), amelyekkel egy többé-kevésbé megfelelő kódot elő lehet állítani, de a legjobbnak az online disassembler (ODA) -t találtam. Használata rendkívül egyszerű, rengeteg platformot támogat (csak az m68k különböző változataiból több, mint 40-et), és ez adta a legjobb kimenetet, mind olvashatóság mind pontosság tekintetében. Szinte csoda, hogy létezik. (meg is ijedtem, amikor a múlt hónapban pár napon keresztül egyáltalán nem volt elérhető)

A visszafejtett gép kód első ránézésre nem volt sokkal barátságosabb, mint annak idején a hexa kód. Néhány parancs önmagában ugyan elég jól értelmezhető, de egy-egy programrészlet megértéséhez rengeteget kell gondolkodni és kombinálni. Ha valaki szeretne elmélyedni a témában, de kevés vagy egyáltalán nincs tapasztalata, akkor MarkeyJester tutorial-ját ajánlom. Elképesztően informatív, olvasmányos és szemléletes. Nagy kár, hogy bizonyos utasítások hiányoznak belőle. És sajnos nem is tűnik úgy, hogy valaha felkerülnek majd az oldalra. Itt lehet még találni némi kiegészítést, de ami egyik helyen sincs az benne lesz (minden részletre kiterjedően, de szárazan) a Programming Refrence Manual -ban.

Én emellett beleolvastam néhány a témával foglalkozó könyvbe is. Pl:
Assembly Language Programming for the M68000 Family / Thomas P. Skinner
Microprocessors and Microcomputer-Based System Design 2nd Edition / Mohamed Rafiquzzaman

Ahhoz, hogy a 75000 sorból közelíteni lehessen a checksum számítás helyére kellett valami kapaszkó. A checksum pontos helye éppen ilyen volt. Mérget vettem volna rá, hogy a 8000-nek szerepelnie kell a metódusban. Így is lett, de utólag már látom, hogy a 8000-es szám említése nélkül is vígan meg lehetett volna írni ezt a részt. Kell néha egy kis szerencse is.
A "0x00008000" mindössze 5 helyen szerepel a programban és ebből 3-szor ebben a viszonylag kis részletben. A 8000 mellett megjelennek olyan kitüntetett helyek is mint a 4000, az immo-s blokk kezdete, vagy a 20000 a programkód eleje, de szerepel a program szinte legvége 7fffc és 7fffe, valamit egy új szereplő a 17fff, ami az adatblokk vége körüli cím. Az első pillanattól fogva tudtam, hogy jó helyen járok, de olyan szinten zavaros az egész, hogy csak nagy nehezen sikerült kibogarásznom a lényeget, és minden részletet továbbra sem értek.

Checksum subroutine

.data:00022e7e 24 78 94 66                      moveal 0xffffffffffff9466,%a2
.data:00022e82 28 78 94 6a                      moveal 0xffffffffffff946a,%a4
.data:00022e86 47 f9 00 00 80 00                lea 0x00008000,%a3                   
.data:00022e8c 4b f8 40 00                      lea 0x00004000,%a5
.data:00022e90 43 f9 00 02 00 00                lea 0x00020000,%a1
.data:00022e96 42 83                            clrl %d3
.data:00022e98 16 38 94 64                      moveb 0xffffffffffff9464,%d3
.data:00022e9c 4a 8a                            tstl %a2
.data:00022e9e 67 04                            beqs 0x00022ea4                # if a2=0 then go to 0x00022ea4 else ignored
.data:00022ea0 b5 cc                            cmpal %a4,%a2
.data:00022ea2 65 18                            bcss 0x00022ebc                # if a2>=a4 then go to 0x00022ebc else ignored
.data:00022ea4 42 78 94 56                      clrw 0xffffffffffff9456
.data:00022ea8 45 f8 05 46                      lea 0x00000546,%a2            # 0x00000546 to a2 /// data at 0x00000546 = 00 00 00 00
.data:00022eac 28 72 36 04                      moveal %a2@(0000000000000004,%d3:w:8),%a4
.data:00022eb0 24 72 36 00                      moveal %a2@(0000000000000000,%d3:w:8),%a2
.data:00022eb4 21 cc 94 6a                      movel %a4,0xffffffffffff946a
.data:00022eb8 52 78 81 54                      addqw #1,0xffffffffffff8154
.data:00022ebc 02 7c f8 00                      andiw #-2048,%sr
.data:00022ec0 38 38 94 56                      movew 0xffffffffffff9456,%d4
.data:00022ec4 00 7c 07 00                      oriw #1792,%sr
.data:00022ec8 b5 cb                            cmpal %a3,%a2
.data:00022eca 64 06                            bccs 0x00022ed2                # if a2>=8000 then go to 0x00022ed2 else ignored
.data:00022ecc b5 cd                            cmpal %a5,%a2
.data:00022ece 65 02                            bcss 0x00022ed2                # if a2<4000 then go to 0x00022ed2 else ignored
.data:00022ed0 24 49                            moveal %a1,%a2                # a2=20000
.data:00022ed2 d8 5a                            addw %a2@+,%d4                # add a2@ to d4 then increment a2
.data:00022ed4 d8 5a                            addw %a2@+,%d4                # ...
.data:00022ed6 d8 5a                            addw %a2@+,%d4                # ...
.data:00022ed8 d8 5a                            addw %a2@+,%d4                # ...
.data:00022eda d8 5a                            addw %a2@+,%d4                # ...
.data:00022edc d8 5a                            addw %a2@+,%d4                # ...
.data:00022ede d8 5a                            addw %a2@+,%d4                # ...
.data:00022ee0 d8 5a                            addw %a2@+,%d4                # ...
.data:00022ee2 4e 71                            nop                            # no operand
.data:00022ee4 4e 71                            nop                            # ...
.data:00022ee6 4e 71                            nop                            # ...
.data:00022ee8 4e 71                            nop                            # ...
.data:00022eea 4e 71                            nop                            # ...
.data:00022eec 4e 71                            nop                            # ...
.data:00022eee 4e 71                            nop                            # ...
.data:00022ef0 31 c4 94 56                      movew %d4,0xffffffffffff9456
.data:00022ef4 52 78 81 54                      addqw #1,0xffffffffffff8154
.data:00022ef8 21 ca 94 66                      movel %a2,0xffffffffffff9466
.data:00022efc b5 cc                            cmpal %a4,%a2
.data:00022efe 65 bc                            bcss 0x00022ebc                # if a2<a4 then go to 0x00022ebc else ignored
.data:00022f00 08 39 00 06 00 00 80 1d          btst #6,0x0000801d
.data:00022f08 66 30                            bnes 0x00022f3a
.data:00022f0a b5 c9                            cmpal %a1,%a2
.data:00022f0c 65 12                            bcss 0x00022f20                # if a2<a1 then go to 0x00022f20 else ignored
.data:00022f0e 49 f9 00 01 7f ff                lea 0x00017fff,%a4            # 0x00017fff to a4
.data:00022f14 45 f9 00 00 80 00                lea 0x00008000,%a2            # 0x00008000 to a2
.data:00022f1a 21 cc 94 6a                      movel %a4,0xffffffffffff946a
.data:00022f1e 60 98                            bras 0x00022eb8                # branch always to 0x00022eb8
.data:00022f20 98 79 00 00 80 00                subw 0x00008000,%d4            # d4-0x00008000
.data:00022f26 98 79 00 07 ff fc                subw 0x0007fffc,%d4            # d4-0x0007fffc
.data:00022f2c 98 79 00 07 ff fe                subw 0x0007fffe,%d4            # d4-0x0007fffe
.data:00022f32 44 44                            negw %d4                    # negate d4
.data:00022f34 31 c4 94 58                      movew %d4,0xffffffffffff9458
.data:00022f38 60 34                            bras 0x00022f6e
.data:00022f3a 49 f8 05 2a                      lea 0x0000052a,%a4
.data:00022f3e 4a 03                            tstb %d3
.data:00022f40 67 0a                            beqs 0x00022f4c
.data:00022f42 49 f8 05 46                      lea 0x00000546,%a4
.data:00022f46 28 74 36 00                      moveal %a4@(0000000000000000,%d3:w:8),%a4
.data:00022f4a 60 0c                            bras 0x00022f58
.data:00022f4c 98 79 00 07 ff fc                subw 0x0007fffc,%d4
.data:00022f52 98 79 00 07 ff fe                subw 0x0007fffe,%d4
.data:00022f58 98 54                            subw %a4@,%d4
.data:00022f5a 44 44                            negw %d4
.data:00022f5c 45 f8 94 58                      lea 0xffffffffffff9458,%a2
.data:00022f60 35 84 32 00                      movew %d4,%a2@(0000000000000000,%d3:w:2)
.data:00022f64 52 03                            addqb #1,%d3
.data:00022f66 0c 03 00 05                      cmpib #5,%d3
.data:00022f6a 65 08                            bcss 0x00022f74
.data:00022f6c 42 03                            clrb %d3
.data:00022f6e 08 f8 00 00 8c 3a                bset #0,0xffffffffffff8c3a
.data:00022f74 11 c3 94 64                      moveb %d3,0xffffffffffff9464
.data:00022f78 52 78 81 54                      addqw #1,0xffffffffffff8154
.data:00022f7c 42 b8 94 66                      clrl 0xffffffffffff9466
.data:00022f80 60 00 fe fc                      braw 0x00022e7e                # branch always to 0x00022e7e


A fontosabb részeket kommenteltem, de kicsit sajnos szétcsúszik a megjelenítés. A legnehezebben a különöző regiszterek kezdeti értékének meghatározása ment. Sokáig megzavart például a 0x00000546 a2-be betöltése. Azt hittem, hogy onnan kezdődik az összeadás, és csak később vettem észre, hogy az azon a helyen lévő adat számít mégis. A bccs és a bcss váltakozásába is könnyű belezavarodni, és nekem kicsit nehéz volt memorizálni, hogy mikor melyiknek kell kisebbnek, nagyobbnak vagy egyenlőnek lenni. A blokk kezdetét könnyű volt azonosítani, mert a megelőző sorban egy rts szerepel, de a mai napig rejtély, hogy ha a végén állandóan visszaugrik a 22e7e-re, akkor vajon hogyan lép ki ebből a ciklusból. (talán a státusz regiszter működésében van a magyarázat)

Végül ezt hoztam ki belőle:
# First stage
    addw 0000 - 4000
# Second stage
    addw 20000 - 7FFFF
# Third stage
    addw 8000 - 17FFF
# Fourth stage
    subw 8000
    subw 7fffc
    subw 7fffe
    negw
Így már nem is tűnik bonyolultnak. Írtam rá egy python szkriptet, ami első körben csak a meglévő binárisok egy részénél adta a jó eredményt, a többinél viszont furcsán eltért.

Calculated/Original: a7b4 / dfb4 // d4: 0x82fe /// diff: -0x3800 //// 09391263 BA.ori
Calculated/Original: dfb4 / dfb4 // d4: 0x4afe /// diff: 0x0 //// 09391263BA_original.ori
Calculated/Original: a2da / d5da // d4: 0x7dfe /// diff: -0x3300 //// 09391283BC_original.ori
Calculated/Original: 4a13 / 4a13 // d4: 0x4afe /// diff: 0x0 //// 12210453 EB.ori
Calculated/Original: 63a4 / 96a4 // d4: 0x7dfe /// diff: -0x3300 //// 12594688AH.Bin


Némi tesztelés után viszonylag hamar rájöttem, hogy ha a 0x4000-en lévő "word" érték nem "FFFF", akkor azzal korrigálni kell! Javítás után hibátlan:

Calculated/Original: dfb4 / dfb4 // d4: 0x82fe /// diff: 0x0 //// 09391263 BA.ori
Calculated/Original: dfb4 / dfb4 // d4: 0x4afe /// diff: 0x0 //// 09391263BA_original.ori
Calculated/Original: d5da / d5da // d4: 0x7dfe /// diff: 0x0 //// 09391283BC_original.ori
Calculated/Original: 4a13 / 4a13 // d4: 0x4afe /// diff: 0x0 //// 12210453 EB.ori
Calculated/Original: 96a4 / 96a4 // d4: 0x7dfe /// diff: 0x0 //// 12594688AH.Bin
Calculated/Original: e87f / fc8f // d4: 0x5f0e /// diff: -0x1410 //// 09391263BA_egrmapoff_idle850_170815.ori
Calculated/Original: e87f / e87f // d4: 0x4afe /// diff: 0x0 //// 09391263BA_egrmapoff_idle850_170815_chkd.ori


Az utolsó előtti sor egy tartalmában módosított bináris, ahol megfelelő módon jelzi, hogy nem helyes az ellenőrző összeg. Az utolsóban az összeget a megfelelőre átírva már helyes eredményt ad. Ez volt az, amit később fel is töltöttem, és megbizonyosodtam a megfelelő működéséről.

És ez még csak 80 sor volt a 75000-ből, a teljes programnak csak a 0.1%-a.

2017. július 3., hétfő

Eibach

A legutóbbi KYB rugó nagyjából megfelelt az igényeimnek és valószínűleg nem is cseréltem volna már később sem, de ismét kaptam egy tippet kommentben. Ezúton is köszönet. Felhívták a figyelmem egy feltehetőleg beragadt készletre az Eibach Pro-Kit E6546-140 -ből (a 870kg-s első tengelyterheléssel), amit eredetileg is kerestem még a ZH előtt. Mivel a hátsó rugók ügyében gyakorlatilag semmit sem léptem előre és mivel a korábbi listaárhoz képest most nagyjából 2/3-ad áron volt kapható a teljes Eibach készlet, nem lehetett kihagyni. Ez az ár éppen csak több, mint amiért csak a két hátsó rugót terveztem venni.
A szetthez már tavasszal hozzájutottam, de a kinyomócsapágyas történet kicsit megkavarta a dolgokat, így a beszerelés némileg elcsúszott. Éppen a kinyomócsapágyas szerelést követő napon, nagyjából este 8 körül tudtam hozzáfogni. Kissé fáradt és fejben kevésbé összeszedett voltam ezért a dokumentálás nem lett annyira alapos, mint szerettem volna, de a lényeg szerencsére megvan.

A szett

Az első rugókon található azonosítók: KBA 90438 / EW 6518001VA / NQ 6521
Saját mérés alapján mindössze 247 mm a szabad magassága, és 12,1 mm a rugóanyag vastagsága. A külső átmérő és menetemelkedés mérése kimaradt. Tömege annak ellenére több (1770 g), hogy méretben jóval a KYB alatt marad.

A hátsó rugókon található azonosítók: NU / EW 6539002HA
319 mm a szabad magassága és 11 mm a rugóanyag vastagsága. 1910g a tömege. Az eredeti gyári hátsó rugó, amin GW jelölés van 337 mm magas, szintén 11 mm anyagvastagságú és 1730g tömegű.

Előhalásztam a most már szépen meggyarapodott rugókészletemet az összehasonlítás kedvéért.

Meglehetősen impozáns az eredeti és az Eibach közti különbség. Ráadásul utóbbi kézzel összenyomva puhábbnak is érződött mindegyik másiknál. Abban a pillanatban nem sokban fogadtam volna, hogy valóban jó lesz majd.

A szerelés
Az elsők cseréje szinte már csukott szemmel megy, elég gyorsan végeztem mindkét oldallal. A visszarakáshoz a rugóösszehúzót éppen csak a rend kedvéért (ne a menetet terheljem) raktam fel. Két kézzel össze tudtam annyira nyomni, hogy a toronycsapágy beült a helyére.

A hátsók tekintetében már közel sem volt ennyire egyszerű a helyzet. Most szedtem ki először és bár a lengécsillapító alsó bekötési pontja kicsit megizzasztott (emelőn nincs túl sok mozgástere a hosszú erőkarnak), de ez is kinn volt gyorsan.
Megjegyzem, hogy éppen szerelés előtt mostam le az autót, de a rugóstagot eltakaró dobbetét mögül 0,5 kg homokot sikerült kiszednem. Nem éppen szerencsés ilyen szempontból a hátsórész kialakítása.

A kiszedés utáni látvány, azonban borzasztó volt. Így nézett ki bal oldali szár:

A jobb oldali is csak kicsit volt jobb állapotban. Attól tartottam, hogy ha leszedem a csavarokat, akkor jön vele a menet is és már nem lesz mire visszarakjam. Egy ideig morfondíroztam, de lassan kezdett hajnalodni, így jól befújtam csavarlazítóval és hagytam ázni.
Másnap úgy döntöttem leszedem, lesz ami lesz. (Vasárnap lévén új gátló beszerzés nem jöhetett szóba.) Menetmetszővel megigazítottam a menetet, és csodák csodája mégsem ette át az egészet a rozsda. A szár tetején lévő hatlapú részt viszont meggyengítette annyira, hogy a kulcs elforgott rajta. Végül befogtam satuba és sikerült a csavart megindítanom. Ez lett belőle:

Hátul szintén annyival kisebb volt a rugó, hogy az összehúzón alig kellett tekerni. Egymás mellett:


Eredmény
Az elsők éppen hozták azt a csökkenést, amit KYB-nél hiányoltam, a hátsók viszont az első leeresztésnél magasabban voltak, mint a gyárival. Kicsit bemozgattam, így egy picit csökkent, de nem sokkal. Pontosabban:

Előtte
A földtől a sárvédőív pereméig:
Bal elöl: 63.8 cm         Jobb elöl: 64.0 cm
Bal hátul: 65.5 cm        Jobb hátul: 65.3 cm

Lökhárító alsó éle: 15.7 cm
Segédkeret (legalsó pont): 11.8 cm

Utána
A földtől a sárvédőív pereméig:
Bal elöl: 62.5 cm         Jobb elöl: 63.1 cm
Bal hátul: 64.8 cm        Jobb hátul: 64.7 cm

Lökhárító alsó éle: 14.5 cm
Segédkeret (legalsó pont): 10.8 cm

Néhány 10 km és egy tankolás helyretette aztán a hátulját is. Nem mértem újra, de legalább 1 centit biztosan lejjebb ereszkedett. Ha van egy kis súly hátul, akkor a kis magasságkülönbség is eltűnik. Habár nekem így is tetszik.

Azóta már túl vagyok több 100 km-en, és azt kell mondjam nem véletlen dícsérik az Eibach-ot. Már a legelejétől érződött, hogy kanyarban sokkal jobban tartja az autót, annak ellenére, hogy normál körülmények közt egyáltalán nem romlott a komfort. Az egyetlen negatív hatás nagyobb úthibákon jeletkezik. Ahol eddig is ütött, ott most még nagyobbat üt. Talán egy rövidített szárú gátló segítene ezen a problémán is.

2017. június 7., szerda

Kinyomócsapágy

Beülök, indítom, berakom hátramenetbe. Éppen csak egy kicsit akarok tolatni...
Az első gondolatom az volt, hogy hú de lent fog, a második, hogy vajon miért gurul még mindig, ha a kuplungpedál teljesen be van nyomva. Leállítottam gyorsan nehogy neki menjek a kerítésnek, és utolsó próbálkozásként megigazítottam a szőnyeget, de akkor már tudtam, hiszen a tavalyi felújításkor nem cseréltük a kinyomócsapágyat. Tudatosan vállaltam a kockázatot, mert elég sok minden lett cserélve ezen kívül is, és valahol meg kellett húzni a határt. Nem lett szerencsém, de jöhetett volna sokkal rosszabbkor is.
Végül odébbmentem még egy 20 kilométert. Menet közben már nem is tűnt fel igazán, hogy valami gond lenne, de a megérkezés után 1-2 órával az autó alatt keletkező két tenyérnyi tócsa minden kétséget kizáróan bizonyította, hogy az első gondolat helyes volt.

Előkészület
A csere messze meghaladja a lehetőségeimet ezért szerelőt kellett keresni, ráadásul gyorsan. A hét elején jártunk és a hétvégére nagyon kellett volna az autó, a következő héten pedig lejárt a műszaki. Azok, akik bármilyen módon számításba jöhetnének:
- Szerelő1: Ő végezte a tavalyi felújítást, de nagyon messze lakik.
- Szerelő2: Ő volt most legközelebb az autóhoz, megbízható, de sokszor szenved időhiányban.
- Szerelő3: Ő lakik most a legközelebb hozzám, megbízom benne is, de közel sem dolgoztattam vele még annyit, mint Szerelő2-vel (nem csak a Kéken). Ő sem szokott unatkozni.

Szerelő3-nál már be volt jelentve az autó műszakiztatni a következő hétre, így őt kérdeztem meg először hátha be tudná vállani egy kicsit előbb. Nem tudta. Szerelő2 viszont nagy meglepetésemre mondott egy pénteket azzal a kitétellel, hogy talán átcsúszik hétfőre. Szerelő1 most kiesett a körből, mert abban sem voltam biztos, hogy az autó a saját lábán elér-e a következő sarokig. A szükséges alkatrészeket, ha tehetem legtöbbször magam szerzem be. Az elég széles választékból a gyári mögötti legdrábább mellett döntöttem. Ez a LUK 510003810 volt. Egy jó kedvezménnyel pedig annyira nem fájdalmas az ára (persze nem is olcsó).

Csere
A péntek persze elcsúszott. Túl szép lett volna. A hétvégét megoldottam a kölcsönkapott Pirossal. Hosszabb távon már a Kék megvétele óta nem mentem vele. Egyébként ég és föld a különbség a kettő között, de ez már egy másik történet.
Következő héten hétfőn Szerelő2 hívott, hogy inkább átvinné az autót Szerelő4-hez, mert ő most éppen jobban ráér és az ottani csápos emelővel sokkal egyszerűbb lenne a művelet. Szerelő2 rendszeresen átad munkát Szelelő4-nek, akit én személyesen nem ismerek, annak ellenére, hogy korábban a Fehér és a Piros is járt már ott néhányszor. Bár konkrét problémám soha nem volt vele kapcsolatban, valamiért nem szerettem, ha oda megy az autó. Talán csak az ismerettség hiánya miatt. Ha pedig ezt előre tudom, akkor inkább maradok Szerelő3-nál, de eltelt egy hét, az előre bejelentett időpont elúszott, a műszaki pedig 4 nappal később lejárt. Nem volt igazán mozgásterem, így rábólintottam.
Kedden a kinyomócsapágy ki lett cserélve, csütörtökön pedig a műszaki is le lett tudva. Pénteken mentem az autóért. Nagy volt az öröm, hogy visszakaptam az autót, bár a műszaki adatlapon van egy furcsa megjegyzés: "motor/hajtómű olajfolyás". Gondoltam csak a kiömlött fékfolyadék nyomai, mert amúgy nem folyt belőle semmi és Szerelő2 szerint sem lényeges.
Aznap már sokat nem mentem vele, de egyből érezhető lett, hogy ideje volt a csere. Sokkal finomabban lett a kuplung működése. A váltáskori rándítás azonban nem tűnt el sajnos most sem.

Feketeleves

Nem sokáig tartott az örömöm. Másnap teljesen véletlenül az autó alá néztem és egy "szép" tócsa fogadott, de most nem színtelen, mint amilyen a fékfolyadék volt, hanem fekete és egyértelműen a váltó és a motorblokk illesztésénél szivárgott. Nehezen tudnám leírni azokat az érzéseket, amik akkor bennem kavarogtak a kevesebb, mint 1 éve felújított csöpögő motor kapcsán. Ott csak egyetlen helyen szivároghat a motorolaj, mégpedig a hátsó főtengelyszimeringnél. Az természetesen nem lehet véletlen, hogy éppen most ment tönkre és rögtön értelmet nyert az adatlapon lévő megjegyzés is. Valamit tehát elronottak szerelés közben. Nem sokkal később az is feltűnt, hogy a 1-be és 2-be néha nehezen veszi a fokozatot (elakad és csak újbóli előre-hátra mozdulattal lehet sebességbe rakni), és indítás után (hidegen) is előjött egy addig nem jelentkező kellemetlen vibráció. A következő munkanapon hívtam Szerelő2-t, aki védve a mundér becsületét hárított, hogy főtengelyszimering nem lehet, mert ahhoz a részhez nem nyúltak, a kuplungot és a lendkereket nem szedték le. Az én meglátásom viszont csak az volt, hogy előtte nem folyt utána meg igen, és ami folyik az fekete. Tehát vagy Szerelő4 vétett valami hibát, vagy ha esetleg fennállt már előtte is a probléma (nem), akkor azt nem vette észre. Végül abban maradtunk, hogy átmegyek és alánézünk. Erre csak a rá következő héten tudtam sort keríteni. A mennyiséget érzékelteti, hogy az addig eltelt időben szinte teljesen átitatódott az autó alá tett kartonlap. Szerelő2-nél az inspekció során az egyik alsó csavar meglazítása után megerősítést nyert, hogy nem kicsit folyik, de megbontás nélkül nem megállapítható, hogy honnan ered. Bár fekete, valahogy mégsem tűnt motorolajnak. A fékfolyadék tartályból viszont nem hiányzott egy csepp sem. Vissza kellett vinni Szerelő4-hez. Ezen a ponton bevontam Szerelő1-et a történetbe, hátha tud valami okosat mondani, de sajnos távgyógyítani ő sem tud, a tények pedig eléggé egyértelműek. Másnap Szerelő2 hívott, hogy Szerelő4 megállapította, hogy ez motorolaj és a hátsó főtengelyszimering a problémás, amihez ő nem nyúlt. Pont. A teljes ledöbbenés csak akkor következett, amikor kiderült mindezt újbóli megbontás nélkül sikerült megállapítania. Harmadnap reggelre eldöntöttem bármi is legyen a hiba Szerelő4 soha többet nem nyúlhat az autóhoz. Minden előzetes egyeztetés nélkül elmentem az autóért és bár személyesen nem volt jelen egy kollégájától próbáltam a hogyanokra és miértekre választ kapni. A rövid beszélgetés közben elhangzó legújabb érvre "szerintünk nem is folyik", már tényleg semmit nem tudtam mondani, sarkon fordultam és eljöttem.
Az utam egyenesen Szerelő2-höz vezetett, ahol hangot adtam csalódottságomnak. Elmondtam, hogy bár meglehetősen körülményes számomra inkább újra elviszem Szerelő1-hez az autót, mert ő legalább darabokból is biztosan össze tudja rakni, úgy hogy utána problémamentesen működik. Szó szót követett, és újra alánéztünk. Az újabb mintavétel pedig újdonságot hozott. Ennek a szagán egyértelműen érződött, hogy nem motorolaj és nem is fékfolyadék, hanem váltóolaj. A váltóolajnak megvan a maga jellegzetes szaga, amit leírni nehezen lehet, de ha valaki érezte már, akkor biztosan megismeri. Ez teljesen új megvilágításba helyezte a dolgokat, mert amíg a főtengelyszimeringen még csak-csak el lehet vitatkozni kinek a hibája, addig a váltóolaj folyás egy ilyen helyzetben gyakorlatilag biztosan szerelési hiba. Szerelő2 ezután már hiába hívta Szerelő4-et, utóbbi csak megerősítette az általa addig elmondottakat: a motorolaj folyik.

Helyreállítás
A következő két hétben senkinél nem volt szabad kapacitás, és bár egy ideig úgy nézett ki Szerelő2 mégis elvállalja a javítást, a folyamatos időhiány miatt ebből nem lett semmi. Felkerekedtem és ismét Szerelő1-hez vezetett az utam. Sportszerű nehezítés volt, hogy neki aznap kellett mindenképpen jóra megcsinálni az autót, mert onnan nem szerettem volna autó nélkül hazautazni. Felkészülve a legrosszabbakra berendeltünk minden számításba jöhető cserealkatrészt.
Reggel 8 után érkeztem. Az akadozó váltóra nagyon hamar meglett a magyarázat. Egy távtartó anyát elfelejtettek visszatenni. Kész szerencse, hogy éppen oda esett és időközben sem hagytam el. Ott középen az a fekete:

Azt ugyan sejtettem, hogy ez a csere sem pár perces művelet lesz, de azt nem gondoltam volna, hogy közel akkora szívás a szétszedés, mint egy évvel korábban. Ahhoz, hogy mindenhez rendesen hozzá lehessen férni kiszedtük a váltót, amihez le kellet venni a bölcsőt, amihez az apróságokon felül le kellett akasztani a kormányművet, ki kellett venni a féltengelyeket és a hátsó motortartó bakot, ki kellett kötni a stabilizátor rudat és stabilizátor pálcákat és le kellett venni a kipufogó első csőszakaszt.
A leengedett 1,6-1,7 liter váltóolaj szép piros volt, de a váltóharangban minden fekete volt. Rosszul látszik, de legalább 1 deci olaj is megült az alján:

A kinyomócsapágy kiszerelése után gyorsan meg is lett a hiba forrása:

A szimering rugója nem lett a helyére illesztve és elnyomta a gumiperemet. Ez még akkor is egyértelmű szerelési hiba, ha gyárilag esetleg már így szállították. A szimering nem cserélhető külön, csak a kinyomócsapággyal együtt, de szerencsére nem szakadt el és nem deformálódott maradandóan, így visszakerült a kivett darab. A paszta letakarítása és a rugó helyére illesztése után ilyen lett:

A kuplungtárcsa és a szerkezet egy részét is befedte az olaj.

Visszaszerelés előtt ezek is és a váltó is alapos tisztítást kapot.

A váltó oldali motortartó bak ugyan nem tűnt túlságosan rossz állapotúnak, de érezhetően több mozgást engedett, mint az új. Cseréltük.

Kérdéses, hogy Szerelő4 milyen módon végezhette a cserét, mert bizonyos csavarokon nem igazán látszott, hogy egy hónappal korábban bontva lettek volna.
Végül este 8 előtt jöttem el. Azóta néhány 100 km-t tettem meg. Az alja száraz, a fokozatokat úgy veszi, mint előtte és azt a rendellenes vibrációt sem éreztem azóta.
Az eset sok szempontból tanulságos volt számomra.

Update: Szerelő4-től végül visszakaptam a munkadíjat.

2017. május 30., kedd

Referencia #4

A Referencia #3-hoz képest újra módosítottam a szívó oldalon egy kicsit, de még mindig nincs egy teljes posztra való anyag a korábbival együtt sem. Előbb-utóbb lesz még hozzá írni való és akkor pótolom ezt is. Az ECU #7-ben pedig említettem, hogy mértem egy kigyorsítást. Ezt eredetileg nem akartam publikálni, de a mostani mérés nem azt hozta, amit vártam, így a teljesség kedvéért közzéteszem. Legyen ez #3.5.

Gyorsítás másodikban #3.5



A mérés február közepén volt, amikor még elég hideg volt, de a pontos hőmérsékletre nem emlékszem. A téli kereket használtam és csak kevés súlytöbbletem volt a minimumhoz képest. Akár mérhettem volna egy 0-100-at is, és akkor már az #5-nél tartanánk. Utólag már sajnálom, de nem tettem.

40-90 km/h-ig 4.052 s (2.083-6.135).

Összehasonlítva a többi méréssel lentebb.

100 km/h pontosan
A valós (GPS-el mért) 100 km/h-t elég régen néztem össze az órával, de arra emlékeztem, hogy az órán 105 km/h körül lehet. Most megnéztem újra, és le is fényképeztem. Az emlékezetem nem csalt, viszont a korábbi mérések egy kicsit igen. A kamera síkja annyival odébb van az óra középvonalától, hogy a felvételen a 105 inkább 107-108-nak néz ki.
Ekkor megy az Kék 100 km/h-val:

A pontosság kedvéért megemlítem, hogy tulajdonképpen a tempomat sem tudta fix 100-on tartani a sebességet. 99,5 és 102 közt váltakozott folyamatosan. A kép pedig ugyanazzal a telefonnal lett készítve, amivel a GPS-t mértem, tehát nem tudtam az éppen megfelelő időpillanatot lekapni. Továbbá ez a kép csak most helytálló, mert a gumik kopása egyre nagyobb különbséget eredményez a mutatott és a valós érték közt. Ez egyben azt is jelenti, hogy a korábbiaknál mégsem volt akkora az eltérés, de ha így nézzük az eddigi 0-100-as idők nagyjából 2 tizeddel rosszabbak, mint ahogy eddig gondoltam. Ezentúl a mai méréssel kezdve a képen lévő állást veszem 100 km/h-nak.

0-100



A #3-as és a #3.5-es mérés óta beköszöntött a jó idő. Most ~17 °C volt, de szinte üres tankkal és egyéb túlsúly nélkül mentem. 

0-100 km/h: 9.464 s (4.201-13.665)
60-90 km/h: 2.678 s (8.402-11.080)

Az eredményen kissé meglepődtem, mert ellentétben a múltkorival most úgy éreztem nagyon megy. Lehet, hogy ebben van szerepe a kipörgésgátlónak. Talán láthtató is, hogy sokkal kevésbé törik meg a lendület az indulás után. Bevillog ugyan, de nem fogja vissza a motort igazán. Lehet, hogy a melegebb idő miatt a gumik már jobban tapadnak, de az is, hogy az 12594690-ös programban szabadabban van engedve a TC működése. Mivel a 60-90-as idő szinte teljesen megegyezik a koábbival és a váltások sem voltak rosszabbak, csak a rajt lehet a problémás.

Gyorsítás másodikban



40-90 km/h: 4.529 s (4.370-8.899)

Itt a 0-100-al ellentétben már menet közben is borzalmasnak éreztem. Futottam is mégegyet, de az sem lett jobb. Függetlenül a külső körülményektől ennél biztosan vannak jobb pillanatai.

Az eddigi eredmények összesítve

0-100km/h
  • Ref #1: 10.892 s (+0.2)
  • Ref #2: 9.733 s (+0.2)
  • Ref #3: 8.798 s (+0.2)
  • Ref #4: 9.464 s
60-90km/h
  • Ref #1: 3.203 s
  • Ref #2: 2.862 s
  • Ref #3: 2.663 s
  • Ref #4: 2.678 s
40-90km/h
  • Ref #1:    ~5.450 s
  • Ref #2:      4.857 s
  • Ref #3:      4.305 s
  • Ref #3.5: 4.052 s
  • Ref #4:      4.529 s

Persze jó lett volna látni legalább néhány tizednyi javulást, de leginkább az zavar, hogy az EGR kiírásának hatását nem tudtam megmérni, vagyis inkább látványossá tenni, mert a valóság az, hogy mostanában már egész kellemes dinamikát produkál az autó.

2017. április 13., csütörtök

ECU #8


A korábban minden ECU-val (szoftver verzióval) megjelenített EGR grafikont ezután már nincs értelme elkészíteni, így az adatelemzés most lekorlátozódott a maradék kettőre. Ugyan jobban is el lehetne mélyedni a részletekben és az eddig nem ismert jellemzők megfejtésében, de erre szokás szerint most sem volt idő. A fuel trim és a kopogásszenzor értékei is jól mutatnak a 12594690-es verzióban.
A LTFT értéke gyakorlatilag végig a negatív 0-(-5) tartományban mozog:
Ez a 12215794 verzió (09391263 BA) EGR kikapcsolt változatához képest is hoz némi javulást:

Kopogási hajlmaban szintén kedvezőbb kicsit (eltérő a skála):

Ennek ellenére érzetre nem hozott sem simább járást, sem dinamika javulást. Egy dolog viszont rosszabb lett.

Alapjárat
Az eredeti alapjárati fordulatszám sem optimális már a könnyű lendkerékhez és az eltávolított balansztengelyekhez, de a körülbelül 100 fordulattal alacsonyabb már kissé zavaró is. Nem fullad, nem nehezebb az indulás sem lényegesen, viszont több rezonancia keletkezik. Az alapjárathoz tartozó térképpel kapcsolatban eléggé bizakodó voltam, hiszen különbözik két programban és elég jól meghatározott értéke van. Annyi nehezítés volt a dologban, hogy jelen esetben csak 1 dimenziós számsorozatról beszélhetünk. Vagy pontosabban fogalmazva több 1 dimenziósról. Legalábbis az a feltételezés, hogy az alapjárati fordulatszámot alapvetően csak a vízhőmérséklet határozza meg. Elképzelhető, hogy vannak korrekciós térképek is, de az most nem lényeges. A korábban hivatkozott fájlban az szerepel, hogy van egy normál alapjárati térkép, egy a légkondihoz (A/C), egy a menet közbeni és egy a menet közben is működő klíma állapotához. A fordulatszám mindenhol a bejegyzett érték 12.5-szerese. Nem igazán értem miért jó ez a szám. A maximális érték 8 biten így már 3000 RPM feletti. A jóval szerencsésebbnek tűnő 10-es szorzóval is elégséges 2550 lenne. De nem számít, bizonyára megvan az oka. Éltem a feltételezéssel, hogy itt is hasonló multiplikátort használt a szerző. Jó szokásomhoz híven most is elkezdtem automatizálni. Azt tudtam, hogy a beállított értékeknek valahol 600 és 1500 RPM között (48/120) kell lennie, viszont nem tudtam, hogy hány lépcsőben van definiálva, vagyis milyen hosszú az 1 dimenziós térkép. A logok alapján nehéz pontosan belőni, hogy adott hőmérsékleten milyen értéket tart, mert egy 50-100 fordulatos tartományban folyamatosan ugrál. Sejtésem ugyan volt, de olyan mérésem nem, ami kifejezetten az alapjárat meghatározására ment rá. Már épp terveztem ilyet, de végül nem lett rá szükség. Az automatával a bináris megfelelő részéből könnyűszerrel kilistáztam azokat a számsorokat, ahol az értékek a megadott tartományba estek és monoton csökkenő képet mutatnak. Legalább 5-6 értékben biztos voltam ezért kezdetben annyival vágtam neki. Később ugyan finomítottam a keresési algoritmuson is, de annyira sok találat volt, hogy nem igazán vezetett sikerre. Egyértelmű bizonyítékot az szolgáltatott volna, ha a másik program megfelelő helyén egy hasonló, de kissé módosított számsorozat áll. Azonban a programokban van némi csúszás egymáshoz képest (látható a térképek kezdeti értékeinél is) ezért ez jóval bonyolultabb lett volna. Az automatával kudarcot vallottam. Már fejben készültem a mérésre, de végül csak ránéztem manuálisan is. WinOLS-ben egymás mellé lehet tenni két ablakot úgy, hogy a különbségeket kiemeli és akár tetszőleges értékkel el is csúsztatja. A már meglévő térképek jól elkülöníthetőek és tudtam, hogy nem ezekben lesz, ami nekem kell. A maradék részen pedig viszonylag sok az egyezés, így nem maradt túl sok lehetőség (azért volt elég, hogy túl egyszerű se legyen). Találtam is egy számsort, ahol a stabilnak tűnő 12,5-szeres érték 700 és 800 RPM-et adott a különböző változatokra:
108    104    100    88    84    80    76    68    64    64    64    64    64    64    64    64    64
108    104    100    84    78    78    78    68    64    60    56    56    56    56    56    56    56
Beírtam a 12594690-be a 12215794 értékeit, hogy ha mégis valami más lenne nagyon ne nyúljak mellé. Ez esetben azonban elsőre ment. (Na jó, korábban már volt egy próbám a 1706a térképpel, de az tényleg csak egy kósza ötlet volt.) Ezután beállítottam egy számomra kényelmes 850-es fordulatot. Ilyet:
108    104    100    84    78    78    78    68    68    68    68    68    68    68    68    64    64
1350   1300   1250   1050   975   975   975   850   850   850   850   850   850   850   850   800   800
A felső értékeket kicsit lejjebb vettem, hogy egy esetleges túlmelegedett állapotban kisebb legyen a hőterhelés, de ilyen úgysem nagyon fordulhat elő. Bár a skálázást nem ismerem, azt megnéztem, hogy 100 °C-ig nem ejti 850ől lejjebb. Ott pedig kapcsol a venti. A skálázás kiderítése nem lenne nehéz feladat csak be kellene állítani egy ilyesmit és mérni:
108    84    108    84    108    84    108    84    108    84    108    84    108    84    108    84    108
Egyelőre ennek kevés lenne a hozadéka, így nem töltöm vele az időt.
A térkép a 1701a azonosítót kapta, és frissítettem vele a táblázatot (v2.1) is. Ez az első 1 dimenziós térkép. A táblázatban más változás nincs.
A példafájlban egymást követték a különböző állapotok alapjárat térképei, azonban itt a közelben sincs hasonló. Kérdéses, hogy mi alapján állítja azokat, mert az biztos, hogy különböznek. Egyelőre nem zavar, hogy nem tudom, mert klímát viszonylag ritkán használok a menet közbeni értékkel sincs különösebb gondom. Elképzelhető, hogy egy jóval rövidebb térképet vagy simán csak egy szorzót alkalmaz az alapértékhez képest.

12591333 (12590370 YS)  
 
Azt említettem, hogy a 12591333 és a 12594690 között csak egészen minimális az eltérés. Elkezdtem reménykedni, hogy hátha csak az utóbbiban kapcsolták ki az EGR-t. Ha így lett volna nagyon könnyű lett volna megtalálni az ezért felelős kódrészletet. Feltöltöttem és most először azért drukkoltam, hogy működjön az EGR. De nem akart. Nincs ekkora szerencsém. Így most azt tudom, hogy ezen kettő kivételével az összes többi programban aktív. Ennek alapján már jó eséllyel megtalálható, de eléggé megnehezíti, hogy nem tudom pontosan mit is keresek. Valószínűleg csak 1 bájtot, amit kontextus nélkül elég nehéz beazonosítani, de nincs kétségem afelől, hogy kiderítem ha tudok eleget tesztelni. Már van is egy jelöltem, hamarosan kipróbálom. 

Járműazonosítók
Némileg a véletlen műve, hogy ráleltem egy furcsaságra. Többször előfordul, hogy a KESS-el felírt programot újra visszaolvasom. Jelenleg ez az egyetlen módja, hogy megtudjam a checksum-ot és hogy egy önmagában akár MPPS-el is visszatölthető bináris birtokába jussak. Szóval az tűnt fel, hogy a hardverazonosító a visszaolvasott programban mindig 12210453EB-re áll vissza, bármi is szerepeljen a feltöltöttben. Értelemszerűen írás közben változik meg. Innen kicsit továbbgondoltam. Esetleg nem csak a hardverazonosító változik, hanem mondjuk az egész blokk. És akkor lehet, hogy nem is kell semmi azonosítónak benne lennie íráskor. Kitöröltem tehát az egész részt 0x4000-tól, és felírtam úgy. A sejtésem beigazolódott. A visszaolvasás után minden szépen a helyén volt ismét, többek közt a biztonsági kód is. Azaz egy kiolvasott program mindig az autóhoz tartozó kódot fogja tartalmazni, akármit is töltünk rá.

STO 1315a EGR off
Kíváncsi voltam, hogy a kinullázott EGR térkép a többi programot hogyan befolyásolja. Különösképpen az STO érdekelt. Gyors próba utána továbbra is azt tudom mondani, mint eddig. Nem érzem az átütő erőt. A felső közép tartományban valamivel jobban megy ez biztos, de alul talán egy picit rosszabbul. A kopogási hajlma sem változott érdemben, így újfent elvetettem a hosszabb távú használatát.

Akárhogyis nézzük, az első posztban szereplő 5 célom közül 2 kipipálva. Néha azonban kezdem azt érezni, hogy az összehasonlítós/mérős/kitalálós módszer kezdni elérni a határt és ha tovább akarok menni, akkor csak a disassemble segíthet (akár csak részlegesen). Elkezdtem barátkozni az assembly-vel, de nem számítok rá, hogy a közeljövőben bármit is sikerülne ezzel elérnem, ahhoz még elég kemény dió.

2017. március 30., csütörtök

ECU #7

Majdnem úgy kezdtem ezt a bevezetőt, hogy a mai posztban alig lesz jó hír, de az utolsó pillanatban mégis csak mellém szegődött a szerencse, így jut egy az elejére és a végére is. Sajnos az utóbbi időben ismét kevesebb volt a szabadidőm ezért jóval kevesebbet tudtam foglalkozni az autóval, de továbbra is igyekszem.

Az első jó hír az, hogy a 1315a térkép kiírása mégis jelentős változást hozott. A korábbi posztban szereplő bizonytalanság annak volt köszönhető, hogy 50-100km-t kellett menni az autóval mire ténylegesen beállt minden. Azóta már több 100km-en vagyok túl, a hatás pedig tartós és egyértelműen érződik. Az azóta történt néhány logolás alkalmával pedig egyszer sem volt EGR aktivitás. Főleg az alacsony-közepes fordulatszám tartományokban hozott javulást. 2000-es fordulat környékéről sokkal jobban megindul, mint korábban. Ez egyezik azzal a tartománnyal, ahol a kiírás után a long term fuel trim értéke 0-ra változott. Időközben csináltam egy reset-et (áramtalanítás) is, de ez után is ugyanúgy kellett várni valamennyit a végleges hatáshoz, további javulás pedig nem jelentkezett.
Az OP-COM-ban van lehetőség resetelni a O2 loop értékeket. A reset előtt kiírja az aktuális állapotot, ez a korábbi -5%-ról -2%-ra esett vissza.

Nem tudom ez pontosan mit jelent, mert szerintem nem egy állandó értékkel kellene korrigálnia az egész tartományban, de ha a korrekció 0-hoz közelít az valószínűleg jó. Mivel szeretem tudni mennyi az annyi, mértem egy gyorsulást is. A 0-100-nak itt nem lett volna sok értelme, ezért csak a 2-esben kigyorsítást néztem. Javult a Referencia #3 -hoz képest, de hogy mennyit, azt egyelőre nem árulom el. Majd a Referencia #4 -ből kiderül.
A végleges cél azonban nem csak a működés kiiktatása, hanem a szelep teljes eltávolítása lenne. Lehúztam az EGR szelep csatiját, de a második indításkor már villant is a check engine. EGR szelep alacsony feszültség hibát dobott. A szelep helyén tartásával még talán együtt tudnék élni, de van egy aggodalmam, miszerint ha nem teljeskörűen van kikapcsolva, akkor benne maradhat például egy gyújtás vagy egyéb nem kívánatos korrekció. Szóval jelentős az előrelépés, de ez csak részeredmény.

100
Kíváncsiságból tankoltam 100-as oktánszámú benzint. Elsősorban érezhető menetdinamika változásra és a kopogási hajlam változására voltam kíváncsi. Menetdinamika terén gyakorlatilag semmi pozitívumot nem éreztem. A kopogási hajlam kiderítéséhez futottam egy tesztkört. Ez kicsit más volt, mint a korábbiak, mivel viszonylag hosszan mentem egyenletes tempóval, kevesebb alacsony fordulatos kigyorsítás volt, így az eredmény közvetlen nem összevethető a korábbiakkal. Ennek ellenére egyértelműen kedvezőbb, még ha nem is tünteti el teljesen a jelenséget. Hosszabb távon egyelőre nem tervezek 100-as benzint használni.

KESS, MPPS, OP-COM
A két kütyüt azóta is felváltva használom (már amennyit az utóbbi időben használtam), és kiderült egy újabb nem elhanyagolható jellemzőjük. Míg az MPPS és az OP-COM jelentős terhelést jelent a CPU-nak, addig a KESS gyakorlatilag semmit. Ez mindkettőnél az írásra és az olvasásra is igaz. Utóbbival így jóval hosszabb lehet a laptop akkujának üzemideje. Ha nincs a közelben hálózati csatlakozási lehetőség, akkor fontos lehet, főleg ha utána még logolni is kell. Mindkét szoftvert virtuális gépben használom, ezért próbáltam korlátozni a CPU-t (execution cap), de csak annyit értem el, hogy lassabb lett az írás/olvasás, illetve az élő adat mintavételi gyakorisága. Jelenleg nincs módom rá, hogy kipróbáljam, de elképzelhető, hogy egy erősebb géppel pontosabb adatokat is ki lehetne nyerni az OP-COM-ból.
Ezen felül a KESS-nél állandó jelenség maradt, hogy olvasás után le kell venni az akkusarut, különben nem reagál az ECU semmire. Szerencsére írás után ilyenre nincs szükség. Az MPPS-nél ezzel szemben csak a már korábban említett 4 hibakódot dobja.
KESS-nél nem szeretem, hogy nehézkes az összeállítás, ezért ha lehet inkább az egyetlen kábel MPPS-t használom. Persze a checksum számítási képesség továbbra is nélkülözhetetlenné teszi a KESS-t.

Checksum
Az ellenőrző összeg számításának módja nagyobb szabadságot adna írásnál, és furdalta is az oldalam a kíváncsiság, ezért próbálkoztam egy keveset (sokat) a megfejtésével.

Ahhoz, hogy az ellenőrző összeget előre lehessen számítani és előre be lehessen írni a programba 3 dolgot kell ismerni:
- az érték (eredmény) helyét,
- a számítás módját, azaz az algoritmust,
- és azt a tartományt, amire az algoritmust alkalmazza.

Az eredmény helye, mint ahogy azt korábban írtam meglett. A másik kettő kiderítése azonban számos kísérlet ellene sem sikerült. Találtam egy jó oldalt  CRC visszafejtés témában, amiben szerepel egy viszonylag könnyen érthető leírás a CRC-ről általában. Utóbbiban a 3-dik fejezetig jutottam (azaz éppen csak elkezdtem), de utána úgy döntöttem, hogy az időmet inkább olyan dolgokra fordítom, amiből nagyobb hasznom származik. A kísérletezés már korábban kezdődött, és párhuzamosan folyt az egyéb tevékenységek mellett, de egyre több és több időmet vette igénybe. Leírom pontosan milyen módszerekkel is próbálkoztam:

- Jacksum-al az összes 16 bites értéket adó algoritmust végigszámoltattam néhány programra.
- A binárist különböző jellegzetes helyeken elvágtam (pl: 0x8002 (32780) után) és csak a fennmaradó részre végeztem a számítást.
- Az elvágást majdnem sikerült egyszerűen automatizálni a "for((i=32780;i<=33070;i+=1)); do dd bs=1 skip=$i if=./12210453EB.Bin 2>/dev/null | jacksum -a crc16 -E hex; done" paranccsal, de a pipe valahogy nem adja át jól az értéket a jacksum-nak (1024Kb lesz 512Kb helyett), ezért használhatatlan.
- Ezért írtam python szkriptet, ami PyCRC-t használva megvalósítja a fenti automatizmust.
- A fenti python alapot felhasználva készítettem egy újabb szkriptet, ami a bájtokat egyesével összeadja, a 16 bites felső limitnél pedig körbeforgatja. Ezt természetesen különböző tartományokban. Arra később jöttem rá, hogy ez a számítási módszer nem lehet helyes, mert a tesztfájlban egy viszonylag kis mértékű módosításra is jelentősen változik az ellenőrző összeg értéke.
- Ezután lépett életbe a fenti cikk 3-dik fejezetében is szerelpő osztó keresése. Továbbra is különböző tartományokra. Egy tesztfájlon nézve itt már a nagy számok törvénye értelmében volt pozitív eredmény, de a második tesztfájllal összevetve mindig kiderült, hogy helytelen.
- Aztán elkezdtem forgatni az értéket (az összes permutációjával, pl: 1234 -> 3412), és ha jól rémlik még offset-el is bonyolítottam, de ebben már nem vagyok biztos.

Talán mondanom sem kell, de ezeknek a műveletekek elég nagy a számítási igényük, így nem volt elég csak kitalálni mit is szeretnék, majd megírni a szkriptet, de hosszú-hosszú órákat is várni kellett az eredményekre. Bár próbáltam mindenre odafigyelni, annyi különböző módszert vizsgáltam, hogy 1-2 hiba így is becsúszhatott, és az is lehet, hogy túlléptem a helyes megoldáson. Nem tartom valószínűnek, de elképzelhető. Ezek után egyelőre felhagyok a további próbálkozással.

FTVV
A tankszellőztetés térkép megtalálása könnyű prédának látszott, de egyelőre ez is kifogott rajtam. Az élő adatok közt ugyanolyan százalékos értéket produkál, mint az EGR. Könnyű hasonló táblázatba rendezni. Az egyik mért adathalmazból egy gyönyörű térképet is sikerült kreálni. Azonban két baj van vele. Az egyik, hogy a táblázatomban nincs hasonló térkép, még akkor sem, ha teszem azt felcserélem a tengelyeket.

09391263 BA
[[   0   20   28   36   44   52   60   68   76   84   92  100]
 [ 800    8    5    0    0    0    0    0 1111 1111 1111 1111]
 [1200    1    2    0    0    0    9   52 1111 1111 1111 1111]
 [1600    3    3   14   10   10   62   73   90   98  100 1111]
 [2000    9   19   32   54   72   88   98  100  100  100 1111]
 [2400   28   44   56   70   85   94  100   99  100  100 1111]
 [2800   31   51   68   88   97  100   99  100  100  100 1111]
 [3200   38   64   86   98  100  100  100  100  100  100 1111]
 [3600   36  100   97  100  100 1111 1111  100  100  100 1111]
 [4000   21   84  100  100  100  100  100  100  100  100 1111]
 [4400   79 1111 1111 1111 1111 1111 1111  100  100  100 1111]
 [4800 1111 1111 1111 1111 1111 1111 1111 1111 1111  100 1111]
 [5200 1111 1111 1111 1111 1111 1111 1111 1111 1111  100 1111]
 [5600 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111]
 [6000 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111]
 [6400 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111]] Fuel Tank Ventilation Valve


A másik, hogy ha másik logot nézek, akkor pontosan ugyanerre a lekérdezésre ez az eredmény: 
09391263 BA
[[   0   20   28   36   44   52   60   68   76   84   92  100]
 [ 800    2    1    0    0 1111    0 1111 1111 1111 1111 1111]
 [1200    1    3    0    0    0    0   33 1111 1111 1111 1111]
 [1600    1    1    3    3    9   13   22   39   39    0 1111]
 [2000    2    4    8   22   23    7   14   38   37   32 1111]
 [2400   19   31   31   29   27   34   61   48   17    2 1111]
 [2800   23   38   37   52   66   44   28   25   47   27 1111]
 [3200    8   27   61  100   72    0   47   34   14   28 1111]
 [3600    0 1111 1111    0 1111    0 1111 1111   20   40 1111]
 [4000    0 1111 1111 1111 1111 1111 1111    0    0   42 1111]
 [4400 1111   50  100 1111 1111 1111  100 1111    0   25 1111]
 [4800 1111 1111 1111 1111 1111 1111 1111 1111   50    0 1111]
 [5200 1111 1111 1111 1111 1111 1111 1111 1111  100  100 1111]
 [5600 1111 1111 1111 1111 1111 1111 1111 1111  100 1111 1111]
 [6000 1111 1111 1111 1111 1111 1111 1111  100  100 1111 1111]
 [6400 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111]] Fuel Tank Ventilation Valve


Vagy egy még másikra ez:
09391263 BA
[[   0   20   28   36   44   52   60   68   76   84   92  100]
 [ 800    3    3 1111    0 1111 1111 1111 1111 1111 1111 1111]
 [1200    0    4    0    0    4    9   69   80   93 1111 1111]
 [1600    7   18   27   17   44   70   78   88  100  100 1111]
 [2000   17   18   23   46   72   88   91   95   96   92 1111]
 [2400   14   28   36   47   62   55   67   79   79   83 1111]
 [2800   20   30   37   57 1111   41   74   75   72   81 1111]
 [3200    0 1111 1111 1111 1111 1111 1111   45  100   88 1111]
 [3600    0   67 1111 1111  100 1111 1111 1111   74   91 1111]
 [4000   82 1111 1111 1111 1111   82 1111 1111 1111   81 1111]
 [4400 1111   37 1111 1111 1111 1111 1111 1111 1111   78 1111]
 [4800 1111 1111 1111 1111 1111 1111 1111 1111 1111   78 1111]
 [5200 1111 1111 1111   83 1111 1111 1111 1111   74   81 1111]
 [5600 1111 1111 1111 1111 1111 1111 1111 1111 1111   79 1111]
 [6000 1111 1111 1111 1111 1111 1111 1111 1111 1111   83 1111]
 [6400 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111]] Fuel Tank Ventilation Valve


Köszönő viszonyban sincsenek egymással. Megpróbáltam hát más tengelyértékekkel nézni. Kiegészítettem egy korábbi grafikont, és valóban mintha a pedál pozíció jobban illeszkedne, mint a MAP értéke.
De nem. Ugyanabba a két hibába futok bele. A pedál után próbáltam sebesség, levegő hőmérséklet, vízhőmérséklet alapján is, különböző határértékekkel, de vagy nem hasonlítanak a mérések eredményei vagy nincs ilyen a táblázatban. Annyira ezt sem tartottam fontosnak, így egy időre ezt is félretettem. Innen három olyan irányba mozdultam tovább, ami segíthet majd ezt és a hasonló problémákat is megoldani:
    - meg kell tudni milyen tengelyértékek tartoznak az egyes térképekhez, azzal jóval könnyebb lenne azok azonosítása,
    - ki kell egészíteni a táblázatot, hátha kimaradt belőle valami,
    - tovább kell kutatni pulikus információk után (pl: pontosan hogyan is működik a szellőztető szelep).

Tengelyértékek
Az elmélet szerint valahol lennie kell egy összerendelésnek, ami a térképekben szereplő értékeknek értelmet ad. A nyilvánvaló lehetőség, miszerint minden térkép kezdeti címe, azaz a térkép első bájtjának programban elfoglalt pozíciója alapján könnyű szerrel fellelhető lesz, hamar, néhány manuális keresés után kudarcba fulladt. Elég sok térképre vonatkozóan van 1-2, néhány esetben több olyan érték a programban, ami lehetne a kezdőértékük, de közel sem mindre, ráadásul ezen értékek körül sincs olyan jellegzetes ismétlődő minta, ami arra engedne következtetni, hogy tengely definícióval állunk szemben. Könnyen jött a következő ötlet. Lehetséges, hogy a pozíció nem a program elejétől, hanem egy másik résztől számítódik (pl: 0x8000-től). Így például a 1317a térképre nem "828F"-ként, hanem csak "028F"-ként hivatkozna, azaz lenne egy offset. Ismét nekiálltam automatizálni. Kiválasztottam néhány térképet és azokra futtattam a számítást. Attól függően, hogy melyik térképeket választottam, nagyjából 10-15 térkép egyidejű keresése után már nem nem talált közös offset-et. Itt is próbálkoztam a permutációkkal, de az sem hozott eredményt. Talán mégsincs ilyen összerendelés, vagy csak nem az összes térképre, vagy nem általános a módszer, vagy ismét csak elnéztem valamit. Míg a checksum-nál úgy éreztem a végetlenségig próbálkozhatnék a különböző eljárásokkal, itt egyszerűen kifogytam az öteletekből.

Táblázat
Unalmas perceimben (nem) újra és újra előszedtem a WinOLS-t és nézegettem a számokat. Sikerült még néhány új térképet kifacsarni a az adathalomból. Most olyan 120 körül járhatok. Pontosan nem tudom, mert nem álltam neki megszámolni, a WinOLS-ben viszont néhány nem térképet is nyilvántartok, ami torzítja az ottani adatokat. Ezen felül pedig elkezdtem feldolgozni a maradék rendelkezésre álló programjaimat. A 12590370 YS volt az első, és miután rájöttem, hogy a 12594688 AH alig különbözik az előbbitől, már ezzel is készen voltam. A kettő közti különbség egyetlen nyilvántartott térképet sem érint.
Egyébként kezd bennem élni a gyanú, hogy az ECU jelölése nem sokat jelent a rajta lévő program szempontjából. Legfeljebb annyit, hogy melyik az a kezdeti programverzió, amit a gyártáskor rátöltöttek. És csak a tényleges programban szereplő verziószám számít.
Előállt a táblázat második verziója.

PCMHacking.net
A tankszellőzés működésének részleteivel kapcsolatban ugyan nem találtam sokmindent, de ráakadtam a címben szereplő oldalra, ahol rengeteg DELCO ECU-val kapcsolatos információ van. Számomra közvetlenül felhasználható segítséget most sem találtam, de olyat mint ez a teljesen visszafejtett kommentekkel ellátott program igen. Ilyenből van jónéhány és rendkívül hasznosnak bizonyulnak, mert sokkal jobban érthetővé teszi az ECU-k belső logikáját. Nem mellesleg megjelenik benne egy rakás térkép, aminek létezéséről eddig foglalmam sem volt. Amiről meg igen, annak a jellegzetességeiről tudtam meg többet.

Disassemble
Kacérkodtam a disassemble gondolatával, mégha ez csak valószínűleg részleges eredményeket hozna is, de a fenti fájl inkább csak elvette a kedvem, minthogy bátorított volna. Monumentális erőfeszítés lenne egy hasonló létrehozása. Az a PCMHacking alapján nagyjából körvonalazódott, hogy a GMPT-15 Motorola chip-et használ, amit a legnépszerűbb IDA Pro Free változata nem tud lekezelni. Találtam viszont egy másik progit (68kd), amivel sikerült valamilyen assembly kódot varázsolnom, de sokat nem foglalkoztam vele, az értelmezéséhez sokat kellene még tanulnom.

12594688 AH / 12594690

A számos sikertelenség után pedig itt a jó hír a végére. Miután a lehúzott EGR szelep csati hibát dobott, arra gondoltam, hogy magát a működést valószínűleg egyetlen kapcsoló határozza meg. Ez valószínűleg csak egyetlen bájt, amit teljes visszafejtés nélkül gyakorlatilag lehetetlen megtalálni. Azt már korábban ellenőriztem, hogy a 1315a térkép az összes rendelkezésmre álló programban tartamaz adatot, így túl sokat nem is foglalkoztam velük. De aztán az előző posztban egy komment hatására (ezúttal is köszönet) egymáshoz illesztettem a kirakó részleteit. Simán átbillenthették bármelyik programban a kapcsolót anélkül is, hogy a működést leíró térképekhez hozzányúltak volna. Azt pedig tudjuk, hogy a későbbi évjáratokban már a szakszervízekben is inkább kiírták az EGR-t hiba esetén, sőt volt olyan változat, ami a gyárból is EGR nélkül érkezett. Tehát, ha van ilyen programom, akkor az utolsók közül kell legyen valamelyik. A legutolsó pedig nálam a 12594688 AH a 12594690 szoftver verzióval.
Feltöltöttem és mértem egyet, úgy hogy a térképeket érintetlenül hagytam. A tesztkörön OP-COM-al figyeltem az eseményeket, és csodák csodája az EGR aktivitás nem mozdult a 0-ról. Érdekes, hogy ennek elenére már gyújtáson és persze menet közben is jelzi az EGR szelepre jutó feszültségét (1,14V). A tesztkör után ismét lehúztam a csatit és mentem egy kört. Leállítottam és megint mentem. Majd indítottam mégegyet. És nincs hibakód. Azóta összesen ~20-30 km-t mehettem, és annyi biztos, hogy a korábbi kiírás után jelentkező dinamikajavulás itt is megmaradt. Az alapjárat ebben is az eredeti alá megy, és talán egy kicsit a korábban próbált alá is.

Ismét sok a teendő. Ki kell elemezni az új adatokat és valamit kezdeni kell végre ezzel az alapjárattal.