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 

Multitasking



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!

12.03.2009, 09:13
Beitrag #1

eckilein Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 129
Registriert seit: Jan 2008

2010 FDS
2008
de

59929
Deutschland
Multitasking
Hallo

Ich sitze grade vor dem Problem, das ich 2 Sachen möglichst simultan machen muss, es aber nicht mit Rendezvous geht, bzw ich nicht weiß wie.
Das Problem sieht wie folgt aus:
Ich habe im eigendlichen Sinne 2 while-Schleifen in der einen ist eine Protokollinterpretierung und in der anderen Messwerterfassung. Jetz sieht das ungefähr so aus:
   
Jeder abgerundete Kasten steht für eine while-Schleife (sind eigendlich mehr)
Die Drähte und Punkte sollen veranschaulichen das jeder mit jedem untereinander irgendwie kommuniziert.

Wie man sieht ist halt unten nur die Messung .. die läuft immer gleich ab. Oben ist das Protokoll das ausgewertet wird, je nach Eingaben. Diese bekomme ich über die Serielle Schnittstelle, das ist jedoch an der Stelle nicht wichtig.
Wie es wohl ersichtlich ist, läuft die Messung immer im gleich rythmus bei gleichem Takt(in etwa)
Jetzt ist die Sache, das im Protokoll er sich in der einen, oder der anderen while-Schleife mal kürzer mal länger aufhällt.
Die kommunikation zwischen den beiden Hauptschleifen bekomme ich mit Variablen hin. Eine Möglichkeit wäre, das ich es so realisiere:
   
Das ist sehr sehr simpel:)aber hat es auch den Effekt den ich brauche?
Ist die Zeit für die untere Schleife einmal gestellt muss ich mir sicher sein, das es auch funktioniert, wenn ich 10s einstelle brauche ich auch wirklich alle 10s einen Messwert. Darin sind Toleranzen mess - Karten berücksichtigt.

Die eigendliche Frage ist also wenn ich bei der oberen Schleife mal für einen Durchlauf 0,2s oder auch 100s brauche, ist dann trotzdem gesichert das die untere in dem eingestellten Intervall die Messungen ausführt, ohne dass die obere Schleife das beeinflusst.

Ich hab zuerst gedacht ich könnte es über Multithreading lösen.. jedoch hab ich keine 2 Kerne / CPUs -.-

Ich hoffe ich habs nicht zu kompliziert ausgedrückt.^^

Thomas

There are 10 types of people in this world. Those who understand binary and those who don't.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
12.03.2009, 09:46 (Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2009 09:51 von Lucki.)
Beitrag #2

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Multitasking
Habe das nicht alles richtig verstanden. In der zweiten Graphik z.B. wird zwischen den beiden Schleifen nicht der geringste Versuch eine Datenkommunikation gemach - obwohl dieses das Thema ist.
Ich habe aber die Vermutung, daß sich Deine Probleme mit Queues, Erzeuger-Verbraucher-Strukturen lösen lassen. Hier und Hier Beispiele von mir.
Anmerkung dazu: Die Beispiele handeln vom Datenaustausch zwischen freilaufenden, unabhängigen VIs. Es funktioniert aber genau so zwischen frei laufenden, voneinander unabhängigen Schleifen in einem einzigen VI.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.03.2009, 10:22 (Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2009 10:26 von eckilein.)
Beitrag #3

eckilein Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 129
Registriert seit: Jan 2008

2010 FDS
2008
de

59929
Deutschland
Multitasking
Vielleicht bringt das etwas mehr Licht.
Eine überarbeitete Version des 2. Bildes.
   

Aber danke Lucki ich schau es mir an und werds ausprobieren.

There are 10 types of people in this world. Those who understand binary and those who don't.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.03.2009, 10:23
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Multitasking
' schrieb:Die eigendliche Frage ist also wenn ich bei der oberen Schleife mal für einen Durchlauf 0,2s oder auch 100s brauche, ist dann trotzdem gesichert das die untere in dem eingestellten Intervall die Messungen ausführt, ohne dass die obere Schleife das beeinflusst.
Im Prinzip ja.

Die beiden Schleifen laufen unabhängig. Es aber aber spezielle Fälle, da ist schon eine Beeinflussung vorhanden. Immerhin haben beide Schleifen das selbe Frontpanel. Besser ist es, den Messprozess unabhängig von einem FP in ein SubVI auszulagern.

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.11.2010, 16:44
Beitrag #5

deicebear Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 72
Registriert seit: Jul 2010

8.5.1
2009
de_en

13
Deutschland
Multitasking
Hallo,

ich habe ebenfalls eine Frage zum Thema Multitasking, bzw. habe ein Problem mal aufgebaut und getestet.

In meinem kleinen Beipiel toggeln 3 LED´s immer zwischen ON und OFF in verschiedenen Zeiten (10, 100 und 1000ms). Nun sind dies ja 3 verschiedene Prozesse, wo ich aber nicht glaube das Sie gleichzeitig abgearbeitet werden, sondern immernoch sequenziell, also nacheinander. Vom bloßen hinsehen kann man auch erkennen, dass der Takt der LEDS nicht ganz eingehalten wird, bei der 1000ms LED fällt es nicht mehr auf.

Eigentliches Ziel:
Ich möchte nämlich genau solch eine Problematik etwas umfangreicher Umsetzen, in meinem Hauptprogramm habe ich eine riesen Whileschleife in der allerhand passiert und wärend des gesamten Programmablaufs möchte ich einfach nur alle 100ms ein Signal auf high setzen und nach weiteren 100ms wieder auf LOW, alternierend immer so weiter. Allerdings sind bei mir immer schwankungen von 200-1200ms vorhanden. Meine Beiden Fragen sind also:

