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 

Dieses Thema hat akzeptierte Lösungen:

Mehrere Tests parallel laufen lassen



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!

18.10.2024, 19:32 (Dieser Beitrag wurde zuletzt bearbeitet: 18.10.2024 19:32 von GerdW.)
Beitrag #21

GerdW Offline
______________
LVF-Team

Beiträge: 17.490
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Mehrere Tests parallel laufen lassen
Hallo Minako,

Zitat:Zum Glück hatte ich letzte Woche einen Python Einsteigerkurs und weiß zumindest was die Shell ist.
Ich habe jedoch null Ahnung wie man mit dieser Arbeitet...
Das mit der Shell war nur ein Beispiel, um zu zeigen, wie man eine EXE mit Parametern aufrufen könnte…
(Grumpy old man: Diese Jugend von heute, weiß nicht mal was eine Shell ist… Big Grin )

Zitat:Gibt es irgendwo Info welche Befehle ich der Shell übergeben muss, damit sie die .exe öffnet?
Du musst nicht mit der Shell arbeiten.
Du musst nur beim AppBuilder angeben, dass deine EXE später "command line arguments" entgegen nehmen soll. (Einstellung in den Build-Settings.)
Und in deiner EXE diese Argumente abfragen (PropertyNode/Methode der App) und auswerten. (Dazu müsste es auch ein Beispiel geben…)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.10.2024, 09:44
Beitrag #22

Kiesch Offline
LVF-Stammgast
***


Beiträge: 425
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Mehrere Tests parallel laufen lassen
(18.10.2024 19:32 )GerdW schrieb:  Hallo Minako,

Zitat:Zum Glück hatte ich letzte Woche einen Python Einsteigerkurs und weiß zumindest was die Shell ist.
Ich habe jedoch null Ahnung wie man mit dieser Arbeitet...
Das mit der Shell war nur ein Beispiel, um zu zeigen, wie man eine EXE mit Parametern aufrufen könnte…
(Grumpy old man: Diese Jugend von heute, weiß nicht mal was eine Shell ist… Big Grin )
Oder auch nur warum man an der autoexec.bat oder der config.sys Änderungen vornehmen sollte wenn man bestimmte Spiele startet. Grundwissen Computer halt :-P

Zitat:
Zitat:Gibt es irgendwo Info welche Befehle ich der Shell übergeben muss, damit sie die .exe öffnet?
Du musst nicht mit der Shell arbeiten.
Du musst nur beim AppBuilder angeben, dass deine EXE später "command line arguments" entgegen nehmen soll. (Einstellung in den Build-Settings.)
Und in deiner EXE diese Argumente abfragen (PropertyNode/Methode der App) und auswerten. (Dazu müsste es auch ein Beispiel geben…)

Die vereinfachte Erklärung ist:
Das erste was du in die Shell eingibst (der erste vollständige String) wird als "0." Argument interpretiert und ist dein eigentlicher Befehl um das Program auszuführen. Alles was danach kommt wird als einzelne Argumente an deine Exe "übergeben" - die dann damit machen kann was sie will. Der PC lässt die Exe also wissen, dass der Nutzer mehr im Sinn hatte als sie einfach nur auszuführen. Das kann dann zum Beispiel als Shell Commando so aussehen:

Code:
shutdown -r NOW
(weis nicht ob der in der Reihenfolge noch richtig ist):

"shutdown" ist die Neustart / Runterfahrroutine von Windows. Führst du die ohne Kommandozeilenparameter aus, wirft die dir ne Info zurück welche sie gerne hätte um zu wissen was sie tun soll. In dem Fall dann als ersten (Leerzeichengetrennten) Parameter "-r" (für Reboot) und als zweiten "NOW" (für den Ausführungszeitpunkt).

Für dich könnte so eine Syntax also Beispielhaft so aussehen:
"C:\MeinOrdner\SubVI.exe 3600 COM15"
Das würde dann versuchen die SubVI.exe auszuführen, die als erstes Argument (glaube ich) die "3600" übergeben kriegt und als zweites "COM15" (weis grade nicht ob das eigentliche Kommando mit übergeben wird, ausprobieren, off by one error Gefahr). Die Argumente gehen als Strings rein, die 3600 musst du also noch in eine Zahl umwandeln um das (zum Beispiel) 3600s laufen zu lassen (prinzipiell kannst du sogar die Einheit mit übergeben, wenn du sehr variabel bei den Messzeiten sein willst). "COM15" würdest du dann als den Port übergeben über den du auf das Messequipment zugreifst.

