Serielle Schnittstelle vom Terminal aus ansprechen?

hairyguy

Aktives Mitglied
Thread Starter
Dabei seit
06.12.2004
Beiträge
1.029
Reaktionspunkte
14
Moin UNIX-Auskenner!

Ich würde gern an die serielle Schnittstelle (also zB Device "/dev/serial0") ein "%"-Zeichen schicken und die Zeile, die dann zurückgesendet wird, an eine Datei anhängen, und das so oft, bis auf das "%" nichts mehr zurückkommt. Dazu muss eventuell vorher die serielle Schnittstelle noch auf 9600baud, no parity, also der ganze Standard-Schnack, eingestellt werden.

Kann mir da jemand weiterhelfen? Schonmal Dank im Voraus!
 
es gibt minicom, was sich einfach per fink installieren lässt und die genannten einstellungsmöglichkeiten bietet. ist auch das was ich zZ verwende.
dann noch c-kermit, was noch mehr als nur serielle schnittstellen unterstützt, aber selber noch nicht getestet.
oder ZTerm, eine etwas betagtere PPC version, die sich zumindest starten lässt auf einem intel mac mit 10.5.2, auch noch nicht getestet von mir.
 
Genannte Terminal-Programme sind mir bekannt, mir geht es jedoch um einen automatischen Ablauf der genannten Funktion, möglichst als Shell-Script oder in Perl oder sowas. Ich will einfach ein Script starten, welches ein Gerät ausliest und eine entsprechende Datei um die gelesenen Zeilen erweitert, ohne selbst eine Eingabe machen zu müssen. Da ich mich leider mit *nix kaum auskenne, weiß ich nicht so recht, wie ich das realisieren soll, bin mir aber ziemlich sicher, dass ein *nixer das in Sekunden formulieren kann.
 
Es gibt ein Perl Modul: Device::SerialPort
Ich nehme mal an, das könnte Dir helfen.
Alternativ kommst Du vielleicht mit expect weiter (s. 'man expect')
 
Sehe erst jetzt deine Antwort, maceis, sorry. Sag mal, könnte man denn nicht einfach mittels Pipe-Zeichen oder so ein Zeichen an ein Device schicken und die Antwort vom Device an eine Textdatei anhängen, und das ganze in einer Schleife so lange, bis keine Antwort mehr kommt?
 
Also einfach schreiben:

"%" > /dev/serial0 > Textdatei.txt

?? Aber wie an die Datei anhängen als letzte Zeile? Sind die Anführungszeichen und die > richtig so?

(Wie schon im Ausgangsposting gesagt: Ich bin Unix-Nixkenner...)
 
Sagtest Du nicht etwas von Pipe Zeichen?
Ich seh' in Deinem Kommando kein Pipe-Zeichen.
Als letzte Zeile Anhängen geht mit '>>'. Mit '>' wird die Datei jedesmal überschrieben.
außerdem ist "%" kein Kommando.

Also wenn überhaupt, dann müsste das so aussehen:
Code:
echo "%" | /dev/serial0 >> Textdatei.txt
Ausgehend von der Voraussetzung, dass '/dev/serial0' die Gerätedatei für die serielle Schnittstelle ist. Ich habe da aber so meine Zweifel, ob das funktioniert. Aber "Versuch macht kluch" ;). Zum Ausprobieren würde ich mal auf die Umleitung in eine Datei verzichten und sehen, was am terminal passiert.
 
Ah siehst du, genau dieses "Syntax-Fachwissen" ;) hat mir gefehlt! Vielen Dank dafür und ich werde berichten!
 
Mm, anscheinend muss auf das |-Zeichen auch ein Command folgen und nicht bloß eine Datei oder Device? Ich bekomme nämlich die Fehlermeldung:

/dev/serial0: Command not found.

Und ja, anstelle "serial0" steht dort die (lange) Bezeichnung des Serial-Devices.
 
Hi,

hast du die Schnittstelle vorher mit setserial initialisiert?

