V šestém díle si tentokrát ukážeme posílání dat pomocí TCP protokolu. Pro komunikaci použijeme vestavěné objekty obj_socket_server a obj_socket_client. Taktéž pro zpracování dat využijeme nové možnosti skriptovacího jazyka a o přiřazování objektů, při kterém se mezi objekty přesunou data. Pro příjem dat využijeme objekt vektoru, ten na rozdíl od fronty deque při každém přiřazení nejprve vymaže data která obsahuje.
Zadáním bude realizovat komunikaci mezi serverem a klientem, kdy si oba budou vyměňovat zprávy Ping <-> Pong.
Začneme kódem serveru:
script:
type = TIMER_SCRIPT;
end
// Definice promennych
variables:
char ch;
string str;
end
// Definice objektu
objects:
obj_socket_server server;
obj_vector_int data_out;
obj_vector_int data_in;
end
init:
server.OpenTCP(3002); //Server je spusten na portu 3002
logs("SERVER");
log_endl();
end
shutdown:
server.close();
end
body:
if(server.data_received()) //Test zda jsou prijata data
{
data_in = server; //Pokud jsou data prijata, prectu je z objektu socket serveru do vectoru
data_in.to_string(str);//Konvertuji na retezec a data vypíšu do okna logu
prints(str);
if(str=="Ping") //Test zda server posila Ping
{
data_out.from_string("Pong");
server = data_out; //Pokud ano, odpovim pong
}
}
endKód klienta vypadá téměř stejně pouze při otevření specifikujeme adresu: Jelikož vše testujeme lokálně, je zadána loopback adresa.
script:
type = TIMER_SCRIPT;
end
// Definice promennych
variables:
string str;
end
// Definice objektu
objects:
obj_socket_client client;
obj_vector_int data_out;
obj_vector_int data_in;
end
init:
client.OpenTCP(127,0,0,1,3002); //Otevreni - loopback
logs("CLIENT");
log_endl();
data_out.from_string("Ping"); // Vzajemnou vymenu Ping - Pong inicializujem prvni zpravou v init sekci skriptu
client = data_out;
end
shutdown:
client.close();
end
body:
if(client.data_received())
{
data_in = client;
data_in.to_string(str);
prints(str);
if(str=="Pong")
{
data_out.from_string("Ping");
client = data_out;
}
}
endV praxi není problém použít skript pro propojení se zařízením které komunikuje pomocí TCP a zasílat do něj data z CAN sběrnice nebo naopak data na CAN sběrnici generovat.
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
