Hallo Lucky.,
Zitat:Wie kann ich durch das beenden des VI, alle Ausgänge der Module in einen sicheren Zustand übergehen lassen. Also alle Ausgänge bzw. die die ich als relevant betrachte auf 0V schalten?
Bisher sieht meine Lösung hierzu so aus.
Und das sieht verkehrt aus!
1. Du hast da eine RaceCondition! (Ist in der LabVIEW-Hilfe erklärt!)
2. Wenn du Werte in Ausgänge schreiben willst, dann solltest du das auch machen! Irgendwelche Controls "auf Default setzen" ist jedenfalls etwas anderes…
Antwort:
THINK DATAFLOW!
Eine Lösung lautet: Wenn dein VI vor dem Beenden bestimmte Werte in die Ausgänge schreiben soll, dann musst du das nach der Schleife machen.
Eine andere Lösung lautet: Erstelle eine saubere Statemachine-Architektur. Der letzte State vor dem finalen "EXIT" lautet dann "Ausgänge auf Null setzen"…
Zitat:wieso kann ich die Stopp Bedingungen bei mehreren Schleifen nicht per Verbindung zwischen zwei Schleifen tunneln? Das funktioniert irgendwie nicht, stattdessen musste ich eine lokale Variable hierfür anlegen, damit ich mit den Button "Programm beende" alle relevanten Schleifen beenden kann und das VI stopp.
Antwort:
THINK DATAFLOW!
Das ist quasi das "42!" in der LabVIEW-Programmierung! Das musst du immer LAUT aufsagen, wenn du in LabVIEW programmierst…
In der LabVIEW-Hilfe gibt es dazu einen eigenen Eintrag! (Du hast alle Links in meiner Signatur beachtet!?)
Zitat:wie man ebenfalls eleganter Analoge Werte nur alle 250ms auslesen kann, so wie ich es jetzt in der einer Schleifen getan habe. Hier hatte ich einige Schwierigkeiten, wenn die Analogauslese Schleife in der Hauptschleife drinne ist. Dann funktionierte garnichts mehr, da ja wahrscheinlich die Unterschleife nur alle 250ms wieder in die Hauptschleife springt, richtig?
Zum letzten Satz mit dem "wahrscheinlich": die Antwort lautet
THINK DATAFLOW!
Es ist vollkommen ok, zwei Schleifen parallel laufen zu lassen. Ich würde das Blockdiagramm nur besser aufräumen, Stichwort StyleGuide (auch in der LabVIEW-Hilfe)!
Wieso verwendest du DecimateArray+IndexArray in dieser Schleife? Entweder du bekommst exakt 4 Werte vom FPGA, dann reicht ein einziges IndexArray aus. Oder du bekommst pro Kanal mehrere Samples, dann solltest du auch alle Samples pro Kanal verwenden und nicht nur das erste!
Und warum die CoercionDots an den Anzeigen?
Und mal ehrlich: um anzuzeigen, dass dein VI läuft, musst du den VI-Status
im 1ms-Takt per PropertyNode abfragen? Würde es nicht ausreichen, eine LED-Anzeige vor der Schleife auf TRUE und nach der Schleife auf FALSE zu setzen???
Da sind wir schon wieder bei THINK DATAFLOW!