Seite 2 von 2

Re: ReadSerialPortData verhält sich komisch

Verfasst: 09.04.2013 20:40
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

Re: ReadSerialPortData verhält sich komisch

Verfasst: 09.04.2013 20:54
von Danilo
rupert hat geschrieben:Wo iste der Fehler ?
EnableExplicit hat geschrieben:variable Mybuf unbekannt
*MyPtr = @Mybuf braucht also Klammern: *MyPtr = @Mybuf()

Re: ReadSerialPortData verhält sich komisch

Verfasst: 09.04.2013 21:57
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

Re: ReadSerialPortData verhält sich komisch

Verfasst: 09.04.2013 22:07
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. ;)