Perl serielle Schnittstelle

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von Remidemi, 24.03.2011.

  1. #1 Remidemi, 24.03.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Hallo

    Ich möchte mit Perl Daten von einer seriellen Schnittstelle auslesen. Die Daten kommen aus einem Prüfgerät. Per Putty kann ich die COM Schnittstelle auslesen, es wird immer ein Datenstring bzw. eine Zeile ausgegeben bsp:
    test 1234 test test
    test 1234 test test

    Mein Perl Scirpt zerreißt aber immer die Strings bsp:
    te
    st 123
    4 te
    usw.

    Hier ein Auszug mit input()
    Code:
    use strict;
    use warnings;
    use Win32::SerialPort;
    
    
    
    $| = 1;
    my $port = Win32::SerialPort->new ('COM9');
    
      $port->databits(8);
      $port->baudrate(9600);
      $port->parity('none');
      $port->stopbits(1);
      $port->handshake("rts");
    
    #$port->read_interval(100);
    #$port->read_const_time(10);
    
    START:
    if ($data = $port->input) {
    print $data;
    print "\n";
    }
    
    goto START;
    $port->close();
    undef $port;
    
    Und hier mit read:
    Code:
    use strict;
    use warnings;
    use Win32::SerialPort;
    
    
    
    $| = 1;
    my ($data, $num);
    my $port = Win32::SerialPort->new ('COM9');
    
      $port->databits(8);
      $port->baudrate(9600);
      $port->parity('none');
      $port->stopbits(1);
      $port->handshake("rts");
    
    #$port->read_interval(100);
    #$port->read_const_time(10);
    
    START:
    ($num, $data) = $port->read(100);
    if ($num > 0) {
    print $data;
    print "\n";
    }
    
    goto START;
    $port->close();
    undef $port;
    
    Hat jemand eine Idee? Wenn ich einen seriellen Scanner anschließe und etwas scanne werden die Daten richtig angezeigt.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. yai

    yai yet another idiot

    Dabei seit:
    22.01.2007
    Beiträge:
    166
    Zustimmungen:
    0
    Win32? falsches Forum?
     
  4. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Auch wenn das hier das Unixboard und nicht das Windowsboard ist... ;)

    Es ist vollkommen normal, dass du die Daten stückweise bekommst. Du musst selbst so lange vom Device lesen, bis du eine ganze Zeile (also bis zum \n oder \r\n etc.) zusammen hast. Dafür sollte es aber eine Funktion wie getline() o. ä. geben (bin in Perl nicht so bewandert)...
     
  5. yai

    yai yet another idiot

    Dabei seit:
    22.01.2007
    Beiträge:
    166
    Zustimmungen:
    0
    also windowsboard hin oder her, goto ist ja schon mal so ziemlich das letzte. wie wär's mit "while ... $port->read " oder so. Ich kann das leider nicht ausprobieren, weil ich keine Windoofs Kiste habe. würde ja gerne helfen ;-)
     
  6. #5 Remidemi, 26.03.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Hi

    @yai was hat Perl Programmierung mit Win/Unix zu tun?? Der einzige Unterschied ist ein anderes Modul und ein anderer Device Name, das wars..

    @Tblue
    Das hört sich toll an! Werde das am Montag nochmal angehen und hier melden.
     
  7. #6 Remidemi, 28.03.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Gelöst!

    Code:
    my @liste;
    my $line;
    my $data;
    if ($data = $port->input) {
      $data =~ tr/ //s;
      push(@liste, $data);
      my $line = join("", @liste);
      sleep 1;
      if ($line =~ m/\n/) {
       print $line;
       
       undef @liste;
       undef $line;
       undef $data;
      }
    }
    
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema: Perl serielle Schnittstelle
Besucher kamen mit folgenden Suchen
  1. linux serielle schnittstelle php perl Python

    ,
  2. perl $port->handshake

Die Seite wird geladen...

Perl serielle Schnittstelle - Ähnliche Themen

  1. Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern

    Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern: Das Hyperledger-Projekt der Linux Foundation will eine neue Form der dezentralisierten Kontoführung nach dem Prinzip der »distributed ledger« bei...
  2. Perl 6 offiziell vorgestellt

    Perl 6 offiziell vorgestellt: Wie erwartet, ist die Version C(hristmas) von Perl 6 veröffentlicht worden. Perl 6 stellt nicht, wie der Name suggeriert, einen Nachfolger von...
  3. Perl: 20 Jahre CPAN

    Perl: 20 Jahre CPAN: Vor 20 Jahren wurde das erste Modul in das Comprehensive Perl Archive Network (CPAN) hochgeladen, woran Neil Bowers mit einem Abriss der...
  4. Perl 5.22.0 freigegeben

    Perl 5.22.0 freigegeben: Die neue Version 5.22 von Perl bringt den Anwendern mehr Sicherheit bei Eingabedateien, Unicode 7.0 und zahlreiche weitere Verbesserungen....
  5. [Perl] Perl OO Methodenaufruf in anderem Objekt

    [Perl] Perl OO Methodenaufruf in anderem Objekt: Hallo, Ich bin dabei in Perl ein Pokerspiel zu programmieren, hänge aber momentan an einem Problem, wo ich nicht weiterkomme. Ich habe die...