will einen Hexstring auf die RS232 schreiben

Bild von gigo1968

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
0
Eigene Bewertung: Keine

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

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer