Skriptovací jazyk v prostředí PP2CAN obsahuje jako jednu z metod objektu vektoru (obj_vector_int) možnost vypočítat CRC kód dat, které jsou ve vektoru uloženy. Parametrem pro výpočet je zadání jak bitové délky, tak i polynomu a dalších parametrů. Následující příklad ukazuje výpočet dvou CRC. V prvním případě se jedná o 8 bitový CRC-8/WCDMA, ve druhém pak o 32 bitový CRC-32/BZIP2.
Pro zjištění parametrů pro výpočet požadované varianty CRC a kontrolu správnosti výpočtu lze použít například tyto stránky: https://crccalc.com/.
Demonstrační kód obsahuje pouze sekci body.
body: v.clear(); v.push_back(0x01); v.push_back(0x02); v.push_back(0x03); v.push_back(0x04); v.push_back(0x05); v.push_back(0x06); //CRC-8/WCDMA //8, 0x9B, 0x0, true, true, 0x0 ret = v.crc(0x08, 155, 0,true,true,0); printu64(ret); v.clear(); v.push_back(0x01); v.push_back(0x02); v.push_back(0x03); v.push_back(0x04); v.push_back(0x05); v.push_back(0x06); //CRC-32/BZIP2 //0x4C11DB7, 0xFFFFFFFF, false, false, 0xFFFFFFFF ret = v.crc(0x20, 79764919, 4294967295,false,false,4294967295); printu64(ret); stop(); end
Druhým příkladem ve skriptovacím jazyce bude použití objektu obj_dataset, který dovoluje za běhu do skriptu předávat hodnoty čísel nebo řetězců. Ukázkový skript otevře kromě objektu obj_dataset i objekt obj_datagrid a zadávané hodnoty bude přepisovat z jednoho objektu do druhého.
script: type = TIMER_SCRIPT; end // Definice promennych variables: double d; string s; int i; unsigned u; end // Definice objektu objects: obj_dataset set; obj_datagrid view; obj_datagraph graph; end init: set.open("Set"); set.set_name(0,"Prvni"); set.set_name(1,"Druhy"); set.set_name(2,"Int"); set.set_name(3,"Unsigned"); set.load_pos(); view.open("View"); view.set_name(0,"String"); view.set_name(1,"Double"); view.set_name(2,"Int"); view.set_name(3,"Unsigned"); view.load_pos(); view.update(); graph.open("Graph"); graph.load_pos(); end shutdown: set.save_pos(); view.save_pos(); graph.save_pos(); end body: if(set.updated()) { set.get_value_string(0,s); view.set_value_string(0,s); d = set.get_value_double(1); view.set_value_double(1,d); i = set.get_value_int(2); view.set_value_int(2,i); u = set.get_value_unsigned(3); view.set_value_unsigned(3,u); view.update(); graph.set_value(0,i); graph.update(); } end
Skript kromě ukázky objektu obj_dataset ukládá pozici oken objektů. TO provádí v sekci shutdown při ukončení skriptu. V sekci init se pokusí uloženou pozici načíst. Toto slouží k tomu, aby se do registrů uložila pozice oken objektů a při příštím spuštění se okna nepřekrývala a byla stejně rozložena.
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