Seite 1 von 1

Hilfe bei RS232 den Port CTS auslesen ?

Verfasst: Donnerstag 18. Februar 2010, 19:44
von Enterprise
Hallo Forum,

ich bin Anfänger, lerne gerade Python.
Ich möchte über eine RS232 Schnittstaelle Wiederstände messen.
Dafür habe ich ein RC Glied ausgewählt.
Den Kondensator habe ich 47uf ausgewählt.
Den Minuspol vom Kondensator habe ich an TXD gelegt.
Das Ende vom Wiederstand an DTR.
Zwischen Kondensator und Wiederstand liegt der Port CTS an.

Nun muss der DTR auf 1 gesetzt werden und
gleichzeitig muss ein Timer laufen biss an dem Punkt CTS eine 1 anliegt.
Diese Zeit ist diese biss der Kondensator ca. 63,2% geladen ist.

Hier habe ich ein Beispiel von Delphi gefunden.
Nun wollte ich dieses mit Python nach bilden.
Aber da fehlen mir die Kenntnisse.

Code: Alles auswählen

Private Sub Timer1_Timer()
   DTR 1
   REALTIME (TRUE)
   TIMEINITUS
   While (DSR() = 0) And (TIMEREADUS() <1500000)
   Wend
   t = TIMEREADUS()
   REALTIME (FALSE)
   Label1.Caption = Str$(t) + " us"
   DTR 0
End Sub  


Hier mein Python script:

Code: Alles auswählen

#!/usr/bin/python

import threading, time, serial
s = serial.Serial(0, 9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1, xonxoff=0, rtscts=0) 
s.setDTR(1)
 while True:
     time.sleep(0.00005) 
     cts = s.getCTS()
     if cts: 
              data = s.read(1) # 1 byte auslesen
              value = int(data[0])
s.setDTR(0)
s.close()

Kann mir jemand bei meiner Frage helfen.


mfg
Enterprise

Edit by Gerold: Code-Tags gesetzt

Verfasst: Donnerstag 18. Februar 2010, 20:46
von ...
Ich kenn mich mit dem Seriellen nicht sonderlich aus, und mit Python auch nicht wirklich...

Du hast eine Endlosschleife, in welcher du immer wieder 0.00005 Zeiteinheiten (sind das Sekunden oder ms) was auch immer wartest...

Dabei hast du keine Einrückungen - deine Schleife funktioniert nicht :S

Machst du das bitte mit CODE?


Mal kurz eine Idee:

Code: Alles auswählen

start_time = getTime (wie auch immer)

while s.getCTS() != washaltkommt:
    pass

end_time = getTime (wie auch immer)

needed_time = end_time - start_time

Keine ahnung ob dir das hilft, keine Ahnung ob es Sinn macht...
Aber müsste nicht die Spannung sofort wieder abfallen?
Dann reicht dir die 0.00005 Zeitheitheit vieleicht garnicht aus, das wahr zu nehmen....


lg,
...

Re: Hilfe bei RS232 den Port CTS auslesen ?

Verfasst: Freitag 19. Februar 2010, 07:41
von /me
Enterprise hat geschrieben:

Code: Alles auswählen

     time.sleep(0.00005) 
Diese Zeitauflösung wirst du nicht erreichen können.