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 } } end
Kó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; } } end
V 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