Thread nochmal rs232: daten empfangen (4 answers)
Opened by popcorn5 at 2005-10-19 12:29

popcorn5
 2005-10-19 12:29
#59015 #59015
User since
2003-09-24
60 Artikel
BenutzerIn
[default_avatar]
Hallo,

auf meinen erste frage wusste wohl niemand ne antwort.
ich bin aber schon etwas weiter gekommen und muss nun
das nächste problem lösen.

Ich Sende einen String via rs232 an einen anderen PC. Auf diesem PC läuft
ein ziemlich altes (DOS) Proggie was mir auf meine Anfrage
einen langen text zurückschickt. Das ganze wird eine steuerung für eine
CNC-Maschine (Plasma-Schneider).

Der Text den ich nun empfangen möchte hat eine sehr unterschiedliche länge.
Zwichen 1 und 60kb ist alles dabei.
Eines ist aber immer gleich: Die letzten 4 Zeilen lauten immer:

64
0
/
/

Nun mein eigentliches Problem: Ich möchte alles was ich über rs232 empfange in eine Datei schreiben und zwar so lange bis
ich die o.g. Zeilen empfangen habe (oder auch nur die beiden Schrägstriche, geht auch).

Mein jetziges Script sieht wie folgt aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/perl

use strict;
use vars qw($ob $port1 $return);
use Win32::SerialPort;

$port1="COM1";

$ob = Win32::SerialPort->new($port1) || die "Can't open $port1: $!";
$ob->baudrate (9600) || die "fail setting baudrate";
$ob->parity ("even") || die "fail setting parity";
$ob->databits (7) || die "fail setting databits";
$ob->stopbits (1) || die "fail setting stopbits";
$ob->handshake ("none") || die "fail setting handshake";
$ob->write_settings || die "no settings";

system "cls";

# Read Port Configuration

my $baud=$ob->baudrate;
my $parity=$ob->parity;
my $data=$ob->databits;
my $stop=$ob->stopbits;
my $hshake=$ob->handshake;


print "### Projekt Plasma ###\n\n";
print "Schnittstelle: $port1\nBaudrate: $baud\nParity: $parity\nDatabits: $data\nStopbits: $stop\nHandschake: $hshake\n\n";

my $tx="L00 -k .033 -0 -8.516,0 -1 .0025%\r";

$ob->write("$tx") or die ("Could not write to PC: $!");

sleep 1;

$return=$ob->input;

undef $ob;


In diesem script habe ich ein "sleep 1;" eingesetzt damit ich überhaupt etwas empfange. wenn ich das nicht mache dann bleibt $return leer. So stehen wenigstens die ersten 300 bytes drin. Wenn ich jetzt sleep 10 eingeben würde, dann ginge das mit kleineren dateien aber das ist ja nicht sinn der sache.

Ich hoffe ich habe alles gut beschrieben und es fällt jemandem was dazu ein. Danke.

View full thread nochmal rs232: daten empfangen