seriova komunikacia

František Burian BuFran na seznam.cz
Neděle Srpen 6 13:56:42 CEST 2017


Ahoj Danieli,

Odpověď závisí na tom zdali budeš chtít přenášet binární data.

Pokud ne, a celý protokol bude jen text, posílal bych zprávy ve stylu: "name
=value\n", v klientech kontroloval jediný separační znak \n, když přijde, 
provedl bych akci založenou na předchozím přijatém textu (nemusí být name=
value. může být i signalizace stavu, např "black_hole_detected"). Toto 
podporuje i mezery v názvu proměnné.

Pokud budeš chtít přenášet i binární RAW data, tak pokud nevadí že je 
expanduješ do HEX, posílal bych je v hex blobu. Pokud vadí (kvůli 
velikosti), zvolil bych protokol SLIP, tedy 0xC0 jako separátor zpráv, 0xDB 
0xDC jako "symbol" 0xC0, symbol 0xDB 0xDD jako symbol 0xDB a pro separaci 
name/value symbol 0xDB 0xDE, zpracování shodné jako v předchozím případě, s 
tím rozdílem že můžeš posílat binární data přímo a nestaráš se o délku - tu 
ti "odseparuje" ten symbol 0xC0 resp 0xDB 0xDE

Já osobně bych se ale přimlouval k textu odděleném \n protože se ti to bude 
lépe ladit - nachrlit předpřipravený text ze souboru na sériovku zvládneš, a
co v tom souboru bude za parametry si pěkně přečteš. 

Asi bych dal feature že pokud klientská stanice objeví první znak zprávy 
jako 0x0A tak ho zahodí, pak to bude fungovat i na windows. (nebo poslední 
znak zprávy 0x0D - teď zrovna nevím zdali \n je CR nebo LF na linuxu)

Pokud počítáš s chybami na lince, je potřeba přidat nějaké CRC/checkcum ale 
tím se vše zkomplikuje.

Pokud budeš chtít mít proměnné strukturované, tak name=value bych nahradil 
JSONem (např: 

"module1=[power=on,amps=3.14159,warn='OVERLOADED']\n"

Franta
---------- Původní e-mail ----------
Od: balu <balu na k-net.fr>
Komu: HW-news <hw-list na list.hw.cz>
Datum: 6. 8. 2017 13:18:28
Předmět: seriova komunikacia 
"Zdravim osadenstvo, 

hram sa s takym vikendovym projektom a rad by som sa spytal skusenejsich 
ako sa to robi :-) 

Rad by som si postavil panelovy indikator, alebo mozeme ho nazvat 
displej, ktory bude zobrazovat povedzme 200 parametrov. Tieto sa budu 
posielat z jedneho zdroja po seriovej linke, komunikacia cisto jednosmerna. 

Komunikaciu bude prijimat niekolko (5, 10, 20?) mikrokontrolerov (ano, 
chcem pouzit Arduino), ktore by si mali vyzobnut prislusny parameter a 
na zaklade jeho hodnoty nieco urobit/rozsvietit/nastavit. 

Rozmyslal som, ako navrhnut komunikacny protokol, aby bol jednoduchy na 
implementaciu (neviem programovat), a zaroven dostatocne flexibilny, aby 
sa dali posielat parametre rozneho typu, napriklad bit, celociselna 
hodnota, float hodnota, kratky text. 

Aby sa to dalo lahko parsovat, asi by som posielal meno parametra a 
potom hodnotu. Nejake fixne znaky na ohranicenie parametra, napr: 

<parameter000> 

a podobne na hodnotu 

#0.123456789# #100# #Alarm# 

kazdy mikrokontroler by potom cakal na < znak, prijal urcity pocet 
bytov, porovnal s tym co ho zaujima, ak je to ono tak by si zobral aj 
hodnotu za #. Alebo skombinovane 

<parameter000#0.123456789> 

Nejake velke osetrovanie iregularit asi nebude treba, komunikovat budem 
sam so sebou, lokalne na doske (paneli), nie dlha vzdialenost ani rusenie. 

Ako by to robil niekto, kto tomu rozumie? :-) 

b. 

_______________________________________________ 
HW-list mailing list - sponsored by www.HW.cz 
Hw-list na list.hw.cz 
http://list.hw.cz/mailman/listinfo/hw-list 
"
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20170806/732a70c9/attachment.html>


Další informace o konferenci Hw-list