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();
endDruhý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();
}
endSkript 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
