PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten von /dev/ttyS0 mit Device::SerialPort


C|B|
15.07.2005, 11:07
Salü @ll,
Kurz die Gegebenheiten:

Ich lese die Zustände (offen; Geschlossen) von 3 Schaltern aus. Diese Daten gehen an einen uP (Welcher einen Mitarbeiter Programmiert hat). Von da aus via rs232 weiter an ne Linux-Maschine.
Dort benutze ich Device::SerialPort (http://search.cpan.org/~cook/Device-SerialPort-0.12/SerialPort.pm) zum auslesen der Daten.

Das Problem:
Die Daten sind so aufgebaut:
[startzeichen][kennung][hex-wert][CR]
Zur Erläuterung:
Zuerst kommt ein Startzeichen. Dann ne Kennung, mit der ich erkenne, ob die Daten Digital oder analog eingelesen werden. Wir beschränken uns jetzt mal auf das digitale, in meinem Fall also 01.
Dann kommt ein Byte, welches mir einen Wert liefern soll.

Mein Terminal (windofs Rechner) gibt volgendes aus:
(Darstellung: ASCII-Zeichen, Dezimal-Wert, Binär-Wert)

S 83 01010011 // Startzeichen
1 00000001 // Kennung
ø 248 11111000 // Daten
13 00001101 // CR (Ende)
(Je nach Schalterkonstellation natürlich.)

Mein Bisheriges Perlprogramm:
#!/usr/bin/perl -w
use strict;
use vars qw( $ob $file );
use Device::SerialPort;
$file = 'ser.cfg';
$ob = Device::SerialPort->new ("/dev/ttyS0");
$ob->baudrate(115200);
$ob->databits(8);
$ob->parity("none");
$ob->stopbits(1);
$ob->handshake("none");
$ob->write_settings;
$ob->save($file);
$ob->start ($file);
$ob = Device::SerialPort->start ($file);
die "Can't open Serial Port from $file. $!\n" unless ($ob);
$ob->read_const_time(1000);
my (@out) = $ob->read(4);
foreach (@out) {
print "$_\n";
}
undef $ob;
Ausgabe:
4 //Parameter von read(<Bytes, die gelesen werden sollen>)
S

Das effektive Problem dabei:
Perl gibt genau das erste Byte aus (S) und dies noch als ASCII-Zeichen.
Ich weiss nicht, ob es ist, weil das 2. Zeichen in ASCII-Darstellung so gut wie gar nichts währe (Hex:00000001). Ich denke aber schon.

Lösungsansatz:
Entweder ich lese die Daten Binär oder Dezimal (Wahlweise Hexa-Dezimal) ein, oder ich bekomme das irgendwie hin, dass es mir nicht nach dem ersten Zeichen abhackt.

Aber ich hab eingesehen, dass ich das alleine nicht in absehbarer Zeit schaffe... I need help...

Danke fürs Lesen und vieleicht fürs Helfen ;)


C|B|
17.07.2005, 11:27
OK, ein Teil meines Problems hab ich gefunden.
ICh hab mal die Ausgabe meines Programms in ne .txt weitergeleitet und diese angesehen. dabei hab ich festgestellt, dass ich schon alle Daten empfange, diese eifach auf der Shell nicht ausgegeben werden können.

Die Frage bleibt aber dennoch:

Wie kann ich die Daten binär empfangen.
Denn in dieser Form ist eine Weiterverarbeitung nicht möglich...

C|B|
03.08.2005, 15:12
Ok ich habs so in etwa...
Ich werds euch dann mal Zeigen ;)

Nur noch eine Frage: wie kann ich aus einer Dezimalzahl eine Binärzahl machen ?

Danke 4 Help ;)