Hallo, ich hab bis eben noch etwas rumprobiert. Allerdings war das ergebnis immer das gleiche. Ich hab hier mal mein Script drangehängt. Vieleicht fällt ja jemandem ein Fehler auf: Danke im voraus. Marco Script: #!/usr/bin/perl -w use POSIX qw(:termios_h); use FileHandle; my $send_id = chr(17) . chr(0) . chr(0) . chr(2) . chr(19); my $extern_enable = chr(33) . chr(0) . chr(0) . chr(0) . chr(33); my $serial=init_serial("/dev/ttyS0","2400"); #Ersten Befehl an externe Steuerung senden syswrite($serial, $send_id, length($send_id)); #Antwort der Steuerung emfangen und auswerten auswerten(get_reply()); #bis hierhin funktioniert alles so wie es soll #Zweiten Befehl an externe Steuerung senden syswrite($serial, $extern_enable, length($extern_enable)); auswerten(get_reply()); #dieses Mal erhalte ich nur einen Teil der ersten Antwort, #konkret die letzten drei Byte (die erste Antwort umfasst insgesamt vier Bytes) #eigentlich sollte ich nur ein Byte zur Bestätigung des Befehls erhlaten. sub get_reply{ my $data_in = ""; my $buf = ""; do{ sysread($serial, $buf, 1); $count++; }while $buf eq ""; $data_in = $buf; print "Count 1: $count\n"; $count = 0; do{ sysread($serial, $buf, 1); $count++; $data_in = $data_in . $buf }until $buf eq ""; print "Count 2: $count\n"; return $data_in; } sub auswerten{ my $index = 0; my $data = $_[0]; do{ my $zeichen = substr($data, $index,1); my $hex_wert = ord($zeichen); print $hex_wert." "; $index++; }until $index == length($data); print "\n"; } sub init_serial { my($port,$baud)=@_; my($termios,$cflag,$lflag,$iflag,$oflag); my($voice); my $serial=new FileHandle("+>$port") || die "Could not open $port: $!\n"; #Flags in Terminos setzen, alle anderen werden auf '0' gesetzt $termios = POSIX::Termios->new(); $termios->getattr($serial->fileno()) || die "getattr: $!\n"; $cflag= 0 | PARENB | CS8 | CREAD | CLOCAL; $lflag= 0; $iflag= 0 | IGNBRK | IGNPAR; $oflag= 0; $termios->setcflag($cflag); $termios->setlflag($lflag); $termios->setiflag($iflag); $termios->setoflag($oflag); $termios->setattr($serial->fileno(),TCSANOW) || die "setattr: $!\n"; eval qq[ \$termios->setospeed(POSIX::B$baud) || die "setospeed: \$!\n"; \$termios->setispeed(POSIX::B$baud) || die "setispeed: \$!\n"; ]; die $@ if $@; #Aenderungen sofort ausfuehren $termios->setattr($serial->fileno(),TCSANOW) || die "setattr: $!\n"; $termios->getattr($serial->fileno()) || die "getattr: $!\n"; for (0..NCCS) { if ($_ == NCCS) { last; } if ($_ == VSTART || $_ == VSTOP) { next; } $termios->setcc($_,0); } $termios->setattr($serial->fileno(),TCSANOW) || die "setattr: $!\n"; return $serial; }