Serielle Schnittstelle einlesen

Post Reply
Message
Author
Matt-Ratze

Serielle Schnittstelle einlesen

#1 Post by Matt-Ratze »

Grüß Euch!

Folgendes bekomme ich nicht in den Griff:
Ein Datenlogger liefert jedes Ereignis Zeilenweise an eine serielle Schnittstelle. Mit "Minicom" kann ich die
Daten wunderbar einlesen und in ein File mitschreiben, dazu mußten nur die richtigen Schnittstellenparameter eingestellt werden schon lief es.
Verursacht durch einen nachgewiesenen Fehler in der Software des Loggers, kommt es vor, daß immer wieder falsch formatierte Zeilen ausgegeben werden. Ausserdem aktualisiert Minicom das von ihm geschriebene Logfile nicht sofort, sondern nach einem mir noch nicht bekannten Muster, könnte ein Seitenumbruch sein, oderso.

Nun wäre mein Ziel, nicht mehr minicom zu benutzen, sondern ein Shellskript, welches direkt von der seriellen schnittstelle liest und mittels Grep die fehlerhaften Zeilen ausfilzt und an ein Logfile anhängt. Dieses File steht dann in einem Samba-Share, damit es über´s Netz erreichbar ist.

Nun habe ich in meiner Naivität mit setserial die Schnittstellenparameter gesetzt und versucht mit
cat /dev/ttyS0 > Datei an die Ausgaben des Loggers zu kommen, aber so einfach scheint es nicht zu
sein. Im Shell-Skript Buch v. Ditchen habe ich zu dem Thema nix passendes gefunden, div. Suchmaschinen konnten mir nicht weiterhelfen.

Habt ihr mir eine Anregung, wie ich das Problem lösen könnte?

Grüße
Matt-Ratze

Jochen

Re: Serielle Schnittstelle einlesen

#2 Post by Jochen »

Die einfachste Lösung ist es, erst mal zu googlen:

<a href="http://people.redhat.com/johnsonm/ttywatch.html" target="_blank"><!--auto-->http://people.redhat.com/johnsonm/ttywa ... <!--auto-->
<a href="http://www.conserver.com/" target="_blank"><!--auto-->http://www.conserver.com/</a><!--auto-->

Conserver scheint schon Overkill zu sein, ttywatch scheint recht gut auf Dein Problem zu passen.

Wenn Du wirklich selbst etwas machen willst, kann ich nur auf meine Jahre zurückliegende Erfahrungen zurückgreifen, einem CASIO FX-850P seine Basicprogramme zu Sicherheitszwecken zu entlocken... Wichtig wäre für Dich erst mal "man stty". Ausserdem ist wichtig zu wissen, dass die Einstellungen, die man mittels stty macht, so lange halten, wie das Device offen ist. Schliesst man es, fällt es wieder auf Default-Werte. In einem Shellskript sieht das dann ungefähr so aus (ohne Gewähr, da alles aus dem Gedächtnis):<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/bash
# In einer Subshell () stty aufrufen, dass das TTY verstellt, das an stdin(!) liegt.

( stty 9600 ; cat >logfile) </dev/ttyS0 &
OPEN_PID=$!
trap 'kill $OPENPID ; exit 0' 1 2 15
while true ; do sleep 24h ; done
</font><hr></pre></blockquote>

Matt-Ratze

Re: Serielle Schnittstelle einlesen

#3 Post by Matt-Ratze »

Hallo Jochen,
vielen Dank für Deine schnelle Antwort,
dann werde ich Deinen Hinweisen gleich nachgehen,
und meine Ergebnisse hier posten.

Ich melde mich.

Grüße
Matt-Ratze

Matt-Ratze

Re: Serielle Schnittstelle einlesen

#4 Post by Matt-Ratze »

Hallo Jochen,
Dein Tip war genial und hat mein Problem auf Anhieb geloest. Alles wird sauber eingelesen.
Die Bedienung des Programms ist so einfach, daß es muessig waere es hier zu posten.

http://people.redhat.com/johnsonm/ttywatch.html war die Loesung.

Als RedHat-Paket hat es auf SuSE 8.2 sofort funktioniert.

Danke u. Gruß

Matt-Ratze

Post Reply