Verze SW PP2CAN 3.057 přináší novinky v integrovaném skriptovacím jazyku a celém skriptovacím nástroji. První důležitou novinkou je možnost spouštět skripty i s periodou 1ms. Vzhledem k tomu, že Windows nejsou realtime operační systém, může dojít k výpadkům periody, ale při časech kolem 5ms se perioda spouštění drží velmi slušně. Samozřejmě závisí i na dostupném výkonu počítače. Otestovat periodu lze níže uvedeným skriptem, který využívá nový objekt obj_timepoint pro měření času. Skript měří periodu volání nastavenou na 5ms. Perioda se měří v mikrosekundách a hodnota mezi dvěma voláními je jak vypsána v logu tak zobrazena v grafu.
script: type = TIMER_SCRIPT; end variables: unsigned64 t; end objects: obj_timepoint time_point; obj_datagraph graph; end init: graph.open("Perioda skriptu"); graph.set_min(0); graph.set_max(20000); ui_set_timer_script_period(5); end body: time_point.set_end(); t = time_point.duration_us_swap(); printu64(t); graph.set_value(0,u642u(t)); graph.update(); end
Výsledek vidíme na obrázku. Perioda se drží kolem 5000 uS.
Druhou a poměrně velkou novinkou je možnost snadného přiřazování dat mezi objekty prostřednictvím operátoru =. Tato novinka velmi zjednodušuje práci s daty a kód velmi zjednodušuje. Co všechno dovoluje? Například přiřazením objektu CAN zprávy do vektoru se do vektoru vloží hodnoty datových bajtů, to samé platí pro objekt socketového clienta nebo server, rs232. Přijatá data se vloží do vektoru nebo přidají k datům ve frontě (objekt deque). A funguje to i opačně. Data ve vektoru se odešlou do socketu, vloží jako data do CAN zprávy, uloží do souboru CSV.
Další dnešní příklad ukáže jak snadno a elegantně vyřešit pomocí skriptu tuto úlohu: Do souboru CSV ukládat data z CAN sběrnice - zprávu s identifikátorem 0xCF00400 (tedy dle SAE J1939 zpráva mimo jiné s otáčkami motoru). Kromě datových bajtů je třeba uložit i časovou značku.
Skript bude využívat tyto objekty: obj_can_msg pro příjem zprávy, obj_csvfile pro ukládání dat do CSV, obj_deque_int pro sestavení dat řádku CSV a obj_timepoint pro určení časové značky od spuštění skriptu. Skript vypadá takto:
script: type = CAN_FUNCTION; end // Definice promennych variables: string s; end // Definice objektu objects: obj_csvfile file; obj_timepoint t; obj_deque_int d; obj_can_msg m; end shutdown: s = file_dialog_save("csv"); //výběr souboru pro uložení CSV file.write(s); //uložení souboru end body: m.load(); if(m.get_ID29()==217056256) //CF00400 - porovnání zda se jedná o zprávu kterou chceme ukládat { d.clear(); //vyčištění fronty d.push_back(u642u(t.duration_from_start_ms())); // vložení časové značky jako první prvek do fronty d=m; //vložení datových bajtů CAN zprávy file = d; //vložení dat z fronty do CSV } end
Pokud nepočítáme řádky s klíčovými slovy sekcí skriptu, definicemi objektů a proměnných, má vlastní ukládání dat z CAN bus zprávy do CSV 6 řádků kódu a uložení souboru při ukončení skriptu řádky 2.
Další díly seriálu:
- Díl 1: Periodické generování dat na CAN sběrnici.
- Díl 2: Uživatelské prvky pro řízení skriptu
- Díl 3: Simulace joysticku dle SAE J1939
- Díl 4: Monitorování a zápis událostí do souboru CSV
- Díl 5: Měření periody a zápis do CSV pomocí přiřazení objektu
- Díl 6: Komunikace pomocí TCP
- Díl 7: Komunikace pomocí sériové linky
- Díl 8: PID regulátor
- Díl 9: Výpočet CRC a objekt obj_dataset
- Díl 10: Volání funkce z externí DLL
- Díl 11: Odeslání emailu s hlášením