School of Mathematics and Systems Engineering Reports from MSI - Rapporter från MSI BSR Diagnostic tool Communcation over CAN and K-line bus Vladimir Jukic Thom Wikingsson Aug 2008 MSI Report 08088 Växjö University ISSN 1650-2647 SE-351 95 VÄXJÖ ISRN VXU/MSI/EL/E/--08088/--SE 0
Organisation/ Organization VÄXJÖ UNIVERSITET Matematiska och systemtekniska institutionen Växjö University/ School of Mathematics and Systems Engineering Dokumenttyp/Type of document Examensarbete/ Diplomawork Titel och undertitel/title and subtitle BSR Diagnosverktyg Kommunikation över CAN och K-line bussen BSR Diagnostic tool Communication over CAN and K-line bus Sammanfattning (på svenska) 1 Författare/Author(s) Vladimir Jukic Thom Wikingsson Den här rapporten beskriver ett examensarbete för högskoleingenjörsexamen i datorteknik vid Växjö universitet. Vid företaget BSR i Växjö pågår utvecklingen av ett diagnosverktyg benämt BSR Diagnostic Tool. Syftet med projektet är att kunna använda en hårdvaruklass som kommunikationsdel istället för diagnosverktyg från de olika biltillverkarna. Inom objektorienterad programmering är en klass ett avsnitt programkod som samlar en mängd relaterade attributer och funktioner för ett objekt. I rapporten beskrivs implementeringen av hårdvaruklassen samt tillhörande teori för kommunikationsbussen som används, nämligen CAN. BSR har redovisat vilka funktioner som bör finnas med i klassen genom att göra ett diagram med dessa. Målet i första hand var att få en fungerande kommunikation med styrenheter i en Saab. Testning har skett genom ett enkelt testprogram som ger möjlighet att skicka en fråga och få tillbaka ett svar från en styrenhet i fordonet genom hårdvaruklassen. Utvecklingen av systemet har skett med hjälp av programspråket C# och utvecklingsmiljön.net. Företagets representanter var nöjda med resultatet då det utgör en bra grund för vidareutvecklingen av BSR Diagnostic Tool. Nyckelord: CAN, K-line, fordonsdiagnostik, diagnosverktyg, Saab, VAG Abstract (in English) This abstract describes the bachelor degree thesis in computer technology at Växjö University. At the company BSR in Växjö, Sweden there is a new project under development called BSR Diagnostic Tool. The main idea is to use a hardware class for communication instead of the diagnostic tools that are provided by the car manufactures. In object-oriented programming, a class is a programming language construct that is used as a blueprint to create objects. The task was to implement this hardware class which will handle the communication between a computer and the control units in the vehicles. The report also includes a big theoretical part about the communication bus that is used, CAN. The objective was to create the class and make it communicate successfully with a Saab. The testing of the class was done with a simple program. The program can send a question to the vehicle and retrieve an answer with help of the hardware class. BSR provided a diagram with functions that should be present. The development of the system was done using C# and.net Environment. The company was satisfied with the results since they provided a good basis to further development of BSR Diagnostic Tool. Key Words: CAN, K-line, car diagnostics, diagnostic tool, Saab, VAG Utgivningsår/Year of issue 2008 Språk/Language Swedish Antal sidor/number of pages 52
Innehållsförteckning 1. INLEDNING... 4 2. PROBLEMSTÄLLNING... 5 2.1 UPPGIFTSBESKRIVNING... 5 2.2 PROJEKTBESKRIVNING... 5 2.2.1 Mål... 5 2.2.2 Projektmodell... 6 3. CAN CONTROLLER AREA NETWORK... 7 3.1 INTRODUKTION... 7 3.2 VAD ÄR CAN?... 7 3.2.1 Viktiga delar av ett CAN-meddelande... 8 3.3 FRAMES (RAMAR)... 8 3.3.1 Data frame... 8 3.3.2 Remote frame... 9 3.3.3 Error frame... 9 3.3.4 Overload frame... 10 3.4 UTÖKAT CAN-PROTOKOLL... 11 3.5 BUS ARBITRATION (FÖRHANDLINGSPROCESSEN)... 12 3.6 DATAÖVERFÖRING OCH SYNKRONISERING... 12 3.6.1 Bitsampling... 13 3.6.2 Synkronisering... 14 3.6.3 Faskorrigering... 14 3.7 FELHANTERING... 15 3.7.1 Bit monitoring... 15 3.7.2 CRC... 15 3.7.3 Bit stuffing... 16 3.7.4 Frame check... 16 3.7.5 Acknowledge check... 16 3.7.6 Sändningsfel... 17 3.7.7 Mottagningsfel... 17 3.7.8 Error active... 17 3.7.9 Error passive... 17 3.7.10 Bus off... 17 3.7.11 Error counting... 18 4. K LINE... 19 4.1 INTRODUKTION... 19 4.2 RS232 BITSTRÖM... 19 4.2.1 Startbit... 20 4.2.2 Databitar... 20 4.2.3 Paritetsbit... 20 4.2.4 Stoppbit... 20 4.3 UART... 21 4.4 INITIERING AV K-LINE... 21 4.5 EXEMPEL PÅ DATASTRÖM FRÅN K-LINE... 21 5. ANALYS AV PARAMETRAR... 22 5.1 SERVICEINTERVALL... 22 5.2 MÄTARSTÄLLNING... 23 5.3 TANKNIVÅ... 23 2
6. IMPLEMENTERING... 24 6.1 PLANERING... 24 6.2 FUNKTIONALITET OCH KLASSMETODER... 24 6.2.1 Metoderna i klassen Message... 25 6.2.2 Metoderna i klassen HW_interface... 26 6.2.3 Testprogram... 29 7. SLUTSATS... 30 8. REFERENSER... 31 9. BILAGOR... 32 9.1 EXEMPEL PÅ LOGGFIL... 32 9.1.1 Med CANLab... 32 9.1.2 Med hårdvarulagret... 33 9.3 KLASSDIAGRAM (ORIGINAL)... 34 9.4 KLASSDIAGRAM (UPPDATERAT)... 35 9.5 KÄLLKOD... 37 9.5.1 HW_interface.cs... 37 9.5.2 Message.cs... 50 3
1. Inledning Detta arbete är en examensuppgift på vår utbildning vid Högskoleingenjörsprogrammet i datateknik, Växjö universitet. Arbetet ska genomföras på BSR i Växjö. BSR, som står för Bil Specialisterna Racing, är ett företag som har sitt huvudkontor i Växjö. Deras främsta verksamhet är optimering av bilars motorer men även etanolkonvertering är en del av arbetet vilket medför att företaget har stort engagemang för miljön. Företaget är marknadsledande på Saab, Volvo och VAG i Europas norra delar och har fått utmärkn Årets Superföretag 2005 och 2006. Eftersom BSRs arbete går ut på att kommunicera med bilar på olika sätt är de i ett stort behov av ett diagnosverktyg. Meningen med ett diagnosverktyg är att skapa kontakt med bilens styrsystem för att sedan kunna få ut olika sorts information. För att kunna optimera bilarna på bästa möjliga sätt har BSR stor nytta av att kunna analysera data från bilarna. I dagsläget använder BSR ett fåtal diagnosverktyg som finns ute på marknaden. Nackdelen är framförallt att kostnaden är väldigt hög samt att de flesta fungerar endast till ett bilmärke. Eftersom det blir dyrt att införskaffa verktyg till flera olika bilmärken finns ett behov av att utveckla en grund för ett eget diagnosverktyg som eventuellt ska fungera ihop med flera olika bilmärken. Projektet kommer att användas främst inom BSR. Man måste tolka de olika biltillverkarnas protokoll för att kunna utföra olika sorts förfrågningar på CAN-bussen. Biltillverkarna ger inte ut denna sorts information då de hellre ser att deras egna diagnosverktyg används. Eftersom det är väsentligt att veta hur CAN-bussen fungerar innehåller arbetet en del fakta om CAN-bussen. Hos de flesta bilmodellerna används CAN-bussen för kommunikationen mellan styrenheterna men på vissa årsmodeller från Saab och nyare VAG används K-line istället. K-line är en seriell buss som liknar protokollet RS232 men använder sig av andra spänningsnivåer. 4
2. Problemställning 2.1 Uppgiftsbeskrivning Det pågår ett nytt projekt på BSR i Växjö benämnt BSR Diagnostic tool. Som namnet antyder så handlar det om ett diagnosverktyg. Tanken med projektet är att använda sig av ett egenkonstruerat verktyg istället för de som finns tillgängliga från biltillverkarna. I hela projektet ingår följande fyra olika delar: ett användargränssnitt, ett tolkningslager, ett protokollager och slutligen ett hårdvarulager. Det sistnämnda lagret ska sköta kommunikationen mellan fordonet och datorn. Vår uppgift blir att implementera hårdvarulagret. Ett klassdiagram som är gjort i UML 1 har presenterats för oss av BSR och implementationen i dess grund kommer att ske enligt diagrammet. Klassdiagrammet beskriver endast CAN-funktioner vilket medför att ändring och planering behövs. Vid kommunikation över CAN-bussen ska ett Kvaser verktyg användas samt deras API 2. Verktyget är en Kvaser Memorator Professional II och ska kopplas mellan datorn och fordonets diagnosuttag OBD-II 3. Vid kommunikation över K-line kommer ett annat API att användas som ger tillgång till funktioner för seriell kommunikation och en dosa som justerar spänningsnivåerna som skiljer mellan K-line och RS232 samt diverse kablar. För att kunna utveckla den här klassen och lyckas hämta de sökta parametrarna krävs det analysering av trafiken på bussen med hjälp av de diagnosverktyg som finns tillgängliga. Hjälpmedlet för tolkning är gällande ISO-standarder. Med hänsyn till tillgängligheten av bilmodeller på BSR och begränsning av tio veckors arbetstid valdes Saab och delvis VAG som de tillverkare som behandlas i detta arbete. Funktionaliteten som eftersträvas i inledningsfasen är att klassen fungerar med ett enkelt testprogram som klarar av att skicka en förfrågan och ta emot ett svar från fordonet. Klasserna som implementeras ska sparas som DLL 4 -filer och användas till de övriga delarna av projektet. 2.2 Projektbeskrivning Följande del ska ge en klarare bild över hela projektet inklusive vår uppgift. Beskrivningen är framtagen genom diskussion med våra handledare Philip Albertson och Patrik Eklund samt en annan student som ska utveckla några av de övriga delarna av projektet. 2.2.1 Mål Eftersom de flesta diagnosverktyg endast fungerar till ett bilmärke och har i synnerhet väldigt hög kostnad blir det dyrt att införskaffa verktyg till flera olika bilmärken. Detta medför att det finns ett behov av att utveckla en grund för ett eget diagnosverktyg som eventuellt ska fungera ihop med flera olika bilmärken. Framöver är tanken att man ska slippa använda sig av Kvasers verktyg mellan datorn och fordonet. Projektet inriktar sig mot en användning inom framför allt BSR. 1 Unified Modeling Language 2 Application Programming Interface 3 On Board Diagnostics 4 Dynamic-Link Library 5
2.2.2 Projektmodell Nedan visas en struktur över hela projektet och de olika delarnas uppgifter samt de verktyg som behövs för att skapa kommunikationen. Dator Användargränssnitt Inladdning av XML-filer Presentation av svarsmeddelanden Huvudprogrammet som länkar ihop alla lager XML-fil Varje bilmärke ska ha sin egen XML-fil innehållandes de korrekta meddelandena som skickas vid olika förfrågningar Innehåller en mall för tolkning av svaret Tolkningslager Tolkning av svarsmeddelandet Protokollager Inläsning av XML- filerna Tolkning, frågorna görs om till meddelanden Verifierar svaren och skickar vidare till tolkningslagret Hårdvarulager Skapar kommunikationen Skickar meddelanden som kommer från protokollagret till fordonet Tar emot svar från fordonet och gör om det till meddelande vilket sedan skickas vidare till protokollagret Verktyg Kvaser Memorator Professional II Sköter kommunikation med CAN- bussen API medföljer vilket underlättar initiering, sändning och mottagning av data över CAN- bussen K-line tester Modifierad PPC 5 för översättning av spänningsnivåer som skiljer mellan K-line och RS232 5 Portable Program Carrier 6
3. CAN Controller Area Network 3.1 Introduktion 1983 startade det tyska företaget Bosch ett internt projekt som gick ut på att utveckla nätverkskommunikation för fordon. Tre år senare introducerades CAN som standard. Den huvudsakliga utvecklingen av CAN berodde på avsaknad av kommunikation mellan styrenheterna i Mercedes Benz-fordon. Inga av de kommunikationsprotokoll som existerade var tillräckligt pålitliga eller snabba och man ville minska antalet ledningar som behövdes vid direkt seriell kommunikation mellan enheter i ett nätverk. Sedan introduktionen har CAN använts inom olika områden där mikroprocessorer behöver kommunicera med varandra. Exempelvis förekommer CAN även inom industrier där elektromagnetiska störningar kan förekomma eftersom den är uppbyggt för att vara robust (Voss 2005: 8-14). Det som ytterligare underlättat användandet av CAN som kommunikationsmedel är att många av de stora mikroprocessortillverkarna som exempelvis Intel, Motorola och Philips har produktion av CAN-chip vilket bidrar till lägre priser och långsiktig tillgänglighet. De flesta tillverkare av halvledarkomponenter brukar ha UART 6 inbyggt tillsammans med deras mikroprocessorer för att ge stöd åt seriell kommunikation, men numera integreras CAN-kretsar istället. Man behöver då som programmerare endast ägna sig åt högnivåfunktioner såsom initiering, skrivning och läsning istället för att fokusera på detaljer kring kommunikationen (Voss 2005: 9-10). 3.2 Vad är CAN? Controller Area Network (CAN) är en seriell nätverksteknologi som använder sig av två ledningar, CAN-high respektive CAN-low. Mellan de två ledningarna mäts en spänningsskillnad som representeras av en recessiv nivå, etta på 0V och en dominant nivå, nolla på 5V. Under tiden då någon nod skickar ut en nolla på bussen ligger hela den på låg nivå eftersom låg nivå är dominerande (Voss 2005:35). I förhandlingsprocessen har detta stor betyd. Överföringshastigheten ligger på maximalt 1Mbit/s och kommunikationen går endast i en riktning åt gången vilket medför att den är halv-duplex. Jämfört med de seriella teknologierna som exempelvis RS232 är CAN betydligt bättre funktionsmässigt och mer pålitligt eftersom en mycket noggrannare felhantering används (Voss 2005: 10). I punkterna nedan sammanfattas några av de övriga egenskaper som utmärker CAN (Voss 2005: 20). Bussaccess som bygger på prioritet Riskfri förhandling om tillträde för att sända på bussen Vid förlorad bussförhandlig sänds meddelandet automatiskt om Vid fel sänds meddelandet automatiskt om Oberoende inaktivering av defekta noder Feldetektering och felsignalering 6 Universal Asynchronous Receiver/Transmitter 7
3.2.1 Viktiga delar av ett CAN-meddelande Alla kommunikationsprotokoll innehåller överflödig information som är till för att säkerställa kommunikationen och så även CAN. Det som är intressant för vår del är följande. CAN id DLC 7 Data Timestamp 3.3 Frames (Ramar) I CAN-standarden refereras alla meddelanden som ramar. Informationen som skickas över CAN-bussen måste ha samma struktur som de definierade formatramarna. Ramarna kan vara av olika längd men det finns en maximal gräns som måste följas. Det finns fyra olika sorters ramar: data frame, remote frame, error frame och overload frame (Voss 2005: 20). 3.3.1 Data frame Data frame är ramen som sänder datameddelanden till CAN-bussen antingen som följd av en händ, till exempel ändring av insignal, en timer eller som respons till en begäran. Ramen har ett unikt meddelande ID som kan accepteras av alla noder i nätverket beroende på behov från de olika applikationerna. Däremot kan meddelandet endast sändas av noden som är associerad med datameddelandet (Voss 2005: 40). Kontroll av bussen måste ske innan ett meddelande ska sändas. Bussen ligger på recessiv nivå då ingen sänder. Noderna blir medvetna om att någon sänder när bussen ändrar nivå till låg (dominant). Detta sker när SOF 8 sänds. Varje CAN-meddelande inleds med en SOF bit som alltid är dominerande dvs. låg. Därefter följer meddelandets ID som omfattar 11 bitar. Lägre meddelande ID medför en högre prioritet. Sedan kommer RTR 9 som avgör skillnaden mellan data och remote frame. Är RTR biten hög är det en remote frame annars en data frame (Voss 2005: 38-40). Kontrollfältet består av sex bitar där första biten är Identifier Extension (IDE) som anger om ett meddelandets ID är 29 bitar istället för 11. De resterande bitarna i kontrollfältet består av en reserverad bit och fyra bitar som anger datalängden. De efterföljande 0-64 bitar innehåller data (Voss 2005: 47-48). Avsändaren beräknar CRC 10 som är 15 bitar och bifogar det efter fältet som innehåller data. I slutet av CRC segmentet finns en bit som heter CRC delimiter som alltid ska vara recessiv (en etta) vilket tillåter de lyssnande noderna att kontrollerna om checkstumman stämmer. Nästa två bitar är ACK 11 och ACK delimiter. ACK-biten visar om checksumman erhållits korrekt av alla noder. ACK delimiter är alltid recessiv och är nödvändig för att fastställa en lyckad acknowledgement från en inträffande felram 7 Data Length Code 8 Start Of Frame 9 Remote Transmission Request 10 Cyclic Redundancy Check 11 Acknowledgement 8
(Voss 2005: 48-50). Sedan kommer det sista fältet inom ramen, EOF12, som alltid innehåller sju ettor (recessiv nivå) om inget fel har inträffat. Efteråt kommer tre bitar till, IFS13, som är recessiva och är till för separation av de olika ramarna. Eftersom de två sista fälten alltid ska ligga på hög nivå om allt går som det ska brukar de kallas för statiska fält (Voss 2005: 51-52). Figur 3.3.1.1 Data frame mer detaljerat (Voss 2005: 39) 3.3.2 Remote frame Remote frame är i stort sett identisk med data frame. Det som skiljer dem åt är att remote frame saknar datafält (Voss 2005: 38). Remote frame begär en överföring av ett meddelande av en annan nod. Samma meddelande ID används i både remote frame som den begärda data frame. Ramarna delas åt genom RTR-biten. Skulle båda ramarna med samma ID försöka få tillgång till bussen samtidigt kommer data frame att lyckas eftersom RTR-biten är dominant. Remote frame kan endast skickas med datalängd som är identiskt med motsvarande data frame (Voss 2005: 41). Figur 3.3.2.1 Remote frame (Voss 2005: 42) 3.3.3 Error frame När ett fel har uppstått på nätverket används en error frame för att indikera detta. Det som händer är att en error frame bryter mot CAN-standarden. För att synkronisera tiderna mellan noderna i nätverket tillåter CAN-standarden endast 5 bitar med samma polaritet mellan SOF-biten och CRC fältet vilket också inkluderas. Varje bitström som innehåller mer än 5 bitar av samma polaritet, antingen recessiv eller dominant, anses 12 End Of Frame 13 Interframe Space 9
som ett feltillstånd. CAN använder sig av den här regeln för att skicka en error frame som består av minst 6 dominanta bitar i rad. Varje nod i nätverket känner då igen att ett brott mot standarden har skett, dvs. bit stuffing regeln (Voss 2005: 57). Figur 3.3.3.1 Strukturen över error frame (Voss 2005: 58) Då en nod upptäcker en error frame på bussen skickar även den ut en error frame. Innebörden av detta är att tiden då ett fel blir upptäckt till en omsändning kan öka med ytterligare 6 bitar. Utsändningen av error frame från noderna kan variera tidsmässigt vilket resulterar i en överlagring av felflaggor, vilket i sin tur leder till att flagglängden kommer ligga mellan 6-12 bitar. Detta medför att den totala error frame längden kommer vara mellan 14 och 20 bitar. Genom att använda dessa siffror tillsammans med IFS kan man räkna ut den totala återställningstiden i ett CAN-nätverk (Voss 2005: 58). Error frame längd Hastighet (baud rate) Totalt återställningstid (Error frame + IFS) 14 bitar 1 Mbit/s 14 + 3 µs 500 Kbit/s 28 + 6 µs 250 Kbit/s 56 + 12 µs 20 bitar 1 Mbit/s 20 + 3 µs 500 Kbit/s 40 + 6 µs 250 Kbit/s 80 + 12 µs Tabell 3.3.3.1 Återställningstiden när ett fel har inträffat (Voss 2005: 58) 3.3.4 Overload frame En overload frame är en specialversion av en error frame, men till skillnad från en error frame görs inte omsändning. En nod kan begära en fördröjning mellan två data eller remote frames vilket innebär att en overload frame endast kan inträffa under en överföring mellan data och remote frame. Det man använder en overload frame till är att indikera när en nod är överbelastad och inte kan delta i CAN-kommunikationen. Utöver rapportering av överbelastning används overload frame till att rapportera följande fel (Voss 2005: 66-67). Detektering av en dominant bit under de första två bitarna av IFS Detektering av en dominant bit av mottagaren i den sista biten ur EOF fältet Detektering av en dominant bit av den sista biten från error delimiter eller overload delimiter av någon nod 10
Figur 3.3.4.1 Jämför mellan error och overload frame (Voss 2005: 67) 3.4 Utökat CAN-protokoll En standard ram till ett CAN-meddelande använder 11-bitars meddelande ID, vilket är fullt tillräckligt för användning i vanliga fordon och till industriella applikationer men inte för off-road fordon. För att detta skall bli möjligt utökades CAN-standarden till att kunna stödja 29-bitars meddelande ID. Den utökade CAN-standarden (CAN 2.0B) introducerades 1995. När man använder 11-bitars ID finns det tillgång till totalt 2 11 = 2048st olika ID. Däremot om man använder 29-bitars ID får man istället 2 29 536,9 miljoner. Det uppstår inga konflikter på nätverket om man använder båda protokollen samtidigt. Anledningen är att IDE-biten är dominant vid användning av ett 11-bitars ID vilket medför en vinst i förhandlingsprocessen över ett 29-bitars ID där IDE-biten är recessiv (Voss 2005: 53). SRR 14 är till för inte skilja ett 29-bitars ID från ett standard ID förrän vid IDE-biten. SRR-biten ersätter RTR-biten som befinner sig efter ID-bitfältet, vilket gör att ett 29- bitars ID behåller samma struktur som ett 11-bitars ID ända fram tills IDE-biten. Figur 3.4.1 Meddelande med 11-bitars ID där IDE är låg (Voss 2005: 55) Figur 3.4.2 Meddelande med 29-bitars ID där IDE är hög (Voss 2005: 55) 14 Substitute Remote Request 11
3.5 Bus arbitration (förhandlingsprocessen) Eftersom CAN är baserat på en tvåledningskommunikation mellan noderna i nätverket, dvs. alla noderna delar på samma fysiska ledningar, måste det finnas ett sätt att avgöra vem som får sända. Bus arbitration använder sig av en recessiv och dominant nivå. Sänder någon nod ut en hög bit men avläser en låg bit på bussen innebär det att någon annan nod sänder samtidigt. Prioritetsgraden bestäms av meddelandets ID, lägre ID innebär högre prioritet. Förhandlingsprocessen sker under meddelandets ID och RTRbiten. Noderna som förlorar förhandlingsprocessen övergår till lyssningstillstånd för att sedan försöka sända sitt meddelande igen när bussen är ledig, varefter en ny förhandling startas (Voss 2005: 84). I figuren nedan sänds samma bitström ut av alla noderna fram till bit 5. Då övergår nod B till att skicka ut en recessiv bit men avläser en dominant och övergår till lyssningstillstånd. Nod A utför samma sak vid bit 3. Noden som har lägst ID är nod C vilket innebär högst prioritet som i sin tur ger tillgång till att sända på bussen. Efter IFS kommer de resterande noderna att försöka sända om sina meddelanden då bussen är ledig (Voss 2005: 89-90). Figur 3.4.1 Ett exempel över en förhandlingsprocess (Voss 2005: 86) 3.6 Dataöverföring och synkronisering Det kan finnas ett flertal noder i ett CAN-nätverk som använder sig av en egen tidsram som ges av den egna nodens oscillator. Troligtvis är inte alla oscillatorer synkroniserade. För att avläsning ska ske med rätt intervall krävs någon form av synkronisering. Bitkodningen som används i ett CAN-nätverk är NRZ 15. Man får då ut maximal kapacitet men saknar ofta tillräckliga resurser för synkronisering. Kommer det en bitström med samma polaritet i följd finns det ej några övergångar att synkronisera bitsamplingen mot. Den utsända SOF-biten används för att synkronisera enheterna i nätverket eftersom den alltid orsakar en fallande flank. Vid varje mottagen SOF-bit sker en omsynkronisering av bitsamplingstiden (Voss 2005: 91, 93). 15 Non-Return-to-Zero 12
3.6.1 Bitsampling Eftersom CAN-standarden hanterar tillgång till bussen genom en förhandlingsprocess, måste en signal kunna färdas från avsändaren till mottagaren och tillbaka till avsändaren inom tidsramen för en bit. För att exakt kunna bestämma samplingspunkten delar CANstandarden upp en bittid i fyra olika tidssegment. Vid NRZ kodning går det alltid en bit per baud vilket medför att bittiden kan beräknas med följande formel, där BR är baud rate (Voss 2005: 97-98). Figur 3.6.1.1 De fyra olika tidssegmenten (Voss 2005: 97) Sync_Seg: Synkronseringssegment Detta segment används för att synkronisera noderna i ett CAN-nätverk. För att kunna anpassa synkroniseringen väntas en fallande flank som kommer från en SOF-bit. Skulle den förväntade övergången ske tidigare eller senare kommer differensen mellan aktuell punkt och förväntad punkt att sparas. För att sedan justera samplingspunkten så att nästa fallande flank hamnar inom synkroniseringssegmentet används denna differens (Voss 2005: 98). Prop_Seg: Propageringssegment I propageringssegmentet (utbredning) kompenseras de fysiska fördröjningarna inom nätverket, såsom signalspridning och behandlingstiden i noderna (Voss 2005: 98). Phase_Seg 1 & 2: Fassegment 1 & 2 Fasfel som upptäcks i synkroniseringsfasen kompenseras i de två sista segmenten. Sampling utförs alltid i slutet av det första segmentet. För att kunna korrigera samplingspunkten för både positivt och negativt fasfel förlängs det första fassegmentet och det andra förkortas. Det sista fassegmentet kan ha en maximal längd av det första fassegmentet tillsammans med den tid det tar att bearbeta informationen (Voss 2005: 98). Det krävs att propageringssegmentet är större än summan av två noders interna behandlingstid och propageringstiden multiplicerat med två dvs. tiden fram och tillbaka mellan noderna. Behandlingstiden för en nod räknas ut med följande formel, (Voss 2005: 99). 13
Synkroniseringssegmentet, propageringssegmentet och de två fassegmentens längd defineras (och programmeras) i tidskvanta. En tidskvanta är en tidsenhet som bestäms från oscillatorns frekvens divideras med CAN-controllerns programmerbara prescalervärde som ligger mellan 1 och 32. Den minsta möjliga tidskvantan är 1/klockfrekvensen. Nedan vissas tidskvanta för de olika segmentens längd (Voss 2005: 102-103). Sync_Seg: 1 tidskvanta. Prop_Seg: Propageringssegmentets längd är programmerbar från 1 och uppåt. Detta segment bör programmeras för att kompensera fördröjningar i CANnätverket och skall avrundas till närmsta tidskvanta. Phase_Seg 1: Även detta segments längd är programmerbar från 1 och upppåt. Längden kan vara längre under synkronisationen. Phase_Seg 2: Detta segments längd bör programmeras till den maximala längden av Phase_Seg 1 tillsammans med den tid det tar att bearbeta informationen. 3.6.2 Synkronisering Det finns två olika sätt att synkronisera en kommunikation på CAN-busen. Det första sättet kallas för hård synkronisering och går ut på att de interna klockfrekveserna hos de lyssnande noderna ställs in mot den fallande flanken av en utsänd SOF-bit. Det andra sättet är en omsynkronisering av bitsamplingstidpunkten. Det man gör då är en ändring av längden på fassegmenten, antingen en förlängning eller förkortning. För att inte störningar ska orsaka synkronisering måste bussen undersökas så att den aktuella nivån skiljer sig från den föregående nivån. Detta måste ske innan en synkronisering utförs. Eftersom det finns specifika regler om hur och när en synkronisering får ske är det enda tillgängliga tillfället under perioden mellan två ramar vid utsändning av en SOF-bit då bussen är ledig (Voss 2005: 104-105). 3.6.3 Faskorrigering Fasfelet mäts mellan den upptäckta bitflanken och början av synkroniseringssegmentet. Korrigeringen av samplingstidpunkten sker inom samma tidsram där bitflanken upptäcktes. Efter att omsynkronisering har skett inom en tidsram korrigeras fassegmentens längd och därefter återställs de till deras startvärden (Voss 2005: 107). Omsynkronisering, dvs. kompensation av fasfel utförs beroende på felets omfattning genom att antingen förlänga fassegment ett eller förkorta fassegment två. Resultatet av att ändra längden på fassegmenten är att den aktuella bittiden förlängs eller förkortas och på så vis justeras samplingspunkten till rätt position. Följande regler gäller för omsynkronisering (Voss 2005: 109). Fasfelet måste vara större än SJW 16 Om fasfelet är positivt förlängs längden på fassegment 1 med SJW Om fasfelet är negativt förkortas längden på fassegment 2 med SJW 16 Synchronization Jump Width 14
3.7 Felhantering CAN-standarden använder sig av ett flertal olika metoder för felhantering vilket bidrar till dess höga pålitlighet. Pålitligheten hos CAN-standarden har beräknats med en matematisk modell där ett bitfel inträffade varje 0.7 sekund, baud rate låg på 500 kbit/s och nätverket var igång åtta timmar per dag året runt. Enligt denna modell skulle det uppstå ett oupptäckt fel per tusen år. Följande fem metoder används för att upptäcka fel: Bit monitoring, CRC, Bit stuffing, Frame check och Acknowledge check (Voss 2005: 115-116). 3.7.1 Bit monitoring Alla CAN-noder som sänder meddelanden på bussen övervakar bussen och jämför den utsända nivån bit för bit med motsvarande nivån på bussen. Ett bitfel upptäcks då den utsända bitens nivå skiljer från den övervakade nivån på bussen. Men det finns tre olika undantag (Voss 2005: 116). En dominant bit på bussen leder inte till ett bitfel när en recessiv bit sänds under förhandlingsprocessen. En dominant bit på bussen leder inte till ett bitfel när en recessiv bit sänds under ACK-biten. En nod som skickar ut en passiv error frame som består av sex höga bitar men detekterar en låg bit resulterar inte i ett bitfel. Bit monitoring tillåter inte bara global felhantering inom nätverket utan även lokal feldetektering. 3.7.2 CRC Det 15 bitar långa CRC-segmentet som finns i data eller remote frame innehåller ramens kontrollsekvens från SOF till och med datafältet. Bitarna för bit stuffing är inte inkluderade. Uträkningen av den 15-bitars långa checksumman är något komplex för att vara så felfri som möjligt. Tekniken som används vid uträkningen är baserad på binär division med ett polynom som är fördefinierat. Polynomgraden bestämmer antalet bitar som behövs till CRC-koden. Meddelandet som ska skickas utökas först med samma antal nollor som polynomgraden. Dessa läggs till efter meddelandets minst signifikanta bit dvs. i slutet. Meddelandet inklusive nollorna divideras sedan med polynomet och lämnar kvar en rest med samma antal bitar som graden på polynomet. Eftersom en 15- bitars CRC skickas med varje meddelande kallas polynomet CRC-15 och används för CAN-trafik. Genom att använda logiskt OR ersätts nollorna som lades till i slutet av meddelandet med den rest som beräknades vid divisionen. När meddelandet har mottagits av mottagaren sker en uträkning som kontrollerar att allting är korrekt. Uträkningen utförs genom division mellan meddelandet och polynomet. Om resultatet av uträkningen är noll har meddelandet överförts korrekt annars erhålls en rest som indikerar att en bit har ändrats under överföringen och omsändning behövs. Polynomet som är specificerat för CAN är följande, x 15 + x 14 + x 10 + x 8 + x 7 + x 4 + x 3 + 1 (Voss 2005: 116-117). 15
3.7.3 Bit stuffing CAN-standarden tillåter endast fem bitar i följd med samma polaritet, vilket innebär att den sjätte biten måste sändas med omvänd polaritet. Biten som läggs till filtreras bort av mottagaren (Voss 2005: 93-94). Bit stuffing är ej tillåtet i följande fält: CRC delimiter Acknowledgement field End of Frame field Intermission field Bit stuffing är tillåtet i följande fält: Start of Frame Arbitration field (innehåller meddelande ID och RTR) Control field (innehåller IDE och DLC) Data field CRC Sequence 3.7.4 Frame check Följande fält, CRC delimiter, ACK delimiter, End of Frame field och Intermission field, från data eller remote frame är såkallade statiska fält eftersom deras datanivå alltid är statisk dvs. recessiv. Dessa fält används även för att kontrollera följden för data och remote frame. Error frame skickas ut om det finns en eller flera dominanta bitar i något av dessa fält. De undantag som gäller är följande, när en mottagare övervakar en dominant nivå av den sista biten av EOF och när någon nod övervakar en dominant nivå av den sista biten av error delimiter eller overload delimiter. Uppstår något av dessa undantag skickas inte någon error frame ut (Voss 2005: 119). 3.7.5 Acknowledge check Acknowledgement field är till för att bekräfta en lyckad CRC-kontroll av de mottagande noderna i nätverket. Noden som sänder ett meddelande övervakar bussen och förväntar sig en dominant nivå under ACK-biten. Om en recessiv nivå upptäcks ligger felet hos den sändande noden eftersom ingen nod mottagit själva meddelandet. När någon nod har mottagit ett meddelande korrekt övergår bussen till dominant nivå men om det förekommer lokala fel sänder någon eller några noder ut recessiv nivå under ACKbiten. För att upplysa mottagaren och alla noder om felet kommer mottagande noder som inte lyckades verifiera meddelandet att efter ACK-delimiter sända ut error frames. I CAN-standarden finns det definierat hur felaktiga noder ska isoleras för att inte förstöra trafiken. Det finns tre olika tillstånd definierade som isolerar en nod, Error active, Error passive och bus off. Varje nod kontrollerar antal mottagningsfel och sändningsfel för att avgöra vilket tillstånd noden ska försättas i för att förhindra att en felaktig nod förstör trafiken (Voss 2005: 119-120). 16
3.7.6 Sändningsfel Ett högprioriterat meddelande som innehåller fel sänds ut av en defekt nod. Alla andra fungerande noder sätter inte någon ACK-bit vilket medför att den sändande noden initierar en omsändning. Eftersom ett fel fortfarande finns inuti meddelandet kommer samma händ att upprepas och de lågprioriterande meddelanden får inte tillgång till bussen (Voss 2005: 120). 3.7.7 Mottagningsfel En defekt nod tar emot ett felfritt meddelande men upptäcker och rapporterar fel på grund av sitt defekta tillstånd. Enligt CAN-standarden kommer en återsändning att ske automatiskt av ramen och den defekta noden kommer rapportera fel om och om igen. På samma sätt som i sändningsscenariot kommer inte ett lågprioriterat meddelande att få tillgång till bussen (Voss 2005: 120). 3.7.8 Error active En error-active nod är en fullt fungerande nod som deltar i kommunikationen utan några begränsningar. När ett fel upptäcks kan den fungerande noden skicka ut en active error flagga som består av sex dominanta bitar i följd. För att noden ska vara i tillståndet error-active måste både sändningsräknaren och mottagningsräknaren vara under 128 (Voss 2005: 122). 3.7.9 Error passive En error-passive nod deltar också i kommunikationen utan några begränsningar men när ett fel upptäcks kan den endast sända ut en passive error flagga som består av sex recessiva bitar i följd. Efter en överföring kommer noden som är i error-passive tillståndet att vänta en viss tid innan ytterligare överföringsförsök. På grund av de sex recessiva bitar kan endast sändfel rapporteras. Mottagningsfel kommer antingen inte att synas då bussen är ledig eller hindras de av annan trafik som är på bussen. Antingen sändningsräknaren eller mottagningsräknaren måste vara 127 eller över för att en nod ska försättas i error-passive tillstånd. För att noden ska övergå till error-active tillstånd måste båda räknarna vara lika med 127 eller mindre (Voss 2005: 122). 3.7.10 Bus off En nod som är i tillståndet bus-off deltar ej i kommunikationen på bussen. För återgång till det enda giltiga tillståndet error-active krävs det att sändningsräknaren och mottagningsräknaren nollställs och att noden går igenom en uppstartsfas. Om en nod har varit i bus-off tillståndet måste noden vänta i 128 sekvenser där varje sekvens innehåller 11 recessiva bitar i följd. Sekvenserna i fråga förekommer vid error/overload delimiter samt i slutet på en data/remote frame. Om sändningsräknaren överstiger 255 sätts noden i bus-off tillstånd (Voss 2005: 123). 17
3.7.11 Error counting Felräknarna kommer antingen att ökas eller minskas enligt olika regler, beroende på om det är sändningsfel eller mottagningsfel. Vid sändningsfel gäller följande regler då felsändningsräknarens värde ändras (Voss 2005: 125-126). När en nod sänder ut en error frame ökas den sändande nodens räknare med 8, eftersom någon nod inte kunde tolka/upptäcka fel i utsänt meddelande. Då ett bitfel upptäcks när sändning av error/overload flag sker ökas den sändande nodens räknare med 8. Vid detektering av 14 dominanta bitar i rad efter att en overload/active error flag har skickats ut respektive 8 dominanta bitar i följd efter utsändning av passive error flag, ökas räknaren med 8. När ett meddelande överförts korrekt minskas räknaren med 1. Däremot vid mottagningsfel gäller nedanstående regler då felmottagningsräknarens värde ändras (Voss 2005: 125-126). Då en mottagande nod upptäcker en dominant bit direkt efter att en error flag har skickats ut ökas räknaren med 8. Om en hög bit detekteras under tiden som en error/overload flag skickas ut på bussen ökas räknaren med 8. Vid detektering av 14 dominanta bitar i rad efter att en overload/active error flag har skickats ut respektive 8 dominanta bitar i följd efter utsändning av passive error flag, ökas räknaren med 8. Vid övriga mottagningsfel ökas räknaren med 1. Efter ett felfritt mottagande av ett meddelande fram till ACK-biten minskas räknaren med 1. Efter att ett meddelande har godkänts med ACK minskas räknaren med 1. 18
4. K line 4.1 Introduktion K-line är en seriell buss som liknar protokollet RS232 men använder sig av andra spänningsnivåer vilket medför att en liten genomgång av RS232 tas upp istället. RS232-standarden är en av de äldsta fysiska kommunikationsstandarderna inom datorvärlden. Standarden omfattar en billig och robust kommunikation där bitarna skickas sekventiellt. RS232 utvecklades för att koppla ihop enheter som datorer, terminaler och skrivare till modem. Den maximala hastigheten för en serieport definierades upp till 20kbps men högre bandbredd var möjlig i praktiken. Den nyare standarden RS232-E tillåter högre kommunikationshastighet än dess föregångare (Lammer Bies, april 2008). 4.2 RS232 Bitström RS232-standarden beskriver en kommunikationsmetod där informationen skickas en bit i taget på den fysiska ledningen. Informationen måste delas upp i dataord där längden är valbar men oftast ligger mellan 4 och 8 bitar. För en så felfri överföring som möjligt läggs extra bitar till för synkroniserings- och felhanteringssyften. Det är viktigt att både avsändaren och mottagaren använder sig av lika många bitar annars kan dataordet misstolkas eller inte kännas igen överhuvudtaget (Lammer Bies, april 2008). Vid synkron kommunikation måste det finnas en klocka eller en trigger som indikerar början av varje överföring. Om en klocksignal saknas är det bättre att använda asynkron kommunikation vilket leder till att det behövs färre antal ledningar i kabeln. Nackdelen är att mottagaren kan börja ta emot information vid fel tillfälle och då behövs en omsynkronisering vilket ger tidsfördröjningar. All data som tas emot vid omsynkroniseringsperioden går förlorad. En till nackdel är att extra bitar behövs i dataströmmen för att indikera början och slutet av informationen vilket kräver mer bandbredd (Lammer Bies, april 2008). Databitarna sänds med en fördefinierad frekvens som kallas baud rate. Både avsändaren och mottagaren måste använda samma baud rate vid kommunikation. Efter att första biten mottagits kommer mottagaren att beräkna när resten av databitarna kommer att nå fram. Vid samma tillfälle kontrolleras spänningsnivåerna. Spänningsnivåerna har två olika lägen där en nolla representeras av +3V till +15V och en etta av -3V till -15V. När bussen är under vänteläge ligger nivån lågt (Lammer Bies, april 2008). Det är här RS232 och K-line skiljer sig åt. På K-line ligger bussen på hög nivå under vänteläge där en nolla representeras av 0V till 3.6V och en etta av 8.4V till 12V (ISO 9141-2). För att omvandla mellan dessa spänningar används en modifierad PPC med en RS232 kontakt och en OBD II kontakt. 19
4.2.1 Startbit I RS232 finns asynkron kommunikation definierad. Detta innebär att dataord kan överföras när som helst då en klocka saknas. Men eftersom detta är möjligt ställer det till problem för mottagaren eftersom identifiering av den första biten är svår. För att lösa detta problem läggs en bit till som uppmärksammar mottagaren om början av dataordet. Biten kallas för startbit och representeras av en hög nivå av RS232 protokollet men som en låg nivå av K-line protokollet (Lammer Bies, april 2008). 4.2.2 Databitar Direkt efter att startbiten har överförts skickas databitarna. Om en bit har värdet ett ligger bussen på låg nivå och om bussen ligger på hög nivå har biten värdet noll (Lammer Bies, april 2008). K-line protokollet har databitarna inverterade dvs. låg nivå är en nolla och hög nivå är en etta. Den minst signifikanta biten överförs alltid först. 4.2.3 Paritetsbit Paritetsbiten används till felhantering. En extra bit läggs till automatiskt i dataordet. Avsändaren räknar ut värdet på biten beroende på informationen som skickas. Mottagaren utför samma uträkning och kontrollerar att paritetsbitens värde stämmer överrens med det uträknade värdet (Lammer Bies, april 2008). 4.2.4 Stoppbit Om det skulle hända att en startbit uteblir måste det finnas ett sätt att omsynkronisera kommunikationen. För att göra detta introducerades ramar. Tanken med ramar är att alla databitar och paritetsbitar kapslas in i en ram med en start- och stoppbit. Tidsperioden mellan start- och stoppbit är en konstant som definieras av baud rate och mängden databitar samt paritetsbiten. Startbiten ligger alltid på hög nivå medan stoppbiten ligger på låg. Detta medför att om mottagaren detekterar något annat än låg nivå då stoppbiten ska komma har ett synkroniseringsfel inträffat (Lammer Bies, april 2008). Åter igen skiljer sig K-line protokollet genom att stoppbiten är inverterad, dvs. hög istället för låg. Stoppbiten som indikerar slutet på en dataram kan ha olika längder. De vanligaste längderna är 1, 1.5 och 2. Längden på 1.5 bitar används endast om dataordet är fem bitar långt medan 2 bitar endast används för längre dataord. En stoppbit av längden 1 kan användas för alla dataord (Lammer Bies, april 2008). 4.3 UART En UART som står för Universal Asynchronous Receiver/Transmitter är ansvarig för att utföra omvandlingar från parallell information till seriell data som sedan kan sändas på bussen. För att ta emot information kan man använda sig av ytterligare en UART. En UART utför alla uppgifter såsom timing och undersökning av paritetsbit samt andra väsentliga uppgifter som behövs vid kommunikationen. UART har tillgång till olika register beroende på vilken typ av kommunikation det är. Några av de olika parametrarna är hastighet, kontroll av paritetstyp och hur informationen överförs till programvaran som används (Lammer Bies, april 2008). 20
4.4 Initiering av K-line För att initiera K-line krävs en hastighet på 5bps. Om hastigheten är rätt och styrenheten svarar, gör den det genom att skicka en synkroniseringsbit och två nyckelord. Det andra nyckelordet inverteras och skickas tillbaka till styrenheten. Vid lyckad initiering skickar styrenheten initieringsadressen inverterad. När detta är klart ändras hastigheten till 10400bps för vidare kommunikation (ISO 9141-2). Figur 4.4.1 Initieringsfasen för K-line (ISO 9141-2) 4.5 Exempel på dataström från K-line Nedan visas två tabeller innehållandes trafik från K-line. Den översta visar exakt hur dataströmmen ser ut och den andra tabellen förklarar innehållet. Dataström 01 55 EF 8F 70 FE 82 10 F1 10 89 1C 82 F1 10 50 89 5C 82 10 F1 1A 9B 38 B0 F1 10 5A 9B 30 33 47 39 30 36 30 31 36 42 20 20 35 36 34 35 03 00 00 47 00 01 02 03 04 05 52 34 20 31 2C 39 4C 20 45 44 43 20 20 20 20 20 20 20 20 20 C9 Tabell 4.5.1 Ett exempel på hur dataströmmen från K-line kan se ut. Data Kommentar 01 Initieringsadressen. 55 EF 8F Synkroniseringsbit, nyckelord1, nyckelord2. 70 Inverterat nyckelord2. FE Inverterad initieringsadress. 82 10 F1 10 89 1C 82 är formatbyte, 10 är target, F1 är source, 10 89 är data och 1C är checksumman 82 F1 10 50 89 5C 82 är formatbyte, F1 är target, 10 är source, 50 89 är data och 5C är checksumman 82 10 F1 1A 9B 38 82 är formatbyte, 10 är target, F1 är source, 1A 9B är data och 38 är checksumman B0 F1 10 5A 9B 30 33 47 39 30 36 30 31 36 B0 är formatbyte, F1 är target, 10 är source, 42 20 20 35 36 34 35 03 00 00 47 00 01 02 03 från 5A fram till C9 är det data och C9 är 04 05 52 34 20 31 2C 39 4C 20 45 44 43 20 20 checksumman 20 20 20 20 20 20 20 C9 Tabell 4.5.2 Formaterad dataström från K-line 21
5. Analys av parametrar För att kunna implementera hårdvarulagret och uppnå målet som krävs måste man ha en viss förstå för hur CAN-trafiken ser ut. Detta medför att en analys av trafiken måste utföras med diagnosverktyg som finns tillgängliga på företaget. Det är inga specifika parametrar som måste analyseras. Vi fick en kort introduktion för uppkoppling mot en bil med ett diagnosverktyg och en dator för att ta emot samt spara informationen från styrenheterna i bilen. Då projektet i första hand inriktar sig mot Saab var det naturligt att just koppla upp sig mot en sådan. För att kunna identifiera någon parameter som man är ute efter är första steget att ställa en fråga med hjälp av diagnosverktyget Tech-2 och sedan tolka trafiken som skickas till och från fordonet. Genom att studera trafiken och tolka den med hjälp av ISO-standarder samt dokumentationen som finns tillgänglig kan man identifiera de sökta parametrarna. För att se hur informationen skickas och ser ut, måste ett verktyg från Kvaser användas samt programvara. Verktyget är en Kvaser Memorator Professional II och den sköter kommunikationen mellan datorn och CAN-bussen. Programvaran är CANlab och där hämtas informationen från verktyget och presenteras i programmet för att sedan sparas i en loggfil. Parametrarna som valdes var serviceintervall, mätarställning och tanknivå. Även felkodsläsning analyserades, dock inte lika djupt, vilket innebär att den utesluts från denna rapport. 5.1 Serviceintervall Via diagnosverktyget kan serviceintervall nås. Direkt i dataströmmen ligger avstånd till nästa huvud- och mellanservice som anges i hexadecimala byte vilket medför att endast en omvandling från hexadecimalt till decimalt behövs för utläsning av den korrekta serviceinformationen. Tid CAN ID DLC Data Kommentar 00:00:01.781 247 8 02 1a 25 00 00 00 00 00 1a står för readecuid och 25 är en tillverkarspecifik parameter (ISO 14230-3). 00:00:01.797 647 8 10 10 5a 25 02 6e d9 00 10 innebär att mer data följer. 5a följt av parametern 25 indikerar positivt svar. 02 6e d9 är data och decimalt blir det 159449 km som är avstånd till nästa huvudservice. 0:00:01.799 247 8 30 00 00 00 00 00 00 00 30 innebär att klienten (Tech- 2) är redo för att ta emot mer data. 00:00:01.807 00:00:01.818 647 647 8 8 21 00 00 01 f9 a9 00 00 22 00 00 03 33 39 31 00 Tabell 5.1.1 Dataströmmen för serviceintervall Resterande data, där 01 f9 a9 decimalt blir 129449 km som är avstånd till nästa mellanservice. 22
5.2 Mätarställning Saab använder sig av en buss som heter I-bussen (instrumentbussen) för att sända ut instrumentinformation som mätarställning. I-bussen är en låghastighets CAN-buss som har en överföringshastighet på ovanliga 33kbit/s. Trafiken på CAN-bussen använder sig av två ledningar, CAN-high respektive CAN-low. För att läsa ut informationen på I- bussen användes en specialtillverkad kabel som leder om pinne ett på OBD IIkontakten, dvs. där informationen kommer, till CAN-high och CAN-low till jord. I- bussen skickar ut trafik utan att någon förfrågan behövs vilket medför att mätarställningen kan läsas ut. Mätarställningen kommer med exakt en sekunds intervall. Tid CAN ID DLC Data Kommentar 00:00:06.243 00:00:07.243 450 450 8 8 80 00 6c b0 ad 00 00 00 80 00 6c b0 ad 00 00 00 För att få ut mätarställningen görs 6c b0 ad om till decimalt och blir 7123117 vilket i sin tur divideras med 64 dvs. 7123117/64. Resultatet blir då 111298 km som stämmer överrens med mätarställningen i bilen. Raden under visar endast att det tar exakt en sekund mellan meddelandena. Tabell 5.2.1 Dataströmmen för mätarställning som går över I-bussen 5.3 Tanknivå För att få fram den rätta spänningen från tanknivågivaren används diagnosverktyget Tech-2. Verktyget sköter förfrågningen och presenterar svaret som var 1.39V. Dessutom en loggfil innehållandes trafik från bussen sparas för analys och beräkning. Nivån kunde inte fås i liter ur avläst data utan endast spänningen från tanknivågivaren. För att få ut rätt parameter ur dataströmmen används följande formel,. Efter uträkningen, konverteras resultatet till hexadecimal form och utläsning blir möjlig. Tid CAN ID DLC Data Kommentar 00:00:04.625 7e0 8 03 aa 04 15 00 00 00 00 Förfrågan från klienten (Tech-2) för att hämta spänningsnivån från givaren. 00:00:04.642 5e8 8 15 ff 00 0a 4e c8 47 7f Styrenheten svarar genom att skicka meddelande med data där tanknivågivarens spänning kan läsas ut. 47 görs om till decimalform vilket blir 71. (71/255)*5=1.39V vilket stämmer bra. Tabell 5.3.1 Dataströmmen för tanknivån 23
6. Implementering 6.1 Planering Efter att ha analyserat trafiken från CAN-bussen inleddes analysering av klassdiagrammet samt dokumentationen från Kvasers API. Från Kvasers API valdes de metoder som ansågs behövas till implementationen av kommunikationen med CAN. Även ett filter var tillgängligt i Kvasers API men vi bestämde oss för att göra ett eget filter som ska filtrera bort ID som är ointressanta. Vårt filter kommer ha tre olika lägen där ett släpper igenom all trafik, ett som blockerar valda meddelande ID och ett som endast släpper igenom valda meddelande ID. Eftersom CAN använder två kanaler är tanken att trådar ska användas där en tråd representerar en kanal. För att få en bättre översikt gjordes ett enkelt flödesschema innehållandes alla metoder som finns angivna i klassdiagrammet. Nästa steg var att börja implementera strukturen till klasserna Message och HW_interface. Då endast CAN finns med i klassdiagrammet blev vi tvungna att planera hur K-line ska inkluderas i både klassdiagrammet och implementationen. Eftersom trafiken skiljer sig något i strukturen mellan K-line och CAN fick vi en kort introduktion av handledarna på företaget. Vi valde att ändra klassdiagrammet då all implementation är slutförd. Direkt insåg vi att det saknades bl.a. metoder för att lägga till meddelanden i sendbufferten och hämta svaren från svarsbufferten. Även klassen Message saknade metoder som behövdes för både hårdvarulagret och protokollagret. 6.2 Funktionalitet och klassmetoder Det första steget är att skapa ett objekt av klassen HW_interface. Det är här man väljer parametrar till kommunikationen. Därefter sker uppkoppling genom anrop av en annan funktion som startar en arbetstråd. Trådens uppgift är att kontrollera om det finns några objekt från klassen Message i sändbufferten och om så är fallet skickas det första objektet ut på den valda bussen. När sedan ett svar har tagits emot av tråden ska den skapa ett nytt objekt av klassen Message och lägga till det i svarsbufferten. Det som läggs till i själva objektet är meddelande ID, dlc (längden på mottagen data), data (maximalt 8 bytes för CAN och 255 bytes för K-line) och timestamp (tiden när svaret tas emot). Vid användning av CAN följer en timestamp med vid mottagandet och vi behöver endast addera en tid från den interna timern som används av de övriga lagren. K-line däremot saknar timestamp som gör att vi måste lägga till en tidsstämpel från timern när data tas emot. Tanken med tidsstämplar är att ha en exakt tid för mottagning. Trafiken som går på K-line kommer i en dataström där ett meddelande är maximalt 255 bytes. Därav måste en formatbyte hittas som innehåller längden på den data som finns i meddelandet. För att veta när ett meddelande är slut summeras alla bytes i meddelandet och jämförs med checksumman som finns i dataströmmen. Efter att ett meddelande har lagts till i svarsbufferten skapas ett event, dvs. en händ som informerar lagret ovan att det finns ett Message objekt inlagt i svarsbufferten och är redo för att hämtas. Beroende på vilket läge filtret är inställt på utförs passande åtgärder, dvs. antingen genomsläppning eller blockering. 24