Leggere il CAN-bus dei sistemi di accumulo, senza perdere la testa
Appunti dal tirocinio in Voltfang: parsing dei frame CAN, decodifica DBC, automazione dei certificati di conformità.
I dati di test batteria vivono in frame CAN-bus. Otto byte di payload più arbitration ID, e i byte non significano niente senza un DBC: un file di testo che descrive quali bit in quali frame corrispondono a "Pack voltage", "Cell minimum", "Temperature 3". Non puoi decodificare una batteria senza il DBC, e il DBC è di solito proprietario, modificato a mano e leggermente sbagliato.
Il tirocinio in Voltfang è iniziato con un CSV da 90.000 righe di frame CAN e un DBC scansionato di 12 pagine. Passo uno: scrivi un parser DBC. cantools è il canonical Python, ma il DBC proprietario era diverso abbastanza da scriverne un'estensione. Passo due: metti in cache il parsing. Il DBC è hot path — ogni frame del CSV deve sapere cosa significano i suoi bit. Riparsare per ogni frame: tre secondi per test. Cache una volta, e torni a sub-secondo per un test completo.
Il deliverable non era il parser. Era un generatore di certificato di conformità in PDF, che il tecnico firma e spedisce. L'ingegnere precedente aveva renderizzato il certificato in LaTeX. L'ho riscritto in HTML/CSS con stylesheet di stampa, per un motivo: il template verrà modificato da qualcuno non tecnico fra sei mesi. LaTeX ottimizza chi lo scrive. HTML ottimizza la responsabile ufficio che cambierà il logo al rebranding.
Lezione laterale sulle unità: i DBC usano scaling moltiplicativo. Un campo aveva un fattore 0.0078125 — un artefatto a 7 bit. Arrotonda a 0.008 e accumuli 2,3% di errore in trenta minuti. Usa il valore esatto del DBC. Sempre.
Lezione vera: rispetta che il prossimo ingegnere che tocca questo codice non avrà il contesto che hai tu. Cache saggia; unità documentate; tecnologia di render che il tuo sostituto saprà modificare.