Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 17. Nov 2018 5:15

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 06. Dez 2005 0:09 
Offline
Benutzeravatar

Registriert: 12. Jan 2003 11:32
Beiträge: 93
Hallo!

Ich habe folgendes Problem:

Ein per RS232 angeschlossener Thermodrucker soll durch einen Nadeldrucker (Protokolldrucker) abgelöst werden. Die verschiedenen (unwichtigen) Formatierungsfunktionen des Thermodruckers werden durch diverse Steuerzeichen bzw. Zeichen jenseits des ASCII-Standards (Codetabelle unbekannt) ausgegeben. Direkt durchgereicht druckt der Nadeldrucker wild vorsich hin - allerdings nichts, was man lesen könnte.

Da am Ende sowieso nur der Text wichtig ist, soll jetzt alles andere (Steuerzeichen außer LF und alles jenseits ASCII) auf dem Weg von /dev/ttyS0 nach /dev/lp0 rausgeschmissen werden.

Mein selber gebasteltes Bashscript tut dies mit ordentlich CPU-Last dateiweise Zeile für Zeile ganz gut - das äquivalente Perl-Script kommt mit wesentlich weniger CPU-Zeit aus - allerdings auch nur zeilenweise - und genau da liegt das Problem - ich krieg es nicht hin, zeichenweise von /dev/ttyS0 zu lesen UND Zeiträume, in denen nichts kommt, ohne Probleme abzuwarten.

Konkret würde mich interessieren, ob und (wenn ja) wie ich mit Bash und/oder Perl zuverlässig ständig auf Zeichen aus der seriellen Schnittstelle warten und diese entsprechend in "Echtzeit" weiterverarbeiten kann - getc auf /dev/ttyS0 hab ich probiert - das bricht nach ein paar Sekunden Funkstille von sich aus ab ...

Alternaiv interessiert mich alles, was in die Richtung geht, einen Stream auf nichtdruckbare Zeichen zu filtern ...

_________________
mfg, atomical

Jabber: alext@jabber.ccc.de


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06. Dez 2005 18:36 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 14. Jan 2000 15:37
Beiträge: 699
Wohnort: Jülich
Hi,

bei "Zeichen aus Stream filtern" denke ich immer direkt an tr. Ein erster Ansatz könnte wie folgt aussehen:
Code:
tr -d -c '[:print:][:space:]'
Da tr ein Filter ist, liest es aus stdin und schreibt nach stdout. "-d" steht für "delete", also löscht tr Zeichen aus dem Eingabestrom. Die angegebenen Zeichen sind die Zeichenklassen für druckbare Zeichen und Whitespace. Mit der Option "-c" (complement) werden diese Zeichen in Ruhe gelassen und alle andern, die nicht in diese Spezifikation passen, herausgefiltert.

Allerdings buffert tr zeilenweise - ist das OK für deinen Fall? Auch Umlaute und ß würde ich noch mal extra testen.

Ich hoffe, das hilft Dir etwas weiter.

Jochen

_________________
Die grösste Lüge der EDV? "Mal eben..."


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06. Dez 2005 21:45 
Offline
Benutzeravatar

Registriert: 12. Jan 2003 11:32
Beiträge: 93
Soweit so gut - ein
Code:
cat /dev/ttyS0 | tr -dc "\012 -~"
schreibt mir die gefilterten Daten in die aktuelle Konsole ...
Code:
cat /dev/ttyS0 | tr -dc "\012 -~" > /dev/lp0
oder auch
Code:
cat /dev/ttyS0 | tr -dc "\012 -~" > test.txt
wartet immer volle 4096 Byte ab und schreibt dann in die jeweilige Datei - sprich er würde nur alle 4kB drucken ...

:?:

Hat jemand noch eine Idee?

_________________
mfg, atomical

Jabber: alext@jabber.ccc.de


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de