Jump to content

2 gleiche Bricklets: tinkerforge.ip_connection.Error: Not connected (-8)


Recommended Posts

Hallo,

ich habe ein Problem mit AnalogOutput-Bricklets.

Einzeln funktioniert das Programm, aber nicht zusammen.

Wo ist das Problem?

Es kommt folgende Fehlermeldung:

Traceback (most recent call last):
  File "D:\Daten\Thonny\Auto Motortreiber 02.py", line 25, in <module>
    aoLinksA.set_output_voltage(x)                        # Setzt die Spannung auf 3.3V
  File "D:\Daten\Thonny\tinkerforge\bricklet_analog_out_v3.py", line 98, in set_output_voltage
    self.ipcon.send_request(self, BrickletAnalogOutV3.FUNCTION_SET_OUTPUT_VOLTAGE, (voltage,), 'H', '')
  File "D:\Daten\Thonny\tinkerforge\ip_connection.py", line 1243, in send_request
    self.send(request)
  File "D:\Daten\Thonny\tinkerforge\ip_connection.py", line 1167, in send
    raise Error(Error.NOT_CONNECTED, 'Not connected')
tinkerforge.ip_connection.Error: Not connected (-8)

 

Fehler wird in der 5.-letzten Zeile markiert:

        aoLinksA.set_output_voltage(x)                        

 

Hier das Programm:

import time
HOST = "localhost"
PORT = 4223
UID_ao1 = "Hnm"        # ACHTUNG, mehrere UID vorhanden: HmG + Hnm   AnalogOut
UID_ao2 = "HmG"        #                                             AnalogOut
# -------------------------------------------------------------------------------------------
from tinkerforge.ip_connection import IPConnection
# -------------------------------------------------------------------------------------------
from tinkerforge.bricklet_analog_out_v3 import BrickletAnalogOutV3
# andere Bricklets
# -------------------------------------------------------------------------------------------
ipcon = IPConnection()                              # Create IP connection
# -------------------------------------------------------------------------------------------
aoLinksA = BrickletAnalogOutV3(UID_ao1, ipcon)           # Create device object
aoLinksB = BrickletAnalogOutV3(UID_ao2, ipcon)
# andere Bricklets
# -------------------------------------------------------------------------------------------
ipcon.connect(HOST, PORT)                           # Connect to brickd
# Don't use device before ipcon is connected
# -------------------------------------------------------------------------------------------
# Hauptprogramm
while True:
    for x in range (0, 5000,1000):                           # von x nach y-1
        time.sleep(0.8)         # halbe Sekunde warten
        aoLinksA.set_output_voltage(x)                        # Setzt die Spannung auf 3.3V
        aoLinksB.set_output_voltage(x)
        print(x)

    input("Press key to exit\n")
    ipcon.disconnect()

 

Link zu diesem Kommentar
Share on other sites

Moin,

So wie das Script aussieht, sollte das funktionieren: ipcon.connect blockiert, bis die Verbindung aufgebaut ist, deshalb ergibt das keinen Sinn, dass danach ein "Not connected"-Fehler kommt, kann ich mir dann nur so erklären, dass sich dein Brick Daemon beendet o.Ä.

Teste mal folgendes: Mach den Brick Viewer auf, verbinde dich zu localhost (Mach dann am besten einen Screenshot vom Setup-Tab und häng ihn hier an), lass dann dein Script laufen, und sieh nach ob der Brick Viewer auch die Verbindung verliert.

In jedem Fall kannst du mal ein Brick Daemon-Log anhängen. Der Log Viewer (siehe Start-Menü) verbindet sich automatisch zum Brick Daemon. Im Menü oben gibt es den Punkt "Logfile" -> "View Log Directory", in dem Ordner sollten zwei Dateien liegen (brickd.log und brickd.ini). Häng die beiden mal auch an.

Link zu diesem Kommentar
Share on other sites

  • 2 weeks later...

Hallo rtrbt,

ich konnte leider nicht eher. Hier das von dir gewünschte:

Also das Programm läuft durch, nach dem "press key" kommt:

0
1000
2000
3000
4000
Press key to exit

Traceback (most recent call last):
  File "D:\Daten\Thonny\Auto Motortreiber 02.py", line 25, in <module>
    aoLinksA.set_output_voltage(x)                        # Setzt die Spannung auf 3.3V
  File "D:\Daten\Thonny\tinkerforge\bricklet_analog_out_v3.py", line 98, in set_output_voltage
    self.ipcon.send_request(self, BrickletAnalogOutV3.FUNCTION_SET_OUTPUT_VOLTAGE, (voltage,), 'H', '')
  File "D:\Daten\Thonny\tinkerforge\ip_connection.py", line 1243, in send_request
    self.send(request)
  File "D:\Daten\Thonny\tinkerforge\ip_connection.py", line 1167, in send
    raise Error(Error.NOT_CONNECTED, 'Not connected')
tinkerforge.ip_connection.Error: Not connected (-8)

 

 

BrickViewer.PNG

brickd.log brickd.ini

Link zu diesem Kommentar
Share on other sites

Moin,

Ich hatte dein Script falsch gelesen, eigentlich hätte ich schon sehen können, wo das Problem ist: Du hast im Script ja eine Endlosschleife und darin die for-Schleife, die die Spannungen durchgeht. Das Problem ist jetzt, dass nach einem Durchlauf der for-Schleife du auf eine Eingabe wartest und danach die Verbindung zum Brick Daemon schließt, dann aber wegen der Endlosschleife die nächste Runde Spannungssetzen machst, was aber nur klappt, wenn die Verbindung noch da ist.

Du müsstest also die beiden letzten Zeilen aus der Schleife rausnehmen, wenn du die ganze Zeit die Spannungen durchlaufen willst, oder alternativ, wenn du immer auf einen Tastendruck warten willst vor der nächsten Runde lässt du das input("...") in der Schleife, dann würde ich aber den Text ändern, ist dann ja kein Exit mehr.

Link zu diesem Kommentar
Share on other sites

Hallo rtrbt,

verdammt, was 4 Leerzeichen ausmachen können...

Kämpfe noch etwas mit Python, aber vielen Dank für die Lösung.

Wenn ich es kontinuierlich durchlaufen lassen möchte, kann ich den ipcon.disconnect()-Befehl ja nicht im Script drin lassen.

Ist das ein Problem?

Muss ich dann etwas beachten?

 

Gruß

Link zu diesem Kommentar
Share on other sites

while True:
    for x in range (0, 6000,1000):                           # von x nach y-1 in 1000er Schritten
        time.sleep(2.0)                                      # 2 Sekunden warten
        aoLinksA.set_output_voltage(x)                       # Setzt die Spannung auf xVolt
        aoLinksB.set_output_voltage(x)
        print(x)
ipcon.disconnect()

 

Vielleicht falsch ausgedrückt.

Also der ipcon.disconnect()-Befehl könnte im Script drinbleiben, wird dann aber jetzt nie aktiv. Deswegen die Frage:

Ist das ein Problem?

Muss ich dann etwas beachten?

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...