LabVIEWForum.de
Modelleisenbahn-Timing-Probleme - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Modelleisenbahn-Timing-Probleme (/Thread-Modelleisenbahn-Timing-Probleme)



Modelleisenbahn-Timing-Probleme - "Chris" - 15.03.2014 15:39

Hallo,

versuche im Moment eine Modelleisenbahn via LV umzusetzen. Da ich noch recht ungeübt im Umgang mit LV bin, habe
gleich mal eine Frage zur folgenden Problematik....

SOLL:
Bis jetzt fahren 2 Züge in beide Richtungen. Ich würde gerne zusätzlich die Geschwindigkeit der Züge "seperat" regeln.

IST:
Wenn nur einer von beiden fährt, kann man die Geschwindigkeit über einen Drehknopf für den entsprechenden
Zug anpassen. Sobald man den zweiten dazuschaltet, beeinflußen sie sich gegenseitig. Huh


VERMUTUNG:
Ich vermute das es daran liegt, das der Cluster erst beschrieben wird, wenn beide Signale am Baustein "Replace Array Subset" anliegen.

Auch nach vielem Rumprobieren komme ich nicht so recht weiter.
Kann jmd helfen?

MfG und ein schönes Wochenende

Chris


RE: Modelleisenbahn-Timing-Probleme - GerdW - 15.03.2014 18:11

Hallo Chris,

dein VI kommt mir so bekannt vor, hast du noch einen Kollegen oder gar einen anderen Nick?

Zum VI:
Zitat:SOLL:
Bis jetzt fahren 2 Züge in beide Richtungen. Ich würde gerne zusätzlich die Geschwindigkeit der Züge "seperat" regeln.

IST:
Wenn nur einer von beiden fährt, kann man die Geschwindigkeit über einen Drehknopf für den entsprechenden
Zug anpassen. Sobald man den zweiten dazuschaltet, beeinflußen sie sich gegenseitig.
Warum ist das wohl so? Vielleicht, weil beide Züge in der selben While-Loop verarbeitet werden?

Deine inneren 2 While-Loops für die zwei Züge laufen jeweils nur einmal durch: wenn man das Schieberegister durch einen Tunnel ersetzt, kann man die jeweilige While-Loop löschen. Wenn du das machst, siehst du auch, warum sich die Züge gegenseitig beeinflussen: du hast zwei verschiedene Wartezeiten in einer While-Loop. Nur die längere zählt…

- Ansonsten ist es eine äußerst dumme Idee, im Blockdiagramm die Namen von Terminals auszublenden! Sowas macht man einfach nicht! Oder würdest du in C sowas hier programmieren: "" := "" + "" ? Hmm
- (UI-)Schleifen sollten immer eine Wartezeit enthalten. Deine Start-Schleife hat keine…


RE: Modelleisenbahn-Timing-Probleme - "Chris" - 16.03.2014 14:27

Hey GerdW,

Zitat:dein VI kommt mir so bekannt vor, hast du noch einen Kollegen oder gar einen anderen Nick?

Ja bin nicht allein....ist ein Projekt für die Uni.

Zitat:Warum ist das wohl so? Vielleicht, weil beide Züge in der selben While-Loop verarbeitet werden?

Deine inneren 2 While-Loops für die zwei Züge laufen jeweils nur einmal durch: wenn man das Schieberegister durch einen Tunnel ersetzt, kann man die jeweilige While-Loop löschen. Wenn du das machst, siehst du auch, warum sich die Züge gegenseitig beeinflussen: du hast zwei verschiedene Wartezeiten in einer While-Loop. Nur die längere zählt…

- Ansonsten ist es eine äußerst dumme Idee, im Blockdiagramm die Namen von Terminals auszublenden! Sowas macht man einfach nicht! Oder würdest du in C sowas hier programmieren: "" := "" + "" ? Hmm
- (UI-)Schleifen sollten immer eine Wartezeit enthalten. Deine Start-Schleife hat keine…

Hab es ein wenig verändert:

Alle Namen sind jetzt dem Blockdiagramm zu entnehmen.
Timer in Startschleife hinzugefügt.

Habe nur die äußere While Schleife entfernt. Damit habe ich doch 2 seperate Schleifen.
Das Register benötige ich um den entsprechenden Wert weiterzugeben und weiterhin nutzen zu können.

Jetzt habe ich das Problem das immer nur der Wert des letzten Schleifendurchgang´s durch den Tunnel weitergegeben wird. Gibt es eine Alternative zu einem Tunnel? Etwas was den gewünschten Wert nach jedem Schleifendurchlauf weitergibt? Oder kann ich eine andere Schleife nutzen, welche diese Anforderungen erfüllt?

Achso, was sind UI-Schleifen?

Gruß Chris


RE: Modelleisenbahn-Timing-Probleme - GerdW - 16.03.2014 19:52

Hallo Chris,

Zitat:Timer in Startschleife hinzugefügt.
Schon mal gut.
Noch besser wäre es, überall den richtigen Datentyp zu verwenden, um unnötige CoercionDots zu vermeiden!

Zitat:Habe nur die äußere While Schleife entfernt.
Mit der Folge, dass dein VI sofort (nach "Starten") wieder stoppt…
Durch die geänderte Abbruchbedingung stoppen diese Schleifen nie mehr…

Zitat:Damit habe ich doch 2 seperate Schleifen.
Ja. Die aber Dauerläufer sind…
THINK DATAFLOW!

Zitat:Das Register benötige ich um den entsprechenden Wert weiterzugeben und weiterhin nutzen zu können.
Wie ich schon mal sagte: wenn du das Schieberegister durch eine FeedbackNode ersetzt, brauchst du die Schleife nicht mehr. Dann wird noch offensichtlicher, dass diese Schleifen immer nur genau einmal durchlaufen…

Zitat:Gibt es eine Alternative zu einem Tunnel? Etwas was den gewünschten Wert nach jedem Schleifendurchlauf weitergibt?
Wenn die Schleifen nicht endlos laufen würden, würde ein normaler Tunnel auch funktionieren!

Zitat:Oder kann ich eine andere Schleife nutzen, welche diese Anforderungen erfüllt?
Wie schon mal gesagt: die inneren Loops sind unnütz, die äußere brauchst du weiterhin…

Zitat:was sind UI-Schleifen?
Das sind Schleifen, in denen man sich um das UI-Handling kümmert…


RE: Modelleisenbahn-Timing-Probleme - "Chris" - 18.03.2014 15:38

Hey Gerdw,

erstmal Vielen Dank für deine Mühen!

Zitat:
Zitat:Timer in Startschleife hinzugefügt.
Schon mal gut.
Noch besser wäre es, überall den richtigen Datentyp zu verwenden, um unnötige CoercionDots zu vermeiden!

Geändert.

Zitat:
Zitat:Habe nur die äußere While Schleife entfernt.
Mit der Folge, dass dein VI sofort (nach "Starten") wieder stoppt…
Durch die geänderte Abbruchbedingung stoppen diese Schleifen nie mehr…

Zitat:Damit habe ich doch 2 seperate Schleifen.
Ja. Die aber Dauerläufer sind…
THINK DATAFLOW!

Hast du vollkommen recht. Habe ich geändert.

Zitat:
Zitat:Das Register benötige ich um den entsprechenden Wert weiterzugeben und weiterhin nutzen zu können.
Wie ich schon mal sagte: wenn du das Schieberegister durch eine FeedbackNode ersetzt, brauchst du die Schleife nicht mehr. Dann wird noch offensichtlicher, dass diese
Schleifen immer nur genau einmal durchlaufen…

Super Tip. Danke. Feedback Node ist drin. Schleifen laufen durch die geänderte Abbruchbedingung solange bis "STOP" TRUE wird.


Zitat:
Zitat:Oder kann ich eine andere Schleife nutzen, welche diese Anforderungen erfüllt?
Wie schon mal gesagt: die inneren Loops sind unnütz, die äußere brauchst du weiterhin…

Nun bin ich etwas verwirrt. Du sagtest doch, wenn ich seperate Zeiten für die Züge einstellen möchte, darf ich sie nicht in der selben Schleife laufen lassen. Also benötige
ich doch pro Zug eine Schleife. (Wenn ich "NUR" die äußere behalte, befinden sich die Züge in der selben Schleife (damit auch beide Wait-Bausteine) und es funktioniert nicht!)


Zitat:
Zitat:Gibt es eine Alternative zu einem Tunnel? Etwas was den gewünschten Wert nach jedem Schleifendurchlauf weitergibt?
Wenn die Schleifen nicht endlos laufen würden, würde ein normaler Tunnel auch funktionieren!

Nur nochmal für mein Verständnis. Der Tunnel einer While Schleife gibt immer nur den Wert des letzten Schleifendurchlaufs weiter. Also nur einen einzigen....richtig?
Es gibt also keine Möglichkeit den Wert nach "jedem" While Schleifen Durchlauf weiterzugeben?

Gruß Chris


RE: Modelleisenbahn-Timing-Probleme - GerdW - 18.03.2014 15:46

Hallo Chris,

Zitat:Nun bin ich etwas verwirrt. Du sagtest doch, wenn ich seperate Zeiten für die Züge einstellen möchte, darf ich sie nicht in der selben Schleife laufen lassen. Also benötige ich doch pro Zug eine Schleife. (Wenn ich "NUR" die äußere behalte, befinden sich die Züge in der selben Schleife (damit auch beide Wait-Bausteine) und es funktioniert nicht!)
Es funktionierte nicht so, wie du es programmiert hast…

Zitat:Der Tunnel einer While Schleife gibt immer nur den Wert des letzten Schleifendurchlaufs weiter. Also nur einen einzigen....richtig?
Nein, nicht "immer". Man kann den Tunnel per Rechtsklick konfigurieren und z.B. Autoindexing aktivieren…
Tipp: LabVIEW-Hilfe lesen, Einsteigerkurs absolvieren!

Zitat:Es gibt also keine Möglichkeit den Wert nach "jedem" While Schleifen Durchlauf weiterzugeben?
Wenn du "Durchlauf" schreibst, meinst du sicherlich "Iteration"…
1. THINK DATAFLOW: Werte werden erst nach Abarbeitung einer Struktur (hier: While-Loop) weitergegeben. Das beantwortet schon mal deine Frage…
2. Du kannst alle Werte sammeln (Stichwort Autoindexing) oder andere Methoden (wie Queues, Notifier, lokale Variablen, …) nutzen.

In deinem Bild hast du mal wieder grob den DATAFLOW missachtet! Wann wird die untere der zwei Schleifen gestartet? Wie oft wird sie durchlaufen iterieren?
Dank DATAFLOW wird deine Anzeige erst nach Beendigung beider Schleifen neu gezeichnet…

THINK DATAFLOW wird in der LabVIEW-Hilfe erläutert! Bitte mal lesen: Grundlagen->Erstellen eines Blockdiagramms->Blockdiagrammdatenfluss…
Ansonsten die Links in meiner Signatur beachten!