INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Sub VIs synchron?



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!

08.03.2008, 20:14
Beitrag #1

Björn11 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2008

7.1 ; 8.2 ; 8.5
2007
de

28213
Deutschland
Sub VIs synchron?
Hallo,

ich habe folgendes Problem und hoffe jemand kann mir helfen:

Ich habe eine Anlage mit einem DC-Motor (AO Board#1), zwei Winkelmessern und einem DMS (AI Board #2). Die Boards sind leider nicht von NI, daher sind keine Express VIs verfügbar. Ist aber soweit auch kein Problem gewesen, da es von der Firma (Measurement Computing) VIs gibt, die die Boards steuern können.
Ich soll nun den Motor um bestimmte Winkel drehen (oberer Winkelmesser entscheidend zum Auslesen) und alle Daten in einem Global VI speichern. Ich habe daher mehrere Sub VIs gemacht, die für die Steuerung, Datenlesung, Speicherung, etc. zuständig sind. Wenn ich allerdings probiere die Lesung synchron zur Steuerung zu machen, stoße ich immer auf Probleme. Zuerst bewegt sich gar nichts, dann dreht sich der Motor bis zum Anschlag. Geht es nicht, das man mehrere Sub Vis gleichzeitig laufen lässt und die Daten sobald sie erfasst worden sind zu den anderen VIs weitergegeben werden? Oder läuft erst das VI solange durch, bis keine Daten mehr erfasst werden und gibt den kompletten Block weiter?

Danke für eure Antworten, ich hoffe, ich stell mich nicht zu blöd an und es ist klar was ich meine.

Björn
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2008, 20:22
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Sub VIs synchron?
' schrieb:Geht es nicht, das man mehrere Sub Vis gleichzeitig laufen lässt
Doch das geht schon. Man muss es aber entsprechend richtig programmieren. Die SubVIs müssen hierzu prinzipiell parallel laufen, d.h. also ohne "Datenfluß-Verbindung". (Möglicherweise sind weitere Dinge zu beachten.)

Zitat:und die Daten sobald sie erfasst worden sind zu den anderen VIs weitergegeben werden?
Auch das ist selbstverständlich möglich - z.B. mit Queues, Melder, Benutzerereignissen etc.

Kannst du mal einen Sourcecode posten (VI oder Bild), aus dem das hervor geht, von dem du glaubst, dass es nicht funktioniert?

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2008, 20:29
Beitrag #3

altissimus Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Mar 2008

8.2
2007
DE-DEUTSCH

3300
Oesterreich
Sub VIs synchron?
Ich hoffe ich habe das richtig verstanden:
Du hast mehrer sub vis die von einem globalen aus synchron laufen sollen?
Hast du es schon mal mit einer globalen variablen probiert?
Oder mit einer referenz zu synchronisieren?
Da es ja ein projekt ist sollte eigentlich eine referenzierte variable funktionieren.
Bitte entschuldige die hingeworfenen Ausdrücke, ich schreibe aus der erinnerung des LVB2 Kurses.
mfg
hannes


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2008, 20:48
Beitrag #4

Björn11 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2008

7.1 ; 8.2 ; 8.5
2007
de

28213
Deutschland
Sub VIs synchron?
' schrieb:Ich hoffe ich habe das richtig verstanden:
Du hast mehrer sub vis die von einem globalen aus synchron laufen sollen?
Hast du es schon mal mit einer globalen variablen probiert?
Oder mit einer referenz zu synchronisieren?
Da es ja ein projekt ist sollte eigentlich eine referenzierte variable funktionieren.
Bitte entschuldige die hingeworfenen Ausdrücke, ich schreibe aus der erinnerung des LVB2 Kurses.
mfg
hannes


@altissimus: Hallo Hannes,

nein, ein Projekt habe ich bisher noch nicht erstellt.Wo ist der Vorteil? Ich habe bisher ein Hauptprogramm (Motorcontrol.vi) und drei Sub Vis. Arbitrary.vi zum Steuern, Scan.vi zum Einlesen und Trigger.vi zum Starten des Scan.vi. Ich lade die mal hoch, dann ist es vielleicht offensichtlicher. Sind bisher in LV 7.1, habe aber auch 8.2 und 8.5.

Danke für die schnelle Antwort,

Björn

@IchSelbst:
ZITAT: Die SubVIs müssen hierzu prinzipiell parallel laufen, d.h. also ohne "Datenfluß-Verbindung". (Möglicherweise sind weitere Dinge zu beachten.)

Daran liegt es, nur wie kann ich das ändern ohne alles in ein VI zu stopfen?


Angehängte Datei(en)
Sonstige .vi  Arbitrary.vi (Größe: 234,93 KB / Downloads: 190)

Sonstige .vi  Motorcontrol.vi (Größe: 80,19 KB / Downloads: 178)

Sonstige .vi  Scan.vi (Größe: 79,77 KB / Downloads: 178)

Sonstige .vi  Trigger.vi (Größe: 66,05 KB / Downloads: 178)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2008, 21:32
Beitrag #5

altissimus Offline
LVF-Grünschnabel
*


Beiträge: 18
Registriert seit: Mar 2008

8.2
2007
DE-DEUTSCH

3300
Oesterreich
Sub VIs synchron?
Ich habe synchroised time strucre starts gefunden unter strukturen /timed strucktures
das sollte das problem lösen
schau dir das beispiel an da laufen die dinge in loops genau paralell.
hannes
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2008, 21:39
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Sub VIs synchron?
' schrieb:Wenn ich allerdings probiere die Lesung synchron zur Steuerung zu machen, stoße ich immer auf Probleme. Zuerst bewegt sich gar nichts, dann dreht sich der Motor bis zum Anschlag.
So wie du das beschreibst, laufen hier zwei abhängige Systeme - Steuern aufgrund von einzulesenden Daten - in einer "Datenfluß-Verbindung" ab.

Sehe ich das richtig, dass die Steuerung von der Lesung abhängig ist?

Egal wie es ist, ich würde folgendes machen: Ein SubVI, das die komplette Steuerung übernimmt. Dieses SubVI enthält dann eine Statemachine. Gesteuert wird dieses SubVI von außen mittels einer Queue, über die eben entsprechende Befehle bzw. Daten zum Steuerungsablauf hereinkommen. Dieses SubVI enthält alles, was zu Steuern notwendig ist. Hinweis: Das Einlesen von Daten ist nicht zwangsläufig zum Steuern notwendig. Notwendig sind lediglich die Daten. Wo die herkommen, steht auf einem anderen Blatt. Weiterer Hinweis: Dieses SubVI hat praktisch kein Frontpanel respektive wird das nie dargestellt. Dieses SubVI läuft ständig im Hintergrund, auch wenn gerade nicht gesteuert werden soll.
Ein zweites SubVI, das prinzipiell genauso aufgebaut ist wie das erste, macht das Datenlesen. Die gelesenen Daten werden per Melder zur Verfügung gestellt. Diesen Melder kann z.B. das Steuer-SubVI lesen und damit eben den Motor steuern.

Mit deinen VIs konnte ich leider nicht viel anfangen. Wohl weilich deinen Anwendungsfall noch nicht ganz durchschaut habe.

Von globalen Variablen zum Datenaustausch zwischen VIs rate ich ab. Und zum Synchronisieren gibt es entsprechende Elemente.

Ich an deiner Stelle würde auf LV 8.5 umsteigen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
08.03.2008, 22:28
Beitrag #7

Björn11 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2008

7.1 ; 8.2 ; 8.5
2007
de

28213
Deutschland
Sub VIs synchron?
' schrieb:So wie du das beschreibst, laufen hier zwei abhängige Systeme - Steuern aufgrund von einzulesenden Daten - in einer "Datenfluß-Verbindung" ab.

Sehe ich das richtig, dass die Steuerung von der Lesung abhängig ist?

Ja, genau so!

' schrieb:Egal wie es ist, ich würde folgendes machen: Ein SubVI, das die komplette Steuerung übernimmt. Dieses SubVI enthält dann eine Statemachine. Gesteuert wird dieses SubVI von außen mittels einer Queue, über die eben entsprechende Befehle bzw. Daten zum Steuerungsablauf hereinkommen. Dieses SubVI enthält alles, was zu Steuern notwendig ist. Hinweis: Das Einlesen von Daten ist nicht zwangsläufig zum Steuern notwendig. Notwendig sind lediglich die Daten. Wo die herkommen, steht auf einem anderen Blatt. Weiterer Hinweis: Dieses SubVI hat praktisch kein Frontpanel respektive wird das nie dargestellt. Dieses SubVI läuft ständig im Hintergrund, auch wenn gerade nicht gesteuert werden soll.

Das wäre Arbitrary.vi. Das Frontpanel hatte ich nur nicht ausgeschaltet. Das Frontpanel von Motorcontrol.vi wird nur genutzt, welches durch ein Menü aufgerufen wird.

' schrieb:Ein zweites SubVI, das prinzipiell genauso aufgebaut ist wie das erste, macht das Datenlesen. Die gelesenen Daten werden per Melder zur Verfügung gestellt. Diesen Melder kann z.B. das Steuer-SubVI lesen und damit eben den Motor steuern.

Das wäre in meinem Fall Scan.vi.

Ich werde mal probieren das Ganze in LV8 zu übernehmen und eine timed loop zu benutzen.

Danke für die Hilfe soweit,

Björn
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.03.2008, 11:52
Beitrag #8

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Sub VIs synchron?
' schrieb:Ja, genau so!
Die beiden VIs sind in Motorcontrol.vi sequenziert. Das bringt aber ein prinzipielles Problem mit sich: Solange die liest, kannst du nicht steuern. Da beide VIs eine While-Schleife enthalten, muss das eine immer solange aussetzen, bis das andere fertig ist. (Diese Zeit ist theoretisch - weil eben eine While-Schleife - unendlich.) Dieser Konflikt geht auch mit Synchronisation nicht lösen. Du müsstest Lesen und Steuern in eine While-Schleife machen.

Ich hab noch folgende Punkte:

Globale Variablen haben diverse Nachteile (Speichermanagement, Synchronisationsprobleme). Wenn schon, dann lieber eine "Funktionale Variable". Das ist ein SubVI, das hauptsächlich eine While-Schleife mit Schieberegister enthält, in dem die "Globalen Daten" liegen.

Man soll jede Operation sequenzieren: Auch das Resetten der globalen Variablen mit der Sequenzstruktur in MotorControl.VI.

Auch wenn es gemäß Styleguide heißt, kein BD größer als der Bildschirm, so geht die Lesbarkeit doch vor. Ich beziehe die Größe immer auf "zusammenhängenede Strukturen". Eine While-Schleife (oder For-Schleife oder Case-Seqeunz) alleine darf nicht größer sein als der Bildschirm. Hab ich aber mehrere zusammenhängenede Strukturen hintereinander, so darf jede für sich eine Bildschirmseite füllen. Was mir bei deinen VIs gar nicht gefällt, sind nämlich die rückwärtslaufenden Verbindungen in Arbitrary.vi. Ich würde die lieber gerade machen, auch wenn zwei Bildschirmseiten benötigt werden. Der Einwand nun, dass man beide Teile in ein SubVI auslagern könnte und dann halt drei hätte die Styliguide-konform sind, ist eine Milchmädchenrechnung: Die Lesbarkeit ist mit drei SubVIs schlechter als mit einem über zwei Bildschirmseiten. Es ist schneller und einfacher mit der Maus geschoben, also mit Alt-Tab aus mehreren Fenstern auf Windowsbasis das richtige ausgewählt.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Synchron analog in und Counter Drehzahl Spannung Strom Messung Fehler-201314 StudiFH 1 3.750 02.01.2019 08:55
Letzter Beitrag: GerdW
  Zwei NI9213 Module synchron messen lassen? ThoMey 11 6.494 17.03.2015 14:36
Letzter Beitrag: GerdW
  Erfassung analoger Signale, Synchron, Rate >=100KhZ NILVuser 1 3.965 27.08.2011 00:25
Letzter Beitrag: Mingo
  synchron analog und digital Erfassen wiktor 2 5.253 07.07.2011 11:33
Letzter Beitrag: wiktor
  Erzeugung eines digitalen Trigger signals um 2 Analoge Signal per Trigger synchron einzulesen Meddoc 3 8.146 15.09.2009 06:04
Letzter Beitrag: rasta
  Synchron ein-ausgeben mit variabler Frequenz andi neu 3 4.425 23.07.2009 09:54
Letzter Beitrag: andi neu

Gehe zu: