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 

3 abhaengige Loops Master Slave/Master Slave



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!

26.12.2007, 17:49
Beitrag #1

Ugur Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Oct 2007

7.1
2007
de

93051
Deutschland
3 abhaengige Loops Master Slave/Master Slave
Hallo Leute,
erstmal nachtraeglich Frohe Weihnachten u guten Rutsch Euch allen!!!

Ich habe folgende Frage an Euch, (LV 8.2)
ich moechte drei While Schleifen parallel, voneinander abhaengig laufen lassen.

1. Loop bekommt Daten vom Bus (kann keine delays einbauen, da ich sonst frames verpasse), loop period ist ca. 700-800ms

2. Loop soll die Daten von 1. Loop erhalten und zusaetzlich kriegt sie noch Daten aus einer GPIB und USB Schnittstelle. Manche der Daten werden im einem Chart dargestellt. Die grosse Bedingung fuer diese Loop ist, dass sie im Sekundentakt laufen muss, damit timing auf dem Chart stimmt!!!

3. Loop dient zur Erstellung einer Log file (Excel); muss auch im Sekundentakt laufen muessen!
(Erstellung der Log file in Loop 2 dauert zu lang, u irgendwann stimmt das Timing von Loop 2 (bzw Chart) nicht mehr!)

---------
-mit lokale Variablen vom 1. zum 2. Loop ist es nicht moeglich; zumindest bekomme ich noch mehr Probleme, die ich umstaendlich behenben muss

-Producer/Consumer, Producer/Consumer (also die Loop 2 ist Consumer und gleichzeitig Producer fuer Loop 3): kann ich auch vergessen, Timing ist sehr schnell ausser Kontrolle (und laut Theorie soll es auch nicht funktionieren)

-Master/Slave, Master/Slave (Loop 2 ist Slave von Loop1 und gleichzeitig Master fuer Loop 3)
Loop 2 zwinge auch auf eine Loopdauer von 1000ms, was auch von Loop 3 angenommen wird.
Loop 1 laeuft vor sich hin und beeinflusst Loop 2 nicht, was super ist. U sendet die Notification wie erwartet in Loop 2.
Auch wenn ich andere Loopdauer fuer Loop 2 setze ist alles in Ordnung. So erhalte ich auch keine unerklaerlichen Erscheinungen u ich habe eine Abhaengigkeiten zwischen allen Loops. Start/Stop problemlos!

ABER lauter Theorie sollte das auch nicht gehen, weil: Both loops are synchronized to the master loop. The slave loop only executes when the master loop sends a notification. [LV Basics II s. 2-35]

Kann mir jemand sagen, warum dass funktioniert? Wie das begruenden kann??
Warum Loop 1 nichts beeiflusst, obwohl sie Master-Funktion hat?
Kann ich mir da sicher sein, dass es immer funktionieren wird - werde nachher .exe file erstellen??\

Vielen Dank u schoene Feiertage noch!!
Ugur
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.12.2007, 18:21
Beitrag #2

Ugur Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Oct 2007

7.1
2007
de

93051
Deutschland
3 abhaengige Loops Master Slave/Master Slave
Doch doch doch...
da ist ein Beeinflussung von Loop 1 auf Loop 2 da!!!
bei Langzeittest ist mir das nie aufgefallen, weil die Zeit auf dem Graphen und die getrennt berechnete Gesamt-Testdauer immer uebereinstimmen!!

Erkennbar ist das am Graphen. Und zwar er ist "ruckelig", d.h. er ist nicht synchron im Sekundentakt!

Hat jemand eine Idee wie ich Loop 1 ohne Master/Slave mit den anderen in Abhaengigkeit setzen kann!

Danke schoen
Ugur
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.12.2007, 19:40
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
3 abhaengige Loops Master Slave/Master Slave
' schrieb:ich moechte drei While Schleifen parallel, voneinander abhaengig laufen lassen.
Auch wenn die drei Schleifen applikationsspezifisch gesehen gegenseitig abhängig sind, so laufen sie als While-Schleifen gesehen doch unabhängig. Ich empfehle die drei While-Schleifen auf jeden Fall in ein eigenen SubVI auszulagern.

Zitat:1. Loop bekommt Daten vom Bus (kann keine delays einbauen, da ich sonst frames verpasse), loop period ist ca. 700-800ms
Diese Daten können bereits in Loop 1 entsprechend aufgearbeitet werden und dann mittels einer Queue (eigentlich gehört hierher prinzipiell eine Queue, ein Melder würde bei bestimmten Applikationen aber auch gehen) der Allgemeinheit (also nicht speziell Loop 2) zur Verfügung gestellt werden. Ein Wert in der Queue könnte z.B. einen Samplepunkt entsprechen.

Vorgriff auf das zweite Posting: Wenn Loop 1 im Raster von 750ms einem Melder sendet, Loop 2 den aber im Raster von 1000ms abholt, dann kannst du ausrechnen, nach wie vielen Loops von Loop 1 ein Sample von Loop 2 ignoriert wird => "ruckeln im Graph". 750ms, 1500ms, 2250ms, 3000ms, 3750ms. Da Loop 2 nur einen Sample pro 1000ms macht, wird auch pro 1000ms nur ein Wert gelesen. Es fehlt also 3000 oder 3750.

Zitat:2. Loop soll die Daten von 1. Loop erhalten und zusaetzlich kriegt sie noch Daten aus einer GPIB und USB Schnittstelle. Manche der Daten werden im einem Chart dargestellt.
Loop 2 liest diese eine Queue aus, wenn eben da gerade was drinnensteht. Im Prinzip ist es dieser Loop egal, wo die Daten, die in der Queue stehen herkommen. Sie sind halt da.

Zitat:3. Loop dient zur Erstellung einer Log file (Excel); muss auch im Sekundentakt laufen muessen!
(Erstellung der Log file in Loop 2 dauert zu lang, u irgendwann stimmt das Timing von Loop 2 (bzw Chart) nicht mehr!)
Das klingt also so, als ob Loop 2 und Loop 3 auch applikationsspezifisch unabhängig wären. Auch ich würde für das File-Schreiben (hier Excel) eine eigene Loop machen.

Zitat:-mit lokale Variablen vom 1. zum 2. Loop ist es nicht moeglich;
Vergiss das mit den Variablen gleich mal.


Zitat:Loop 2 zwinge auch auf eine Loopdauer von 1000ms, was auch von Loop 3 angenommen wird.
Loop 1 laeuft vor sich hin und beeinflusst Loop 2 nicht, was super ist. U sendet die Notification wie erwartet in Loop 2.
Auch wenn ich andere Loopdauer fuer Loop 2 setze ist alles in Ordnung. So erhalte ich auch keine unerklaerlichen Erscheinungen u ich habe eine Abhaengigkeiten zwischen allen Loops. Start/Stop problemlos!
Ja genau so geht das auch. Prinzipiell.

Zitat:ABER lauter Theorie sollte das auch nicht gehen, weil: Both loops are synchronized to the master loop. The slave loop only executes when the master loop sends a notification. [LV Basics II s. 2-35]
Wenn du für jede Loop z.B. ein SubVI machst muss alles richtig funktionieren.
Erstens: "Both loops are synchronized to the master loop" gilt hier nicht (resepktive wird durch eine entsprechende Programmierung eben umgangen), da jede Loop für sich gesehen sowohl zeitlich als auch datentechnisch unabhängig läuft. Wenn du Melder benutzt, dann benutzt du nicht die Funktion "Warte, bis was im Melder steht", sondern die Funktion "Meldestatus lesen". Wenn dein Melder schneller beschrieben als ausgelesen wird (was bei 750 zu 1000 der Fall ist), dann funktioniert auch "Warten, bis was neues im Melder steht.
Zweitens: "The slave loop only executes when the master loop sends a notification" stimmt so gesehen auch nicht, da du - respektive ich mit meinen Queues - eben nicht wartest. Die Abarbeitung der "Slave-Loop", also Loop 2, hängt nicht an vorhandenen Daten von Loop1. Loop2 arbeitet grundsätzlich. Ist eine Sekunde um, so wird eben der Graph refresht. Wenn zwischendrinn Daten da sind (beachte die Wortwahl: nicht "ankommen", sondern "da sind"), wenn werden die halt übernommen und gespeichert. Sind keine Daten da, wird eben nichts übernommen und nach einer Sekunde wird eben "nichts" (mehr) angezeigt.

Zitat:Warum Loop 1 nichts beeiflusst, obwohl sie Master-Funktion hat?
Trenn dich von der Audrucksweise "Loop 1 ist Master von Loop2". Ich mach das eben so: Loop 1 sampled Daten und stellt die per Queue zur Verfügung. In die Queue würde also alle 750ms was geschrieben werden. Das heißt aber nicht, dass Loop 2 die Queue nur alle 750ms lesen muss!. Loop 2 ließt die Queue alle 25ms aus. Sind Daten da, werden die eben weiterverarbeitet. Diese 25ms werden jetzt genau 40 Mal gemacht. Dann ist eine Sekunde um. Was jetzt an Daten da ist, wird angezeigt. Usw.

Zitat:Kann ich mir da sicher sein, dass es immer funktionieren wird
Das funktioniert immer. Du musst es nur entsprechend programmieren.
Es gibt natürlich Grenzfälle für "immer". Da Loop 2 in einen Graphen schreiben soll, tut man sich natürlich mit 1000,000 ms etwas schwer. +-250ms könnten da schon mal drinn sein.


Ach, noch ein Hinweis:
Meine Ausführungen sind allgemeiner Natur. Und da ich deine Applikation nicht genau kenne, weis ich natürlich nicht in wie weit ich jetzt deine Frage auch richtig verstanden und demzufolge beantwortet habe.

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
26.12.2007, 21:18 (Dieser Beitrag wurde zuletzt bearbeitet: 28.12.2007 16:09 von eg.)
Beitrag #4

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
3 abhaengige Loops Master Slave/Master Slave
Ich verstehe eine Sache nicht:

warum soll die erste Loop überhaupt einen Timing haben ? Die soll doch von den zu empfangenen Daten abhängen oder nicht? Wenn Daten am Bus oder Schnittstelle ankommen, sollen diese sofort vom Loop 1 abgeholt werden.

Mein Vorschlag wäre nicht 3, sondern 4 oder sogar 5 Loops. Pro Schnittstelle (Bus, GPIB und USB) eine Leseloop. Diese drei Laufen so schnell wie die Daten ankommen, evtl. parsen (bereiten vor) die Daten und schieben diese vorbereiteten Daten in die Queue(s) vom Loop 2 und/oder 3. Beim reinschreiben der geparsten Daten kannst du entscheiden ob du alle Daten an Loop 2 und/oder an Loop 3 sendest, oder wenn es zu viele sind, kannst du einige Datensätze (ob Zeile oder Paket) auslassen. Im Loop 2 eintscheidest du wie du die Daten anzeigst und in Loop 3 wie du die Daten loggst.

Bei Fragen melden, es ist mein Lieblingsthema.

Gruss und frohe Weihnachten.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.12.2007, 17:33
Beitrag #5

Ugur Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Oct 2007

7.1
2007
de

93051
Deutschland
3 abhaengige Loops Master Slave/Master Slave
Hallo eg, Hallo IchSelbst,

Vielen Dank fuer Eure Unterstuetzung und Muehr…
Erstmal zu dem Sinn meines Tools:
1) Es ist ein Ofen mit Dbus2 (CAN basierend) Bussystem. Ich oeffne das Port u Daten kommen rein u werden enstprechend gefiltert. Je nachdem was grad passiert, zB Tuer auf, Licht an, Temp.erhoehung oder Bake-mode befinden sich im Bus. All diese Nachrichten sind vom Bus-messagebuffer abholbar!
(Der Bus ist nicht so belastet wie z.B bei einem Fahrzeug CAN. Nur alle 2 sec wird ein TimeSync gesenden/bestaetig zwischen den beiden Partnern um die Kommunikationen zu checken und noch die Ofen eigenen messages halt,)
2) GPIB: von einem Yokogawa (WT200) power meter erhalte ich die V/A/W/Wh. Nur dessen momentane Werte werden nur angeizeigt u wandern auch ins Logfile.
3) USB: ich benutze ein NI cRIO-9211 fuer zwei Thermocouples (als Referenz)

Anforderungen sind: ein interaktiver Graph ueber die gesamte Testdauer (max .6 Std)
Und alle Daten sind 1-2 sekuendlich zu loggen (15 Spalten in Excel)

Graph enthaelt 6 plots ueber Zeit: Ofen Temp, die zwei Thermocouples, DoorSwitch (Boolean vom Bus), Preheat (Boolean aus Berechnung), FastPreheat (Boolean vom Bus)
Fuer diese Boolean-Werte sind noch Timer laufen zu lassen, wenn sie True sind.


Ihr habt mich auf eine andere Idee gebracht... ich sollte lieber einen Graph, der Chart-Eigenschaften besitzt, verwenden. Dem ich die Zeitachse einfach selber geben kann. Die Loopdauer kann dann egal sein, wenn die Zeitbasis stimmt. Dazu habe ich NI-Forum was tolles erhalten bzw gefunden.

@eg zu deiner Frage: warum soll die erste Loop überhaupt einen Timing haben ?
Das war der erste Gedanke weil ich Chart benutzen wollte u ihm keine Zeitachse mitgeben konnte!
Dein Vorschlag mit 4 oder sogar 5 Loops geht mir ein! Mit der graphischen Darstellung sehe auch kein Problem mehr, wenn ich das oben genannte Graph benutze.
ABER: wie kann ich das loggen synchron 1 oder 2 sekuendlich realisieren???
(die erste Spalte muss ein Zeitstempel sein, und die Daten sollen den Graphen wiederspiegeln!)Bei Bedarf muessen genaue Zeitpunkte zu ersehen sein, was in einem 6 Stundengraph nicht exakt ablesbar sind!)

Koenntes Du mir bitte ein Bsp, wie man Daten aus mehreren Loops in einer Loop vereigen kann,senden? (Mein erste Gedanke waere: Ich habe mehrere Producer und einen Cosumer fuer meinen Graph-Loop und einen zweiten Consumer Logfile-Loop, oder???)

