Portál AbcLinuxu, 12. května 2025 07:38

Dotaz: Interaktivní komunikace po sériové lince

23.9.2008 17:46 vasek
Interaktivní komunikace po sériové lince
Přečteno: 443×
Odpovědět | Admin
Ahoj. Píšu jednoduchý skriptík, který by měl do /dev/ttyS0 poslat nějaký řetězec a čekat na vrácení OK aby mohl poslat další. Nevím ale jak to naskriptovat, protože když dám head -n 1 /dev/ttyS0 a potom poslání řetězce, tak to čeká až se mu něco pošle, což ale nemůže. Pokud nejdříve pošlu řetězec a pak čtu /dev/ttyS0, často by se stávalo, že OK propásnu. Jak to tedy naskriptovat?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.9.2008 18:19 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkuste nástroj chat(8) z balíku ppp.
23.9.2008 18:51 vasek
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
To asi nepůjde. Tady se nejedná o modem a podobné zařízení. Ty příkazy budou pokaždé jiné, závislé na vstupních proměnných. Třeba jednou budu posílat OFREQ30, podruhé OFREQ31 atd...
23.9.2008 19:15 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
Pokud vstupními proměnnými nemyslíte vstup ze sériové linky, mělo by být možné si chat skript vygenerovat a ten poštvat na linku.

Pokud ani to nevyhovuje, zkuste tcl knihovu expect. Existuje k tomu pěkný binding do Perlu a rovněž samostaný program expect(1) vhodný do shellu.
23.9.2008 19:49 vasek
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
S expectem nepochodím.
23.9.2008 20:17 vasek
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
Uplne by stacilo neco jako
vys = "cist_bez_cekani /dev/ttyS0"
if vys ....
Ane nevím co použít. Chat je pro moje použití dost neohrabaný.
23.9.2008 20:25 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
A jak si představujete takové čtení bez čekání? Když si nepočkáte na data, tak vám utečou. Bez bufferu, do kterého se budou ukládat data přišedše z linky, se neobejdete.
23.9.2008 21:31 vasek
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
Zatím se mi "podařilo" něco takového:
echo -n > /tmp/ttyCom
head -n 1 /dev/ttyS0 > /tmp/ttyCom &
while [ "`cat /tmp/ttyCom`" != "OK" ]; do 
 echo "NEW" > /dev/ttyS0
done

atd...
Problém je, že to občas havaruje, asi kvůli čtení a zápisu /tmp/ttyCom zároveň.
CIJOML avatar 23.9.2008 21:40 CIJOML | skóre: 58 | Praha
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
Odpovědět | | Sbalit | Link | Blokovat | Admin
A nebylo by snazsi a lepsi to resit daemonem co by mel ten port otevreny a s okolim komunikoval po socketu?
23.9.2008 21:47 boar | skóre: 25 | Praha
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
Odpovědět | | Sbalit | Link | Blokovat | Admin
podobnou vec jsem resil v pythony, pomocu PySerial. doporucuju se na to kouknout.
24.9.2008 01:45 luky
Rozbalit Rozbalit vše Re: Interaktivní komunikace po sériové lince
Odpovědět | | Sbalit | Link | Blokovat | Admin
a co treba drzet ten soubor otevreny a podle potreby z/do nej cist/zapisovat?
exec <>/dev/ttyS0 >&0
read data
echo "thanks for: $data"

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.