Schwobadak Geschrieben January 10, 2020 at 10:59 Geschrieben January 10, 2020 at 10:59 Hallo, das Industrial Dual Analog In Bricklet 2.0 mit der Firmware-Version 2.0.4 scheint nicht die angezeigte Samplingrate zu liefern. Beim Anschluss an die heruntertransformierte Netzspannung (50 Hz) ist auch bei einer Samplingrate von 976 1/s kein sinusförmiger Verlauf mit 50 Hz erkennbar (siehe angehängter Screenshot). Auch die Datenaufnahme mit dem Data-Logger liefert nicht den erwarteten Verlauf, sowohl in der integrierten Version als auch im stand-alone Logger in der Konsole. Getestet haben ich an zwei verschiedenen Computern, beide mit Windows 10 und zwei verschiedene Trafos. Hat jemand eine Idee, was das Problem ist? Danke und Viele Grüße David Zitieren
rtrbt Geschrieben January 14, 2020 at 09:46 Geschrieben January 14, 2020 at 09:46 Moin, Im Brick Viewer kannst du das 50 Hz-Signal nicht sehen, weil die Zeitskala dafür zu weit ist. Außerdem ruft er unabhängig von der eingestellten Sample Rate (die sich nur auf die Konfiguration des Bricklets bezieht, nicht auf die Kommunikation zwischen Bricklet und PC) nur alle 100ms die Spannungswerte ab. Ich habe den Data Logger hier mal mit einem 50Hz-Signal aus einem Funktionsgenerator getestet und es funktioniert (siehe ad-hoc geplotteter Anhang). Wichtig ist dabei, dass du nicht nur die Sample Rate hochdrehst, sondern auch die Abfrage-Rate des Loggers (siehe angehangener Screenshot). Falls du mehr als nur die eine Spannung messen willst musst du aber darauf achten, dass insgesamt nur ungefähr 1000 Nachrichten pro Sekunde an Durchsatz pro angeschlossenem Stack möglich sind. Der Plot wird aber auch bei kleineren Abfrageraten (z.b. 4ms, dann sind es nur noch 250 Nachrichten pro Sekunde) noch ganz gut lesbar. Zitieren
cl- Geschrieben April 9, 2020 at 10:35 Geschrieben April 9, 2020 at 10:35 (bearbeitet) Hallo! Ich habe hierzu eine Frage: Wie bekomme ich denn die 976 samples pro Sekunde übertragen? Wenn ich bei meinem Industrial Dual Analog in Bricklet 2.0 mit voltage_callback_configuration arbeite, dann bekomme ich 500 Werte pro Sekunde pro Kanal. Wenn ich pausenlos mittels get_adc_values() beide Kanäle gleichzeitig abfrage (und beide Werte werden gleichzeitig in einer Nachricht übertragen), dann bekomme ich auch 500 Werte (für beide Kanäle) pro Sekunde. Der Header hat zumindest beide Werte in einer Nachricht: typedef struct { TFPMessageHeader header; int32_t value[2]; } __attribute__((__packed__)) GetADCValues_Response; Selbst wenn ich einen Kanal einzeln abfrage mittels get_voltage() bekomme ich nur 500 Werte pro Sekunde. Meine Konfiguration für die Callbacks: // set period for voltage callback to 1 ms voltage_sensor.set_sample_rate(INDUSTRIAL_DUAL_ANALOG_IN_V2_BRICKLET_SAMPLE_RATE_976_SPS); voltage_sensor.set_voltage_callback_configuration(0, 1, false, 'x', 0, 0); voltage_sensor.set_voltage_callback_configuration(1, 1, false, 'x', 0, 0); Wie kommt man denn auf die 1000 Nachrichten pro Sekunde, wie in deinem Beispiel? Was ist der Unterschied zwischen Nachrichten pro Sekunde und Messwerte pro Sekunde? Das Industrial Dual Analog in Bricklet 2.0 ist das einzige Bricklet an meinem Master Brick. Es gibt keine weiteren Master Bricks im Stapel. Bei mir hängt aber ein Isolator Bricklet zwischen Mater Brick und Industrial Dual Analog in Bricklet 2.0. bearbeitet April 9, 2020 at 10:45 von cl- Zitieren
cl- Geschrieben April 9, 2020 at 11:38 Geschrieben April 9, 2020 at 11:38 Ok. Ich habe weiter probiert. Wenn ich ohne das Isolator Bricklet arbeite, bekomme ich die vollen 1000 Werte. Es scheint also, dass das Isolator Bricklet den Datendurchsatz halbiert. Kann das sein? Zitieren
rtrbt Geschrieben April 9, 2020 at 14:34 Geschrieben April 9, 2020 at 14:34 Moin, Vorweg: get_adc_values gibt dir die Rohwerte des ADCs, die solltest du eigentlich nur benötigen, wenn du das Bricklet kalibrieren möchtest. 3 hours ago, cl- said: Selbst wenn ich einen Kanal einzeln abfrage mittels get_voltage() bekomme ich nur 500 Werte pro Sekunde. Wenn du get_voltages benutzt erreichst du nur 500 Nachrichten pro Sekunde, weil 500 Nachrichten zum Bricklet geschickt werden (die Anfragen) und dann 500 Nachrichten wieder vom Bricklet zurück (die Antworten) 1 hour ago, cl- said: Wie kommt man denn auf die 1000 Nachrichten pro Sekunde, wie in deinem Beispiel? Was ist der Unterschied zwischen Nachrichten pro Sekunde und Messwerte pro Sekunde? Die ~1000 Nachrichten pro Sekunde sind die Limitierung, wie viel Durchsatz ein Master Brick an USB erreichen kann: Der Master Brick ist per USB 2.0 angebunden, was mit 1000Hz auf neue Nachrichten pollt. Daraus leitet sich dann auch die Tick-Rate der Firmware des Master Bricks ab, die auch bei 1000Hz liegt. Das hat mit den 976 Messwerten pro Sekunde des Bricklets keinen direkten Zusammenhang: Die bis zu 976 Messungen pro Sekunde macht der Chip, der auf dem Bricklet verbaut ist, das Bricklet selbst kann dann mit bis zu 1000 Nachrichten pro Sekunde die Messwerte kommunizieren. Das heißt dann auch, dass du, wenn du die Sample-Rate auf 1 Sample pro Sekunde setzt, das Callback aber auf einer Millisekunde (und value_has_to_change=false) lässt, du theoretisch 1000 Nachrichten pro Sekunde bekommen solltest, die dann aber nur eine Messwertänderung pro Sekunde beinhalten, du bekommst also sehr viele gleiche Nachrichten. Ich habe hier das ganze mal getestet und festgestellt, dass die Firmware einen Bug hat: Wenn man nur einen Channel verwendet, ist die Callback-Geschwindigkeit (nicht die Messrate!) auf 500 Nachrichten pro Sekunde limitiert. Teste bitte nochmal mit und ohne Isolator Bricklet mit der Firmware 2.0.5, die gerade veröffentlicht wurde. Da zwischen dem Bricklet und dem Programm auf dem Rechner einige Buffer liegen, die asynchron gepollt werden, kann es da zu unintuitiven Effekten kommen: Bei meinen Tests schaffe ich ohne Isolator Bricklet nur ~ 900 Nachrichten, mit Isolator aber 1000. Es kann auch helfen, wenn du den Master Brick an einen USB-3 Hub hängst, es gibt manche, die auch USB-2-Geräte mit mehr als 1000 Hz pollen. Falls du einen Raspberry Pi mit HAT zur Hand hast, könnte das auch helfen. Ich habe dir mal mein Testprogramm angehangen, das noch ein paar Tricks verwendet, damit die Kommunikation möglichst effizient läuft: Wenn du damit testen willst, musst du noch die UIDs austauschen, gegebenenfalls den Port am Master Brick und, wenn du mit Isolator testest, die Zeilen 22 bis 24 mit reinnehmen. Gruß, Erik main.rs Zitieren
cl- Geschrieben April 14, 2020 at 08:55 Geschrieben April 14, 2020 at 08:55 Hi Erik, vielen Dank! Das hilft mir sehr! Jetzt habe ich den Zusammenhang endlich mal verstanden. Das ist für mich und vielleicht auch andere nicht trivial, weil der Zusammenhang von USB 2.0 und 1.000 Hz Pollrate kein technisches Allgemeinwissen ist. Heißt das dann im zweiten Schritt, dass man zu Ethernet greifen sollte, wenn man sichern stellen will, dass maximal viele Nachrichten vom Bricklet weggehen? Ich denke da vor allem an das Acceleromer Bricklet 2.0 mit seinen 25.600 Werten pro Sekunde. Hängt man davon mehrere an ein Master Brick, wird man ja auch nicht alle Daten wegbekommen. Ist es möglich, mit dem Ethernet Brick mehr Accelerometer Bricklets zu betreiben (mit maximaler Rate) als über USB? Ich werde gleich direkt das Beispielprogramm von dir testen! Grazie, Claudio 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.