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