LabVIEWForum.de
SubVI beenden nach einstellbarer Zeit - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: SubVI beenden nach einstellbarer Zeit (/Thread-SubVI-beenden-nach-einstellbarer-Zeit)



SubVI beenden nach einstellbarer Zeit - angry_Nameless - 05.05.2022 20:53

Hallo zusammen,

ich habe ein Problem und als Labview-Laie hoffe ich auf eure Hilfe.

Ich habe ein VI, das aus einer Datenbank auf Anfrage über Ethernet Daten ausliest und diese zurück gibt.
Ein bis zwei Mal am Tag ist die Datenbank etwas überfordert und das VI macht die Verbindung zur DB auf, setzt seinen SQL-Befehl ab, aber die Datenbank gibt nichts zurück.
Nun bleibt das (nicht von mir gebastelte) VI "Datenbankabfrage" an der Stelle hängen und mein VI wartet ewig... Natürlich werden dann die Anfragen, die weiterhin über Ethernet herein kommen nicht abgearbeitet.

Nun meine Frage. Kann ich einem SubVI einen Timeout mitgeben, so dass wenn das VI nach X Sekunden nicht fertig ist, es beendet wird (und die DB-Verbindung geschlossen wird) und das "Hauptprogramm" weiter läuft?
Denn dann könnte die nächste Anfrage kommen.

Ich hoffe, dass ich mein Problem verständlich machen konnte.

Danke im Voraus für die Antworten Smile


RE: SubVI beenden nach einstellbarer Zeit - Martin.Henz - 05.05.2022 22:03

Hallo angry_Nameless,

per Ferndiagnose ist das nicht zu sagen, was da los ist. Bei deiner Beschreibung passt einiges nicht so richtig zusammen.
Wo steht die Datenbank und was ist das für eine Datenbanksystem (MySQL Maria, PostgreSQL ...).
Richtig aufgesetzt gibt es da auch - von Böswilligkeiten abgesehen - keine Überlastung.

Das Problem liegt an dem VI selbst. Das macht vermutlich etwas furchtbar falsch. Mir stellt sich schon die Frage, warum das VI für jede Abfrage die Verbindung herstellt und anschließend wieder trennt.

Du hast das VI. Du kannst es Debuggen. Sehe es dir genau an. Irgendwo ist dort etwas ziemlich falsch.

Ohne dieses VI können wir rein gar nichts sehen, nicht viel dazu sagen und dir somit auch nicht helfen.


RE: SubVI beenden nach einstellbarer Zeit - angry_Nameless - 06.05.2022 06:19

Guten Morgen,

Ganz so einfach ist es nicht. Ich habe meine Frage oben versucht "vereinfacht" zu stellen.
Das "HauptVI" ist aus einigen SubVIs zusammengestellt und darin gibt es einige DLLs, die ich nicht einsehen kann...

Die "kleine Datenbank" ist eine riesige SAP-Datenbank und so einfach mal zum Debuggen alles still legen ist auch nicht.

Hab mal eines der SubVIs in das attachment gepackt, bei denen ich den Fehler vermute.

-------------------
Jetzt nochmal zur eigentlichen Frage:

Kann ich ein VI, das sich "aufhängt" duch ein anderes VI beenden?
Oder kann ich einem VI einen Timeout mitgeben, der es nach eingestellter Zeit weiterlaufen lässt, auch wenn es noch mit einer Aufgabe beschäftigt ist?
(So ähnlich wie z.B. beim TCP-Verbindungsaufbau-VI. Dort wird ja auch nach einer Timeoutzeit das VI beendet, ob der Verbindungsaufbau läuft, oder nicht.)

Danke für die Antworten


RE: SubVI beenden nach einstellbarer Zeit - GerdW - 06.05.2022 06:53

Hallo nameless,

Zitat:Hab mal eines der SubVIs in das attachment gepackt, bei denen ich den Fehler vermute.
Das ist zwar nur ein Bild und kein VI, aber sollt ehier ausreichen… Big Grin

Kurz und knapp: Wenn der DLL-Aufruf hängen bleibt, dann hast du keine Chance!
LabVIEW kann nichts weiter machen, als auf die DLL zu warten…


RE: SubVI beenden nach einstellbarer Zeit - angry_Nameless - 06.05.2022 10:16

Zuerst mal danke für die Info.

Ich hatte gehofft, dass ich dem VI, in dem die DLL aufgerufen wird eine "maximale LEbenszeit" mitgeben kann und somit nach Eintritt des Timeouts das VI beenden kann und das aufrufende VI macht einfach weiter...


RE: SubVI beenden nach einstellbarer Zeit - Martin.Henz - 06.05.2022 19:37

ich würde aufgrund des Bildes den Ersteller dee DLL nicht gleich verantwortlich machen, obwohl das leider nicht selten berechtigt ist und auch hier naheliegend erscheint. Sehe dir erst einmal die gesamte DLL Schnittstelke an, falls das möglich ist. Unter Umständen gibt es auch eine Funktion um einen Timeout festzulegen.