sidi2500 Posted November 24, 2021 at 12:21 PM Share Posted November 24, 2021 at 12:21 PM Hallo, ich hab eine Frage, die wohl eher auf meinem Unverständnis und einem fehlenden Beispiel beruht. Ich würde gerne folgenden HEX-Befehl an ein Device via RS232 absetzen: "AA 80 00 00 80" Ich versuche das sowohl mit dem seriellen Monitor im Brick Viewer, als auch über die Python Schnittstelle. Bei beiden habe ich kein Erfolg (es kommt nichts zurück, normales Verhalten bei diesem Gerät wenn etwas ankommt, das nicht korrekt gesendet wurde). Über einen Schnittstellen-Wandler am PC angeschlossen und einer Software wo ich direkt HEX Daten schreiben kann, funktioniert das Device einwandfrei. Der Fehler ist also ausgeschlossen. Könnt ihr mir vielleicht helfen, wie ich über ein Python Skript den HEX Befehl absenden kann? Vielen Dank! Quote Link to comment Share on other sites More sharing options...
photron Posted November 24, 2021 at 02:35 PM Share Posted November 24, 2021 at 02:35 PM Wenn du in Brick Viewer oder den Python Bindings einfach "AA 80 00 00 80" hinschreibst, dann wird dadurch ein A, ein A, ein Leerzeichen, eine Null, eine Null und so weiter gesendet. Für das RS485 Bricklet hat Brick Viewer eine Hex Modus für das Senden. Das hat Brick Viewer allerdings nicht für das RS232 Bricklet 2.0. Ich nehme das mal auf die TODO Liste mit auf das nachzubessern. Aktuell kannst du daher über Brick Viewer keine Binärdaten über das RS232 Bricklet 2.0 senden. In deine Python Programm musst du aber einfach nur die Daten passend hinschreiben. Anstelle von "AA 80 00 00 80" kannst du "\xAA\x80\x00\x00\x80" hinschreiben in Python und dann tut das was du möchtest. Quote Link to comment Share on other sites More sharing options...
sidi2500 Posted November 25, 2021 at 07:25 AM Author Share Posted November 25, 2021 at 07:25 AM Super, danke. Das klappt! Quote Link to comment Share on other sites More sharing options...
sidi2500 Posted November 25, 2021 at 08:19 AM Author Share Posted November 25, 2021 at 08:19 AM (edited) Jetzt muss ich gleich aber noch eine Frage nachwerfen: In Python funktioniert das wunderbar, ich muss das jetzt allerdings auch in JavaScript umsetzen. Wie kann ich da denselben HEX Befehl absetzen? Vielen Dank! Edited November 25, 2021 at 08:38 AM by sidi2500 Quote Link to comment Share on other sites More sharing options...
Backdraft007 Posted November 25, 2021 at 09:23 AM Share Posted November 25, 2021 at 09:23 AM Hi, wenn mich nicht alles täuscht, sollte das in JavaScript genauso funktionieren. Wie sieht denn Dein Code aus? Vllt. hakt es an anderer Stelle? Quote Link to comment Share on other sites More sharing options...
sidi2500 Posted November 25, 2021 at 09:28 AM Author Share Posted November 25, 2021 at 09:28 AM Jetzt funktioniert es, aber mit einer Hilfsfunktion. Der gleiche String hat nicht funktioniert. Weiß nicht ob es eleganter zum Lösen geht: function hex2a(hexx) { var hex = hexx.toString();//force conversion var str = ''; for (var i = 0; i < hex.length; i += 2) str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); return str; } und var message = [hex2a("AA"), hex2a(00), hex2a(00), hex2a(20), hex2a(00), hex2a(01), hex2a(00), hex2a(04), hex2a(25)]; rs232.write(message); In Python ist es eleganter: str2send = b'\xAA\x00\x00\x20\x00\x01\x00\x04\x25' rs232.write(list(str2send)) Quote Link to comment Share on other sites More sharing options...
photron Posted November 25, 2021 at 10:34 AM Share Posted November 25, 2021 at 10:34 AM Ich kann In JavaScript (Node.js und Browser) folgendes hinschreiben: rs232.write('\xAA\x00\x00\x20\x00\x01\x00\x04\x25'.split('')) und das sendet die Daten wie erwartet. Quote Link to comment Share on other sites More sharing options...
sidi2500 Posted November 25, 2021 at 02:17 PM Author Share Posted November 25, 2021 at 02:17 PM Stimmt, jetzt konnte ich das auch nachvollziehen! Danke! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.