Jump to content
Sign in to follow this  
hag

Skriptmodul-Zeitbasis

Recommended Posts

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

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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.

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.

Loading...
Sign in to follow this  

×
×
  • Create New...