Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich hab da mal ein paar grundlegende Fragen zu SubVI´s.
So wie ich das jetzt gesehen habe, werden Daten bei Aufruf an das SubVI übergeben, dieses dann abgearbeitet und anschließend die Daten ausgegeben? Erst danach wird das Hauptprogramm fortgesetzt?
Ich möchte nun eine Motorsteuerung als SubVI programmieren.
Darin soll der Motor mit Rampe anfahren, solange eine Freigabe vom Hauptprogramm erteilt ist.
Fällt diese Freigabe weg, so soll der Motor abgebremst werden.
Ich sehe nun nur die Möglichkeit, das SubVI mehrmals hintereinander aufzurufen um darin dann die Rampe zu berechnen?
Gibts da noch ne elegantere Version? Und wenn nein, wie übergebe ich Werte vom vorherigen Aufruf des SubVIs an den nächsten Aufruf des SubVIs? Ein Schieberegister ausserhalb ist mir eingefallen, aber ich würde es lieber innerhalb des SubVIs lösen...
Das SubVI sollte kontinuierlich Daten von einem Wegmesssystem bekommen und kontinuierlich den Motor dazu regeln.
' schrieb:So wie ich das jetzt gesehen habe, werden Daten bei Aufruf an das SubVI übergeben, dieses dann abgearbeitet und anschließend die Daten ausgegeben?
Das ist soweit richtig. Das ist das allgemeine Vorgehen mit einem SubVI.
Zitat:Erst danach wird das Hauptprogramm fortgesetzt?
Das ist nur bedingt richtig. Es wird der der Datenfluß gestoppt - respektive fortgesetzt, in den das SubVI eingebunden ist. Wenn du mehrere Datenflüße parallel hast, werden die parallelen unabhängig von diesem SubVI weitergeführt.
Zitat:Ich möchte nun eine Motorsteuerung als SubVI programmieren.
Darin soll der Motor mit Rampe anfahren, solange eine Freigabe vom Hauptprogramm erteilt ist.
Fällt diese Freigabe weg, so soll der Motor abgebremst werden.
Mach das SubVI als Modul, selbständig laufend (also ohne Einbindung in einen Datenfluß), steuerbar mittels Queue etc.
Zitat:Ich sehe nun nur die Möglichkeit, das SubVI mehrmals hintereinander aufzurufen um darin dann die Rampe zu berechnen?
Genau dieses ist ja schlecht. Deswegen also ein Modul, das selbständig läuft und durch eine Queue gestuertet wird.
Zitat:Gibts da noch ne elegantere Version? Und wenn nein, wie übergebe ich Werte vom vorherigen Aufruf des SubVIs an den nächsten Aufruf des SubVIs? Ein Schieberegister ausserhalb ist mir eingefallen, aber ich würde es lieber innerhalb des SubVIs lösen...
Das SubVI sollte kontinuierlich Daten von einem Wegmesssystem bekommen und kontinuierlich den Motor dazu regeln.
Das Modul besteht aus einer While-Schleife, die beliebig viele Schieberegister hat. In der While-Schleife ist eine case-Sequenz, die als Statemachine dienen kann. Neben der Case-Sequenz steht eine Queue-Abfrage, die Anforderungen von außen bearbeitet. Dann kann es noch eine Queue bzw. einen Melder geben, der Daten nach außen gibt. Wie das Modul genau aufgebaut ist ist dabei völlig egal. Hauptsache While-Schleife mit Schieberegistern, Case-Sequenz und Queue.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Kannst Du mir noch kurz auf die Sprünge helfen, wie ich es zu einem "Modul" mache?
Umbauen geht nicht. Neu machen ist wahrscheinlich angesagt. Weißst du was eine Queue ist und wie man sie verwendet etc? Hilfe lesen! Das selbe für Statemachine?
' schrieb:Umbauen geht nicht. Neu machen ist wahrscheinlich angesagt. Weißst du was eine Queue ist und wie man sie verwendet etc? Hilfe lesen! Das selbe für Statemachine?
vielen Dank für Deine Hilfe! Neumachen ist kein Problem. Ich stehe eh noch ziemlich am Anfang.
Bis gerade eben wusste ich nicht was ein "Queue" ist, aber ich lese mich bereits ein.
Statemachine? Das ist (wenn ich es richtig verstanden habe) wohl sowas wie mein Problem mit den zwei Schaltern, das ich mit einer Ereignisstruktur gelöst habe.
Herzlichen Dank für Deine Hilfe!
Grüße,
Tom
26.06.2008, 13:56 (Dieser Beitrag wurde zuletzt bearbeitet: 26.06.2008 14:01 von blacky.)
vielen Dank für Deine Hilfe! Neumachen ist kein Problem. Ich stehe eh noch ziemlich am Anfang.
Bis gerade eben wusste ich nicht was ein "Queue" ist, aber ich lese mich bereits ein.
Statemachine? Das ist (wenn ich es richtig verstanden habe) wohl sowas wie mein Problem mit den zwei Schaltern, das ich mit einer Ereignisstruktur gelöst habe.
Herzlichen Dank für Deine Hilfe!
Grüße,
Tom
Hallo erstmal.
Also verwechel bitte Eventstrukturen nicht mit State Machines.
Da gibts nur 2 Möglichkeiten. Hilfe lesen oder die beiden Strukturen mal als Vorlage laden und vergleichen.
Weiters wäre der Basic 1 Kurs zu entpfehlen, da wird zumindestens die Statemachine erklärt.
Edit: Hab noch einen Beitrag aus dem Forum gefunden:
' schrieb:Weiters wäre der Basic 1 Kurs zu entpfehlen, da wird zumindestens die Statemachine erklärt.
Hei,
vielen Dank für Deinen Hinweis!
Hab gerade den Basic I hinter mir, aber State Machines haben wir nicht drangenommen.
Werde mich gleich noch genauer einlesen... Dein Link hilft mir.
Grüße,
Tom
01.07.2008, 14:35 (Dieser Beitrag wurde zuletzt bearbeitet: 01.07.2008 14:52 von eg.)
Ich würde in dem Fall lieber einen "Treiber" empfehlen. Pro Aktion (Init, Start, Stop, Move, Close) ein SubVI machen und das entsprechende SubVI im Hauptprogramm verwenden.
Dabei hat aber dein Motor auch irgendwelche Statis, aktuelle Werte u.s.w. Diese würde ich in einen (Typedef) Cluster packen und in jedem TreiberVI als Eingang und Ausgang definieren und diesen Cluster im HauptVI vom SubVI zum SubVI verdrahten.
' schrieb:Dabei hat aber dein Motor auch irgendwelche Statis,
/KLUGSCHEISSMODUS_ON
Also wenn schon, dann "Stati"...aber auch das ist Quatsch! Das wäre so wie "Praktikas" als Mehrzahl von "Praktikum"...es ist halt einfach ein "s" zuviel...
Also wenn schon, dann "Stati"...aber auch das ist Quatsch! Das wäre so wie "Praktikas" als Mehrzahl von "Praktikum"...es ist halt einfach ein "s" zuviel...