Nachdem ich etwas im Code aufgeraumt und fuer jeden lesbar ist, wuerde auch gerne mein Code hier posten!

Vielen Dank
Ugur
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.12.2007, 20:50
Beitrag #6

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
3 abhaengige Loops Master Slave/Master Slave
' schrieb:@eg zu deiner Frage: warum soll die erste Loop überhaupt einen Timing haben ?
Das war der erste Gedanke weil ich Chart benutzen wollte u ihm keine Zeitachse mitgeben konnte!
Dein Vorschlag mit 4 oder sogar 5 Loops geht mir ein! Mit der graphischen Darstellung sehe auch kein Problem mehr, wenn ich das oben genannte Graph benutze.
ABER: wie kann ich das loggen synchron 1 oder 2 sekuendlich realisieren???
(die erste Spalte muss ein Zeitstempel sein, und die Daten sollen den Graphen wiederspiegeln!)Bei Bedarf muessen genaue Zeitpunkte zu ersehen sein, was in einem 6 Stundengraph nicht exakt ablesbar sind!)

Koenntes Du mir bitte ein Bsp, wie man Daten aus mehreren Loops in einer Loop vereigen kann,senden? (Mein erste Gedanke waere: Ich habe mehrere Producer und einen Cosumer fuer meinen Graph-Loop und einen zweiten Consumer Logfile-Loop, oder???)


Noch eine Frage:
musst du die Daten anfordern oder kommen diese im bestimmten Zeittakt von alleine?

Es ist wichtig um auf deine Frage zu antworten. Willst du in der Logger-Loop auf die Daten von Geräten warten, willst du pro Gerät eigene Datei machen. Es ist noch vieles unklar.

Um die Daten von mehreren Loops in einer sammeln zu können, kanst du wie folgt vorgehen:

Eine Queue vom unbestimmten (z.B. Variant oder String) Datentyp ertsellen und die Referenz auf diese Loop an alle Producer-Loops bekanntgeben. Die Producer-Loops schreiben die von Geräten empfangenen Daten in diese Queue rein. Wichtig ist beim Reinschreiben eine Kennung hinzuzufügen um welche Daten es sich handelt, damit die Consumer-Loop mit diesen Daten was anfangen kann.

Die Consumer-Loop sammelt dann die Daten von allen Erzeugern und speichert sie z.B. in einem Schieberegister solange, bis z.B. alle Daten vorhanden sind und/oder die eine Sekunde abgelaufen ist.

Gruss

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.12.2007, 23:03
Beitrag #7

Ugur Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Oct 2007

7.1
2007
de

93051
Deutschland
3 abhaengige Loops Master Slave/Master Slave
Hallo Eugen,

Nein, die Daten kommen von alleine und zufaellig. Besonders die Daten von Loop 1 (Dbus2 Loop). Und die Busdaten sind auch die wichtigsten. Von Loop1 darf ich nichts verpassen, sonst stimmt das was ich anzeige und was der Ofen grad macht nicht ueberein!

Wenn ich mal GPIB- oder USB Daten verpasse bzw. unregelmaessig hole ist es nicht so schlimm. Sind Zahlenwerte, die ansteigen oder abfallen.

Nein eine Gesamtdatei mit allen Daten aus allen Schnittstellen.

Ich haenge ein Screenshot (.xls kann man nicht hochladen?) der Logdatei an. (Hier sieht man wie ich logge u das wuerde auch gerne beibehalten, damit man spaeter auch daraus einen Graphen erstellen kann. Es sei den du hast einen besseren Vorschlag.)
Und ein noch unaufgeraeumtes Code mit bissel Beschreibung von der aktuellsten Version.
Ich hoffe das hilft Dir.
Wenn Dir noch andere Sachen auffallen, was ich besser machen kann, lass es mich bitte wissen.

(Ich werde heute noch einen Entwurf, wie ich mir das mit mehreren Producern und einem Consumer (bzw. zwei Consumer - einen fuer Graph u einen fuer Logdatei) vorstelle bzw verstanden habe, programmieren!)

Danke Dir!!!
Ugur


Angehängte Datei(en)
Sonstige .doc  Screenshot_Logfile.doc (Größe: 137,5 KB / Downloads: 333)

Sonstige .llb  DBus2_GPIB_Monitoring_v1.4.7_MS_MS_6_forum.llb (Größe: 1,58 MB / Downloads: 1101)
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
  Profibus-Master mit mehreren Slaves cueball 0 3.592 05.04.2012 14:34
Letzter Beitrag: cueball
  Master-Simulator mit LabVIEW ansprechen K.Antonius 0 3.661 31.01.2006 11:35
Letzter Beitrag: K.Antonius

Gehe zu: