Jump to content
Melde dich an, um diesem Inhalt zu folgen  
hag

Skriptmodul-Zeitbasis

Empfohlene Beiträge

Hallo zusammen,

ich arbeite mich zurzeit in der Firma in DASYLab 2016 ein und experimentiere mit dem Skriptmodul ein wenig herum. Dazu habe ich mir das Paket Skriptmodul-Beispiele installiert.

Was ich sehr interessant finde ist das lesen globaler Variablen in abgeänderter Form (example_scriptmodule__read_data_from_global_variable.py).

Wenn ich jedoch in diesem Beispiel die Zeitbasis DASYLab die Abtastrate auf 10Hz und Blockgröße 1 stelle und diese Verwenden, bekommen ich folgende Fehlermeldungen:

Meldung1.jpg.222b6b2f1e9c69c942bac0893b806432.jpg

Meldung2.jpg.d3deca98b1ac9381dcab35786303a8d3.jpg

Vielleicht hat ja  jemand eine Idee an was genau das liegen könnte.

Des Weiteren würde ich gern statt der Zeitbasis als Einstellung eine Abtastrate in Sekunden im Modul verwenden. Das Modul hat nur Ausgänge!

 

Ein Dankeschön im Voraus und schöne Ostergrüße

Hansi

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hallo!

Hier fehlt leider im Skript in der Funktion SetupFifo die explizite Rückgabe von True.

Ohne explizites return True bzw. return False wird automatisch None zurückgegeben.
Wenn das DASYLab-Subsystem den Rückgabewert None erkennt, dann wird die SetupFifo-Funktion des Skripts ignoriert und die Optionen des Dialogs Kanal-Eigenschaften werden stattdessen angewendet -- aber ohne die Information über Abtastrate und Blockgröße auf die Ausgänge anzuwenden:
Da man aber im Beispiel eine Datenquelle als Modul vorliegen hat, muss man über die SetupFifo-Funktion nachfolgenden Modulen mitteilen, mit welchen Eigenschaften die Daten während der laufenden Messung ankommen werden (u.a. Abtastrate und Blockgröße).

Da die SetupFifo durch das fehlende return True aber gar keine Auswirkung hat, bleiben die Eigenschaften des ausgegebenen Datenstroms nach dem Laden des fehlerhaften(!) Skripts in das Modul aber unverändert (hier: info.timebaseID = 2, also Treiber-Zeitbasis).
Ändert man nun im Dialog die Zeitbasis-Einstellung, dann werden in der ProcessData-Funktion zwar die von der nun ausgewählten Zeitbasis vorgegebene Abtastrate und Blockgröße an den leeren angeforderten Block (Funktion GetOutputBlock) geschrieben... aber der leere Block ist weiterhin mit den Eigenschaften der Treiber-Zeitbasis vorkonfiguriert, weil das return True fehlt in der SetupFifo-Funktion!

Konkret für das Beispiel heisst das: In der info-Klasse ist die Zeitbasis-ID 2 vorgegeben, die Eigenschaften der Ausgänge werden also von der Treiber-Zeitbasis abgeleitet. Die Treiber-Zeitbasis ist im Schaltbild auf 10 Hz, Blockgröße 4 eingestellt. Startet man die Messung funktioniert alles wie erwartet.
Ändert man nun die Zeitbasis auf DASYLab (10000 Hz, BG 1000 im Beispiel), dann werden in der ProcessData-Funktion die Eigenschaften zwar von der DASYLab-Zeitbasis abgefragt, aber durch Funktion GetOutputBlock stellt DASYLab nachwievor einen leeren Block bereit, der eine maximale(!) Blockgröße von 4 hat -- weil die SetupFifo-Funktion des Skripts keine Auswirkung hat und Eigenschaften der Ausgänge nicht an die Zeitbasis-Änderung im Dialog angepasst werden.

Die Eigenschaft BlockSize, die an jeden Datenblock noch einmal explizit drangeschrieben wird, ist die reale Blockgröße, die immer kleiner oder gleich der maximalen Blockgröße ist, niemals größer.
Da die "alte" maximale Blockgröße aber in diesem Beispiel quasi fest 4 ist (auch wenn's langsam langweilig wird ;) : wegen des fehlenden return True in der SetupFifo-Funktion!), hat der angeforderte Datenblock Platz für höchstens vier Datenwerte. Durch die Umstellung im Dialog auf die DASYLab-Zeitbasis aber sollen 1000 Werte in den Block geschrieben werden. Hier kommt es dann zum Fehler FIFO data mismatch, weil die durch die in der SetupFifo vereinbarte maximale Blockgröße durch das Falschbelegen in der ProcessData-Funktion nicht eingehalten wird -- 1000 Werte passen nunmal nicht in einen Block mit nur 4 Plätzen. :)

Lange Rede, kurzer Sinn: die SetupFifo-Funktion explizit mit return True abschliessen!

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hallo,

danke für diese ausführliche Erklärung :rolleyes: kleine Ursache große Wirkung. Nach dem einfügen des return True klappt es auch mit Sekunden und Minuten als Abtastrate.

Gruß Hansi

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesem Inhalt zu folgen  

×