J1939 sõidukisimulaator
Sõidukisimulitaator J1939 CAN toega
Ülevaade
Sõidukisimulaator ( gva-vehicle-sim ) on GVA (üldine sõidukiarhitektuur) platvormi terviklik testimis- ja arendustööriist. See pakub realistlikku sõidukidünaamika simulatsiooni integreeritud J1939 CAN-siini sõnumite genereerimisega , võimaldades riistvaralist testimist ilma füüsilise sõiduki riistvarata.
J1939 simulatsiooni eelised sõnumite genereerimisel
🎯 Arendamise ja testimise eelised
Riistvarast sõltumatu arendus
- GVA rakenduste arendamine ja testimine ilma füüsilise CAN-riistvarata
- Pole vaja kalleid sõiduki juhtplokke ega katsepinke
- Paralleelne arendus mitmes meeskonnas
Realistlik sõiduki käitumine
- Genereerib autentseid J1939 parameetrite grupi numbreid (PGN) ja kahtlaseid parameetrite numbreid (SPN)
- Simuleerib realistlikku sõiduki dünaamikat (kiirus, pöörete arv minutis, käiguvahetus, pidurdamine)
- Pakub ajaliselt sünkroniseeritud anduriandmeid
Kulude vähendamine
- Kõrvaldab vajaduse füüsiliste katsesõidukite järele varajases arendusfaasis
- Virtuaalne CAN-liides (
vcan0) võimaldab testimist mis tahes Linuxi tööjaamas - Vähendab füüsilise riistvara kulumist
Kiire prototüüpimine
- Kohene tagasiside algoritmi arendamiseks
- Lihtne stsenaariumi loomine ja taasesitamine
- Konfigureeritavad sõnumikiirused ja andmemustrid
Integratsioonitestimine
- J1939 lüüsi funktsionaalsuse valideerimine
- Testi andmevoog CAN-ist DDS-i teemadesse
- Kontrollige HMI reageerimisvõimet sõiduki parameetritele
Reprodutseeritav testimine
- Deterministlik sõiduki käitumine
- Korduvate testide stsenaariumid
- Regressioonitestimise järjepidev baasväärtus
📊 J1939 sõnumitugi
✅ Täielikult toetatud PGN-id (rakendatud sõidukisimulaatoris)
Sõidukisimulaator genereerib aktiivselt CAN-i kaudu järgmised J1939 sõnumid ja avaldab need lüüsi kaudu DDS-ile:
| PGN | Kuusnurk | Nimi | Hind | SPN-id | Kirjeldus |
|---|---|---|---|---|---|
| 61443 | 0xF003 | EEC2 - elektrooniline mootorikontroller 2 | 50 ms | 91, 92 | Gaasipedaali asend, mootori koormus protsentides |
| 61444 | 0xF004 | EEC1 - Elektrooniline mootorikontroller 1 | 100 ms | 190, 512, 513 | Mootori pöörlemiskiirus (RPM), juhi poolt nõutav pöördemoment, mootori tegelik pöördemoment |
| 61445 | 0xF005 | ETC2 - Elektrooniline käigukasti kontroller 2 | 100 ms | 522, 523, 524 | Siduri asend, valitud käik, praegune käik |
| 61449 | 0xF009 | VDC2 - sõiduki dünaamiline juhtimine 2 | 100 ms | 1807, 1808 | Rooliratta nurk, pöördekiirus |
| 65253 | 0xFEE5 | TUNDID - Mootori töötunnid | 1 sekundit | 247 | Mootori töötundide koguarv |
| 65256 | 0xFEE8 | VDS - sõiduki suund/kiirus | 250 ms | 517, 519, 586 | Kiirus maapinna suhtes, kompassi suund, kurss |
| 65258 | 0xFEEA | ALT - kõrgus merepinnast | 1 sekundit | 580 | GPS-i kõrgus merepinnast |
| 65262 | 0xFEEE | ET1 - Mootori temperatuur 1 | 1 sekundit | 110, 174, 175 | Mootori jahutusvedeliku temperatuur, kütuse temperatuur, õli temperatuur |
| 65263 | 0xFEEF | EFLP - mootori vedeliku tase/rõhk | 500 ms | 96, 100, 94 | Kütusetase, õlirõhk, kütuse etteande rõhk |
| 65265 | 0xFEF1 | CCVS - püsikiiruse hoidja/sõiduki kiirus | 100 ms | 84, 597, 598 | Rattapõhine sõiduki kiirus, pidurilüliti, sidurilüliti |
| 65267 | 0xFEF3 | VP - Sõiduki asukoht | 250 ms | 584, 585 | GPS-i laius- ja pikkuskraad |
| 65269 | 0xFEF5 | AMB - ümbritsevad tingimused | 1 sekundit | 108, 171 | Baromeetriline rõhk, ümbritseva õhu temperatuur |
| 65271 | 0xFEF7 | VEP1 - Sõiduki elektrienergia 1 | 1 sekundit | 167, 168, 158 | Aku pinge, generaatori pinge, laadimissüsteemi pinge |
| 65276 | 0xFEFC | DD - armatuurlaua ekraan | 1 sekundit | 182, 183 | Kütusekulu (l/h), hetkeline kütusekulu |
| 0xEF00 | 0xEF00 | PROP_A - Omandis olev A (IONNIC USM) | 250 ms | - | IONNIC USM ES-Key paneeli LED-juhtimine |
Üksikasjalik SPN-ide loend (kõik toetatud parameetrid)
| SPN | Parameetri nimi | PGN | Ühik | Resolutsioon | Nihe | Vahemik |
|---|---|---|---|---|---|---|
| 84 | Rattapõhine sõiduki kiirus | 65265 | km/h | 1/256 km/h | 0 | 0–250 km/h |
| 91 | Gaasipedaali asend | 61443 | % | 0,4% | 0 | 0–100% |
| 92 | Mootori koormus protsentides praegusel kiirusel | 61443/61444 | % | 1% | 0 | 0–100% |
| 94 | Kütuse etteande rõhk | 65263 | kPa | 4 kPa | 0 | 0–1000 kPa |
| 96 | Kütusetase | 65263 | % | 0,4% | 0 | 0–100% |
| 100 | Mootori õlirõhk | 65263 | kPa | 4 kPa | 0 | 0–1000 kPa |
| 108 | Baromeetriline rõhk | 65269 | kPa | 0,5 kPa | 0 | 0–125 kPa |
| 110 | Mootori jahutusvedeliku temperatuur | 65262 | °C | 1°C | -40 | -40 kuni +210 °C |
| 158 | Laadimissüsteemi pinge | 65271 | V | 0,05 V | 0 | 0–3212 V |
| 167 | Generaatori pinge | 65271 | V | 0,05 V | 0 | 0–3212 V |
| 168 | Aku pinge | 65271 | V | 0,05 V | 0 | 0–3212 V |
| 171 | Ümbritseva õhu temperatuur | 65269 | °C | 0,03125 °C | -273 | -273 kuni +1735 °C |
| 174 | Kütuse temperatuur | 65262 | °C | 1°C | -40 | -40 kuni +210 °C |
| 175 | Mootoriõli temperatuur | 65262 | °C | 0,03125 °C | -273 | -273 kuni +1735 °C |
| 182 | Kütuse hind | 65276 | L/h | 0,05 l/h | 0 | 0–3212 l/h |
| 183 | Hetkeline kütusekulu | 65276 | km/l | 1/512 km/l | 0 | 0–125 km/l |
| 190 | Mootori pöörlemiskiirus | 61444 | Pöörlemiskiirus | 0,125 p/min | 0 | 0–8031 p/min |
| 247 | Mootori töötundide koguarv | 65253 | h | 0,05 tundi | 0 | 0–210 554 060 tundi |
| 512 | Juhi nõudmisel mootori pöördemoment | 61444 | % | 1% | -125 | -125% kuni +125% |
| 513 | Tegelik mootori pöördemoment | 61444 | % | 1% | -125 | -125% kuni +125% |
| 517 | Kiirus maapinna suhtes | 65256 | km/h | 1/256 km/h | 0 | 0–250 km/h |
| 519 | Kurss maapinna suhtes | 65256 | kraadi | 1/128 kraadi | 0 | 0–360° |
| 522 | Siduripedaali asend | 61445 | % | 0,4% | 0 | 0–100% |
| 523 | Käigukasti praegune käik | 61445 | varustus | 1 | -125 | -125 kuni +125 |
| 524 | Käigukasti valitud käik | 61445 | varustus | 1 | -125 | -125 kuni +125 |
| 580 | Kõrgus merepinnast | 65258 | m | 0,125 m | -2500 | -2500 kuni +5531 m |
| 584 | Laiuskraad | 65267 | kraadi | 10⁻⁷ kraadi | -210 | -90° kuni +90° |
| 585 | Pikkuskraad | 65267 | kraadi | 10⁻⁷ kraadi | -210 | -180° kuni +180° |
| 586 | Kompassi laager | 65256 | kraadi | 1/128 kraadi | 0 | 0–360° |
| 597 | Pidurilüliti | 65265 | - | 2 bitti | - | Väljas/Sees/Viga/Pole saadaval |
| 598 | Siduri lüliti | 65265 | - | 2 bitti | - | Väljas/Sees/Viga/Pole saadaval |
| 899 | Mootori pöördemomendi režiim | 61444 | - | 1 | 0 | 0–15 (loendus) |
| 1807. aasta | Rooliratta nurk | 61449 | rad | 1/1024 rad | -31,374 | -31,374 kuni +31,374 rad |
| 1808. aasta | Suunamiskiirus | 61449 | rad/s | 1/8192 rad/s | -3,92 | -3,92 kuni +3,92 rad/s |
Kokku: 15 PGN-i, 33 SPN-i aktiivselt simuleeritud
🔲 Toetamata PGN-id (pole veel rakendatud)
Sõidukisimulaator ei genereeri hetkel järgmisi J1939 sõnumeid. Need kujutavad endast võimalikke tulevasi täiustusi:
| PGN | Kuusnurk | Nimi | Prioriteet | Kasutusjuhtum | Keerukus |
|---|---|---|---|---|---|
| 61440 | 0xF000 | ERC1 - Elektrooniline aeglusti kontroller 1 | Madal | Aeglusti/mootori piduri juhtimine | Keskmine |
| 61441 | 0xF001 | EBC1 - Elektrooniline pidurikontroller 1 | Kõrge | ABS-i ja pidurisüsteemi olek | Kõrge |
| 61442 | 0xF002 | ETC1 - Elektrooniline käigukasti kontroller 1 | Keskmine | Edastusrežiim, nihe on pooleli | Keskmine |
| 64971 | 0xFDCB | VDHR - sõiduki kaugus (kõrge eraldusvõimega) | Kõrge | Odomeeter 5 mm resolutsiooniga | Madal |
| 64972 | 0xFDCC | TCO1 - Sõidumeerik | Keskmine | Juhikaart, kiirus sõidumeerikult | Madal |
| 65132 | 0xFE6C | TPMS - rehvirõhu jälgimine | Keskmine | Individuaalne rehvirõhk/temperatuur | Keskmine |
| 65217 | 0xFEC1 | PTODE - PTO ajami sisselülitamine | Madal | Jõuvõtuvõlli olek | Madal |
| 65248 | 0xFEE0 | VDIST - sõidukite kõrge eraldusvõimega kaugus | Kõrge | Kogukaugus 5 m resolutsiooniga | Madal |
| 65251 | 0xFEE3 | ECFG - mootori konfiguratsioon | Madal | Mootori mark, mudel, seerianumber | Madal |
| 65252 | 0xFEE4 | SHUTDN - Väljalülitamine | Madal | Mootori seiskamise tühistamine | Madal |
| 65260 | 0xFEEC | VI - Sõiduki identifitseerimine | Keskmine | Täielik VIN-kood käigukastis (osaline impl) | Madal |
| 65279 | 0xFEFF | CCVS1 - püsikiiruse hoidja/sõiduki kiirus 1 | Keskmine | Täiustatud püsikiiruse hoidja andmed | Madal |
| 65098 | 0xFE4A | EBC2 - elektrooniline pidurikontroller 2 | Kõrge | Üksikute rataste piduri olek | Kõrge |
| 65099 | 0xFE4B | EBC3 - elektrooniline pidurikontroller 3 | Keskmine | Pidurikatte kulumine | Keskmine |
| 65110 | 0xFE56 | IC1 - sisselaske-/väljalasketingimused 1 | Madal | Sisselaskekollektori rõhk/temperatuur | Keskmine |
| 65172 | 0xFE84 | RQST - päring | Madal | Taotle ECU-lt konkreetset PGN-i | Keskmine |
| 65226 | 0xFECA | AT1I – järeltöötlus 1 Sisselaskegaas | Madal | Diislikütuse tahkete osakeste filtri sisselaskeava | Madal |
| 65227 | 0xFECB | AT1O – järeltöötlus 1 väljalaskegaas | Madal | DPF-i väljalaskeava, NOx-andur | Madal |
| 65247 | 0xFEDF | EFL/P2 - mootori vedeliku tase/rõhk 2 | Madal | Täiendavad vedeliku rõhud | Madal |
| 65266 | 0xFEF2 | LFE - kütusekulu | Keskmine | Keskmine kütusekulu reisi kohta | Madal |
| 65270 | 0xFEF6 | TD - turbolaadur | Madal | Ülelaadimisrõhk, turbiini kiirus | Keskmine |
| 65272 | 0xFEF8 | VEP2 - Sõiduki elektrienergia 2 | Madal | Täiendavad elektribussid | Madal |
Miks neid ei rakendata
| Põhjus | Mõjutatud PGN-id | Krahv |
|---|---|---|
| Ei ole seotud tavalise sõidukisimulaatoriga | ERC1, PTO, SHUTDN, ECFG, AT1I, AT1O, TD | 7 |
| Nõuab rehvifüüsika mudelit | Rehvirõhu jälgimissüsteem | 1 |
| Nõuab ABS/pidurisüsteemiga mudelit | EBC1, EBC2, EBC3 | 3 |
| Nõuab täiustatud edastust | ETC1 | 1 |
| Madala prioriteediga / kosmeetiline | VI (VIN), VDHR, VDIST, TCO1, LFE | 5 |
| Nõuab heitgaaside/heitgaaside mudelit | IC1, AT1I, AT1O | 3 |
| Protokolli tasemel (mitte sõiduki andmed) | RQST | 1 |
| Duplikaat-/täiustatud versioonid | CCVS1, EFL/P2, VEP2 | 3 |
Kokku: 22 toetuseta PGN-i
🛠️ Tehnilised omadused
- OpenDRIVE'i teedevõrgu tugi : järgige realistlikku teegeomeetriat
- Automaatkäigukasti simulatsioon : käiguvahetus kiiruse ja gaasipedaali asendi põhjal
- Füüsikal põhinev dünaamika : kiirendus, pidurdamine, roolimine realistlike piirangutega
- DDS-i integratsioon : otsene avaldamine J1939 autotööstuse PSM-teemade alusel
- Qt6 GUI : Reaalajas visualiseerimine ja käsitsi juhtimine
J1939 DDS-i lüüsi arhitektuuriks
Järgnev järjestusskeem illustreerib täielikku andmevoogu J1939 CAN-siini sõnumitest läbi lüüsi DDS-i abonentideni:
(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)
Järjestusskeemi selgitus
1. Sõnumi genereerimise etapp
- Sõidukisimulaator arvutab realistlikke sõiduki parameetreid juhi sisendite ja füüsikaandmete põhjal
- Kodeerib parameetrid J1939 CAN-kaadritesse õige PGN/SPN-struktuuriga
- Edastab virtuaalsele CAN-liidesele (vcan0)
2. CAN-vastuvõtu faas
- SocketCanReaderi Qt-lõim loeb pidevalt CAN-liidesest
- Valideerib CAN-kaadri vormingut (29-bitine laiendatud ID)
- Edastab Qt signaali toores kaadriandmetega
3. J1939 dekodeerimise faas
- J1939Decoder ekstraheerib CAN ID-st protokolliinfo:
- PGN : Parameetrirühma number (tuvastab sõnumi tüübi)
- Allika aadress : ECU identifikaator (0-253)
- Prioriteet : sõnumi kiireloomulisus (0 = kõrgeim, 7 = madalaim)
- Dekodeerib andmete kasuliku koormuse individuaalseteks SPN-ideks, kasutades konfiguratsiooni:
- Biti asukoht ja pikkus
- Skaalafaktor ja nihe
- Inseneriüksused
4. DDS-i avaldamise etapp
- Värav avaldab
C_Parameter_Group_Definition(PGN metaandmed) esimesel esinemisel - Iga sõnumis oleva SPN-i kohta:
- Loob
C_Parametersõnumi väärtuse ja olekuga - Lisab ajatempli ja allika identifitseerimise
- Avaldab DDS-teemas
- Loob
- Perioodilised olekuvärskendused (1 Hz) avaldavad lüüsi tervise
5. Tarbimisfaas
- GVA rakendused (HMI, LDMX) tellivad J1939 DDS teemasid
- Parameetrite värskenduste saamine DDS-i vahevara kaudu
- Kasutajaliidese elementide (spidomeeter, tahhomeeter, käigunäidik) värskendamine
Protokolli üksikasjad
J1939 CAN ID struktuur (29-bitine)
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)Näide CAN-kaadri dekodeerimisest
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)Kiirjuhend
1. Ehita sõidukisimulaator
cd build
cmake ..
make gva-vehicle-sim2. Virtuaalse CAN-i seadistamine
sudo scripts/test/j1939/setup-vcan.sh3. Käivita sõidukisimulaator
# 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. Käivitage J1939 värav
./build/bin/gva-j1939-gateway \
--domain=0 \
--interface=vcan0 \
--config=/etc/gva/j1939-config.json5. Jälgige LDMX-iga
./build/bin/ldmx
# Navigate to J1939 tab to see live parametersKonfiguratsioon
Sõidukisimulaatori konfiguratsioon
Loo fail vehicle-sim-config.json :
{
"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 lüüsi konfiguratsioon
PGN/SPN definitsioonide ja skaleerimisparameetrite kohta vaata faili /etc/gva/j1939-config.json .
Kasutusjuhud
1. HMI arendus
- Sõiduki armatuurlaua arendus ilma füüsilise sõidukita
- Näidikupaneeli renderdamise ja animatsioonide testimine
- Hoiatus-/häirekünniste valideerimine
2. Algoritmi testimine
- Testige ökosõidu algoritme simuleeritud kütusekulu abil
- Ennustava hoolduse loogika valideerimine
- Testige autonoomset sõiduotsuse langetamist
3. Integratsioonitestimine
- Kontrollige otsast lõpuni andmevoogu: CAN → DDS → Rakendus
- Testi värava jõudlust koormuse all
- Andmete sünkroniseerimise valideerimine alamsüsteemide vahel
4. Koolitus ja demonstratsioon
- Ohutu keskkond operaatorite koolitamiseks
- Kliendidemonstratsioonid ilma sõidukita
- GVA arhitektuuri õppevahend
Toimivusomadused
| Mõõdik | Väärtus |
|---|---|
| CAN-kaadrite genereerimise kiirus | Kuni 100 Hz PGN kohta |
| DDS-i avaldamise latentsus | < 5 ms (kohalik) |
| Värava läbilaskevõime | > 1000 PGN-i sekundis |
| Protsessori kasutus (simulaator + lüüs) | < 10% (4-tuumaline süsteem) |
| Mälu jalajälg | ~50 MB (kokku) |
Võrdlus: füüsiline vs simuleeritud
| Aspekt | Füüsiline sõiduk | Simulaator |
|---|---|---|
| Riistvara maksumus | 50 000+ dollarit | 0 dollarit (ainult tarkvara) |
| Seadistusaeg | Tunnid (juhtmestik, konfiguratsioon) | Minutid |
| Reprodutseeritavus | Piiratud (juhi varieeruvus) | Täiuslik (deterministlik) |
| Ohutus | Kahjustuste/vigastuste oht | Nullriski |
| Stsenaariumide kontroll | Raske (ilm, liiklus) | Täielik kontroll |
| Andmete logimine | Vajab varustust | Sisseehitatud |
| Paralleeltestimine | Üks sõiduk korraga | Mitu eksemplari |
Veaotsing
Levinud probleemid
CAN-liidest ei leitud
# Verify vcan0 exists
ip link show vcan0
# Recreate if needed
sudo scripts/test/j1939/setup-vcan.shDDS-sõnumeid pole
# 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=0Värav ei dekodeeri sõnumeid
# Check CAN frames are being sent
candump vcan0
# Verify configuration file
cat /etc/gva/j1939-config.jsonTaotle demonstratsiooni juba täna.