Pozn. 1: Pokud je v dokumentu uvedné číslo pakety, je tím myšleno číslo pakety ze záznamu ve Wiresharku. Soubor záznamu otevíratelný ve Wiresharku je dostupný v sekci "Přílohy" na konci každého dokumentu + videozáznam, který zobrazuje software Coach v akci, zatímco vedle běží Wireshark (poskytuje kontext k dané paketě: zda vůbec proběhla po spuštění Coache, před/po zapojením čidla, před/po prudkém nárůstu teploty atd.). V testech 1-5 ho doplňuje mluvený komentář.
Pozn. 2: Tyto informace jsou s největší pravěpodovností proprietární pro firmu CMA Amsterdam, z tohoto dokumentu a mé práce by asi moc radost neměli. Na to jim ovšem kašlu.
Pozn. 3: Všechna čísla adres (s prefixem "0x") a dat (bez prefixu, vždy dvojice číslic, např. 00 05 a9 ...) jsou zapsána v hexadecimální soustavě.
Pozn. 4: Každý dokument obsahuje odkazy na manuály k jednotlivým čidlům. Ty jsou buď staženy přímo z webshopu CMA, nebo v případě nedostupnosti naskenovány ručně.
Všechny testy jsou uvedeny v chronologickém pořadí, kdy byly provedeny. Test 0 sloužil spíše jen jako takový pokus provedený doma, zatímco testy 1-5 byly provedeny v jednom sezení v laboratoři školy.
Test 0 - moje první analýza komunikace mezi Coachem a €Labem (pouze s termočlánkem) - moc podrobného toho neobsahuje, dobře slouží ale jako základní kostra analýzy komunikace
Test 1 - podrobnější pokus s termočlánkem (0135i) - termočlánek byl tentokrát vyzkoušen na obou portech a obou rozsazích + záznam do grafu na obou portech samostatně
Test 2 - pokus s čidly vysokého napětí a proudu (0210i + BT21i) - čidla vysokého napětí, graf na obou portech najednou
Test 3 - pokus s čidly nízkého napětí a proudu (0212i + 0222i)
Test 4.1 - pokus s čidlem kovového teploměru (D016i)
Test 5 - pokusy s ostatními čidly (017i, 023i, 0663i, 024i)
Test 4.2 - druhý pokus s čidlem kovového teploměru (D016i), protože jsem si myslel, že jsem neuložil test 4.1
Zde jsou mé finální poznatky o komunikaci mezi €Labem a Coachem. Užijte si to.
Zdá se, že €Lab nemá žádnou smysluplnou inicializační proceduru, a asi by to fungovalo i bez ní (spíš to vypadá, jako ověření, zda zapojený €Lab je opravdu €Lab). Ale i tak, tyto pakety se vždy objeví při otevření aktivity v Coachi:
Paketa 1: Požadavek od hosta pro vstup dat z €Labu.
Paketa 2: Požadavek o získání názvu zařízení z deskriptoru.
Paketa 3: Odpověď od €Labu na paketu 2. Odpověď obsahuje 16 bajtů:
adresa data v číselné formě v ASCII
0x00 10 03 45 00 75 00 72 00 6f 00 4c 00 61 00 62 00 ..E.u.r.o.L.a.b.
První bajt určuje délku odpovědi (tedy 16 bajtů) a druhý bajt určuje typ deskriptoru (3 = řetězec). Tohle vše je pro nás vlastně nepodstatné, a je to naposledy, co se budeme deskriptory zabývat.
Paketa 4: Odeslání 8 bajtů dat od hosta: 03 01 0b 80 0c 32 0b 00
První dva bajty znázorňují příkaz čtení nízkého napětí na portu 1 (viz níže – Formát příkazové pakety od hosta + seznam příkazů), zatímco zbytek se zdá náhodný, a poté je přepsán, když je potřeba. Nalezené kombinace posledních 6 bajtů jsem sepsal do seznamu:
0b 80 0c 33 0b 00
0b 80 0c 34 0b 00
0b 80 0c 08 0b 00
0b 80 0c 37 0b 00
0b 80 0c 32 0b 00
Asi bude stačit si vybrat jen jednu z nich, to by fungovat mělo.
Paketa 5: Potvrzení od €Labu o přijetí pakety 4.
Paketa 6: Odpověď od €Labu na paketu 1 (ano, až takhle pozdě). Obsahuje standardní 64-bajtovou odpovědní paketu, viz níže.
Čtveřice paket 7-10: Příkaz 04 01 (viz níže pro seznam příkazů) a jeho následná odpověď. Už probíhá stejně, jako standardní komunikace v klidovém režimu, viz níže. Je zvláštní, že na odpověd na příkaz z pakety 4 se nikdy nedočkáme.
Poté komunikace pokračuje vesele dál.
Zdá se ale, že tato inicializace není vůbec potřeba, aby €Lab ožil a začal fungovat. Což je fajn.
€Lab má dva "režimy": klidový režim a vysokorychlostní režim. Klidový režim je využit, když Coach zrovna nezaznamenává data do grafu či tabulky. V tomto režimu můžeme číst nejen hodnoty z čidel, ale také číst/zapisovat data z/do pamětí u inteligentních čidel a inicializovat samotný vysokorychlostní režim.
Každý jednotlivý přenos dat se skládá ze čtveřice paket.
Paketa 1: Požadavek od hosta o vstup dat.
Paketa 2: Odeslání příkazové pakety od hosta. Viz níže pro podrobnosti.
Paketa 3: Potvrzení od €Labu o přijetí pakety 2.
Paketa 4: Odeslání odpovědní pakety od €Labu. Viz níže pro podrobnosti.
Příkazová paketa od hosta se vždy skládá z 8 bajtů. Záleží na příkazu, kolik bajtů využije. Hodnoty nevyužitých bajtů se od předchozí příkazové pakety nijak nemění.
Seznam identifikovaných příkazů:
03 xx = čtení napětí z čidla xx01 → nízké napětí (0..5 V) portu 102 → vysoké napětí (-10..10 V) portu 103 → Auto-ID portu 1 (?)04 → nízké napětí (0..5 V) portu 205 → vysoké napětí (-10..10 V) portu 206 → Auto-ID portu 2 (?)04 01 = reset mezipaměti odpovědní pakety €Labu na výchozí hodnotu (viz níže – Formát odpovědní pakety od €Labu)05 xx = inicializace vysokorychlostního režimu14 xx yy = čtení paměti EEPROM inteligentního čidla00 = port 1, 01 = port 2)00 až 7f) - ano, čte se hezky jeden bajt po druhém, ne, že by to prostě poslalo najednou00, 2. bajt obsahuje hodnotu z paměti na dané adrese; při neúspěchu 1. bajt = 03, 2. bajt = ff (nastává, když není do portu nic zapojeno)Odpovědní paketa od €Labu se vždy skládá z 64 bajtů. První 2 bajty jsou většinou odpověď na příkaz, dalších 6 bajtů se rovnají zbylým hodnotám z příkazové pakety a zbytek je to, co tam bylo naposledy.
Hodnoty odpovědní pakety při resetu €Labu nebo při vyvolání příkazu 04 01:
adresa data v číselné formě v ASCII
0x00 2d 45 75 72 6f 4c 61 62 20 76 65 72 2e 31 2e 31 -EuroLab ver.1.1
0x10 20 20 43 6f 70 79 72 69 67 68 74 20 32 30 30 37 Copyright 2007
0x20 20 43 4d 41 20 41 6d 73 74 65 72 64 61 6d 0d 0a CMA Amsterdam..
0x30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
(pozn. při provedení příkazu 04 01 se bajty na adresách 0x31 až 0x3F nemusí zresetovat, mohou obsahovat data z možného předchozího vysokorychlostního záznamu, viz níže)
Tento režim pořebuje řádnou inicializaci, kde je třeba zadat kolik vzorků zaznamenat, jak rychle je zaznamenat, z jakých portů zaznamenávat a kolik je třeba poslat vzorků v jednu danou paketu.
Paketa 1: Požadavek od hosta o vstup dat.
Paketa 2: Odeslání příkazové pakety od hosta.
05 xx 00 00 00 00 00 00Paketa 3: Potvrzení od €Labu o přijetí pakety 2.
Paketa 4: Odeslání příkazové pakety od hosta.
00 xx xx 00 yy yy zz zz02 00 = 2 = 0.2 ms / vzorek = 5 kHzd0 07 = 2000 = 200 ms / vzorek = 5 Hzf5 01 = 501 vzorkůukázková paketa pro 50 Hz, 10 s: 00 c8 00 00 f5 01 f5 01
(50 * 10 = 500, k tomu se ještě přičte počáteční vzorek, proto to je 501)
Paketa 5: Potvrzení od €Labu o přijetí pakety 4.
Paketa 6: Odeslání příkazové pakety od hosta.
xx yy 00 00 00 00 00 0000 - kanál nepoužit01 - nízké napětí 1. portu02 - vysoké napětí 1. portu04 - nízké napětí 2. portu05 - vysoké napětí 2. portuukázková paketa pro měření teploty: 01 00 00 00 00 00 00 00
ukázková paketa pro V-A charakteristiku: 02 05 00 00 00 00 00 00
Paketa 7: Potvrzení od €Labu o přijetí pakety 6.
Paketa 8: Odeslání odpovědní pakety od €Labu, která už opsahuje naměřená data podle konfigurace. Viz níže pro podrobnosti.
Samotný přenos dat je mnohem jednoduší, než v klidovém režimu, jelikož nemusíme posílat příkazy. Komunikace pro získání jedné pakety dat z €Labu vypadá následovně:
Paketa 1: Požadavek od hosta o vstup dat.
Paketa 2: Odeslání odpovědní pakety od €Labu.
Odpovědní paketa ve vysokorychlostním režimu záleží na tom, jak byl vysokorychlostní režim nakonfigurován. Pokud první příkaz konfigurace byl 05 01 a bylo použito jen 1 čidlo, tak by odpovědní paketa vypadala následovně:
adresa data v číselné formě
0x00 xx xx ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
0x10 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
0x20 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
0x30 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
?? znázorňují nevyužité bajty pakety.
Zatímco pokud byl první příkaz 05 10 a byla by použita 2 čidla, tak by odpovědní paketa vypadala následovně:
adresa data v číselné formě
0x00 xx xx yy yy xx xx yy yy xx xx yy yy xx xx yy yy
0x10 xx xx yy yy xx xx yy yy xx xx yy yy xx xx yy yy
0x20 xx xx yy yy xx xx yy yy xx xx yy yy xx xx yy yy
0x30 xx xx yy yy xx xx yy yy xx xx yy yy xx xx yy yy
xx xx patří čidlu 1, yy yy patří čidlu 2. Naměřené hodnoty mají stejný formát, jako v klidovém režimu (1. bajt obsahuje 6 bitů MSB naměřené 12-bitové hodnoty, 2. bajt obsahuje 6 bitů LSB), akorát je k 1. bajtu vždy přičteno 80. Proto hodnota, která by v klidovém režimu vypadala jako 17 24, by zde byla reprezentována jako 97 24. Zvláštní.
Ukončení je velmi jednoduché, skládá se z 6 paket.
Paketa 1: Požadavek od hosta o vstup dat.
Paketa 2: Odeslání příkazové pakety od hosta. - ff 00 00 00 00 00 00 00
Paketa 3: Potvrzení od €Labu o přijetí pakety 2.
Paketa 4: Odeslání příkazové pakety od hosta. Už obsahuje příkaz klidového režimu.
Paketa 5: Potvrzení od €Labu o přijetí pakety 4.
Paketa 6: Odeslání normální odpovědní pakety od €Labu podle příkazu v paketě 4.
Tak a tady mě to začíná štvát - v manuálech na čidla vždy stojí, že mají 256-bajtovou paměť, ale Coach vždy čte jen 128 bajtů! Chápu, že u některých čidel, kde jsou přepínače, to přepíná adresu (viz test 1, kde je výpis všech 256 bajtů), ale u těch, co ho nemají, kam zmizelo těch zbylých 128 bajtů? Že by nám lhali? 🤔
Rozbor ukázky provedu na paměti z termočlánku nastavený na nízký rozsah.
adresa data v číselné formě v ASCII
0x00 01 2A 01 02 88 04 13 81 54 68 65 72 6D 6F 63 6F .*......Thermoco
0x10 75 70 6C 65 20 31 31 30 00 00 00 00 54 65 6D 70 uple 110....Temp
0x20 31 31 30 00 00 00 00 00 01 45 05 01 00 00 80 3F 110......E.....?
0x30 00 00 80 3F B4 00 00 00 01 0E 01 00 00 A0 C1 00 ...?............
0x40 00 DC 42 0D 03 00 D7 A3 D2 C1 77 BE E8 41 00 00 ..B.......w..A..
0x50 00 00 28 43 29 00 00 00 00 D7 A3 D2 C1 77 BE E8 ..(C)........w..
0x60 41 00 00 00 00 28 43 29 00 00 00 00 D7 A3 D2 C1 A....(C)........
0x70 77 BE E8 41 00 00 00 00 28 43 29 00 00 00 00 5D w..A....(C)....]
A na vysoký rozsah.
adresa data v číselné formě v ASCII
0x00 01 2A 01 02 87 04 13 81 54 68 65 72 6D 6F 63 6F .*......Thermoco
0x10 75 70 6C 65 20 31 33 30 30 00 00 00 54 65 6D 70 uple 1300...Temp
0x20 31 33 30 30 00 00 00 00 01 45 05 01 00 00 80 3F 1300.....E.....?
0x30 00 00 80 3F B4 00 00 00 01 0E 01 00 00 48 C3 00 ...?.........H..
0x40 80 A2 44 0A 03 00 00 00 5D C3 33 73 9E 43 00 00 ..D.....].3s.C..
0x50 00 00 28 43 29 00 00 00 00 00 00 5D C3 33 73 9E ..(C)......].3s.
0x60 43 00 00 00 00 28 43 29 00 00 00 00 00 00 5D C3 C....(C)......].
0x70 33 73 9E 43 00 00 00 00 28 43 29 00 00 00 00 43 3s.C....(C)....C
0x01 - nevím, ale vysokonapěťová čidla tam mají hodnotu 0x21, užitečné pro detekci, jaký příkaz používat
0x04 - unikátní identifikátor druhu čidla + stavu přepínače
0x08-0x1B - dlouhý název čidla
0x1C-0x27 - krátký název čidla
0x3B-0x3E - minimální hodnota čidla (float32 - zde je to -20 a -200)
0x3F-0x42 - maximální hodnota čidla (float32 - zde je to 110 a 1300)
0x46-0x49 - koeficient b v lineární funkci (float32 - zde je to -26,33 a -221)
0x4A-0x4D - koeficient a v lineární funkci (float32 - zde je to 29,093 a 316,9)
Pozn. výpočet finální hodnoty = a * x + b, kde x je vstupní napětí
0x52-0x58 - řetězec jednotky (7 znaků, používá kódování WIN1250, viz teploměr, kde je znak b0 = "°" - tady z nějakého důvodu není)
0x59-0x6B - kopie bloku 0x46-0x58
0x6C-0x7E - další kopie bloku 0x46-0x58 (ale proč?!)
S těmito daty by ani nebylo potřeba udržovat databázi čidel, prostě by to načetlo hodnoty přímo z čidla (to by samozřejmě nefungovalo pro neinteligentní čidla, ale ta jsou v naší škole vzácná, možná i neexistující).
03 03 a 03 06 jsou opravdu Auto-ID (bude potřeba připojit potenciometr a rozkuchat nevinný €Lab, nebo alespoň si obstarat tu zástrčku) - pro naše účely pravděpodobně zbytečnémanual_eurolab.pdf - manuál k zařízení €Lab (stažený od CMA)
eurolab_lsusb.txt - výpis linuxového příkazu lsusb na €Labu, který zobrazuje různé vlastnosti jeho USB implementace