bendebru Geschrieben May 2, 2022 at 11:51 Geschrieben May 2, 2022 at 11:51 Hallo zusammen Ich arbeite an einer Linearführung, bei der ich einen Steppermotor und einen Encoder mit einem Tinkerforge-Stack betreibe. Den Encoder lese ich mit dem Industrial Counter Bricklet aus. Zusätzlich will ich mit dem Accelerometer 2.0 Bricklet die Beschleunigungwerte auslesen. Ich muss sicherstellen, dass ich die Encoder- und Beschleunigungswerte gleichzeitig bekomme und ich möchte eine hohe Datenrate erreichen. Wie programmiere ich das in Python, welche Funktionen kommen dafür in Frage? Bisher habe ich es mit dem CALLBACK_CONTINUOUS_ACCELERATION_16_BIT versucht. Damit erreiche ich eine grossartige Datenrate für die Beschleunigung alleine aber wie kann ich gleichzeitig den Industrial Counter auslesen? Eine get.function für den Counter im Callback des Accelerometers aufzurufen ist wahrscheinlich keine gute Idee und zwei Callbacks parallel laufen zu lassen auch nicht... Für Eure Hilfe wäre ich sehr dankbar und falls meine Frage zu unklar oder unspezifisch ist, erläutere ich das Problem gerne genauer! Zitieren
duaw Geschrieben May 2, 2022 at 15:07 Geschrieben May 2, 2022 at 15:07 vor 3 Stunden schrieb bendebru: und zwei Callbacks parallel laufen zu lassen auch nicht... Warum sollte das keine gute Idee sein? Zitieren
rtrbt Geschrieben May 4, 2022 at 08:03 Geschrieben May 4, 2022 at 08:03 Prinzipiell ist es so, dass du über einen Master Brick ~ 1000 Nachrichten pro Sekunde verarbeiten kannst. D.h. wenn du z.B. nur Getter benutzt schaffst du nur 500 Abfragen pro Sekunde, weil das ja die Abfrage-Nachricht und die Antwort involviert. Deshalb sind die Callbacks effizienter. Theoretisch kannst du jetzt also durchrechnen, wie viele Nachrichten das Continuous-Acceleration Callback bei deiner Konfiguration erzeugt, z.B. wie folgt: In einer Nachricht sind bei 16-Bit Messwerten 30 Werte enthalten D.h. bei 1000 Nachrichten pro Sekunde schaffst du es 30000 Messwerte rauszuziehen D.h. wenn du z.B. zwei Achsen verwendest kannst du pro Achse und Sekunde 15000 Messwerte verwenden -> 15000 Hz ist die maximal sinnvolle Messfrequenz, konfigurieren kannst du dann 12800 Hz (So werden z.B. die Werte in der Tabelle hier: https://www.tinkerforge.com/de/doc/Software/Bricklets/AccelerometerV2_Bricklet_Python.html#BrickletAccelerometerV2.set_continuous_acceleration_configuration berechnet) Wenn du jetzt das Counter-Bricklet parallel abfragen willst (sinnvollerweise auch per Callback), musst du von den verfügbaren 1000 Nachrichten in der Rechnung so viele abziehen, wie du für den Counter zur Verfügung haben willst. Wenn du z.B. alle 10 Millisekunden den aktuellen Encoder-Wert bekommen willst, heißt dass, dass 100 Nachrichten vom Counter-Bricklet erzeugt werden. Du kannst dann also nur noch 900 Nachrichten für das Accelerometer-Bricklet verwenden, also 27000 Messwerte, bei zwei Achsen also max. 13500 Hz, d.h. die (konfigurierbaren) 12800 Hz schaffst du weiterhin. Soweit die Theorie. In der Praxis musst du das dann natürlich ausprobieren und gegebenenfalls die Timings nicht ganz so eng wählen. Falls sich Nachrichten beim Brick aufstauen, kann es passieren, dass du dann veraltete Werte bekommst. Noch ein paar Performance-Optimierungs-Ideen: Du kannst die Datenrate der Kommunikation zwischen Master und Bricklets erhöhen: https://www.tinkerforge.com/de/doc/Software/Bricks/Master_Brick_Python.html#BrickMaster.set_spitfp_baudrate. Der Default sind 1,4 MHz, je nach Bricklet sind aber bis zu 2 MHz drin. Falls du einen Raspberry Pi und ein HAT Brick zur Hand hast, kannst du versuchen die Bricklets da anzuschließen. Der Pi kann, je nach Modell, in Summe mehr als 1000 Nachrichten pro Sekunde von allen angeschlossenen Bricklets lesen. Zitieren
bendebru Geschrieben May 18, 2022 at 12:38 Autor Geschrieben May 18, 2022 at 12:38 Vielen Dank rtrbt für die Antwort und die Erklärungen! Zitieren
bendebru Geschrieben May 18, 2022 at 12:49 Autor Geschrieben May 18, 2022 at 12:49 Am 2.5.2022 um 17:07 schrieb duaw: Warum sollte das keine gute Idee sein? Ich hatte Probleme mit dem Timing der beiden Callbacks und dem Zuordnen der Messwerte zueinander. Aber ja, es ist eine gute Idee mehrere Callbacks zu verwenden. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.