Aktuelle Zeit: 19.07.2018 08:04

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Stringausgabe mit Serialer Schnittstellt / Serial Port / Com
BeitragVerfasst: 26.01.2018 13:54 
Offline
Benutzeravatar

Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Hallo Gemeinde,

seit einigen Stunden versuche ich einen String vom Mikrocontroller zu emfangen. Leider vergebends bei der Auswertung. Schicke ich meinem Kontroller ein Befehl antwortet er darauf. Die Zeichen werden auch emfangen, aber nicht geordnet in einem String. Ich habe jetzt schon über das Forum einige Codes ausprobiert und umgeschrieben. Allerdings klappt es noch immer nicht.
Ich möchte am nach dem Auslesen des SerialPorts einen fertigen String haben, den ich mit einem Command-Befehl vergleichen kann und danach weitere Aktionen tätigen kann bzw. mein Programm später die Rückmeldung gibt, ob der gesendete Befehl an den Kontroller erfolgreich war.
Hier mein zu letzt getesteter Code:

Code:
SPort$ = "Com33"
SBaud = 9600

*SPuffer = AllocateMemory(501)
#SerialPort = 1

Procedure.s RSString(port.i)
  length.i = AvailableSerialPortInput(port.i)
  If length > 0
   If Not ReadSerialPortData(port.i, *SPuffer, length)
    ;Debug "Error while reading input data"
    ProcedureReturn "ERROR"
   Else
    result.s = PeekS(*SPuffer, length)
    buffer.s + result
    i = CountString(buffer, Chr(13)+Chr(10))
    If i > 0 ; check for newline
      For x.i = 1 To i
        line.s = StringField(buffer, x, Chr(13)+Chr(10))
        Debug line
        ProcedureReturn line
      Next
      buffer = StringField(buffer, x+1, Chr(13)+Chr(10)) ; add the new line to the buffer
     EndIf
    EndIf
  EndIf
  ProcedureReturn line
EndProcedure
   
If OpenSerialPort(#SerialPort, SPort$, SBaud, #PB_SerialPort_NoParity, 8 ,1 ,#PB_SerialPort_NoHandshake, 500, 500)
  WriteSerialPortString(#SerialPort, "/help"+Chr(13)+Chr(10))

  y=0
  Repeat
    y=y+1
    Emf$ = RSString(#SerialPort)
    If Emf$ <> "ERROR"
      Debug Emf$
    EndIf
    ;Debug Buffer
   
        Delay(1)
  Until y > 300
  CloseSerialPort(#SerialPort)
 
EndIf
End


Leider zeigt der Debug nur leere Zeichen bei mir an. Ich bekomme keinen kompletten String mit ASCII 13+10 CR LF raus. Vielleicht kann mir jemand helfen.
L.G. Kai


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Stringausgabe mit Serialer Schnittstellt / Serial Port /
BeitragVerfasst: 26.01.2018 14:09 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Probiere einfach mal aus, die Zeile

Code:
result.s = PeekS(*SPuffer, length)


durch

Code:
result.s = PeekS(*SPuffer, length, #PB_ASCII)


zu ersetzen. Evt. ist dein Programm in Unicode kompiliert, und versucht demnach auch einen Unicode
String aus dem Puffer zu holen.

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Stringausgabe mit Serialer Schnittstellt / Serial Port /
BeitragVerfasst: 26.01.2018 14:28 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Genau das wird es sein. Im Übrigen ist WriteSerialPortString() auch nur bedingt richtig. Dort wird als Standard UTF-8 benutzt und das ist ohne Sonderzeichen identisch mit ASCII. Deswegen funktioniert es scheinbar. Zur Sicherheit solltest du aber auch hier als dritten Parameter #PB_Ascii verwenden.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Creality 3D CR-10 Review und erste Druckergebnisse
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 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)
"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: Stringausgabe mit Serialer Schnittstellt / Serial Port /
BeitragVerfasst: 26.01.2018 15:07 
Offline
Benutzeravatar

Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Bisonte hat geschrieben:
Probiere einfach mal aus, die Zeile

Code:
result.s = PeekS(*SPuffer, length)


durch

Code:
result.s = PeekS(*SPuffer, length, #PB_ASCII)


zu ersetzen. Evt. ist dein Programm in Unicode kompiliert, und versucht demnach auch einen Unicode
String aus dem Puffer zu holen.


Ich habe es geändern. Der Debugger gibt folgendes aus:
Zitat:









NICHTS... =( Oh man. Noch ne Idee?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Stringausgabe mit Serialer Schnittstellt / Serial Port /
BeitragVerfasst: 26.01.2018 16:25 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Das problem wird sein das der PC schneller ist als der Controller.

So mit muss man den Seriellen Port so lange lesen ist alle Zeichen angekommen sind.

Es gibt drei Methoden um zu erkennen das alle Zeichen angekommen sind.

- Der Controller sendet ein Ende-Zeichen. (#ETX, #CR, #LF, #CRLF, etc)
- Der Controller sendet eine feste länge von Daten.
- Zeichen-Verzugszeit. Es kommt in einer bestimmen Zeit kein neues Zeichen.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Stringausgabe mit Serialer Schnittstellt / Serial Port /
BeitragVerfasst: 26.01.2018 17:10 
Offline
Benutzeravatar

Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Der Kontroller sendet breits #CRLF

mit dem oberen PB-Code habe ich bereits versucht, so lange zu lesen bis EOL kommt aber leider funktioniert dies nicht korrekt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Stringausgabe mit Serialer Schnittstellt / Serial Port /
BeitragVerfasst: 26.01.2018 17:22 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Du musst gegebenenfalls mehr als einmal ReadSerialPortData() aufrufen bis du alles gelesen hast, was da ist. Lass dir außerdem mal length ausgeben und schau, was das ausgibt.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Creality 3D CR-10 Review und erste Druckergebnisse
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 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)
"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: Stringausgabe mit Serialer Schnittstellt / Serial Port /
BeitragVerfasst: 26.01.2018 19:57 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Habe das mal alles versucht über ein Thread zu lösen.
Mit ein Soft-Simulator funktioniert es...

Link: viewtopic.php?f=8&t=30569

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 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