Jemand zu Hause?Leser: 25
Win32::SerialPort an die Serielle Schnittstelle COM4 übermittelt. Am anderen Ende des PCs sitzt ein Mikrocontroller der diese Daten auf einem LCD anzeigt. Das Skript habe ich einmal für UNIX mit
Device::SerialPort geschrieben und nur das Modul für Windows ausgetauscht. Unter UNIX läuft alles super. Unter Windows habe ich das Problem, dass der COM-Port zwar gefunden wird, aber das LCD nicht richtig mit dem PC kommunizieren kann. Erst wenn ich ein Tool wie Terminal.exe von DerHAMMER starte, wird die Serielle schnittstelle richtig initialisiert. Woran kann das liegen?QuoteWas bedeutet das genau? Gibt es irgendwelche Fehlermeldungen?Unter Windows habe ich das Problem, dass der COM-Port zwar gefunden wird, aber das LCD nicht richtig mit dem PC kommunizieren kann.
2011-03-28T16:41:46 kamiErst wenn ich das Skript am PC beende, kommt ein Bruchteil der Nachricht an und der COntroller zeigt diese an
1
2
3
4
5
6
7
8
my $port = Win32::SerialPort->new( "COM4" );
$port->baudrate(57600);
$port->databits(8);
$port->stopbits(1);
$port->parity("none");
$port->read_const_time(1000);
#$port->stty_clear("0");
$port->pulse_dtr_on(300);
2011-03-29T14:01:33 kamikeiner mehr einen Tipp?
2011-03-29T20:29:40 kamiWeil irgendwie klappt das ja super alles unter Unix udn MAC?
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
#!perl use strict; use warnings; use Win32::SerialPort; my $port = Win32::SerialPort->new( "COM4" ); $port->user_msg(1); # misc. warnings $port->error_msg(1); # hardware and data errors $port->baudrate(19200); $port->databits(8); $port->stopbits(1); $port->parity("none"); $port->read_const_time(1000); #$port->stty_clear("0"); $port->pulse_dtr_on(300); $port->write_settings; my $baud = $port->baudrate; my $parity = $port->parity; my $data = $port->databits; my $stop = $port->stopbits; my $hshake = $port->handshake; print "B = $baud, D = $data, S = $stop, P = $parity, H = $hshake\n"; undef $port; __END__ liefert bei mir: B = 19200, D = 8, S = 1, P = none, H = rts
2011-03-31T06:43:07 kamiWas muss ich nun tun um das alles automatisch über das Skript machen zu lassen?
Win32::Registry per Skript zu setzen.1
2
3
4
5
6
7
#
#my $cfg_file = 'c:\COM4.cfg'; # Name der Konfigurationsfile für COM4:
#
$port->save($cfg_file); # Speichern der lauffähigen COM4 Parameter
#
$port->restart($cfg_file); # Einlesen und Setzen der Parameter
#
2011-06-30T18:09:14 wollikHallo Bianca,
es scheint so als ob Deine COM4 Parameter nicht richtig gesetzt sind.
Wie installiert man ein Modul?