Das schreiben auf die Schnittstelle müßte mit "echo "%" > /dev/serial... " erfolgen. Das gleichzeitige Auslesen erscheint mir schwieriger. Direkt lesen geht mit "cat /dev/serial..." evntl. in einem 2. Task. Ob der gleichzeitige Zugriff funktioniert, weiss ich jedoch nicht.

Gruss
AleX
 
Da geht's schon los. Du müsstest also einen String an das Device schicken (was mit 'echo' geht), der Prozess müsste warten, was für eine Antwort kommt (was 'echo' nicht kann) und die Antwort müsste dann wiederum in eine Datei umgeleitet werden. Das wird nicht klappen.
 
Danke für den Hinweis, alexzero! Mit dem ">" statt "|" bekomme ich schon ein plausibleres "resource busy" zurück. Dabei ist mir aufgefallen, dass das Device zweimal vorkommt, einmal als "cu.serial0" und einmal als "tty.serial0". Weißt du oder sonst jemand, welches von den beiden ich nehmen sollte?

Habe gerade mal "setserial" als Befehl ausprobiert, ist dem System aber unbekannt... (command not found) Falls du's weißt, wie geht die Initialisierung?

Was hat das mit der Katze auf sich ;) ? (cat /dev/...)
 
Da geht's schon los. ... Das wird nicht klappen.

Na gut, es scheint vielleicht doch zu schwierig zu sein, um es ohne Skriptsprache o.ä. zu lösen... Ich hatte gedacht, sowas muss doch bei Unix im täglichen Leben ständig vorkommen, was an eine serielles Device zu schicken und die Antwort irgendwohin zu schreiben... :)

Bin vielleicht zu blauäugig... :D
 
Hi,

tty.serial0 erscheint mir logischer. "Busy" würde ja bedeuten, dass ein anderer Prozess auf das Device zugreift, oder das du nicht genügende Recht hast. Ich kenne mich nur mit Linux aus, darum kann ich dir hier vermutlich nicht direkt weiterhelfen. Durchsuche mal die Prozessliste "ps aux" ob da etwas läuft was auf serial zugreift (irgendein Dämon?).

"cat" liest einfach Character-Devices oder Dateien aus. Ein cat /etc/ftab listet den Inhalt der Datei ftab aus.

Du kannst vielfach eine Hilfe zu den Befehlen erhalten mit -h, --help oder man <befehl>.

"setserial" wird unter Linux verwendet um die Parameter der Schnittstelle zu setzen (Geschwindikeit, Parity, Stopbits, etc) (9800 N 1) unter Unix müßte es was ähnliches geben um diese zu setzen.

Gruss
AleX
 
ttys einstellen kannst Du mit stty (man stty).
Probier doch mal:
1. Terminalfenster: cat /dev/tty.serial0
2. Terminalfenster: echo "%" >/dev/tty.serial0
 
Ich würde halt vorschlagen, Du (hairy) versuchst zunächst mal eine Verbindung über den "üblichen" Weg herzustellen.
Das heißt entweder mit screen (nicht so gut dokumentiert, funktioniert aber gut ;)) oder Du installierst minicom (hab ich unter mac OS X noch nicht probiert) oder kermit (muss selbst kompiliert werden) - Google hilft beim Finden.

Erst wenn das klappt, kann man den nächsten Schritt gehen und veruchen, das Ganze zu automatisieren.
 
ich kann nur sagen, dass ich mich gut mit mincom anfreunden konnte. habe fink bei mir, 10.5.2, drauf und minicom funktioniert ohne probleme. es verlangt wohl beim anlegen von config dateien nach einem su oder sudo. ckermit gibts auch über fink.
 
minicom hab ich früher unter Linux benutzt. Ist ganz okay.

Kannst Du unter OS X in mincom ein Break Signal senden?
Mit screen scheint das nämlich nicht zu funktionieren (was ziemlich ärgerlich sein kann).
 
Zurück
Oben Unten