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 

2 Schritte parallel abarbeiten



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!

04.09.2013, 14:37
Beitrag #1

sumsi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: Oct 2010

2014
2010
DE


Deutschland
2 Schritte parallel abarbeiten
Hallo,

ich habe momentan folgendes Problem, bei dem ich nicht weiß wie ich vorgehen soll.

Mit einer Verfahreinheit verfahre ich meinen Messkopf von A nach B, d.h. ich gebe den Befehl zum starten, das VI gibt nach erreichen von B eine Statusmeldung mit True aus (sozusagen eine negative Fehlermeldung). Ich möchte jedoch die Zeit nutzen, um parallel Daten aufzunehmen, d.h. beim Start vom Verfahren soll mein Messkopf in einer Dauerschleife Messwerte aufnehmen, bis Punkt B erreicht ist.

Ist es möglich, dies umzusetzten (z.B. durch eine Parallele struktur) wobei Fall 1 (meine Bewegung) wenn Status fertig meinen Fall 2 (Messung) beendet. Habe schon mal überlegt mit Rendevous vorzugehen (bringt meines erachtens nichts). Auch eine Sequenz hat nicht den gewünschten Erfolg (da ich so nur zum Messen komme, sobald Punkt B erreicht ist.


Hoffe jemand kann mir helfen bzw. kennt einen Ansatz für mein Problem

Viele Grüße
sumsi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.09.2013, 16:36
Beitrag #2

GerdW Online
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: 2 Schritte parallel abarbeiten
Hallo sumsi,

Zitat:Ist es möglich, dies umzusetzten
Ja.

Zitat: (z.B. durch eine Parallele struktur)
Auf alle Fälle!

Zitat:wobei Fall 1 (meine Bewegung) wenn Status fertig meinen Fall 2 (Messung) beendet
Kann man machen...

Zitat:Habe schon mal überlegt mit Rendevous vorzugehen (bringt meines erachtens nichts).
Wenn du meinst...

Zitat:Auch eine Sequenz hat nicht den gewünschten Erfolg (da ich so nur zum Messen komme, sobald Punkt B erreicht ist.
Hattest du nicht weiter oben selbst schon "parallele Strukturen" ins Spiel gebracht? Wo willst du die mit einer Sequenz haben?

Allgemeine Antwort auf deine allgemeine Frage:
Nimm parallele Schleifen. Tausche Daten zwischen den Schleifen aus, da gibt es vieles von lokalen/globalen Variablen, FGVs, Meldern/Queue, SharedVariables,...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.09.2013, 18:36
Beitrag #3

Trinitatis Offline
LVF-Guru
*****


Beiträge: 1.694
Registriert seit: May 2008

7.1 / 8.0 /2014-1, 18
2002
DE

18055
Deutschland
RE: 2 Schritte parallel abarbeiten
Hallo Sumsi,

du könntest z.B. in einer Schleife die Verfahrung starten und vorher eine Meldung an eine andere parallele Schleife schicken, dass die Verfahrung gestartet wird. Dann liest die 2. Schleife während des Verfahrens Messdaten ein und zwar so lange, bis sie wieder eine Nachricht von der Verfahrschleife bekommt, die den Status Verfahren beendet beinhaltet.
Zwischen Startmeldung senden und Verfahrung starten könntest du noch einen Offset setzen, damit die Messung garantiert läuft, wenn die Verfahrachse loslegt.

Gruß, Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.06.2015, 09:39
Beitrag #4

tobi45f Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 59
Registriert seit: Feb 2015

11.0
2015
EN


Deutschland
RE: 2 Schritte parallel abarbeiten
Hallo zusammen,
ich schließe mich hier mal an, um das eröffnen eines neuen Threads zu vermeiden.

Ich habe ein ähnliches Problem in Richtung Multitasking/ zwei Schleifen parallel laufen zu lassen.
Bisher sieht meine VI so aus: Es werden ständig die Temperaturen vom Thermoelement reingegeben. Sind die richtigen Bedingungen erfüllt, so wird eine VI aufgerufen, die das Widerstandsmessgerät aufruft. Das Widerstandsmessgerät braucht allerdings gute 10s zum Messen. In dieser Zeit wird ansonsten natürlich nichts weiter aufgenommen. Da ich parallel von den Temperaturwerten einen Graphen aufnehmen möchte, ist es recht doof, wenn zu den Zeiten, wo gemessen wird, Lücken entstehen.

Nun ist meine Frage, wie lasse ich das restliche Programm laufen, während ich die Messung aufrufe und auf deren Abarbeitung warte?
Ich hab hier und da vieles gelesen über Queues, Melder und Semaphore, allerdings wüsste ich bei keiner Funktion, wie ich das umsetzte.

Die Frage ist, ist dies, so wie ich es vorhabe, überhaupt umsetzbar? Mein Hauptprogramm hat eine Durchlaufzeit von unter einer Sekunde und die Messung liegt bei ca 10s.
Wenn ich mir diesen Post so durchlese
Erfolgreiche Multicore-Programmierung
dann bin ich mir nicht sicher, ob mein Vorhaben durchführbar ist. "Braucht also Schritt 2 eine Minute, die Schritte 1, 3 und 4 aber jeweils nur 10 Sekunden, dauert der gesamte Durchlauf eine Minute."

Könnte jemand da etwas zu sagen und ggf, ein Schemahaftes VI zeigen?
Ich habe meine VI jetzt nicht hochgeladen, da in ihr gute 10 SubVIs enthalten sind. Ich hoffe mein Anliegen ist auch so vorstellbar :-)
Gruß Tobias
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.06.2015, 12:04
Beitrag #5

Kiesch Offline
LVF-Stammgast
***


Beiträge: 396
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: 2 Schritte parallel abarbeiten
So wie du das beschreibst ist es wohl das sinnvollste (fast) alles so zu lassen wie es ist. Eine parallele Schleife ins BD in der die Widerstandsmessung bei jedem Durchlauf einmal durchgeführt wird. Dort wo du vorher die Widerstandsmessung gestartet hast, fügst du stattdessen das mittel deiner Wahl zur Kommunikation mit der anderen Schleife ein.
Als Beispiel: Du holst dir eine (z.B. boolsche) Queue und dort wo vorher die Widerstandsmessung gestartet wurde, schreibst du in die ein True rein. In der parallelen Schleife steht ein queue lesen (ohne Timeout). Entsprechend wird die Widerstandsmessung immer genau dann ausgeführt wenn du (im Prinzip irgendwas) an die Queue sendest. Dann musst du dir nur noch überlegen, wo die Widerstandsmesswerte landen sollen; sprich: ob du die zum Beispiel nur auf ein Anzeigelement schreibst; dann kannst du das auch in der anderen parallelen Queue machen; oder ob die in der Hauptschleife weiterverarbeitet werden sollen (auch dann wieder: Lokale Variablen; Queues etc.).

Gruß Kiesch

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.06.2015, 16:05
Beitrag #6

tobi45f Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 59
Registriert seit: Feb 2015

11.0
2015
EN


Deutschland
RE: 2 Schritte parallel abarbeiten
Hi,
danke für deinen Lösungsansatz.
Soweit läuft der Teil, dass die Temperaturen weiterhin laufen während die Widerstandsmessung läuft.
Perfekt.
Alles weitere wird sich in den nächsten Tagen zeigen :-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.06.2015, 13:52 (Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2015 16:04 von tobi45f.)
Beitrag #7

tobi45f Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 59
Registriert seit: Feb 2015

11.0
2015
EN


Deutschland
RE: 2 Schritte parallel abarbeiten
Hallo nochmal,

Soweit war der Tipp super. Die Temperaturen werden aktualisiert, während die Widerstandsmessung läuft. Die Daten der Widerstandsmessung bekomme ich auch in mein Array geschrieben mit einer weiteren Queue.
Nun habe ich nur ein Problem, ich nehme an, es hat in irgendeiner Weise mit dem Dataflow zu tun, kann es mir aber nicht erklären. Folgendes passiert:

Sind die Messbedingungen erfüllt, so geht er über die Queue in die obere Schleife und misst den Widerstand, registriert die Messung über den Messfortschritt und übergibt den Wert an das Array über die zweite Queue. Nun wiederholt sich das ganze jedoch noch einmal. Er misst bei jeder ersten Messung jeder Messstelle den Widerstand 2 Mal direkt hintereinander, sprich er misst 1, 1, 2, 2, 3, 3...
Theoretisch ist das nicht verkehrt, solange die Temperatur von der ersten zur zweiten Messung der selben Messstelle, näher am Sollwert liegt. Ist aber nicht der Fall.
Da die Temperatur ziemlich konstant ist, müsste er eigentlich 1, 2, 3, 4.. messen.

Weiterhin ist merkwürdig, dass der Boolsche Wert vom Messfortschritt auch bei der wiederholten Messung ein zweites Mal registiert wird, auch wenn vorher ja schon gemessen wurde und es eigentlich nicht zählen dürfte.

Beim schreiben ist mir ein weiterer möglicher Fehler eingefallen, woran es liegen könnte. Ich habe es schon versucht aber es blieb ergebnislos. Momentan ist das Schreiben des neuen Wertes hinter der Abfrage, ob und welche Messstelle gemessen werden soll. Ich habe also das Dequeue der zweiten Queue vor die For-Schleife gesetzt um schon in der Schleife mit dem aktuelleren Wert zu arbeiten.

Ich denke mein Anliegen ist recht komplex für Außenstehende also hoffe ich, dass ich es ansatzweise verständlich erklärt habe.
Falls jemandem gravierendes am Umgang mit den Queues auffällt, dann wäre ich demjenigen sehr dankbar für einen Rat Blush
Vielen Dank
Gruß Tobias


edit:
ok ich hab nach lagem Suchen den Fehler gefunden.
Nicht nur das Schreiben muss vor der For-Schleife passieren, sondern auch erst dann die Freigabe, dass er wieder messen darf. Scheinbar hat er in den paar Millisekunden von der Freigabe oben bis zum Schreiben unten einen Durchlauf ohne die neuen Werte gemacht.

Aber ein generelles Queue-Problem bleibt.
Wenn ich auf "Abbrechen" drücke, dann gibt mir das Enqueue nach der Widerstandsmessung einen Fehler aus. "Fehler 1" angeblich nicht zugelassene Zeichen wenn z.B. Pfäde in der Queue sind. Sind aber nicht.
Ich habe mir einen Indicator davor gemacht und es kommen auch beim Abbruch genau so plausible Werte.
Muss ich noch ein anderes Queueelement davor oder dahinter hängen?
Gruß Tobias


Angehängte Datei(en)
11.0 .vi  01_3_3_Widerstandsmessung_queue33.vi (Größe: 124,05 KB / Downloads: 193)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.06.2015, 16:50
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: 2 Schritte parallel abarbeiten
Die Race-Condition hast du selber schon entdeckt, da ich aber parallel eine Variante ohne Indikator zur Kommunikation zwischen den Loops erstellt habe, hier das verbesserte VI:

11.0 .vi  01_3_3_Widerstandsmessung_queue33.vi (Größe: 84,76 KB / Downloads: 178)

Nach den weiteren Unterschieden (und IMHO Verbesserungen) darfst du selber suchen.

Dann noch zu deinem Queue-Fehler beim "Abbrechen": Problem ist, dass du die Queue mglw. zu einem Zeitpunkt zerstörst, während sich die obere Loop in einer Messung befindet. Dann kommt da natürlich ein Fehler raus, da die Queue nicht mehr existiert.

Mgl. Lösung: Sorge per Datenfluss dafür, dass beide Queues erst nach Beendigung BEIDER Loops zerstört werden.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.06.2015, 06:40 (Dieser Beitrag wurde zuletzt bearbeitet: 10.06.2015 12:05 von tobi45f.)
Beitrag #9

tobi45f Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 59
Registriert seit: Feb 2015

11.0
2015
EN


Deutschland
RE: 2 Schritte parallel abarbeiten
Hallo Jens,

vielen Dank für die verbesserte VI Dais

Gruß Tobias

Nachtrag:
an sich läuft die VI problemlos. Ein Problem hab ich jetzt nur mit dem Feedback Node. Beim ersten VI Aufruf geht er und die Messung läuft, da er beim ersten Aufruf mit True initialisiert wurde. Breche ich nun die Messung ab, wähle z.B. eine andere Messreihe aus, weil ich mich vertan habe und starte wieder den Messvorgang, so steht nun oftmals leider ein False im Feedback Node und er kann nicht mehr messen und somit auch kein True mehr bekommen.
Ich bin hier zum ersten mal mit dem Feedback Node in Berührung gekommen. Soweit verstehe ich seine Funktion, aber wie kann ich das "ändern", dass er nicht beim Neustart des Programms, sondern nur beim Aufruf der SubVI initialisiert wird?

Danke für die Hilfe
Grüße Tobias
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
Question Tutorium (Erste Schritte) - Ordner fehlt bert6 6 5.131 03.11.2014 13:08
Letzter Beitrag: bert6
  Enum in for-Schleife abarbeiten Hasenfuss 13 10.478 24.07.2014 18:09
Letzter Beitrag: PBLB
  Events im SubVI abarbeiten möglich? phylin 4 5.430 20.01.2012 19:24
Letzter Beitrag: phylin
  paralleles Abarbeiten des gleichen VI Tobox 6 4.582 08.07.2009 16:14
Letzter Beitrag: TSC
  paralleles Abarbeiten zweier Schleifen mit Übergabe von Daten Benns 6 6.013 24.09.2008 12:54
Letzter Beitrag: Lucki
  Parallele Cases gleichzeitig abarbeiten prilleken 4 5.429 09.06.2006 06:50
Letzter Beitrag: A.Berndsen

Gehe zu: