PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pySerial "port is already open"



robots4-ever
31.05.2014, 18:04
Moin Leute

ich habe ein kleines Problem. Ich habe im Internet ein Interessantes Cnc Projekt entdeckt welches mit einem Arduino und einem Python Script realisiert wird. So ist es nun das der Arduino und der Pc über die Serielle Schnittelle Kommunizieren.
Dieses geschieht über das pySerial Modul und hat auch gut funktioniert. Nun bekomme ich seit geraumer Zeit keine Verbindung mehr zu meinem Arduino hin. Ich habe nichts anders eingestellt ich habe alles so gelassen wie es war.
Ich bekomme nun im Terminal die Rückmeldung "port is already open".

Kann mir vielleicht einer Helfen?

Danke Tom

seite5
01.06.2014, 10:21
Hi,
Wie die Rückmeldung schon sagt, der Port ist schon geöffnet, einen geöffneten Port kann man nicht nochmal öffnen.
Kenn pySerial nicht, hab aber in C# manchmal ähnliches Problem, deshalb teste ich vor Öffnen eines Ports, ob der schon
offen ist und schliesse ihn: if(Serialport1.IsOpen) Serialport1.Close();, dann kann ich den Port problemlos öffnen.
Vielleicht geht das auch in pySerial.
mfg
Achim

robots4-ever
01.06.2014, 10:33
Ja das mag sein, ich werde das mal probieren. Was mich aber dennoch verwundert ist, dass dieser "Fehler" jetzt erst auftaucht und nicht schon seit dem ich das Programm benutze.

malthy
01.06.2014, 11:25
Ich bekomme nun im Terminal die Rückmeldung "port is already open".

Passiert das auch nach einem Systemneustart? Hast Du einfach mal im Hardwaremanager überprüft, ob Du überhaupt den richtigen COM-Port öffnest?

shedepe
01.06.2014, 11:57
Das Verhalten kann durch mehrere Ursachen entstehen.
1. Du öffnest den falschen Comport der bereits durch ein anderes Programm belegt ist
2. Du öffnest den richtigen Comport der aber bereits durch ein anderes Programm belegt ist
3. Dein Programm schließt den Comport nicht (richtig). Dadurch kann es sein dass das Betriebssystem denkt dass dein Programm eben den Port noch geöffnet hat (kann gerade unter Linux passieren)

Klebwax
02.06.2014, 08:33
Ich bekomme nun im Terminal die Rückmeldung "port is already open".

Wenn dieser Zustand eingetreten ist, könntest du mit "lsof" nachschauen, wer den File offen hat. Daraus könnte man dann schließen, was schief gegangen ist.

MfG Klebwax

robots4-ever
03.06.2014, 11:28
Ok ich komm nicht mehr weiter ich bin mit meinem Wissen am ende.:confused:
https://docs.google.com/file/d/0B1FDV9G7idL0MGM1NGE5MWQtMTI5My00OTRjLWFhMzAtZjUxN mM3OGM0ZTY2/edit?hl=en_US
hier ist der Link zu der Datei. Vielleicht kann ja einer von euch gelehrten sich das mal angucken.(Man brauch Python 2.7 und das PySerail Modul)
Ich weis echt nicht mehr was ich noch versuchen kann.
Trotzdem danke für eure Hilfe

shedepe
03.06.2014, 15:27
Was wir versuchen dir zu erklären ist, dass es nicht unbedingt an deinem Programm liegen muss. Aber auch wie man es in seinem eigenen Programm abfangen kann.
Hier noch mal die zusammenfassung der Ideen die du in deinem Programm umsetzen kannst: (Nachdem du überprüft hast ob du garantiert den richtigen Comport ausgewählt hast)
1. Schließe den Comport beim beenden des Programms
2. Bevor du den Comport öffnest kannst du versuchen ihn zu schließen.

Ansonsten würde ich dir vorschlagen meine Liste mit Ursachen der Reihe nach auszuschließen. Wenn du uns schreibst welches Betriebssystem du verwendest können wir dir dabei auch noch weiterhelfen.


Das Verhalten kann durch mehrere Ursachen entstehen.
1. Du öffnest den falschen Comport der bereits durch ein anderes Programm belegt ist
2. Du öffnest den richtigen Comport der aber bereits durch ein anderes Programm belegt ist
3. Dein Programm schließt den Comport nicht (richtig). Dadurch kann es sein dass das Betriebssystem denkt dass dein Programm eben den Port noch geöffnet hat (kann gerade unter Linux passieren)