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/