Verktyg för CAN

Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: Verktyg för CAN

Inlägg av Maalobs »

All information angående Linuxversionen hänvisar till 64-bit SavvyCAN och 64-bit Qt, så jag uppfattar att det de facto förhåller sig så.

Det där "EEE" som du nämnde flera gånger, jag trodde att det var någon sorts verkstadsterminal eller något, men det är alltså en gammal x86 netbook:
https://en.wikipedia.org/wiki/Asus_Eee_PC
Då förstår jag, och det hade ju varit väldigt smutt om det hade fungerat på den lilla datorn. :(
Inte mycket disk i de där, men det finns ett SD card slot på sidan, du kanske kan utnyttja det.

Tyvärr har jag ingen hjälp att ge angående byggandet av 32-bit Linuxversion.
Qt är ett stort ramverk, och som du kanske har upptäckt så erbjuds den bara i paketerad form för Ubuntu i 64-bit.

Jag tror att du måste köra Wireshark som root för att komma åt raw sockets, om inte den där slcand daemon ska fungera som en mellanhand mellan kernel- och user mode.
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: Verktyg för CAN

Inlägg av Maalobs »

Jag testade lite enligt Linklayers wiki på den färska virtuella maskinen med 64-bit Ubuntu.
Jag pluggade in min CANtact i en USB-port på datorn och mappade den till den virtuella maskinen, och körde sedan:

Kod: Markera allt

sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get dist-upgrade
sudo apt-get autoclean
sudo apt-get install can-utils
sudo apt-get install net-tools
sudo apt-get install wireshark
Tydligen är can-utils samlingen med user mode verktyg för kernelmodulen SocketCAN.
Man måste även installera net-tools för att få med ifconfig.

Nu kunde man följa instruktionerna:

Kod: Markera allt

sudo modprobe can
sudo modprobe vcan
sudo modprobe slcan
sudo slcand -o -c -s6 /dev/ttyACM0 can0
sudo ifconfig can0 up
Nu fanns can0 tillgänglig att använda som device i Wireshark när jag körde sudo wireshark.
Jag har inga CAN-prylar här just nu, men i wikin beskrivs hur man kan installera en "virtual can device" som man kan använda för att testa sina verktyg med:

Kod: Markera allt

sudo ip link add name vcan0 type vcan
sudo ifconfig vcan0 up
Nu fanns det även en vcan0 tillgänglig i Wireshark.
Jag genererade lite slumpmässig trafik på den enheten med cangen vcan0 och medan det pågick så kunde jag spela in trafiken i både Wireshark och med cansniffer vcan0.
Det var ju ingen tolkning alls i Wireshark, det var som att titta på nätverkstrafik med gamla tcpdump, bara hexvärden precis som i cansniffer.

Jag testade att se vad SavvyCAN gör som du tipsade om.
Jag startade SavvyCAN utan sudo och navigerade till:
Connection ->Open Connection Window -> Add New Device Connection
Där valde jag Qt Serial Bus Devices (SocketCAN, PeakCAN, etc).
Serial Bus Device Type valde jag socketcan.
Då visas ett textfält som heter Port, som är förifyllt med can0.
Jag ändrade det till vcan0 och klickade på Create New Connection.
Nu visade connection-fönstret att jag var ansluten till vcan0 och att status var Connected.
Jag stängde connection-fönstret och nu spelades trafik in i SavvyCAN.
Presentationen av datat var i fler kolumner, men det var fortfarande bara numeriska värden.

Har jag förstått det rätt att DBC-filer som du nämnde, är ett sätt att översätta CAN-trafikens numeriska värden till mer lätt-tolkade symboler?
SavvyCAN har ett val i File-menyn att ladda en DBC-fil, och i Youtube-videon du länkade till, laddar de en DBC-fil i Windows Wireshark via sitt DLL-plugin.

DBC nämns som ett "proprietary format" här:
http://socialledge.com/sjsu/index.php/DBC_Format
Åtminstone verkar filens/protokollets syntax vara en öppen standard:
https://en.wikipedia.org/wiki/SAE_J1939

Bolaget du länkade till, vill ha 500 Euro för en DBC-fil: :shock:
https://www.csselectronics.com/screen/p ... anguage/en

Hur funkar det i praktiken att jobba med de här filerna; behöver man få DBC-filer från enskilda fordonstillverkare för att få fullständig tolkning av trafiken ur deras fordon?
Finns det någon gratis DBC-fil med hyfsad täckning av generella värden som du kan tipsa om?

Förresten; testa att radera historiken med tidigare nerladdade Ubuntu-uppdateringar på din lilla netbook, det kanske frigör lite diskutrymme:

Kod: Markera allt

sudo apt-get autoremove
sudo apt-get autoclean
bearing
Inlägg: 11250
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Verktyg för CAN

Inlägg av bearing »

En DBC-fil är något man ofta får knåpa ihop själv, för att förenkla jobbet när man felsöker CAN-kommunikationen i sitt egna projekt. Eller så knåpar man ihop en DBC för att förenkla att lyssna på CAN-trafiken i sin bil. Eller, om man har väldig tur, så finns det någon på nätet som redan gjort en DBC med en del vanligt förekommande meddelanden, som man kan ladda hem. Ett fåtal personer har privilegiet att ha kontakter inom fordonsbranchen som kan tillhandahålla en DBC med varenda meddelande på CAN-bussen i fordonet ifråga.

Det finns i princip inga standarder för vad ett meddelande-ID används till. Varje tillverkare har egna DBC-filter till sina fordon. Detta gör det svårare för dem som vill felsöka och modifiera sina bilar. Men oftast* ändras inte meddelande-ID mellan modeller från samma tillverkare, vilket gör att man kan använda info från tidigare modeller för att snabbt komma igång med en nyare modell. Om en biltillverkare t.ex. använt 0xa1 för information om t.ex. lufttemp, luftflöde, spjälläge, öppningstid spridare, tändläge (o.s.v, jag hittar bara på här), då har sannolikt flera bilmodeller från samma tillverkare detta meddelande. Så då kan man, om man vill förenkla avkodandet av informationen som flödar fram på CAN-bussen, skapa en DBC. Och så kallar man meddelandet 0xa1 för t.ex. COMBUSTION_INFO. Och sen lägger man in varje signal som är känd i detta meddelande. Låt säga att lufttemp är position 1, 8 bit, där varje bit motsvarar 0,5°C, och har en offset på -40°C. Då kan man knappa in det i DBC-filen. Så när sen meddelandet 0xa1 kommer farande i SavvyCAN, då kommer det inte stå 0xa1 och följt av 8st hexbytes, som är ganska obegripligt att läsa. Utan då kommer det stå COMBUSTION_INFO, och sen kommer det finnas en liten "+ knapp" bredvid. Om man trycker på den knappen, då expanderas meddelandet, så att man ser varje signal. Istället för att se 0x64 i ett av meddelandets 8 bytes, så kommer man se signalen i klartext, tolkad via DBC-filen. T.ex. INLET_TEMPERATURE = 10°C.

Att använda en DBC är inget som krävs, och många hemmapulare kör bara med dom råa siffrorna. Men jag som har jobbat inom bilindustrin, jag har blivit så bortskämd, så att jag vill ha DBC-filer. Så på varje projekt med CAN jag gjort här hemma, har jag skrivit mina egna DBC-filer.

Att kalla dom DBC-filer är kanske lite slang i branchen. Signalbeskrivningsfil, är kanske ett bättre namn. .dbc är ett format från företaget Vector. Allt Vector gör är svindyrt, proprietärt, men väldigt väldigt bra enligt min erfarenhet. Eftersom att Vector är så stora inom bilbranchen, är kunskapen om filformatet DBC stort, och det har blivit som en standard även utanför Vectors produkter, även om allt man kan göra med en DBC kanske inte är helt kompatibelt då all info om filformatet inte är känt (allt det mest förekommande dock). Finns andra filformat för signalbeskrivning. DBF används av Busmaster, men det finns en konverteringsfunktion till Vectors format. PEAK systems som gör PCAN har också ett eget format. Men dom tar betalt för konverteraren.

€500 för en DBC-fil låter dyrt, men jag kan inte kommentera det, för jag har aldrig sett en DBC till salu. Men den kanske har väldigt mycket innehåll, som skulle kosta ett företag mycket mer att lista ut genom att lyssna på CAN-bussen och ansluta signalgeneratorer till sensoringångar och liknande, för att kunna få fram samma information. Man sysslar sällan med "reverse engineering" ifall man slipper eftersom att någon redan gjort jobbet. J1939 är ett speciellt "protokoll på CAN-protokollet" som jag aldrig jobbat med. Kanske är meddelandena mer standardiserade där. Vanlig CAN, utan J1939 är iaf mer vanligt, så vitt jag vet. Och då används också DBC-filer.

Tror inte du behövde net-tools. Man kunde få can0 "up" via det inbyggda IP-kommandot i Ubuntu. Jag kunde tyvärr inte kopiera kommandoföljden jag använde häromdan eftersom att min linuxdator krashade förut när hårddisken blev full.

Vad var slcand? Jag använde aldrig det kommandot själv, då jag inte förstod vad det var till för. Wireshark kunde läsa min CAN-dosa ändå, om jag skrev sudo. Från ditt förra meddelande fick jag intrycket att slcand skulle göra can0 tillgängligt även för min vanliga användare, d.v.s något sudo skulle inte behövas för wireshark?
Och vad är skillnaden mellan can0 och vcan0?

Jag kan inte tipsa om några DBC-filer. Men jag vet att dom florerar på nätet för bl.a Tesla. Eftersom att jag inte har någon Tesla har jag inte brytt mig om att leta. Men gissar att det inte är så svårt att finna. Jag har köpt motor och batteri till Nissan Leaf. Därför har jag använt mig av det här dokumentet med signalbeskrivningar:

Det är ett vanligt kalkylblad som du ser. Jag har sen gjort en DBC med de meddelanden jag varit intresserad av. Ibland använder jag DBC-editorn i SavvyCAN, men oftast den i Busmaster (dom är bra på olika saker), och sedan konverterar mellan formaten. Sen tror jag att Vector har en DBC-editor som man kan ladda hem gratis. Men för de enkla filer jag gjort, har det gått att lösa med Open-source-programmen. Så då har jag inte brytt mig om att ladda hem från Vector. Men jag använde Vectors program rätt mycket på ett jobb.

Ska nämna också att förutom CAN-meddelanden som ständigt strömmar på bussen, finns även ett diagnosprotokoll, som går ut på att man frågar efter information, och får sedan svar från bilen. Alternativt skickar information som sedan sparas i minnet på någon ECU i bilen. Finns appar som Torque och Leaf-spy, som främst använder diagnosprotokollet för att få fram info inifrån bilens ECUer. Diagnosprotokollet är ganska standardiserat, så då behöver man inte ha någon DBC för bilen, utan följer bara standarden för hur man ska fråga bilen via diagnosprotokollet vad den har för insugstemperatur, t.ex. Kan hända att en sån standard för diagnos är just J1939. Och då förstår jag att DBC-filen är dyr. För det är en stor standard. Man kan hämta mycket information via diagnosprotokollet. Dock brukar man använda en fil som beskriver diagnosprotokollet, och inte en meddelandebeskrivning, när man jobbar med diagnosen. Så det är lite oklart vad de vill har 500 euro för egentligen, om det bara är en DBC.

*
Har hört att Volvo har så trångt på sina CAN-bussar, att när de släpper ny mjukvara, kan de ha byggt om hela DBC-filen. Så att meddelande-ID som innan uppdateringen användes för en sak, används för en helt annan sak efteråt. Men det verkar vanligare med mer statisk användning. Vilket underlättar för oss som felsöker och grejar med bilar/bildelar själva.
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: Verktyg för CAN

Inlägg av Maalobs »

Uj, jag vet att det är ajabaja med citeringen men jag måste bryta ner det här för att besvara allt:
1.
bearing skrev:Vad var slcand? Jag använde aldrig det kommandot själv, då jag inte förstod vad det var till för. Wireshark kunde läsa min CAN-dosa ändå, om jag skrev sudo.
Nu när jag har allt installerat, så måste jag minimalt göra så här för att få can0 synlig i Wireshark efter en omstart:

Kod: Markera allt

sudo slcand -o -c -s6 /dev/ttyACM0 can0
sudo ifconfig can0 up
sudo wireshark
Det kan vara för att CANtact är en seriell-enhet, det står här att då måste man använda slcand för att ställa in seriellports-parametrar:
https://elinux.org/Bringing_CAN_interface_up

2.
bearing skrev:Från ditt förra meddelande fick jag intrycket att slcand skulle göra can0 tillgängligt även för min vanliga användare, d.v.s något sudo skulle inte behövas för wireshark?
Jag kan inte se can0 alls i Wireshark om jag inte har startat med sudo, så jag vet inte.
Man behöver vara root för att fippla med sockets på lågnivå i nätverksstacken, men det kanske inte är aktuellt i det här sammanhanget med CAN.
Mina kunskaper om Linux är mest på shell- och scripting-nivå.

3.
bearing skrev:Och vad är skillnaden mellan can0 och vcan0?
Som det står i wikin:
Virtual CAN devices, or vcan devices, can be used to simulate a CAN bus without any hardware. This is useful for simulation, testing, and bridging. It also lets you try out can-utils without having an actual CAN device.

4.
bearing skrev:Man kunde få can0 "up" via det inbyggda IP-kommandot i Ubuntu.
Ja, det finns flera generationer med verktyg i Linux, precis som i Windows. :)
Jag ville vara konsekvent med vad det stod i wikin jag följde, ifall någon stackare som kan ännu mindre än jag försöker hänga med.
De här två kommandona utför samma sak:

Kod: Markera allt

sudo ifconfig can0 up
sudo ip link set can0 up
5.
bearing skrev:Jag kunde tyvärr inte kopiera kommandoföljden jag använde häromdan eftersom att min linuxdator krashade förut när hårddisken blev full.
Du kan boota netbooken från ett USB-minne med ett live-system.
Då kan du mounta partitionerna på hårddisken och radera något lämpligt för att göra plats.
Till exempel tömma innehållet i /tmp och kanske i /var/log, men det finns nog andra här på forumet som kan ge bättre förslag.

6.
bearing skrev:J1939 är ett speciellt "protokoll på CAN-protokollet" som jag aldrig jobbat med. Kanske är meddelandena mer standardiserade där. Vanlig CAN, utan J1939 är iaf mer vanligt, så vitt jag vet.
Jaha, jag tolkade det som att DBC och J1939 hängde ihop efter att ha läst det här:
https://www.kvaser.com/developer-blog/a ... dbc-files/
If we limit the discussion to J1939 DBC files, it is important to understand that the SAE J1939 Standards Committee (formally named Truck Bus Control and Communications Network Committee) does not maintain or distribute a DBC file of any kind. The Standards Committee assigns many identifiers, names, numbers and formats that are represented in a DBC file, but the file itself is not a product of the SAE.
Angående ditt detaljerade utlägg om DBC; Wow, jag hade ingen aning om att den här världen ens existerade. :eek2:
Skriv svar