Jump to content

Paralleler Zugriff auf Bricklets & Callbacks


Recommended Posts

Posted

Guten Tag,

ich habe einige Fragen zur Kommunikation des RED-Bricks mit dem Stack. Ist es möglich mit 2 Voltage/Current Bricklets Ströme zum gleichen Zeitpunkt zu messen ? Und ist es generell so, dass der RED-Brick alle Befehle an den Stack sequentiell abarbeitet, oder kann ich mit Bricklets, die an unterschiedlichen Master-Bricks hängen gleichzeitig kommunizieren ? Werden z.B. Callbacks wirklich parallel ausgeführt ? Und ermöglichen es diese schneller Sensorwerte abzurufen ? Oder nehmen diese mir nur die Arbeit ab, get_voltage zyklisch abzufragen ?

Vielen Dank für die Hilfe!

Posted

Moin,

4 hours ago, waki said:

Ist es möglich mit 2 Voltage/Current Bricklets Ströme zum gleichen Zeitpunkt zu messen ?

Nein, es gibt keine Möglichkeit, die Abfragen zu synchronisieren.

4 hours ago, waki said:

Und ist es generell so, dass der RED-Brick alle Befehle an den Stack sequentiell abarbeitet, oder kann ich mit Bricklets, die an unterschiedlichen Master-Bricks hängen gleichzeitig kommunizieren ?

Ersteres, die Befehle werden vom RED-Brick nacheinander zu den anderen Bricks/Bricklets gesendet.

4 hours ago, waki said:

Werden z.B. Callbacks wirklich parallel ausgeführt ?

Die Bricklets können Callbacks parallel auslösen. Der Brick fragt aber intern nacheinander ab. D.h. du kannst parallel erzeugte Callbacks nacheinander bekommen, hast aber keine Möglichkeit herauszufinden, ob sie wirklich gleichzeitig ausgelöst wurden.

4 hours ago, waki said:

Und ermöglichen es diese schneller Sensorwerte abzurufen ? Oder nehmen diese mir nur die Arbeit ab, get_voltage zyklisch abzufragen ?

Sowohl, als auch: Du hast weniger Arbeit und es muss pro Messwert nur noch ein Paket vom Bricklet zum RED-Brick geschickt werden, das Paket mit der Anfrage vom RED-Brick zum Bricklet fällt weg.

Posted (edited)

Vielen Dank für die Antworten :) Eine Synchronisation der Callbacks ist aber nicht möglich ? Werden die Callbacks wirklich direkt auf den Bricklets ausgelöst oder auf dem Master-Brick ?

Edited by waki
Posted
7 minutes ago, waki said:

Eine Synchronisation der Callbacks ist aber nicht möglich ?

Das kannst du höchstens über Tricks hinbekommen, hängt aber von deinem Anwendungsfall ab. Was versuchst du synchron zu messen? Von welchen Zeitskalen reden wir da?

8 minutes ago, waki said:

Werden die Callbacks wirklich direkt auf den Bricklets ausgelöst oder auf dem Master-Brick ?

Das hängt davon ab, ob du alte Bricklets mit 10-Pol-Stecker verwendest, oder die neuen Koprozessor-Bricklets mit 7-Pol-Stecker: Bei den alten wird die Firmware vom Master Brick ausgeführt, der dann auch die Callbacks generiert. Bei den neuen läuft die Firmware direkt auf dem Koprozessor, der dann auch von sich aus Callbacks erzeugen kann.

Posted (edited)

Ich versuche bis zu 14 Zellspannungen(Voltage/Current 2.0 Bricklets) möglichst immer zum gleichen Zeitpunkt zu messen. Umso näher die Messungen zusammen liegen, umso besser. Unter einer 1ms wäre super. Ob sie zeitversetzt ankommen wäre egal, nur der Messzeitpunkt wäre interessant

Edited by waki
Posted

Hm, da wirst du glaube ich nicht glücklich mit den Bricklets. Intern laufen die Bricks und Bricklets mit einer Tickrate von 1000 Hz, der Master Brick kann also höchstens eine Messung pro Millisekunde wegtransportieren. Theoretisch könnten die Bricklets alle gleichzeitig messen und du hast den Zeitversatz nur in der Kommunikation, aber auf so kleinen Zeitskalen ist das praktisch unmöglich zu synchronisieren, sorry.

Posted (edited)

Was schätzt du was minimal möglich wäre ? Ah und  ich glaube es gab ein Missverständnis. Ich versuche nicht jede ms zu messen, sondern nur das alle Messungen innerhalb einer ms stattfinden. Dazu müsste der Master-Brick ja eigentlich nur per Broadcast-Nachricht eine Messung auf alle angeschlossenen Bricklets auslösen.

Edited by waki
Posted
18 hours ago, waki said:

Was schätzt du was minimal möglich wäre ?

Das ist eine gute Frage. Ich würde an deiner Stelle mal folgendes testen: Du stellst das Voltage-Callback bei beiden Bricklets auf 2ms Periode, value_has_to_change false. Dann solltest du von jedem Bricklet 500 Callbacks pro Sekunde bekommen (das solltest du nachmessen, nicht dass bei deinem Aufbau/Programm noch irgendetwas limitiert). Da du hinter einem Master Brick auf 1000 Nachrichten pro Sekunde limitiert bist, kannst du nicht bei beiden Bricklets auf 1ms Periode gehen.

Danach kannst du auf die Bricklets ein Synchronisationssignal legen, z.b. eine Rechteckspannung. Du solltest dann auf den Daten von beiden Bricklets den ersten Sprung sehen und kannst damit die Messungen korrelieren, relativ zum ersten Sprung sollte die jeweils n-te Messung im schlimmsten Fall ~4ms auseinanderliegen. Das basiert aber auch auf der Annahme, dass die Clocks der Bricklets nicht driften, das würde ich also nicht über Stunden laufen lassen.

Das nächste Problem ist dann, dass das Sampling selbst nicht synchron ist.

Du siehst schon, dass das in Summe extrem schwierig ist, an sinnvoll synchrone Daten zu kommen. Bist du dir ganz sicher, dass du für Zellspannungen (Ich gehe mal davon aus von Batteriezellen?) so starke Zeitanforderungen hast? Ich würde eigentlich erwarten, dass die Messwerte relativ träge sind.

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...