ReadSerialPortData verhält sich komisch

Anfängerfragen zum Programmieren mit PureBasic.
rupert
Beiträge: 7
Registriert: 08.04.2013 18:14

Re: ReadSerialPortData verhält sich komisch

Beitrag von rupert »

Beim Benutzen von WriteSerialPortString() und ReadSerialPortData() habe ich das oben beschrieben Problem. Bisher noch keine Lösung.
Jetzt wollte ich wissen ob bei WriteSerialPortData() und ReadSerialPortData() das Problem auch besteht.
Den code von Nic habe ich versucht zu ändern.. Leider klappt das mit dem pointer nicht so recht... es wid immer eine $00 geschickt anstelle der $3F,$0D

Wo iste der Fehler ?

Code: Alles auswählen

#SERIAL_TIMEOUT = 100   ;in ms
 
Dim buf(3)
buf(0) = $3F
buf(1) = $0D
buf(2) = $0


Procedure connect3(Array Mybuf(1))
   Protected availableData.i, ascii.a, buffer.s = "", time.i
   
   *MyPtr = @Mybuf
   WriteSerialPortData(0, *MyPtr,2)
   time = ElapsedMilliseconds()
   While ElapsedMilliseconds() < time + #SERIAL_TIMEOUT
      availableData = AvailableSerialPortInput(0)
      If availableData > 0                                      ;Es sind Daten da, lies sie aus
         While availableData > 0                                ;Lies solange ASCII-Zeichen aus bis der Puffer leer ist
            availableData - ReadSerialPortData(0, @ascii, 1)
            Debug "Wert: " + ascii + " Zeichen:'" + Chr(ascii) + "'"           
            buffer + Chr(ascii)
         Wend
         
         If FindString(buffer, "SL1", 0, #PB_String_NoCase)
            ProcedureReturn #True
         EndIf
         time = ElapsedMilliseconds()
      EndIf
   Wend
   
   MessageRequester("Fail", "Timout: Serial port error.")
   ProcedureReturn #False
EndProcedure


connect3(buf())
__________________________________________________
Code-Tags hinzugefügt
09.04.2013
RSBasic
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: ReadSerialPortData verhält sich komisch

Beitrag von Danilo »

rupert hat geschrieben:Wo iste der Fehler ?
EnableExplicit hat geschrieben:variable Mybuf unbekannt
*MyPtr = @Mybuf braucht also Klammern: *MyPtr = @Mybuf()
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
rupert
Beiträge: 7
Registriert: 08.04.2013 18:14

Re: ReadSerialPortData verhält sich komisch

Beitrag von rupert »

Danke... manchmal hat man Tomaten auf den Augen.

Mit der WriteSerialPortData() / ReadSerialPortData() Variante geht es jetzt so wie es sein soll. Ich bekomme beide erwarteten Messages das Echo (?+#CRLF) und die Antwort darauf (SL1+#CRLF) in den Empfangsbuffer.

Nochmal Danke an alle die dabei mir geholfen haben.

Hier das Resultat von zwei abenden...

Code: Alles auswählen

#SERIAL_TIMEOUT = 100   ;in ms
 
Dim buf.b(3)
buf.b(0) = $3F
buf.b(1) = $0D
buf.b(2) = $0


Procedure connect3(Array Mybuf.b(1))
   Protected availableData.i, ascii.a, buffer.s = "", time.i
   
   *MyPtr = @Mybuf()
   ;a.b = *MyPtr
   ;b.b = *MyPtr+1
   ;Debug a.b
   ;Debug b.b
   WriteSerialPortData(0, *MyPtr,2)
   time = ElapsedMilliseconds()
   While ElapsedMilliseconds() < time + #SERIAL_TIMEOUT
      availableData = AvailableSerialPortInput(0)
      If availableData > 0                                      ;Es sind Daten da, lies sie aus
         While availableData > 0                                ;Lies solange ASCII-Zeichen aus bis der Puffer leer ist
            availableData - ReadSerialPortData(0, @ascii, 1)
            Debug "Wert: " + ascii + " Zeichen:'" + Chr(ascii) + "'"           
            buffer + Chr(ascii)
         Wend
         
         If FindString(buffer, "SL1", 0, #PB_String_NoCase)
            ProcedureReturn #True
         EndIf
         time = ElapsedMilliseconds()
      EndIf
   Wend
   
   MessageRequester("Fail", "Timout: Serial port error.")
   ProcedureReturn #False
EndProcedure


;der Aufruf
connect3(buf())
__________________________________________________
Code-Tags hinzugefügt
09.04.2013
RSBasic
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ReadSerialPortData verhält sich komisch

Beitrag von RSBasic »

@rupert
Kannst du bitte das nächste Mal Code-Tags verwenden, wenn du einen Quellcode posten möchtest?
Du findest, wenn du einen Beitrag erstellst, im Editor einen Button mit der Bezeichnung "Code". Markiere deinen gesamten Code und drücke anschließend auf diesen Button. Dann wird automatisch vor und nach deinem Code "[code]" und "[/code]" eingefügt. Danke. Dann sieht es besser aus und ist lesbarer. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten