LabVIEWForum.de
Softwarestrukturprobleme - Druckversion

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

Seiten: 1 2


Softwarestrukturprobleme - Rainito - 06.05.2009 13:59

Hallo,

ich bin gerade damit beschäftigt eine Prüfsoftware für einen Dauerlaufprüfstand zu schreiben. Benutzeroberfläche sieht wie unten abgebildet aus. Es müssen die 3 oder mehr Prüfstände völlig autark zu bedienen sein und funktionsfähig sein. Umschaltbar im gezeignten "Container". Hab alle Daten schon "geclustert". Für jeden Prüfstand gibt es seine eigenen speziellen Eingangsdaten und Ausgangsdaten.....aber auch allgemein gültige Daten z.b. Überwachung Prüfraum.

Jetzt meine Frage.....weiss einfach nicht sicher was für eine Struktur ich nehmen soll......Mit einer Caseabfrage zwischen den prüfständen?? Dann geht das Parallele Durchführen doch flöten oder?

Master-Slave Struktur?

Und wie verläuft die Datenübergabe bei so einer parallelen Ausführung??

Wer weiss einen guten Ansatz?

Vielen Dank schon mal

Gruß Rainer


Softwarestrukturprobleme - eg - 06.05.2009 14:18

Machst pro Prüfstand eine parallele While-Schleife, dann noch eine für Event-Handling (Buttonklicks u.s.w.) und eine für die Anzeige von Daten aufm Front Panel.
Für die Kommunikation zwischen den parallelen Schleifen kannst meine Tasking-Library (im Download Bereich) nehmen oder selbst mit Queues oder Notifiers programmieren.

Ist halt nur mein Vorschlag, so würde ich es machen.

[attachment=18270]


Im Beispiel siehst du zwei große While-Schleifen (obere für Eventhandling untere zum Anzeigen von Daten aufm FP) und mehrere parallele SubVIs unten. In jedem SubVI ist eine While-Schleife drin. Die Kommunikation erfolgt bei mir über meine Tasking Libraray. Wenn man aufn Button aufm FP klickt, wird ein bestimmtes SubVI mit einem Befehl+Parameter angesprochen.


Softwarestrukturprobleme - Rainito - 06.05.2009 14:35

Zuerst mal Merci für die schnelle Antwort.

Hab mir die Tasking-Libary schon runtergeladen und schau sie mir gleich an. Mit Queue´s hab ich noch gar nicht gearbeitet....da steig ich noch nicht ganz durch.

Hab jetzt auch einen Teil über globale Variablen erledigt....also zumindest die cluster die von jedem Prüfstand benötigt werden. Das ist aber natürlich nicht die feine Art oder?

Bekomm ich keine Probleme wenn ich z.b. 8 While schleifen parallel laufen lasse? Ich dachte, man sollte viele parallele whileschleifen vermeiden.

gruß Rainer


Softwarestrukturprobleme - Rainito - 06.05.2009 14:50

Hallo...

...hab mir gerade deine Tasking-Libary angesehen....und muss sagen....das ist zuviel für mich.

Ich steig gerade erst in LabVIEW ein....und versuch mit einem LabVIEW basic kurs dieses Projekt zu lösen. Kannst du mir vielleicht noch einen einfacheren Weg zeigen, wie ich die Daten ohne Globale Variablen sicher zwischen den einzelnen Prüfstandschleifen übermittle? Die Daten müssen ja dann durch alle nachstehenden Verzweigungen auch durch damit ich zu jederzeit an alle Daten abgreifen kann.

Danke


Softwarestrukturprobleme - IchSelbst - 06.05.2009 15:48

' schrieb:Hab jetzt auch einen Teil über globale Variablen erledigt....also zumindest die cluster die von jedem Prüfstand benötigt werden. Das ist aber natürlich nicht die feine Art oder?
Globale Variablen sind tatsächlich nicht die richtige Art des Datentransfers für diesen Anwendungsfall. Besser ist sind FGV: funktionale Globale Variablen. Such mal hier im Forum.

Zitat:Bekomm ich keine Probleme wenn ich z.b. 8 While schleifen parallel laufen lasse? Ich dachte, man sollte viele parallele whileschleifen vermeiden.
Prinzipiell bekommt man keine Probleme, wenn man viele While-Schleifen parallel hat. Jede für sich muss nur richtig programmiert sein: Also z.B. mit einer Wartezeit in der Schleife.

Ich bin gerade dabei, was Ähnliches zu machen. Ich mach das so:

Es gibt ein HauptVI (also kein Tabsheet), in dem ausgewählt wird, welcher Prüfstand gerade bedient werden soll. Weiter gibt es ein einziges SubVI, das einen einzelnen Prüfstand bedienen kann. Da alle Prüfstande identisch sind, reicht also ein einziges SubVI aus. Dieses SubVI bekommt einen Parameter "Kennung des Prüfstandes". Anhand dieses Parameters kann das SubVI (indirekt und indiziert) entscheiden, welcher Prüfstand bedient werden soll. Für jeden Prüfstand gibt es eine FGV. Alle FGVs sind in einen VI hinterlegt, das auch diesen Parameter "Kennung des Prüfstandes" hat. Der Parameter "Kennung des Prüfstandes" wird in dem SubVI, in dem mit den FGVs und allen anderen SubVI herumgereicht, sodass jedes VI - besonders die mit den DAQ-Zugriffen, entscheiden können, was genau gemacht werden soll.

Um die Verwendung von Queues und Meldern kommst du bei einer solchen Anwendung nicht herum.


Softwarestrukturprobleme - eg - 06.05.2009 15:59

' schrieb:Prinzipiell bekommt man keine Probleme, wenn man viele While-Schleifen parallel hat. Jede für sich muss nur richtig programmiert sein: Also z.B. mit einer Wartezeit in der Schleife.

Ich benutze generell keine Wartezeiten in den Schleifen (und würde sogar davon abraten), aber klar, du hast ja "z.B." geschrieben.


Softwarestrukturprobleme - J_uri - 06.05.2009 16:39

' schrieb:Ich benutze generell keine Wartezeiten in den Schleifen (und würde sogar davon abraten), aber klar, du hast ja "z.B." geschrieben.

Hallo,
warum ratest du von Wartezeiten ab? Es macht doch eigentlich nur dann Sinn, keine Wartezeiten in Whileschleifen zu implementieren, wenn sie extern synchronisiert werden (also über Melder etc.).


Softwarestrukturprobleme - eg - 06.05.2009 16:46

Ich mache einen Unterschied zwischen Wartezeit und Timeout beim Warten auf ein Event. Die Timeouts sind bei mir immer unendlich, somit steht die Schleife, wenn gar nichts passiert und verbraucht dabei 0 Ressourcen.


Softwarestrukturprobleme - IchSelbst - 06.05.2009 17:12

' schrieb:Warum ratest du von Wartezeiten ab? Es macht doch eigentlich nur dann Sinn, keine Wartezeiten in Whileschleifen zu implementieren, wenn sie extern synchronisiert werden (also über Melder etc.).
Eine explizite Wartezeit braucht man immer dann, wenn keine implizite vorhanden ist. Implizite Wartezeiten sind z.B. dann vorhanden, wenn man - wie eq sagt - eine Funktion mit Timeout verwendet (und das Timeout nicht auf 0 stellt). VIs mit Timeout-Funktionalität können sein: DaqMX-Read, Warten auf Melder/Queue, etc.


Softwarestrukturprobleme - Rainito - 07.05.2009 08:03

Danke für die vielen Tips.....aber ich glaub ich komm nicht ganz mit. Hab mir die funktionalen globalen Variablen angeschaut. Scheint mir nicht das richtige für mich zu sein....aber vielleicht bin ich dafür einfach nur zu laienhaft.

Ihr würdet mir sehr helfen wenn Ihr mir ein ganz ganz grobes Strukturkonzept zeigt, in dem ich die verschiedenen Prüfstände autark bedienen kann und die alle gemeinsam 2 Eingangscluster (Überwachung Prüfraum und Grenzwerte Raumtemperatur) haben.

Ich stell einfach mal mein bisheriges Werk hier rein. Starten kann man das ganze mit der "Startmaske" und der Prüfstand simuliert soll einfach einen noch nicht vorhandenen Prüfstand über globale variablen simulieren!!!

Über Vorschläge würde ich mich sehr freuen.

Schon mal vielen Dank

Gruß

Rainer

Lv86_img