Aktuelle Zeit: 29.09.2020 19:01

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bytes senden
BeitragVerfasst: 16.07.2020 16:20 
Offline
Benutzeravatar

Registriert: 07.09.2004 12:52
Wohnort: Münsterland
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bytes senden
BeitragVerfasst: 16.07.2020 16:33 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
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!

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bytes senden
BeitragVerfasst: 16.07.2020 16:43 
Offline
Benutzeravatar

Registriert: 07.09.2004 12:52
Wohnort: Münsterland
Danke, das mit dem *Puffer war die Lösung.

Man probiert soviel aus, bis nichts mehr stimmt!

Reinhard


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bytes senden
BeitragVerfasst: 16.07.2020 17:28 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
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

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bytes senden
BeitragVerfasst: 16.07.2020 20:22 
Offline
Benutzeravatar

Registriert: 07.09.2004 12:52
Wohnort: Münsterland
@NicTheQuick

Danke für die Lösungsvorschläge!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye