Am 01.11.2015 um 13:31 schrieb Jürgen Hochwald:
Hallo,
ich stehe momentan vor folgender Aufgabe: es sollen Daten von einem seriellem Gerät erfaßt und verarbeitet werden. Das Gerät selber ist zwar über USB angeschlossen, enthält aber einen seriellen Wandler und erscheint dann als /dev/ttyUSBirgendwas. Der Kommunikationsablauf ist folgender: - Zuerst meldet sich das Gerät mit Versionsinfos - es müssen ein paar Befehle gesendet werden, um das Gerät zu konfigurieren, wo das Gerät auch nach jedem Befehl entspr. antwortet. - nach erfolgreicher Konfiguration sendet das Gerät ohne weiteres Zutun seine Daten kontinuierlich im 3-Sekundentakt bis zum nächsten Stromausfall.
Meine Fragen: Wie gehe ich das ambesten an? Kann man das einfach mit Shellbefehlen schaffen ohne tiefergehende Programmierung in einer Hochsprache ? Wenn ja, wie (Doku) ?
Wenn Hochsprache, dann wäre mir PHP am liebsten, doch da habe nicht nichts passendes zur Kommunikation gefunden, außer dio, was anscheinend nicht mehr weiterentwickelt wird. Es gibt auch kein per yast installierbares Paket (Suse 13.1).
Wie kann ich sicherstellen, daß das Gerät immer auf demselben ttyUSB? erscheint ? (soll später automatisch im Hintergrund laufen)
Jürgen
Hi, seriell alleine hätte ich kein Problem. Da würde man man mit stty alles erledigen können. Die Frage bei Dir ist: wie spricht man denn das Gerät nun an? Testen würde ich mal mit tee </dev/ttyUSB... logdatei und dann das Teil anstecken.... passiert da was? Irgendwelche Zeichen in der logdatei? Irgendeine Reaktion auf echo "abc123" >/dev/ttyUSB.... am Gerät (LED blinkt kurz oder so was) Was sind denn so die Kommandos? Ich habe hier serielle Barcodeleser, die werden mit Steuerzeichen 0x02 (STX) und 0x03 (ETX) gesteuert, von denen lasse ich z.B. mit folgendem Script: echo "Schnittstelle $TTY initialisieren...">$LOGTTY stty -F $TTY $INIT stty -aF $TTY >$LOGTTY echo "Lesen von Schnittstelle starten...">$LOGTTY cat <$TTY | awk '{print $1 strftime("%Y%m%d%H%M%S") | "tee -a $LOG" ; }'
$LOGTTY echo "Scanner initialisieren...">$LOGTTY echo -e "\000211\0003" >$TTY # Start echo -e "\000214\0003" >$TTY # DataGroupMode echo -e "\00024?ID\0003" >$TTY # ID echo -e "\00024?DD\0003" >$TTY # DataInputs echo -e "\0002SF000\0003" >$TTY # SelfTest echo -e "\000211\0003" >$TTY # Start reading echo "Scancodes lesen...">$LOGTTY
die codes lesen, $TTY ist dabei /dev/ttyS0 oder so, $LOGTTY ist /dev/tty10, so dass ich das ganze bei Bedarf auf Console 10 sehen kann und außerdem landen die Rückmeldungen der Scanner in der Datei $LOG. Mit echo -e "\oooo" (oooo = Oktadezimalcode des Zeichens, 4-stellig, also meist eine weitere "0" vorn dran) kann man so ziemlich alles an /dev/... schicken, kannst Du ja mal probieren. Und das "cat ... awk ... strftime ... tee..." - Ding fügt einfach jeder Ausgabezeile des Scanners einen Zeitstempel an. Ob /dev/USB... das akzeptiert und vor allem 1:1 an den seriellen Port weiterreicht, ist natürlich nicht sicher. Aber wenn Du das Gerät nicht vom seriell/usb-Wandler trennen kannst, ist das wohl die einzige Chance. Ansonsten würde ich mir ja eine serielle Schnittstelle besorgen (gibt es immer noch gut zu kaufen, oft haben etwas ältere (3...4 Jahre) Boards sogar eine, d.h. nur die Steckverbinder aufgelötet und Du brauchst nur die Buchse mit dem Anschlußstecker. Dann hast Du das mit setserial schnell am Laufen. HTH cu jth -- www.teddylinx.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org