LabVIEWForum.de
Synchronisation von zwei Prozesse - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: Hardware (/Forum-Hardware)
+--- Thema: Synchronisation von zwei Prozesse (/Thread-Synchronisation-von-zwei-Prozesse)



Synchronisation von zwei Prozesse - eginali - 28.01.2022 12:23

Hallo liebe LabVIEW Gemeinde,

ich habe ein kleines Problem und brauche eure Stützung.
Für mein Projekt möchte ich von dem Modul NI 9205 die Spannungen von 4 Photodioden messen. Dazu habe ich ein Laserquelle und ein SourceMeter 2602A von Keithley. Der SourceMeter versorgt den Strom für die Laserquelle.
Ich habe zuerst mit SourceMeter einen SweepOperation erstellt. Mit diesem SweepOperation kann ich Strom in 500 Schritten von 3 mA bis 6 mA erzeugen. Wenn ich die SweepOperation starte, möchte ich gleichzeitig die Spannung von Photodioden mit NI-9205 messen, damit ich bestimmen kann, auf welchem Strom ich den Peak bei der Spannung habe. Ich weiß aber jetzt nicht, wie ich diese zwei Prozesse synchronisieren kann.
Ich würde mich sehr freuen, wenn Sie mir helfen könnten, diese beiden Prozesse zu synchronisieren.
Das ist mein erster Beitrag im Forum und bin offen für jede Empfehlungen.

LabVIEW-Version: 2020

Viele Grüße

Ali EGIN


RE: Synchronisation von zwei Prozesse - th13 - 28.01.2022 13:03

Hallo Ali,

Willkommen im Forum.

Das Stichwort ist die Erzeuger-/Verbraucherarchitektur. Im verlinkten Artikel werden Queues zur Kommunikation benutzt, es gibt aber noch weitere Möglichkeiten der Kommunkation zwischen Prozessen.

Edit: Beispiele findest du auch hier: File -> New... -> from Template -> Frameworks -> Design Patterns


RE: Synchronisation von zwei Prozesse - GerdW - 28.01.2022 13:20

Hallo Ali,

ebenfalls herzlich willkommen im LabVIEW-Forum!

Zitat:Wenn ich die SweepOperation starte, möchte ich gleichzeitig die Spannung von Photodioden mit NI-9205 messen, damit ich bestimmen kann, auf welchem Strom ich den Peak bei der Spannung habe. Ich weiß aber jetzt nicht, wie ich diese zwei Prozesse synchronisieren kann.
Bitte mehr Informationen bereitstellen:
Wo steckt das NI9205-Modul drin? cDAQ oder cRIO?
Was heißt bei die "synchronisieren"? Wie genau soll das werden? ms, µs oder ns?
Wie wird das Sourcemeter angesprochen? Welche Art Kommunikation verwendest du?
Bietet das Sourcemeter einen Triggerausgang, den du für deine Messung verwenden könntest?

Allgemein:
- Du versuchst eine Messwerterfassung deines Moduls mit einem extern Gerät zu synchronisieren: das geht entweder per Triggersignal (Genauigkeit im ns/µs-Bereich) oder softwarebasiert (Genauigkeit im ms-Bereich). Du musst dich entscheiden, was du willst…
- Dein NI9205 verwendet einen MUX und schaltet zwischen den Kanälen um: du wirst nie "exakt synchrone" Messwerte erhalten. Du kannst aber den zeitlichen Versatz der Samples bestimmen…
- Du könntest den Strom über einen Shunt als weiteren Messkanal auf deine NI9205 führen und als 5. Kanal mitmessen. Dann kannst du per Datenauswertung deine Messdaten "synchronisieren", d.h. Ausgabesignal (Strom) mit Messsignal (Photodioden) abgleichen…


RE: Synchronisation von zwei Prozesse - eginali - 29.01.2022 01:21

(28.01.2022 13:03 )th13 schrieb:  Hallo Ali,

Willkommen im Forum.

Das Stichwort ist die Erzeuger-/Verbraucherarchitektur. Im verlinkten Artikel werden Queues zur Kommunikation benutzt, es gibt aber noch weitere Möglichkeiten der Kommunkation zwischen Prozessen.

Edit: Beispiele findest du auch hier: File -> New... -> from Template -> Frameworks -> Design Patterns

Hallo th13,

danke für deine Antwort. Ich werde am Montag versuchen deine Empfehlungen an meinem Projekt anzuwenden.

Viele Grüße

Ali EGIN


RE: Synchronisation von zwei Prozesse - eginali - 29.01.2022 01:38

(28.01.2022 13:20 )GerdW schrieb:  Hallo Ali,

ebenfalls herzlich willkommen im LabVIEW-Forum!

Zitat:Wenn ich die SweepOperation starte, möchte ich gleichzeitig die Spannung von Photodioden mit NI-9205 messen, damit ich bestimmen kann, auf welchem Strom ich den Peak bei der Spannung habe. Ich weiß aber jetzt nicht, wie ich diese zwei Prozesse synchronisieren kann.
Bitte mehr Informationen bereitstellen:
Wo steckt das NI9205-Modul drin? cDAQ oder cRIO?
Was heißt bei die "synchronisieren"? Wie genau soll das werden? ms, µs oder ns?
Wie wird das Sourcemeter angesprochen? Welche Art Kommunikation verwendest du?
Bietet das Sourcemeter einen Triggerausgang, den du für deine Messung verwenden könntest?

Allgemein:
- Du versuchst eine Messwerterfassung deines Moduls mit einem extern Gerät zu synchronisieren: das geht entweder per Triggersignal (Genauigkeit im ns/µs-Bereich) oder softwarebasiert (Genauigkeit im ms-Bereich). Du musst dich entscheiden, was du willst…
- Dein NI9205 verwendet einen MUX und schaltet zwischen den Kanälen um: du wirst nie "exakt synchrone" Messwerte erhalten. Du kannst aber den zeitlichen Versatz der Samples bestimmen…
- Du könntest den Strom über einen Shunt als weiteren Messkanal auf deine NI9205 führen und als 5. Kanal mitmessen. Dann kannst du per Datenauswertung deine Messdaten "synchronisieren", d.h. Ausgabesignal (Strom) mit Messsignal (Photodioden) abgleichen…

Hallo GerdW,

ebenfalls bedanke ich mich für deine Antwort.
Ich habe NI9205-Modul in einem cDAQ eingesteckt und dann es per USB-Kabel mit dem Computer angeschlossen.
Die SweepOperation dauert ungefähr zwischen 20 - 30ms. Es ist für uns wichtig, dass die SweepOperation und Messung mit NI9205 spätestens in 100ms ausgeführt werden. Ich möchte eigentlich hier, dass die Messungen gleich anfangen, wenn die SweepOperation startet und beenden, wenn die SweepOperation beendet. Die SweepOperation fängt mit einem Befehl über LabVIEW und mir WaitComplete bekomme ich von dem Gerät, dass die SweepOperation abgeschlossen ist.
Der Sourcemeter ist über GPIB Kabel mit dem Computer verbunden. Dazu habe ich den Treiber heruntergeladen und mit dem kontrolliere den Sourcemeter.

"Du könntest den Strom über einen Shunt als weiteren Messkanal auf deine NI9205 führen und als 5. Kanal mitmessen. Dann kannst du per Datenauswertung deine Messdaten "synchronisieren", d.h. Ausgabesignal (Strom) mit Messsignal (Photodioden) abgleichen…" : Was meinst du eigentlich hier? Könntest du mir noch ein bisschen erklären.

Ich bedanke mich im Voraus und wünsche dir einen schönen Wochenende.

Mit freundlichen Grüßen

Ali EGIN


RE: Synchronisation von zwei Prozesse - Martin.Henz - 31.01.2022 15:08

Zitat:
Zitat:"Du könntest den Strom über einen Shunt als weiteren Messkanal auf deine NI9205 führen und als 5. Kanal mitmessen. Dann kannst du per Datenauswertung deine Messdaten "synchronisieren", d.h. Ausgabesignal (Strom) mit Messsignal (Photodioden) abgleichen…
Was meinst du eigentlich hier? Könntest du mir noch ein bisschen erklären.

Du weist doch nie, wann dein SourceMeter den sweep beginnt. Bestenfalls weist du, wann du den Startbefehl abschickst. Du weist nie wann der Sweep tatsächlich startet. Genauso ist es bei der Datenerfassung. Du kannst den Task zwar starten und weist, wann du das machst. Du weist aber gar nicht, wann die DAQ Hardware tatsächlich mit der Datenaufzeichnung beginnt.

Eine Lösung wäre ein Triggersignal mit dem der Start der beiden Geräte synchronisiert wird. Das ist oft gar nicht möglich.

Eine andere Lösung ist das, was Gerd vorgeschlagen hat. Mit der Datenerfassung zeichnest du nicht nur das Signal des Empfängers auf, sondern auch den Strom der des SourceMeters. Vom Signal des SourceMeters kannst du dann ablesen, wann der Sweep beginnt und wann der endet. Viel besser noch: du kennst du jedem Zeitpunkt (im Rahmen der Genauigkeit der Abtastung) auch den Strom.
Das macht auch die Auswertung recht einfach, weil du damit sofort X (Strom-SourceMeter) über Y (Signal der Photodioden) darstellen kannst.


RE: Synchronisation von zwei Prozesse - Lucki - 31.01.2022 18:29

Für die Synchronisation Inpt/Output gibt (oder gab?) es ein Besipiel in Labview. In diesem Thread wird des Problem erklärt.


RE: Synchronisation von zwei Prozesse - GerdW - 31.01.2022 19:28

Hallo Ali,

Zitat:Die SweepOperation dauert ungefähr zwischen 20 - 30ms. Es ist für uns wichtig, dass die SweepOperation und Messung mit NI9205 spätestens in 100ms ausgeführt werden. Ich möchte eigentlich hier, dass die Messungen gleich anfangen, wenn die SweepOperation startet und beenden, wenn die SweepOperation beendet. Die SweepOperation fängt mit einem Befehl über LabVIEW und mir WaitComplete bekomme ich von dem Gerät, dass die SweepOperation abgeschlossen ist.
Der Sourcemeter ist über GPIB Kabel mit dem Computer verbunden. Dazu habe ich den Treiber heruntergeladen und mit dem kontrolliere den Sourcemeter.
wie schon geschrieben benötigt die Kommunikation mit dem Keithley-Gerät Zeit. Und das Keithley selbst benötigt dann auch nochmal Zeit, um deine Befehle abzuarbeiten - bevor die Sweep-Operation überhaupt beginnt! Wie willst du hier etwas "synchronisieren"?

Wie weit hast du das Manual zum Keithley gelesen? Hast du dich mit den DigitalIOs beschäftigt, die das Gerät bietet? Hast du dich mit der Keithley-eigenen Programmiersprache beschäftigt, um diese DIOs zu verwenden? (Ich habe mir den LabVIEW-Treiber nicht angeschaut, kann also nicht beurteilen, ob dieser auch diese DIOs ansprechen kann.) Für mich sieht das so aus, als wenn du das Keithley so programmieren könntest, dass es vor dem Start eines Sweeps einen DIO schalten kann - und das könntest du dann als Starttrigger für deine Messwerterfassung verwenden… (Das war, was ich oben schon zum Thema "Triggersignal" geschrieben hatte.)

Zitat:"Du könntest den Strom über einen Shunt als weiteren Messkanal auf deine NI9205 führen und als 5. Kanal mitmessen. Dann kannst du per Datenauswertung deine Messdaten "synchronisieren", d.h. Ausgabesignal (Strom) mit Messsignal (Photodioden) abgleichen…" : Was meinst du eigentlich hier? Könntest du mir noch ein bisschen erklären.
Wie auch von Martin schon ergänzt: du misst einfach nicht nur deine Photodiodensignale, sondern auch den Strom durch die Dioden. Und kannst dann deine Messwerte analysieren/auswerten und (relativ) "problemlos" den Beginn/Ende des Sweeps bestimmen…