PureBoard http://forums.purebasic.com/german/ |
|
Bytes senden http://forums.purebasic.com/german/viewtopic.php?f=17&t=32046 |
Seite 1 von 1 |
Autor: | RAaBe [ 16.07.2020 16:20 ] |
Betreff des Beitrags: | Bytes senden |
Hallo, habe ein Problem und sehe vor lauter Bäume den Wald nicht mehr. Folgender Code: Code: *Puffer = AllocateMemory(1024) ; Port$ = "COM5" If OpenSerialPort(0, Port$, 19200, #PB_SerialPort_EvenParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024) Puffer.s = Chr(2) + Chr(0) + Chr(4) + Chr(0) + Chr(6) + Chr(10) + Chr(3) PokeA(*Puffer + 0, 2) PokeA(*Puffer + 1, 0) PokeA(*Puffer + 2, 4) PokeA(*Puffer + 3, 0) PokeA(*Puffer + 4, 6) PokeA(*Puffer + 5, 10) PokeA(*Puffer + 6, 3) WriteSerialPortData(0, @Puffer, 7) Debug PeekA(*Puffer + 0) Debug PeekA(*Puffer + 1) Debug PeekA(*Puffer + 2) Debug PeekA(*Puffer + 3) Debug PeekA(*Puffer + 4) Debug PeekA(*Puffer + 5) Debug PeekA(*Puffer + 6) Delay(3000) Else MessageRequester("Error", "Can't open the serial port: " + Port$) EndIf CloseSerialPort(0) ... ergibt im Terminal: 02 00 04 00 06 00 0A ...sind auch 7 Zeichen, nur hat sich ein 00 nach dem 06 eingeschlichen un das 03 fehlt. Ich stehe im Moment auf dem Schlauch! Reinhard |
Autor: | Mijikai [ 16.07.2020 16:33 ] |
Betreff des Beitrags: | Re: Bytes senden |
was soll gesendet werden? Unicode oder Ascii? Unterschied: Code: EnableExplicit Global str_unicode.s Global *str_ascii str_unicode = Chr(2) + Chr(0) + Chr(4) + Chr(0) + Chr(6) + Chr(10) + Chr(3) *str_ascii = Ascii(str_unicode) ShowMemoryViewer(@str_unicode,StringByteLength(str_unicode) + 2) ;ShowMemoryViewer(*str_ascii,MemorySize(*str_ascii)) Unicode -> 2 Bytes pro Chr Ascii -> 1 Byte pro Chr Im Beispiel werden nur 7 Bytes gesendet was nicht zu Unicode passen würde. Es wird auch ein 2 ter Buffer '*Puffer' erstellt welcher aber nicht zum senden genutzt wird! |
Autor: | RAaBe [ 16.07.2020 16:43 ] |
Betreff des Beitrags: | Re: Bytes senden |
Danke, das mit dem *Puffer war die Lösung. Man probiert soviel aus, bis nichts mehr stimmt! Reinhard |
Autor: | NicTheQuick [ 16.07.2020 17:28 ] |
Betreff des Beitrags: | Re: Bytes senden |
Dein Code im ersten Post ist fast richtig. Du musst nur die Zeile mit Puffer.s entfernen, weil die nicht nötig ist, und dann auch *Puffer nutzen: WriteSerialPortData(0, *Puffer, 7) *Puffer und Puffer sind nicht die gleiche Variable! Außerdem kann man keine Strings mit Nullzeichen erstellen. Das Nullzeichen steht immer implizit am Ende. Hier noch zwei Alternativen für dich: Mit einem Array Code: Dim daten.a(7) Port$ = "COM5" If OpenSerialPort(0, Port$, 19200, #PB_SerialPort_EvenParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024) daten(0) = 2 daten(1) = 0 daten(2) = 4 daten(3) = 0 daten(4) = 6 daten(5) = 10 daten(6) = 3 WriteSerialPortData(0, @daten(0), 7) Delay(3000) Else MessageRequester("Error", "Can't open the serial port: " + Port$) EndIf CloseSerialPort(0) Mit DataSection und Structure Code: EnableExplicit
Structure Daten length.i d.a[0] EndStructure Define Port$ = "COM5" If OpenSerialPort(0, Port$, 19200, #PB_SerialPort_EvenParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024) Define *daten.Daten = ?daten WriteSerialPortData(0, @*daten\d, *daten\length) Delay(3000) CloseSerialPort(0) Else MessageRequester("Error", "Can't open the serial port: " + Port$) EndIf DataSection daten: Data.i 7 Data.a 2, 0, 4, 0, 6, 10, 3 EndDataSection |
Autor: | RAaBe [ 16.07.2020 20:22 ] |
Betreff des Beitrags: | Re: Bytes senden |
@NicTheQuick Danke für die Lösungsvorschläge! |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |