will einen Hexstring auf die RS232 schreiben

Hallo, ich habe ein problem, ich möchte einen Hexwert als string als tatsächlichen Hexwert bei der seriellen schnittstelle raus schreiben.
ich verwende $PortObj->write($datenbefehl[0]); wobei $datenbefehl[0] zb a ist, dann will ich auf der schnittstelle auch ein a lesen.
Danke für die hilfe
Chris
Trackback URL für diesen Beitrag:
http://community.perl.de/trackback/22
- Anmelden oder Registrieren um Kommentare zu schreiben
- 2557 Aufrufe
-

Drei Fragen:
Was für ein Objekt ist denn $PortObj?
Was passiert bei obigem Code?
Gibt es Fehlermeldungen?
genauere Erklärung meines problems
Danke für deine antwort:
Zu deiner ersten frage:
$PortObj = new Win32::SerialPort ($PortName, $quiet)
|| die "Can't open $PortName: $^E\n"; # $quiet is optional
$PortObj->baudrate(19200);
$PortObj->parity("none");
$PortObj->databits(8);
$PortObj->stopbits(1);
$PortObj->buffers(4096, 4096); # read, write
$PortObj->write_settings;
$datenbefehl[0]) = sprintf ("%x", 10);
$PortObj->write($datenbefehl[0])); # und da kommt auf schnittstelle kein a (0x0a) raus,
sondern 0x30 0x31 0x31 0x30 0x30 0x30 0x30 0x31 ich denke das ist der string vom a
weiters, es gibt keine fehlermeldung.
was mache ich falsch?
danke für die hilfe
Chris
Danke für die Erklärung
Ich kenne das Modul selbst nicht, aber nach der Lektüre von http://search.cpan.org/dist/Win32-SerialPort/lib/Win32/SerialPort.pm könnte es vielleicht etwas bringen, das Rausschreiben so zu prüfen?
$count_out = $PortObj->write($output_string);warn "write failed\n" unless ($count_out);
warn "write incomplete\n" if ( $count_out != length($output_string) );
weiteres Problem
um den richtigen Wert zu schreiben, muss ich auf folgende weise schreiben:
$PortObj->write("\xA5");
dann sehe ich auf der RS232 ein A5
aber erstens wie komm ich zu diesem ausdruck, wenn ich einen hexstring habe, wie kann
ich einen hexstring in dieser form darstellen. bzw. zweitens wie kann ich "\xA5" zu einen hexstring oder decimalzahl convertieren?
danke für die hilfe
chris
Vielleicht hilft pack / unpack
Deine Werte liegen als "normale" Dezimalwerte vor?
Schau dir mal pack an:
C:\> perldoc -f pack