1. Wie kann ich es Umsetzen, dass mein Signal exakt alle 100 ms wechselt?
2. Wie kann ich die Prozesse alle mit einem Stop-Knopf wieder beenden?

Also wenn ihr direkte Antworten habt oder Links zu anderen Threads/Webseiten oder auch nur Stichwörter, wäre ich euch sehr Dankbar. Im Anhang habe ich einen Screenshot meines Beispielsprogrammes angefügt und das Programm selbst als Lv85_img

Schönen Abend euch allen.


Angehängte Datei(en) Thumbnail(s)
   

Sonstige .vi  Multitasking85.vi (Größe: 13,46 KB / Downloads: 193)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.11.2010, 20:11
Beitrag #6

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Multitasking
Die Logik enthält Nonsens-Code: für die Invertierung gibt es den Inverter, mehr Logik braucht es nicht.
Wenn die 3 Schleifen alle im gleichen VI laufen. kann man das Stoppen der drei Schleifen einfach mit lokalen Variablen machen.
Mit 10 ms kann die Blinkanzeige nicht mehr richtig funtionieren: Die Blinkfrequenz ist 50Hz, mein Monitor macht 60 Hz. Man muss sich vorstellen, man beobachtet das 50Hz- Blinken nicht direkt, sondern mit einem 60Hz Stroboskop. Und wenn das nicht so wäre, dann wäre - unterschiedlich von Mensch zu Mensch - 50 Hz gerade die Grenze, ab der das Blinken nicht mehr wahrgenommen wird.

Im Bild 3 Verschiedene Methoden zu invertieren.

   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.11.2010, 08:42 (Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2010 08:44 von deicebear.)
Beitrag #7

deicebear Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 72
Registriert seit: Jul 2010

8.5.1
2009
de_en

13
Deutschland
Multitasking
Aja, da hab ich gar nicht drüber nachgedacht, gut das Du es erwähnst Lucki. Auch vielen Dank für die drei toll umgesetzten Lösungsprinzipien zum toggeln der LEDs, find ich richtig klasse. Dann kann ich auch von ausgehen, dass diese drei Prozesse voneinander unabhängig, bis auf die Stopbedingung, voneinander laufen und auch ihre Taktzeiten konstanz halten.

Nun habe ich ein Programm, was wie auf dem Bild (Beispielhafte Darstellung) im Anhang im meinemlv85Programm aufgebaut ist, wo aber keine LED in der oberen While-Schleife ist, sondern ein Output über einen PEAK PCAN-Dongle, also quasi nur ein Signal was immer ON / OFF wechselt. Dieses ist aber leider nicht konstant im Takt, Soll wären 100ms, aber IST-Wert sind mal 700ms, mal 1200 oder auch mal 150ms, bei jedem Takt auch andere zeitliche Abstände.

Woran kann das denn liegen, dass dieses Programm, was ich habe, die obere Whileschleife nicht im gewünschten Takt flakern lässt?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.11.2010, 09:27 (Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2010 09:30 von Lucki.)
Beitrag #8

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Multitasking
Eine präzise Taktung ist nur mit Hardware-Timing bei Verwendung einer Messkarte möglich. Aber die von Dir genannten Abweichungen sind schon krass. Offensichtlich wird die CPU manchmal mehrere 100ms zu 100% ausgelastet - dann könnte das schon passieren. Hast Du in allen Schleifen Waits drin? Oder konvertierst Du vielleicht, während das Programm läuft, einen Spielfilm von MPEG nach DivX/AVI?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.11.2010, 09:57 (Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2010 10:20 von deicebear.)
Beitrag #9

deicebear Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 72
Registriert seit: Jul 2010

8.5.1
2009
de_en

13
Deutschland
Multitasking
Nein, ich mach eigentlich nichts weiter ausser einem Excel-Fenster und LabView. Habe herausgefunden, dass es daran liegt mit der Connection zum Dongle der Firma PEAK, jetzt habe ich jeder Schleife eine eigene Connection zugewiesen und ich liege quasi bei 100ms (99-101ms).. ABER, wenn ich die Maus bewege oder das FrontPanel öffne (mit vielen Anzeigen), dann variiert die Zeit zwischen 70-150 ms.

Edit: Ich habe auch noch Probleme mit dem Ausschalten per einem Knopf, bei mir kommt da ein Fehler, diesen habe ich mal als Bild mit angehangen. Vielleicht geht es unter Lv85_img eng/dt noch nicht auf diese Weise?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.11.2010, 10:57 (Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2010 10:57 von Achim.)
Beitrag #10

Achim Offline
*****
*****


Beiträge: 4.222
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Multitasking
' schrieb:Edit: Ich habe auch noch Probleme mit dem Ausschalten per einem Knopf, bei mir kommt da ein Fehler, diesen habe ich mal als Bild mit angehangen. Vielleicht geht es unter Lv85_img eng/dt noch nicht auf diese Weise?

Einfachste Lösung - Umweg nutzen: Schreib in der oberen Schleife die Information aus dem Stop-Button in einen booleschen Dummy-Indicator, die nicht "latch" konfiguriert ist und nimm eine lokale Variable davon als Stop-Bedingung in der unteren Schleife!

Es ginge auch "eleganter", aber das funzt 1A...

A.

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: