Program PP2CAN určený pro práci s CAN sběrnicí obsahuje vlastní skriptovací jazyk, který dovoluje snadno vytvářet vlastní nástroje pro generování dat na CAN sběrnici, ale i zpracovávat data z CAN sběrnice a realizovat různé jednoduché řídící algoritmy nebo simulace chování. Syntaxe tohoto jazyka je inspirována jak jazykem C tak i Pascalem. Tato vlastní syntaxe a implementace skriptovacího jazyka vznikla ještě dříve než většina současných skriptovacích jazyků a byla zvolena z důvodu snadného provázání s programem PP2CAN bez nutnosti úpravy nějakého v té době existujícího skriptovacího jazyka a portování vlastních úprav do nových verzi interpretrů těchto jazyků.
Instalace programu PP2CAN obsahuje v instalačním adresáři ve složce "Demo data" tři desítky ukázkových skriptů. Popis funkce skriptovacího jazyka a ovládacích prvků okna CAN skriptu je k nalezení v tomto manuálu.
CAN skripty v programu PP2CAN mají 2 základní varianty a to CAN_FUNCTION a TIMER_SCRIPT. První typ je spouštěn při příchodu CAN zprávy, spouštění druhého je pak dáno periodickým časovačem. Existuje i třetí varianta a to CAN_FUNCTION_AND_TIMER. Ta je pak spouštěna v obou případech.
V tomto prvním díle si vytvoříme velmi jednoduchý skript, který bude generovat na CAN bus periodicky zprávu. V této zprávě bude hodnota prvního datového bajtu řízena posuvníkem z okna skriptu. Hodnota posuvníku bude také ovládat nastavení horního bitu v datovém bajtu 7. Pokud by jsme potřebovali v programu PP2CAN ovládat hodnotu datového bajtu a data odesílat na CAN, za normálních okolností můžeme použít nástroj Data sender. V tomto případě ovšem potřebujeme navíc ovládat i stav bitu v DB7. To je nástrojem Data sender nerealizovatelné a proto je vhodné použít skript.
Každý skript začíná hlavičkou ve které se definuje o jaký druh skriptu jde, tedy v tomto případě se jedná o periodický skript spouštěný časovačem:
script:
type = TIMER_SCRIPT;
endZa touto hlavičkou pak následuje sekce, která obsahuje definici proměnných:
variables:
char data;
endDalší sekcí je sekce definice objektů. V něm si definujeme objekt CAN zprávy:
objects:
obj_can_msg can_msg;
endDalší sekce již obsahuje vykonávaný kód. Tato konkrétní sekce je kód který se vykoná jednou po spuštění skriptu, slouží tak například k inicializaci proměnných, datových položek objektů, uživatelských ovládacích prvků atd:
init:
//Zapis textu do konzole okna skriptu
logs("Script: Tutorial 1");
//Odradkovani
log_endl();
//Odesilame zpravu se standardnim identifikatorem s hodnotou 10.
//11 bitova cast se nastavuje do id1 objektu CAN zpravy
can_msg.id1 = 10;
can_msg.id2 = 0;
//Delka zpravz je 8 bajtu
can_msg.size = 8;
//11 bitovy identifikator -> false
can_msg.stext = false;
//Nejedna se o RTR
can_msg.rtr = false;
//CAN port
can_msg.port=1;
//Inicializacni hodnoty datovych bajtu
can_msg.set_data(0,0x00);
can_msg.set_data(1,0x00);
can_msg.set_data(2,0x00);
can_msg.set_data(3,0x00);
can_msg.set_data(4,0x00);
can_msg.set_data(5,0x00);
can_msg.set_data(6,0x00);
can_msg.set_data(7,0x00);
//Prednastaveni timeru na pro spousteni skriptu na 100ms
ui_set_timer_script_period (100);
endNyní nám již zbývá vytvořit pouze tělo skriptu s požadovanou funkcí:
body:
//Precteni ovladaciho prvku scrollbaru
value = ui_get_val0();
//Zmeritkovani, scrollbar vraci hodnotu 0..10000
//CAN zprava odesila data v rozsahu 0..100
value = value/100;
//nastaveni hodnoty do prislusneho bajtu CAN zpravy
can_msg.set_data(0,u2c(value));
//Nastavovani bitu v DB7 dle hodnoty prectene ze scrollbaru
//a ulozeni hodnoty do CAN zpravy
if(value>50)
{
can_msg.set_data(7,0x80);
}
else
{
can_msg.set_data(7,0x00);
}
//Odeslani zpravy na CAN
can_msg.send();
endCelý soubor s tímto skriptem je možné stáhnout zde.
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
