Hallo zusammen,
ich habe ein grosses Problem mit der Kommunikation mit einem seriellem Port. Und zwar würde ich gerne AT-Kommandos an ein Modem absetzen und die Antwort zurück erhalten. Das Senden des Kommandos funktioniert einwandfrei, aber die Antwort landet entweder nicht mal mehr auf meinem PC oder ich lese sie einfach nicht korrekt aus. Hier ist erstmal der Code:
Code:
use IO::Socket;
use IO::Select;
my $COMport=33;
while (1)
{
#open Port or die if blocked / wrong port
if (!open( PORT, "+>\\\\.\\COM$COMport" ))
{
die ("Can't open COM$COMport");
}
PORT->autoflush(1);
PORT->flush();
print "\nEnter AT command:";
my $ATcmd=<STDIN>;
chomp($ATcmd); # remove CRLF
$ATcmd =~ s/^\s+//; # remove leading space
$ATcmd =~ s/\s+$//; # remove trailing space
print "Sending: '$ATcmd'\n";
print PORT $ATcmd . "\r\n";
print "reading\n";
#Reading the response
while (my $ret=<PORT>)
{
print $ret;
if ($ret=~/^OK/ || $ret=~/^ERROR/) { last}
}
close(PORT);
}
print "done!";
Das Kommando kommt am Momdem an und funktioniert (getestet indem ich mit Putty direkt auf's Modem verbunden habe). Sobald das Script in der while (my $ret=<PORT>) landet, bleibt es stecken weil $ret=undef. Ich habe jetzt schon den halben Tag Google gewälzt, aber die meisten Antworten verweisen auf das Perl-Modul Win32::Serialport welches ich nicht benutzen möchte da das fertige Programm auf möglichst vielen Maschinen mit Default Perl-Installation laufen sollte.
Habe auch schon einige andere Varianten ausprobiert (mit read() und sysread() ) welche aber das gleiche Ergebnis bringen.
Hat jemand von euch vielleicht noch eine gute Idee oder einen Link?
Vielen Dank schonmal!
Stefan
Lesezeichen