- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: RP6 über Seriellen Port mit Python connecten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.05.2010
    Beiträge
    19

    RP6 über Seriellen Port mit Python connecten

    Anzeige

    Praxistest und DIY Projekte
    Hi,
    ich hab ein kleines Problem. Ich würde gerne eine Zeichen vom PC und zwar mit Python an den RP6 schicken. Hab mir nun PySerial heruntergeladen. Dann hab ich im Gerätemanager nachgeschaut welcher Port mein RP6 ist. Das war COM8. Also hab ich einfach mal dieses kleine Script für Python geschrieben:

    Code:
    import serial              # Das ist diese PySerial Library
    ser = serial.Serial(7)   # Öffnet COM8
    print ser.portstr         # Das echot, dass es mit COM8 verbunden ist
    ser.write("G")            # Sendet ein "G"
    ser.close()                 # schließt den PORT
    So nun hab ich auf dem RP6 ein Programm, welches wenn eine Nachricht ankommt, eine LED leuchten lässt. Wenn ich über dieses Terminal vom dem RP6 Loader etwas sende, dann funktioniert das auch. Aber ich möchte es ja über Python machen. Doch hier geht das nicht, sondern der RP6 restartet sich.

    Ich hoffe ihr könnt mir helfen.

    Viele Grüße
    Johannes

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Beim RP6 dient das Steuersignal RTS der seriellen Schnittstelle als "Resetleitung" für den Mega32. Deshalb muss an der Schnittstelle RTS gesetzt werden.

    https://www.roboternetz.de/community...-PC-ansprechen

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.05.2010
    Beiträge
    19
    Danke für deine Antwort. Hab jetzt ein bisschen rumprobiert und dann auch in der PySerial API nachgelesen, wie man dieses RTS aktiviert. Das funktioniert mit dem Befehl: rtscts – Enable hardware (RTS/CTS) flow control. Hab das dann mal reingeschrieben:
    Code:
    import serial              # Das ist diese PySerial Library 
    ser = serial.Serial(7, rtscts=1)   # Öffnet COM8 
    print ser.portstr         # Das echot, dass es mit COM8 verbunden ist 
    ser.write("G")            # Sendet ein "G" 
    ser.close()                 # schließt den PORT
    Leider hab ich aber immernoch das gleiche Problem, wie vorher.

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Es geht hier nicht um die Flusskontrolle beim Senden der Zeichen. Diese muss immer ausgeschaltet sein. Vielmehr geht es um ein andauerndes Setzen der Steuerleitung:

    Code:
    setRTS(level=True)¶
        Parameters:	
    
            * level – Set control line to logic level.
    
        Set RTS line to specified logic level.
    (Aus der oben erwähnten API)

    Ob True oder False kann ich nicht sicher sagen, ich tippe auf True. Aber ich vermute, ein kleiner Test bringt dich schnell weiter.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.05.2010
    Beiträge
    19
    Funktioniert damit auch nicht

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Grrr! Zeig doch mal, wie du es jetzt eingebaut hast. rtscts=1 muss natürlich wieder raus. Wo und wie werden die anderen Schnittstellenparameter eingestellt: 38400 Baud, 8 Datenbits, 1 Stopbit, keine Parityprüfung und keine Flusskontrolle
    Geändert von radbruch (15.01.2012 um 22:59 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    28.05.2010
    Beiträge
    19
    Also mit diesem ZOC Terminal funktioniert das ganze, bloß mit Python wieder nicht.

    Code:
    import serial
    
    ser = serial.Serial('/dev/ttyUSB0', 38400, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE, bytesize = serial.EIGHTBITS, xonxoff = 0, rtscts = 0, dsrdtr = 0)
    ser.setRTS(0)
    ser.close()

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Entschuldigung, aber ich habe das Terminal-Zeugs wieder rauseditiert, weil es mit dem Robotloader ja funktioniert, denn sonst könntest du nicht flashen. Es muss mit irgendetwas in deinem Setup für die Schnittstelle in Python zusammenhängen. Blöderweise kenne ich Pythen aber gar nicht.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Neuer Benutzer Öfters hier Avatar von CyberUli
    Registriert seit
    05.09.2010
    Alter
    32
    Beiträge
    17
    probiers mal so, bzw welches Betriebssystem benutzt du eigentlich, weil du die Portnamen je nach System anderst angeben musst...
    Code:
    import serial
    
    ser = serial.Serial(COM7, 38400)
    ser.setRTS(True)
    ser.write("G")
    ser.close()
    Grüße, Uli

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    28.05.2010
    Beiträge
    19
    Danke für die Antworten.

    Ne so wie du schreibst, gehts nicht. Ich habs auf Windows und auf Linux probiert und es wird auch der richtige Port geöffnet. Das Kann man mit

    print ser.portstr

    überprüfen.

    EDIT: Man bin ich dumm ich weiß wie es geht xD. Beim Connecten Resetet der RP6 schon. Ist ja auch im Terminal so. Also muss ich das Programm aufm RP6 erst starten, wenn es connectet ist. Werd ich gleich ausprobieren, wenn ich daheim bin. Danke für eure Hilfe

    Nurnoch eine kleine Frage: Man kann den Roboter ja auch mit dem Terminal starten. Kennt ihr da den Befehl dafür, den man senden muss?
    Geändert von johannes_b (16.01.2012 um 15:17 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Timeout beim connecten
    Von headnut im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 19.06.2010, 20:33
  2. Mit PonyProg über Seriellen Port nach RS232
    Von SephiKnight im Forum C - Programmierung (GCC u.a.)
    Antworten: 13
    Letzter Beitrag: 29.04.2008, 22:45
  3. Übertragung von seriellen TTL-Signalen über 15m Kabel
    Von Dane im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 25.01.2006, 20:24
  4. [ERLEDIGT] Seriellen/Parallelen oder USB-Port in C ansprechen und ausle
    Von im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 10.02.2005, 17:59
  5. [ERLEDIGT] Relais über USB, den Seriellen- oder Parallen-Port Schalten
    Von DJFELIX im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 21.01.2005, 22:22

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests