Tento díl seriálu bude praktický. S rozmachem fotovoltaiky a bateriových úložišť se na nás obracejí zákazníci s žádostí o vytvoření EYE souboru pro vizualizaci dat v programu PP2CAN například z BMS (Battery Management System), který je vybaven rozhraním CAN. V tomto článku si ukážeme jak na to. Nepoužiji dokumentaci od některého ze zákazníku, ale zcela náhodnou dokumentaci k BMS, kterou jsem vygooglil. Jelikož při vytvoření tohoto článku nemám možnost testovat na reálném HW, pamatujte že vytvořený EYE soubor může obsahovat chyby nehledě na to že zrovna tato dokumentace kterou jsem použil není dokonalá.
V mém případě jsem našel dokument "CANBUS Communication Protocol of Sigineer Solar Inverter BMS". Alternativně je dokument ke stažení i zde.
Hned na začátku dokumentu na straně 5 se dostáváme k jednomu z důvodů, proč jsem právě tento dokument vybral a ukázal na možnou nejednoznačnost informací. Je zde uvedeno:
29 bit identifier is used in the standard frame format, and the bus transmission rate is 500kbps
Tedy že je použit standardní frame s 29 bitovým identifikátorem. To je ovšem poněkud zmatená informace. Standardní CAN frame - zpráva se standardním identifikátorem má délku identifikátoru 11 bitů. Rozšířený - extended frame má 29 bitů. Tedy z dokumentace není zřejmé jaký druh identifikátoru je použit. Máme 3 možnosti:
- je použit standardní frame s 11 bitovým identifikátorem
- je použit rozšířený 29 bitový identifikátor
- je použit 29 bitový identifikátor a to tak že rozšířená 18 bitová část obsahuje jen nuly a identifikátor uvedený v dokumentaci je v 11 bitové části
První 2 varianty jsou jasné, nicméně pokud by se jednalo o třetí variantu, je důležité pamatovat na to, že spousta programů pro práci s CAN sběrnicí při použití 29 bitového identifikátoru vyžaduje zadat jen jedno 29 bitové číslo. 11 bitová část pak tvoří horních 11 bitů z tohoto 29 bitového ID. Pokud tedy dokumentace uvádí například zprávu Heartbeat command s identifikátorem 0x301 a provedeme příslušný přepočet, bude mít 29 bitový identifikátor hodnotu 0xC040000. Vše se dá otestovat například v našem programu PP2CAN v nástroji CAN calculator.
Do pole St v rámečku A stačí zapsat x301. Hodnota se převede sama z hexadecimální na dekadickou. Po stisku G se vygeneruje hodnota 29 bitového identifikátoru složeného ze zadané 11 a 18 bitové části. Zároveň se vygenerují i hodnoty registrů v řadičích MCP2510/2515 a SJA1000 což nám v tento okamžik k ničemu není, ale může se hodit v případě že by jste pracovali na nějakém HW s těmito obvody. MCP2515 je například populární na různých HAT pro CAN bus na RPI.
Z dokumentace ovšem více nezjistíme, pro určení o jakou variantu se jedná by bylo potřeba kontaktovat výrobce nebo zkusit určit variantu přímo testem na této BMS. My budeme v další části tohoto článku předpokládat že se jedná o první z variant, tedy standardní 11 bitový identifikátor. Pokud by se opravdu jednalo o třetí variantu, není nutno v programu PP2CAN identifikátor vždy přepočítávat touto kalkulačkou, ale postačuje nastavit volbu Extended ID format v nastavení programu.
Nyní se konečně dostaneme k vlastnímu vytvoření EYE souboru, to si ukážeme krok po kroku na zprávě popsané v kapitole 2.2.1 Battery working parameters and status information. Z dokumentace je patrné, že zpráva se je odesílána periodicky s periodou 1000ms. Pro vizualizaci dat v této zprávě obsažených si otevřeme nástroj Data view, klikneme na tlačítko Edit EYE čímž otevřeme editor EYE souborů. Zpráva má identifikátor 0x311 a jak jsme si řekli, předpokládáme že se jedná o 11 bitový formát.
A - Zpráva má standardní 11 identifikátor, tedy volba St / Ext je deaktivována.
B - Zadáme identifikátor x311, to se automaticky konvertuje na dekadický formát, tedy 785
C - Nastavíme název veličiny - Charging voltage
D - Jednotka V - voltage
E - Endian, zde nám vzniká další problém v tom, že dokumentace není úplná, pdf neobsahuje žádnou zmínku o tom zda je použit little nebo big endian, ani msb nebo lsb a podobně. Budeme proto předpokládat, že se jedná o little endian. Pokud by se jednalo o big endian, je nutné pamatovat na to že pozice nejnižšího bitu se změní z 0 na 8 (F).
F - Pozice nejnižšího bitu, data jsou v datových bajtech DB0 a DB1, pro little endian pak platí pozice 0.
G - Délka dat je 16 bitů - dva bajty DB0 a DB1.
H - Rozlišení 1 bitu je 0.1 V.
I - Offset dat je 0
J - Stisknutím přidáme do seznamu.
Stejný postup zvolíme i pro položky Charging current limiting a Discharge current limiting. Ty mají také 16 bitovou délku, takže pouze upravujeme pozici, název a jednotky. Náhled na využité bity a bajty ve zprávě nám ukazuje červeně bity právě editovaných dat, zeleně nevyužité bity, modře obsazené bity a žlutě kde se nacházela editovaná data dříve před jejich přesunutím při editaci.
Po přidání těchto 3 položek se tak dostáváme k položce Battery operation status. To je stavová informace, tato informace má 2 bity v posledním datovém bajtu a každý stav má svůj název. Pro lepší přehlednost si tyto stavy pojmenujeme - stiskneme tlačítko Naming. V dialogu pak přidáváme jednotlivé hodnoty a jejich textový název. Po zavření dialogu stiskneme opět Add a nebo Set pokud jsme prováděli dodatečnou editaci již existující položky. Pokud u nějaké veličiny provedeme pojmenování, je tlačítko podbarveno zeleně. Pojmenování se věnuje i tento náš starší článek.
Nyní máme vytvořen EYE soubor, který prozatím obsahuje dekódování dat čtyř položek z jedné zprávy. Nastává tak čas si otestovat jeho funkci. Okno editoru EYE zavřeme tlačítkem OK. Pokud máme program PP2CAN v režimu V2CAN, tedy virtuální CAN loopback, můžeme si odeslat zprávu s identifikátorem 0x311 a nasimulovat si tak snadno příchod zprávy z CAN sběrnice.
A - Yadáme identifikátor 0x311
B - Standardní frame - zatržítko tedy neaktivní
C - DB0 je nastaveno na 100, jedná se o dolní bajt položky Charging voltage, měřítko je 0,1, budeme tak očekávat hodnotu 10V.
D - Bit 0 v DB7 je nastaven na 1, tedy stav Standby.
E - Odešleme zprávu
V okně Data view pokud je aktivní volba Enable nám naskočí přijatá zpráva s dekódovanými položkami. V případě že je v Options nastavena i volba pro logování všech odeslaných zpráv, uvidíme i druhou stejnou zprávu ale ve směru TX.
Pokud si chcete otestovat i funkci Graph, stačí otevřít nástroj Data sender. Ten se předvyplní zprávou která je naeditována v hlavním okně programu a kterou jsme právě zkušebně odeslali. Následně je možné v Data view stisknout GRAPH a dvojklikem na položku Charging voltage se položka přidá do grafu. Takto je možné přidat položek do grafu dle libosti. Pak již stačí v nástroji Data sender stisknout Enable a posunovat posuvníkem. Ve výchozím stavu budeme posuvníkem měnit hodnotu DB0 a při změně se data odešlou na CAN - v našem případě na virtuální loopback CAN.
V grafu pak vidíme průběh veličiny v čase. Pokud chcete můžete do EYE soubory přidat další z položek této zprávy či položky dalších zpráv uvedených v dokumentu k BMS a vytvořit si soubor EYE, který dovolí programem PP2CAN sledovat všechny veličiny které jsou na CAN bus odesílány do nebo z BMS. My jsme skončili jen u 4 položek a tento vzorový EYE si můžete stáhnout zde.