Achtung dabei immer: Selbst wenn du sagst, es wird auf unterschiedliche Messgeräte zugegriffen, muss man immer annehmen, dass der Nutzer dumm ist und versehentlich versucht auf eine bereits in Benutzung befindliche Resource zuzugreifen. Es macht daher Sinn solche Fälle zumindest in der Fehlerbehandlung im SubVI zu bedenken (Crash beim starten abfangen; schlimmstenfalls frisst das sich sogar einfach hart fest, da es auf verfügbar werden der Resource wartet (was vielleicht weitere 99 Tage dauert). Ohne Feedback weis der Nutzer dann nicht was los ist.

Handhaben kannst du sowas entweder im Main VI (wo du Rückinfo einholst ob Resourcen noch belegt sind; über Commandozeile glaube schwierig, da müsstest du die Kommunikation mit den SubVIs wahrscheinlich über TCP/IP und den Localhost laufen lassen (aufpassen bei den Ports!); oder über ein File in das du die geblockten Resourcen einträgst (wichtig ist dann, dass die SubVIs die auch wieder selbst freigeben)). Der Vorteil bei getrennten Exen liegt allerdings immerhin darin, dass du die Tasks auch für Windows voneinander getrennt hast. Daher: Wenn du mal einen Messtask per Taskmanager abschießen musst, kollabieren nicht gleich alle anderen mit.

P.S: Mittlerweile kann die Shell (deutsch: Kommandozeile) glaube auch mit Leerzeichen im Dateinahmen / Ordnernamen umgehen. Da musst du dann aufpassen, dass du das Kommando mit "" einrahmst um anzuzeigen wo das Kommando anfängt und endet. Das wird auf modernen Systemen immer wichtiger, da häufiger auch mal Leerzeichen in den Ordnernamen vorkommen und es sehr unglücklich ist wenn dadurch dein Kommando mittendrin unterbrochen und unsinnig verarbeitet wird. Aus:

Code:
C:\Mein Ordner\SubVI.exe 3600 COM15
würde dabei der Befehl:
"C:\Mein" - der auf Kommandozeilenebene bereits zu einem Fehler führen dürfte.
"Ordner\SubVI.exe" wäre dann das erste Argument, danach "3600" und "COM15".

Korrekt müsste es sein:
Code:
"C:\Mein Ordner\SubVI.exe" 3600 COM15
damit die Kommandozeile weis, dass der Teil nach dem Leerzeichen (und das Leerzeichen selbst) immer noch zum Befehl gehören und nicht bereits Argumente sind die ans Programm übergeben werden sollen.

Hoffe das hilft ein bisschen als Abriss dazu.

P.P.S: Achja TCP/IP und Ports: Das Problem wenn du mit dem Localhost redest ist, dass der Rechner mit sich selbst redet und das dadurch (wenn ich es nicht Falsch in Erinnerung habe) verschiedene Ports für die Kommunikation gebraucht werden um Sender und Empfänger richtig zuzuordnen. Versuchst du mit verschiedenen SubVIs über den gleichen Port zu reden, ist auch hier wieder der Port bereits geblockt. In der Variante mit Kommandozeile ist allerdings glaube ich auch der "Networkstream", "globale Variablen", "FGV" oder ähnliches was man zum Austausch nutzen könnte verfügbar.

Gruß Kiesch

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.02.2025, 08:57 (Dieser Beitrag wurde zuletzt bearbeitet: Gestern 06:30 von Minako.)
Beitrag #23

Minako Offline
LVF-Grünschnabel
*


Beiträge: 41
Registriert seit: Feb 2024

2023 Q3
-
EN


Deutschland
RE: Mehrere Tests parallel laufen lassen

Akzeptierte Lösung

Hallöchen nach so langer Zeit,

mit viel hin und her habe ich es nun endlich geschafft alles ans laufen zu bekommen.
Am Ende gab es dann noch das Problem, dass es in der Programmierumgebung gelaufen ist und in der Exe nicht.
Auch das ist gelöst.
Welche eurer Ansätze mir da jetzt geholfen hat, kann ich nicht sagen. Auch nicht, welche ich als Lösung ansehen könnte.

Jedenfalls poste ich mal ein Bild von SubVI Aufruf. Weiter ist die Reentrante Einstellung im SubVI wichtig.

Ich kann das Main VI schließen ohne, dass das SubVi davon betroffen ist und andersherum. Ich kann viele SubVI clone erstellen, welche unabhängig voneinader laufen.
Das MainVI kann nicht erneut geöffnet werden, solange noch ein Clone geöffnet ist, wesshalb man in meinem Programm das Main VI nicht schließen kann bevor alle SubVIs (Clone) geschlossen sind.
Für Zeitkritische Anwendungen ist dies aber glaub ich nicht geeignet. Für meine reicht es.

Danke für eure Vorschläge und eure Erklärungen Smile


Angehängte Datei(en) Thumbnail(s)
       
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
  2 Motoren Synchron laufen lassen 911tom 5 10.070 22.12.2017 08:50
Letzter Beitrag: kpa
  Stop während Eventstruktur am laufen ist haydenfan 5 6.398 05.11.2013 09:50
Letzter Beitrag: haydenfan
  Mehrere Schleifen parallel ausführen! houss 7 13.339 06.08.2013 14:41
Letzter Beitrag: houss
  vi 1 sek. laufen und speichern wen 9 6.578 14.01.2013 10:20
Letzter Beitrag: GerdW
  SubVi Parallel laufen und schliessen Dom0503 8 9.518 01.08.2011 14:24
Letzter Beitrag: Dom0503
  Sub-VI parallel und unabhängig laufen lassen viperjumper 2 6.293 21.07.2011 09:42
Letzter Beitrag: viperjumper

Who read this thread?
11 User(s) read this thread:
TpunktN, IchSelbst, UliB, th13, MScz, GerdW, BNT, cordm, Minako, Kiesch, Woodeye

Gehe zu: