J1939 Járműszimulátor
Járműszimulátor J1939 CAN támogatással
Áttekintés
A Vehicle Simulator ( gva-vehicle-sim ) egy átfogó tesztelési és fejlesztőeszköz a GVA (Generic Vehicle Architecture) platformhoz. Valósághű járműdinamikai szimulációt biztosít integrált J1939 CAN busz üzenetgenerálással , lehetővé téve a hardveres hurok tesztelést fizikai járműhardver igénye nélkül.
A J1939 szimuláció előnyei az üzenetgenerálásban
🎯 Fejlesztési és tesztelési előnyök
Hardverfüggetlen fejlesztés
- GVA alkalmazások fejlesztése és tesztelése fizikai CAN hardver nélkül
- Nincs szükség drága járművezérlő egységekre vagy tesztpadokra
- Párhuzamos fejlesztés több csapatban
Realisztikus jármű viselkedés
- Hiteles J1939 paramétercsoport-számokat (PGN) és gyanús paraméterszámokat (SPN) generál
- Valósághű járműdinamikát szimulál (sebesség, fordulatszám, sebességváltás, fékezés)
- Időszinkronizált érzékelőadatokat biztosít
Költségcsökkentés
- Szükségtelenné teszi a fizikai tesztjárműveket a korai fejlesztési szakaszban
- A virtuális CAN interfész (
vcan0) lehetővé teszi a tesztelést bármely Linux munkaállomáson - Csökkenti a fizikai hardverek kopását
Gyors prototípusgyártás
- Azonnali visszacsatolási hurok az algoritmusfejlesztéshez
- Egyszerű forgatókönyv-létrehozás és -visszajátszás
- Konfigurálható üzenetsebességek és adatminták
Integrációs tesztelés
- J1939 átjáró működésének ellenőrzése
- Teszt adatfolyam CAN-ból DDS témákba
- HMI járműparaméterekre adott válaszának ellenőrzése
Reprodukálható tesztelés
- Determinisztikus járműviselkedés
- Ismételhető tesztforgatókönyvek
- Konzisztens alap a regressziós teszteléshez
📊 J1939 Üzenettámogatás
✅ Teljes mértékben támogatott PGN-ek (a Járműszimulátorban implementálva)
A járműszimulátor aktívan generálja a következő J1939 üzeneteket CAN-on keresztül, és az átjárón keresztül közzéteszi azokat a DDS-ben:
| PGN | Hex | Név | Arány | SPN-ek | Leírás |
|---|---|---|---|---|---|
| 61443 | 0xF003 | EEC2 - Elektronikus motorvezérlő 2 | 50 ms | 91, 92 | Gázpedál helyzete, motor százalékos terhelése |
| 61444 | 0xF004 | EEC1 - Elektronikus motorvezérlő 1 | 100 ms | 190, 512, 513 | Motorfordulatszám (RPM), vezető által igényelt nyomaték, tényleges motornyomaték |
| 61445 | 0xF005 | ETC2 - Elektronikus sebességváltó vezérlő 2 | 100 ms | 522, 523, 524 | Kuplung helyzete, kiválasztott fokozat, aktuális fokozat |
| 61449 | 0xF009 | VDC2 - Járműdinamikai Szabályozás 2 | 100 ms | 1807, 1808 | Kormánykerék szöge, elfordulási sebesség |
| 65253 | 0xFEE5 | ÓRÁK - Motor üzemórái | 1-esek | 247 | Teljes motor üzemóra |
| 65256 | 0xFEE8 | VDS - Jármű iránya/sebessége | 250 ms | 517, 519, 586 | Sebesség a talajhoz képest, iránytű iránya, útvonal |
| 65258 | 0xFEEA | ALT - Magasság | 1-esek | 580 | GPS tengerszint feletti magasság |
| 65262 | 0xFEEE | ET1 - Motorhőmérséklet 1 | 1-esek | 110, 174, 175 | Motor hűtőfolyadék hőmérséklete, üzemanyag hőmérséklete, olajhőmérséklet |
| 65263 | 0xFEEF | EFLP - Motorfolyadék szint/nyomás | 500 ms | 96, 100, 94 | Üzemanyagszint, olajnyomás, üzemanyag-szállítási nyomás |
| 65265 | 0xFEF1 | CCVS - Sebességtartó automatika/Járműsebesség | 100 ms | 84, 597, 598 | Kerékalapú járműsebesség, fékkapcsoló, kuplungkapcsoló |
| 65267 | 0xFEF3 | VP - Jármű helyzete | 250 ms | 584, 585 | GPS szélességi és hosszúsági fok |
| 65269 | 0xFEF5 | AMB - Környezeti feltételek | 1-esek | 108, 171 | Légköri nyomás, környezeti levegő hőmérséklete |
| 65271 | 0xFEF7 | VEP1 - Jármű elektromos áram 1 | 1-esek | 167, 168, 158 | Akkumulátorfeszültség, generátorfeszültség, töltőrendszer feszültsége |
| 65276 | 0xFEFC | DD - Műszerfali kijelző | 1-esek | 182, 183 | Üzemanyag-fogyasztás (L/h), pillanatnyi üzemanyag-fogyasztás |
| 0xEF00 | 0xEF00 | PROP_A - Saját tulajdonú A (IONNIC USM) | 250 ms | - | LED vezérlés az IONNIC USM ES-Key panelhez |
Részletes SPN lista (összes támogatott paraméter)
| SPN | Paraméter neve | PGN | Egység | Felbontás | Eltolás | Hatótávolság |
|---|---|---|---|---|---|---|
| 84 | Kerékalapú járműsebesség | 65265 | km/h | 1/256 km/h | 0 | 0-250 km/h |
| 91 | Gázpedál pozíciója | 61443 | % | 0,4% | 0 | 0-100% |
| 92 | Motor százalékos terhelése aktuális sebességnél | 61443/61444 | % | 1% | 0 | 0-100% |
| 94 | Üzemanyag-szállítási nyomás | 65263 | kPa | 4 kPa | 0 | 0–1000 kPa |
| 96 | Üzemanyagszint | 65263 | % | 0,4% | 0 | 0-100% |
| 100 | Motorolajnyomás | 65263 | kPa | 4 kPa | 0 | 0–1000 kPa |
| 108 | Légköri nyomás | 65269 | kPa | 0,5 kPa | 0 | 0–125 kPa |
| 110 | Motor hűtőfolyadék hőmérséklete | 65262 | °C | 1°C | -40 | -40 és +210°C között |
| 158 | Töltőrendszer feszültsége | 65271 | V. | 0,05 V | 0 | 0-3212 V |
| 167 | Generátor feszültsége | 65271 | V. | 0,05 V | 0 | 0-3212 V |
| 168 | Akkumulátor feszültsége | 65271 | V. | 0,05 V | 0 | 0-3212 V |
| 171 | Környezeti levegő hőmérséklete | 65269 | °C | 0,03125°C | -273 | -273 és +1735°C között |
| 174 | Üzemanyag hőmérséklete | 65262 | °C | 1°C | -40 | -40 és +210°C között |
| 175 | Motorolaj hőmérséklete | 65262 | °C | 0,03125°C | -273 | -273 és +1735°C között |
| 182 | Üzemanyagárak | 65276 | L/óra | 0,05 l/óra | 0 | 0-3212 l/óra |
| 183 | Azonnali üzemanyag-fogyasztás | 65276 | km/l | 1/512 km/l | 0 | 0-125 km/l |
| 190 | Motorfordulatszám | 61444 | FORDULAT | 0,125 fordulat/perc | 0 | 0-8031 fordulat/perc |
| 247 | Teljes motoróra | 65253 | h | 0,05 óra | 0 | 0–210 554 060 óra |
| 512 | Vezető által igényelt motornyomaték | 61444 | % | 1% | -125 | -125%-tól +125%-ig |
| 513 | Tényleges motornyomaték | 61444 | % | 1% | -125 | -125%-tól +125%-ig |
| 517 | Sebesség a talaj felett | 65256 | km/h | 1/256 km/h | 0 | 0-250 km/h |
| 519 | Útvonal a talaj felett | 65256 | fok | 1/128 fok | 0 | 0–360° |
| 522 | Kuplungpedál helyzete | 61445 | % | 0,4% | 0 | 0-100% |
| 523 | Átviteli áram fokozat | 61445 | felszerelés | 1 | -125 | -125 és +125 között |
| 524 | Váltó Kiválasztott Fokozat | 61445 | felszerelés | 1 | -125 | -125 és +125 között |
| 580 | Magasság | 65258 | m | 0,125 méter | -2500 | -2500 és +5531 m között |
| 584 | Szélesség | 65267 | fok | 10⁻⁷ fok | -210 | -90° és +90° között |
| 585 | Hosszúság | 65267 | fok | 10⁻⁷ fok | -210 | -180° és +180° között |
| 586 | Iránytű irányszög | 65256 | fok | 1/128 fok | 0 | 0–360° |
| 597 | Fékkapcsoló | 65265 | - | 2 bit | - | Ki/Be/Hiba/Nem elérhető |
| 598 | Kuplung kapcsoló | 65265 | - | 2 bit | - | Ki/Be/Hiba/Nem elérhető |
| 899 | Motornyomaték mód | 61444 | - | 1 | 0 | 0-15 (felsorolás) |
| 1807 | Kormánykerék szöge | 61449 | rad | 1/1024 rad | -31,374 | -31,374 és +31,374 rad között |
| 1808 | elfordulási sebesség | 61449 | rad/s | 1/8192 rad/s | -3,92 | -3,92 és +3,92 rad/s között |
Összesen: 15 PGN, 33 SPN aktívan szimulálva
🔲 Nem támogatott PGN-ek (még nem implementálva)
A következő J1939 üzeneteket jelenleg nem generálja a járműszimulátor. Ezek a jövőbeli fejlesztések lehetséges változatait képviselik:
| PGN | Hex | Név | Prioritás | Használati eset | Bonyolultság |
|---|---|---|---|---|---|
| 61440 | 0xF000 | ERC1 - Elektronikus lassítófék-vezérlő 1 | Alacsony | Lassítófék/motorfék-vezérlés | Közepes |
| 61441 | 0xF001 | EBC1 - Elektronikus fékvezérlő 1 | Magas | ABS, fékrendszer állapota | Magas |
| 61442 | 0xF002 | ETC1 - Elektronikus sebességváltó vezérlő 1 | Közepes | Átviteli mód, váltás folyamatban | Közepes |
| 64971 | 0xFDCB | VDHR - Jármű távolsága (nagy felbontású) | Magas | 5 mm-es felbontással rendelkező kilométeróra | Alacsony |
| 64972 | 0xFDCC | TCO1 - Tachográf | Közepes | Járművezetői kártya, sebesség a tachográfból | Alacsony |
| 65132 | 0xFE6C | TPMS - Gumiabroncsnyomás-felügyelet | Közepes | Egyedi gumiabroncsnyomás/hőmérséklet | Közepes |
| 65217 | 0xFEC1 | TLT - TLT hajtás bekapcsolása | Alacsony | Teljesítményleadó tengely állapota | Alacsony |
| 65248 | 0xFEE0 | VDIST - Nagy felbontású járműtávolság | Magas | Teljes távolság 5 méteres felbontással | Alacsony |
| 65251 | 0xFEE3 | ECFG - Motorkonfiguráció | Alacsony | Motor márkája, modellje, sorozatszáma | Alacsony |
| 65252 | 0xFEE4 | SHUTDN - Leállítás | Alacsony | Motorleállítás felülbírálása | Alacsony |
| 65260 | 0xFEEC | VI - Járműazonosítás | Közepes | Teljes VIN átvitel (részleges impl) | Alacsony |
| 65279 | 0xFEFF | CCVS1 - Sebességtartó automatika/Járműsebesség 1 | Közepes | Továbbfejlesztett sebességtartó automatika adatok | Alacsony |
| 65098 | 0xFE4A | EBC2 - Elektronikus fékvezérlő 2 | Magas | Egyedi kerékfék állapota | Magas |
| 65099 | 0xFE4B | EBC3 - Elektronikus fékvezérlő 3 | Közepes | Fékbetét kopás | Közepes |
| 65110 | 0xFE56 | IC1 - Bemeneti/kipufogó feltételek 1 | Alacsony | Szívócső nyomás/hőmérséklet | Közepes |
| 65172 | 0xFE84 | RQST - Kérés | Alacsony | Kérjen konkrét PGN-t az ECU-tól | Közepes |
| 65226 | 0xFECA | AT1I - Utókezelés 1 Beszívott gáz | Alacsony | Dízel részecskeszűrő bemenet | Alacsony |
| 65227 | 0xFECB | AT1O - Utókezelés 1 Kilépő gáz | Alacsony | DPF kimenet, NOx érzékelő | Alacsony |
| 65247 | 0xFEDF | EFL/P2 - Motorfolyadék szint/nyomás 2 | Alacsony | További folyadéknyomások | Alacsony |
| 65266 | 0xFEF2 | LFE - Üzemanyag-fogyasztás | Közepes | Átlagos/utazási üzemanyag-fogyasztás | Alacsony |
| 65270 | 0xFEF6 | TD - turbófeltöltő | Alacsony | Feltöltőnyomás, turbina fordulatszáma | Közepes |
| 65272 | 0xFEF8 | VEP2 - Jármű elektromos áram 2 | Alacsony | További elektromos buszok | Alacsony |
Miért nem valósítják meg ezeket
| Ok | Érintett PGN-ek | Gróf |
|---|---|---|
| Nem releváns az alap járműszimulátorhoz | ERC1, PTO, SHUTDN, ECFG, AT1I, AT1O, TD | 7 |
| Gumiabroncsfizikai modellt igényel | TPMS | 1 |
| ABS/fék modellt igényel | EBC1, EBC2, EBC3 | 3 |
| Fejlett átvitelt igényel | ETC1 | 1 |
| Alacsony prioritású / kozmetikai | VI (VIN), VDHR, VDIST, TCO1, LFE | 5 |
| Kipufogógáz-/emissziómodellt igényel | IC1, AT1I, AT1O | 3 |
| Protokoll szintű (nem járműadatok) | RQST | 1 |
| Másodpéldányok/bővített verziók | CCVS1, EFL/P2, VEP2 | 3 |
Összesen: 22 nem támogatott PGN
🛠️ Műszaki jellemzők
- OpenDRIVE úthálózat támogatása : Kövesse a valósághű útgeometriát
- Automata sebességváltó szimuláció : Sebességváltás sebesség és gázadagolás alapján
- Fizikán alapuló dinamika : Gyorsulás, fékezés, kormányzás realisztikus korlátozásokkal
- DDS integráció : Közvetlen közzététel a J1939 Automotive PSM témákhoz
- Qt6 GUI : Valós idejű vizualizáció és manuális vezérlés
J1939 a DDS átjáró architektúrájához
A következő szekvenciadiagram a J1939 CAN buszüzenetektől a gateway-en keresztül a DDS-előfizetőkig tartó teljes adatfolyamot szemlélteti:
(speed, RPM, gear) Sim->>CAN: Send PGN 61444
(EEC1: Engine Speed) Sim->>CAN: Send PGN 65265
(CCVS: Vehicle Speed) Sim->>CAN: Send PGN 61445
(ETC2: Transmission) Note over CAN,Decoder: CAN Reception Phase CAN->>Reader: Read CAN frame (29-bit ID) Reader->>Reader: Validate frame Reader->>Decoder: emit canFrameReceived() Note over Decoder,Gateway: J1939 Decode Phase Decoder->>Decoder: Extract PGN from CAN ID
(bits 24-8) Decoder->>Decoder: Extract source address
(bits 7-0) Decoder->>Decoder: Extract priority
(bits 28-26) Decoder->>Decoder: Decode SPNs from payload
(bit position, scale, offset) Decoder->>Gateway: emit j1939MessageDecoded() Note over Gateway,DDS: DDS Publishing Phase Gateway->>Gateway: Create C_Parameter_Group_Definition
(if first time) Gateway->>DDS: Publish PGN definition loop For each SPN in message Gateway->>Gateway: Create C_Parameter message
(sourceID, PGN, SPN, value) Gateway->>Gateway: Set metadata
(timestamp, status) Gateway->>DDS: Publish parameter end Note over DDS,HMI: Consumption Phase DDS->>HMI: onSampleReceived()
(C_Parameter) HMI->>HMI: Update speedometer HMI->>HMI: Update tachometer HMI->>HMI: Update gear indicator Note over Gateway: Status Reporting (1 Hz) Gateway->>Gateway: Update data source status Gateway->>DDS: Publish C_Data_Source
(gateway health)
Szekvenciadiagram magyarázata
1. Üzenetgenerálási fázis
- A Járműszimulátor a vezető bemenetei és a fizika alapján számolja ki a valósághű járműparamétereket
- Paramétereket kódol J1939 CAN keretekbe megfelelő PGN/SPN struktúrával
- Virtuális CAN interfészre továbbít (vcan0)
2. CAN vételi fázis
- A SocketCanReader Qt szál folyamatosan olvas a CAN interfészről
- CAN keretformátum érvényesítése (29 bites kiterjesztett azonosító)
- Qt jelet bocsát ki nyers képkockaadatokkal
3. J1939 dekódolási fázis
- A J1939Decoder protokollinformációkat nyer ki a CAN ID-ből:
- PGN : Paramétercsoport száma (az üzenet típusát azonosítja)
- Forráscím : ECU azonosító (0-253)
- Prioritás : Üzenet sürgőssége (0=legmagasabb, 7=legalacsonyabb)
- Az adatcsomagot egyedi SPN-ekbe dekódolja a konfiguráció használatával:
- Bit pozíciója és hossza
- Léptéktényező és eltolás
- Mérnöki egységek
4. DDS publikálási fázis
- Az átjáró az első előforduláskor közzéteszi
C_Parameter_Group_Definition(PGN metaadatok) értéket. - Az üzenetben szereplő minden egyes SPN-hez:
-
C_Parameterüzenetet hoz létre értékkel és állapottal - Időbélyegző és forrásazonosító hozzáadása
- Közzététel a DDS témában
-
- Időszakos állapotfrissítések (1 Hz) közzéteszik az átjáró állapotát
5. Fogyasztási fázis
- A GVA alkalmazások (HMI, LDMX) feliratkoznak a J1939 DDS témákra
- Paraméterfrissítések fogadása DDS köztes szoftveren keresztül
- Felhasználói felület elemeinek frissítése (sebességmérő, fordulatszámmérő, fokozatkijelző)
Protokoll részletei
J1939 CAN ID struktúra (29 bites)
Bits 28-26: Priority (0-7)
Bit 25: Reserved
Bit 24: Data Page (DP)
Bits 23-16: PDU Format (PF)
Bits 15-8: PDU Specific (PS) - group extension or destination
Bits 7-0: Source Address (SA)
PGN = (DP << 16) | (PF << 8) | (PS if PF >= 240 else 0)Példa CAN keret dekódolására
CAN ID: 0x18F00400
Binary: 00011000111100000000010000000000
Priority: 0x6 (bits 28-26) = 6 (normal priority)
Reserved: 0 (bit 25)
DP: 0 (bit 24)
PF: 0xF0 (bits 23-16) = 240 (broadcast)
PS: 0x04 (bits 15-8) = 4 (group extension)
SA: 0x00 (bits 7-0) = 0 (engine controller)
PGN = (0 << 16) | (240 << 8) | 4 = 61444 (EEC1 - Engine Controller 1)Gyorsindítás
1. Járműszimulátor építése
cd build
cmake ..
make gva-vehicle-sim2. Virtuális CAN beállítása
sudo scripts/test/j1939/setup-vcan.sh3. Indítsa el a Járműszimulátort
# GUI mode with OpenDRIVE track
./build/bin/gva-vehicle-sim \
--domain=0 \
--opendrive=data/opendrive/ZalaZONE_full.xodr \
--can-interface=vcan0
# Headless mode with J1939 only
./build/bin/gva-vehicle-sim \
--domain=0 \
--can-interface=vcan0 \
--headless4. Indítsa el a J1939 Gateway-t
./build/bin/gva-j1939-gateway \
--domain=0 \
--interface=vcan0 \
--config=/etc/gva/j1939-config.json5. Monitorozás LDMX-szel
./build/bin/ldmx
# Navigate to J1939 tab to see live parametersKonfiguráció
Járműszimulátor konfigurációja
Hozd létre vehicle-sim-config.json fájlt:
{
"j1939": {
"enabled": true,
"sourceAddress": 0,
"gatewayResourceId": 1000,
"updateRateHz": 10
},
"vehicle": {
"maxSpeed": 120.0,
"maxRpm": 6000,
"gearRatios": [3.5, 2.5, 1.8, 1.3, 1.0, 0.8],
"engineIdleRpm": 800
}
}J1939 átjáró konfigurációja
A PGN/SPN definíciókat és skálázási paramétereket lásd /etc/gva/j1939-config.json fájlban.
Használati esetek
1. HMI fejlesztés
- Jármű műszerfalának fejlesztése fizikai jármű nélkül
- Műszerfal renderelés és animációk tesztelése
- Figyelmeztetési/riasztási küszöbértékek validálása
2. Algoritmus tesztelés
- Környezetbarát vezetési algoritmusok tesztelése szimulált üzemanyag-fogyasztással
- Prediktív karbantartási logika validálása
- Önvezető döntéshozatal tesztelése
3. Integrációs tesztelés
- Végpontok közötti adatfolyam ellenőrzése: CAN → DDS → Alkalmazás
- Átjáró teljesítményének tesztelése terhelés alatt
- Adatszinkronizáció validálása az alrendszerek között
4. Képzés és bemutató
- Biztonságos környezet a kezelők betanításához
- Ügyfélbemutatók jármű nélkül
- Oktatási eszköz a GVA architektúrához
Teljesítményjellemzők
| Metrika | Érték |
|---|---|
| CAN keretgenerálási sebesség | Akár 100 Hz PGN-enként |
| DDS közzétételi késleltetés | < 5 ms (helyi) |
| Átjáró átviteli sebessége | > 1000 PGN/másodperc |
| CPU-használat (szimulátor + átjáró) | < 10% (4 magos rendszer) |
| Memórialábnyom | ~50 MB (kombinált) |
Összehasonlítás: Fizikai vs. szimulált
| Vonatkozás | Fizikai jármű | Szimulátor |
|---|---|---|
| Hardverköltség | 50 000 dollár+ | 0 dollár (csak szoftver) |
| Beállítási idő | Órák (kábelezés, konfiguráció) | Jegyzőkönyv |
| Reprodukálhatóság | Korlátozott (vezetői változékonyság) | Tökéletes (determinisztikus) |
| Biztonság | Sérülés/károsodás kockázata | Nulla kockázat |
| Forgatókönyv-vezérlés | Nehéz (időjárás, forgalom) | Teljes kontroll |
| Adatnaplózás | Felszerelést igényel | Beépített |
| Párhuzamos tesztelés | Egy jármű egyszerre | Több példány |
Hibaelhárítás
Gyakori problémák
CAN interfész nem található
# Verify vcan0 exists
ip link show vcan0
# Recreate if needed
sudo scripts/test/j1939/setup-vcan.shNincsenek DDS üzenetek
# Check gateway is running
pgrep -a gva-j1939-gateway
# Verify domain ID matches
./build/bin/gva-j1939-gateway --domain=0
./build/bin/gva-vehicle-sim --domain=0Az átjáró nem dekódolja az üzeneteket
# Check CAN frames are being sent
candump vcan0
# Verify configuration file
cat /etc/gva/j1939-config.jsonKérjen bemutatót még ma.