LabVIEWForum.de
Programm weiter strukturieren - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Programm weiter strukturieren (/Thread-Programm-weiter-strukturieren)



Programm weiter strukturieren - gfzk - 09.07.2015 08:25

Hallo,

das Blockdiagramm meines Hauptprogramms wächst immer weiter an. Ich habe mindestens 4 verschiedene Task die parallel laufen und es könnten noch welche hinzukommen. Jetzt Frage ich mich, ob das so wie ich die Tasks in das Hauptprogramm eingebettet habe überhaupt sinnvoll ist aus technischer Sicht wie auch aus Gründen der Übersichtlichkeit (Kosmetik).

Wie geht man das bei grösseren Projekten an?

Viele Grüße
Georg


RE: Programm weiter strukturieren - jg - 09.07.2015 08:27

(09.07.2015 08:25 )gfzk schrieb:  Wie geht man das bei grösseren Projekten an?
Über SubVIs!

Gruß, Jens

EDIT: Vorsicht vor zu vielen parallelen Timed-Loops! Nicht gerade "best practice".


RE: Programm weiter strukturieren - GerdW - 09.07.2015 08:30

Hallo Georg,

Zitat:Wie geht man das bei grösseren Projekten an?
- subVIs
- Verzicht auf TWLs: sowas löst man über das DAQmx-Timing!
- Verzicht auf TWLs: VISA-Kommunikation über die serielle Schnittstelle ist selten so genau "getimet"…
- Verzicht auf lokale Variablen (wie z.B. "Stopp")


RE: Programm weiter strukturieren - gfzk - 09.07.2015 08:30

Wow, so schnell hatte ich noch nie eine Antwort.

Also die ganze Schleife einfach in ein SubVI? Aber wie ist das dann mit den Frontpanel Elementen, die werden doch dann nicht aktualisiert bis das SubVI beendet ist?

Gruß, Georg


RE: Programm weiter strukturieren - gfzk - 10.07.2015 10:35

Danke für die Rückmeldungen, ein paar Fragen stehen aber noch im Raum:


Zitat:EDIT: Vorsicht vor zu vielen parallelen Timed-Loops! Nicht gerade "best practice".
Welche Bewandtnis hat es damit auf sich? Soll damit vermieden werden, dass sich die Schleifen gegenseitig ins Gehege kommen?


Zitat:- Verzicht auf TWLs: sowas löst man über das DAQmx-Timing!
Einverstanden, das geht auch anders - und jetzt weiß ich auch wie.


Zitat:- Verzicht auf TWLs: VISA-Kommunikation über die serielle Schnittstelle ist selten so genau "getimet"…
Da ich an dieser Stelle pollen möchte bzw. muss fiele mir nur ein die Warten-Funktion zu verwenden anstatt die Timed-While-Loop.


Zitat:- Verzicht auf lokale Variablen (wie z.B. "Stopp")
Wäre hier eine globale Variable oder eine Umgebungsvariable vorzuziehen?

Und last but not least das Thema SubVIs:
Wird die Schleife, inklusive dem Teil vor dem Eintritt und nach dem Austritt, in ein SubVi umgewandelt? Falls die Antwort Ja lautet, wie stelle ich sicher, dass die Frontpanel Elemente kontinuierlich upgedatet werden?
Falls die Antwort Nein lauten sollte, hieße dass, dass jeweils ein SubVI für den Teil vor den Schleifeneintritt, dem Teil in der Schleife und dem Teil nach der Schleife zu erstellen ist?

Viele Grüße
Georg


RE: Programm weiter strukturieren - GerdW - 10.07.2015 10:44

Hallo gfzk,

Zitat:Da ich an dieser Stelle pollen möchte bzw. muss fiele mir nur ein die Warten-Funktion zu verwenden anstatt die Timed-While-Loop.
VISA arbeitet mit internen Buffern, du musst keine Einzelbytes pollen. Stattdessen kannst entweder ganze Messages abfragen (bei aktivem TermChar) oder mit dem TimeOut des VISARead die Schleife bremsen…

Zitat:Wäre hier eine globale Variable oder eine Umgebungsvariable vorzuziehen?
Eine FGV. Oder ein Notifier…

Zitat:Wird die Schleife, inklusive dem Teil vor dem Eintritt und nach dem Austritt, in ein SubVi umgewandelt?
Ja.

Zitat:Falls die Antwort Ja lautet, wie stelle ich sicher, dass die Frontpanel Elemente kontinuierlich upgedatet werden?
Werden sie doch im subVI weiterhin Big Grin
Falls du die Werte auch im HauptVI sehen willst, empfehle ich Queues.

Zitat:Falls die Antwort Nein lauten sollte, hieße dass, dass jeweils ein SubVI für den Teil vor den Schleifeneintritt, dem Teil in der Schleife und dem Teil nach der Schleife zu erstellen ist?
Auch das ist möglich, je nachdem, wie weit man seinen Code modularisieren möchte. Bei "größeren"/aufwändigeren Gerätetreibern bietet es sich an, auch die De-/Initialisierung in weiteren subVIs zu verstecken…


RE: Programm weiter strukturieren - jg - 10.07.2015 11:06

Eine Timed-Loop ist ein "extrem" harter Eingriff in die Tasksteuerung innerhalb von LabVIEW. Bei normaler Programmierung sorgt LabVIEW dafür, dass jeder Prozess (also z.B. SubVIs o.ä.) irgendwann ein wenig Prozessor-Zeit zugeteilt bekommt (Round Robin). Eine Timed-Loop verhält sich da anders. Nach der eingestellten Loop-Time startet sie gnadenlos von vorne. Hierzu ein Extrem-Beispiel: Nehmen wir an, der Code innerhalb der Timed-Loop braucht grundsätzlich länger zur Abarbeitung als die gewünschte Loop-Time und der Code läuft auf einem 1-Prozessor-System. Was passiert? Genau, die CPU wird zur 100% durch die Timed-Loop belegt, andere Threads kommen GAR nicht mehr zur Abarbeitung. Deshalb Vorsicht bei exzessiver Verwendung von Timed-Loops.

NI empfiehlt u.a.
- üblicherweise nur 1 Timed-Loop pro CPU-Core.
- Abstufung der Prioritäten bei mehreren Timed-Loops.
etc. pp.

Gruß, Jens


RE: Programm weiter strukturieren - Moes - 28.07.2015 15:10

Frage zur Programmstruktur des Threadsteller:

Darf man mehr als eine While-Schleife überhaupt verwenden?

Meine eigene Erfahrung auf corei3 (2 Kerne) Laptop ist das es bereits zwei While-Schleifen ein echtes Problem sind wenn man eingänge Sampled Angel_not


RE: Programm weiter strukturieren - GerdW - 28.07.2015 15:22

Hallo Moes,

Zitat:Darf man mehr als eine While-Schleife überhaupt verwenden?
Ja.

Zitat:Meine eigene Erfahrung auf corei3 (2 Kerne) Laptop ist das es bereits zwei While-Schleifen ein echtes Problem sind wenn man eingänge Sampled
Das dürfte eher an deiner Programmierung liegen und nicht am Core i3… Big Grin