V minulém díle jsme si popsali jak použít soubor ECID k pojmenování jednotlivých zpráv čtených z CAN sběrnice. Formát ECID ale dovoluje jít ještě dále, dovoluje přímo definovat i jednotlivé hodnoty. Tedy v rámci tohoto souboru lze specifikovat i data, které se zadávají do souborů EYE. Podívejme se tedy nejprve na příklad:
>I:x123400,E,M:xFFFF00,#Test @U:24:8:B:1:0,#Unsigned @U:24:8:B:0.01:10000,#Unsigned @S:24:8:B:2:0,#Signed @S:24:8:B:0.1:-10000,#Signed @F:16:x:7:8:L:0.00390625:0,#User float,*km/h @F:24:32:B:1.010101:1000.0001,#Float32 @F:0:64:L:1.010101:10000.000001,#Float64 @T:1:5:,#String @T:1:5:R,#String @B:1:,#Bit @B:1:N,#Bit-neg @H:24:8:B,#Hex
První řádek provádí pojmenování zprávy s rozšířeným identifikátorem s hodnotou 0x123400 a maskou identifikátoru 0xFFFF00. Za touto definicí pojmenování zprávy je pak možné zadat jednotlivé hodnoty. Každá definice hodnoty začíná znakem zavináč (@). Jedna zpráva může obsahovat definice libovolného počtu hodnot. Za tímto znakem pak následuje znak který specifikuje typ dat:
- U - typ unsigned
- S - typ signed
- H - typ hex
- F - float
- B - bit
- T - string (text)
Typ unsigned
Celé číslo bez znaménka, pro jeho definici je třeba zadat polohu dolního bitu (lsb), bitovou délku, endian (big/little), váhu bitu a offset v tomto uvedeném pořadí. Hodnota offset se odčítá od hodnoty vynásobené váhou bitu (měřítkem). Jednotlivé parametry jsou odděleny dvojtečkou. Za touto definicí se nachází pojmenování hodnoty uvozené znakem # či případně další parametry (jednotky - *, pojmenování - $).
Příklad:
@U:24:8:B:1:0,#Unsigned
- lsb je na 24 bitu, délka dat je 8 bitů, jsou typu big endian, váha bitu je 1 a offset pak 0. Hodnota má název Unsigned.
Typ signed
Tento typ je znaménkový, to znamená že obsahuje bit (msb), který stanoví zda se jedná o kladné nebo záporné číslo. Parametry jsou stejné jako u typu unsigned.
Příklad:
@S:24:8:B:0.1:-10000,#Signed
- lsb je na pozici 24 bitu, délka dat je 8 bitů, jsou typu big endian, váha bitu je 0.1, offset pak -10000. Jelikož data začínají hodnotou 24 a mají délku 8 bitů, jsou tedy tvořeny čtvrtým datovým bajtem (DB3). Pokud by tento bajt obsahoval například hodnotu 88, dojde k vynásobení váhou bitu 0,1 a odečtení offsetu. Tedy:
88*0.1 - (-10000) = 10008.8
Za povšimnutí stojí že se používá desetinná tečka (ne čárka), neboť čárka se používá pro oddělování parametrů.
Typ hex
Tento typ se používá v případě, kdy je vhodné data vypsat hexadecimálně, například pro status slovo. Na rozdíl od typu unsigned se však nezadává váha bitu a offset.
Typ float
Typ s pohyblivou řadovou čárkou (IEEE 754). Zadává se pozice prvního bitu a délka. Délku je možné nastavit 32 nebo 64 bitovou. Tedy typ single nebo double. Dále pak je uvedena váha bitu a offset.
@F:24:32:B:1.010101:1000.0001,#Float32
Zde je zadán lsb na pozici 24 bitu, délka dat 32 bitů , big endian, váha 1.010101, offset 1000.0001.
@F:16:x:7:8:L:0.00390625:0,#User float,*km/h
Není zadána délka dat, parametr nastaven na x. Jedná se tedy o user float. Format little endian. Exponent 7 bitů, mantissa 8 bitů. Celková délka dat je 16 bitů 7+8+1 (sign,neboli znaménkový bit). Je nastaven i parametr textu jednotek veličiny na km/h.
Typ bit
Jednobitová hodnota, jedná se vlastně o typ unsigned o délce 1 bitu a bez možnosti specifikovat měřítko a offset. Kromě pozice bitu je také možno specifikovat znakem N negaci bitu. Tedy stav On bude pro hodnotu bitu 0.
Bez negace, není uveden znak N. Pokud se neprovádí negace lze použít jakýkoliv jiný znak než N nebo za čárkou neuvést žádný znak.
@B:1:,#Bit
S negací:
@B:1:N,#Bit-neg
Typ string
Data obsahují řetězec. Nezadává se hodnota prvního bitu a bitová délka ale pozice prvního bajtu (bajty se počítají od 0) a délka v bajtech. Pokud je string reverzně, je možné zadat jako třetí parametr znak R.
@T:1:5:,#String
@T:1:5:R,#String
Typy unsigned a hex dovolují pojmenovávat hodnoty. Chceme li kromě hodnoty uvádět i textový název hodnoty, je třeba specifikovat v souboru ECID seznamy hodnot. Opět uvedeme příklad:
[Test1
=0:Off
=1:On
=2:Error
=3:Unknown
]
[Test2
=0:False,1:True
]
Příklad uvádí dva seznamy pojmenování. Každý ze seznamů pak lze uvádět opakovaně u více definovaných hodnot. Důležité pak je aby se seznam nacházel v souboru ECID ještě před první hodnotou ve které je pojmenování použito. Protože tato pojmenování mohou být dosti univerzální, je možné tyto definice pojmenování zapsat do samostatného souboru ECID a využít vlastnosti vkládání obsahu jednoho souboru ECID do jiného. Pro programátory - něco podobného jako includovování souborů headeru v C/C++.
Pokud definice vložíme do samostatného souboru s názvem naming.ecid, je možné jeho obsah vložit do jiného souboru ECID zápisem &naming.ecid. Toto vkládání je použitelné i v jiných případech a situacích. Například do souboru s definicí UDS diagnostiky vložíme definice pro módy OBD a podobně. Jeden soubor pak je využitelný ve více slovnících.
Formát pojmenování je snadný, pojmenování leží mezi hranatými závorkami. Za první závorkou se nachází název seznamu proměnných. Následuje seznam, každý řádek začíná rovnítkem a následuje hodnota a za dvojtečkou pak název této hodnoty. Na řádku je možné zapsat i více těchto páru hodnota:název, další položky je třeba oddělit čárkou.
Obrázky které následují ukazují jak vypadá výpis hodnot v nástrojích Data view a Signal receiver:
Na závěr uveďme krátkou ukázku souboru ECID pro zobrazení dat ve zprávách Cruise Control/Vehicle Speed: CCVS a Electronic Engine Controller #1: EEC1 z FMS či SAE J1939 normy.
[Pedal =0:pedal released =1:pedal pressed =2:error =3:not available ] [Switch =0:switched off =1:switched on =2:error =3:not available ] [CCStates =0:off/disabled =1:hold =2:accelerate =3:decelerate =4:resume =5:set =6:accel. override =7:not available ] >I:xFEF100,E,M:xFFFF00,#Cruise Control/Vehicle Speed: CCVS ;1/256 = 0.00390625 @U:8:16:L:0.00390625:0,#Wheel based speed,*km/h @H:24:2:L:1:0,$Switch,#Cruise control active @H:28:2:L:1:0,$Pedal,#Brake switch @H:30:2:L:1:0,$Pedal,#Clutch switch @H:53:3:L:1:0,$CCStates,#Cruise Control States >I:xF00400,E,M:xFFFF00,#Electronic Engine Controller #1: EEC1 @U:16:8:L:1:125,*%,#Actual Engine – Percent Torque @U:24:16:L:0.125:0,*RPM,#Engine speed
A výsledek v nástroji Data view: