Parallele FOR-Schleife: Parallel in gleiches Array schreiben..?
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!
Parallele FOR-Schleife: Parallel in gleiches Array schreiben..?
Hallo,
so, jetzt hab ich ganz schön lange verzweifelt rumgewurzelt - jetzt wende ich mich mal an die Experten:
Ich möchte mehrere Drucksensoren PARALLEL auslesen.
Versucht habe ich das ganze über eine parallelisierte FOR-Schleife. In der Schleife soll über VISA der jeweilige COM-Port angesprochen, der Wert ausgelesen und in ein Array geschrieben werden. Das Array soll ein 1D-Array sein mit 4 Werten (jeweils ein Wert pro Sensor). Dann beginnt das Spiel über eine WHILE-Schleife von vorne bis die Messzeit abgelaufen ist. Das 1D-Array mit den 4 Werten wird dabei am Ausgang der WHILE-Schleife indiziert und nach Ablauf der Messzeit in eine Textdatei geschrieben.
Das Ding ist aber, dass ich es nicht hinkriege das Array PARALLEL zu beschreiben. Ich habe den P-Anschluss (Ausgang) auf "P-ID" gestellt und mittels der ID und "Teil-Array ersetzen" versucht an die jeweilige Position im Array zu schreiben. Das klappt aber nicht.
Habt Ihr Tipps für mich?
Ganz liebe Grüße und einen schönen Abend!
Sebastian
RE: Parallele FOR-Schleife: Parallel in gleiches Array schreiben..?
Dein Ansatz ist eine nette Idee, hat aber IMHO ein paar Schwächen. Aber mit etwas Glück funktioniert er sogar. Voraussetzung ist, dass du mindestens 4 CPU-Kerne auf deinem Rechner brauchst, ansonsten funktioniert es nicht. Falls du deine VISA-Abfrage in ein Sub-VI gepackt hast, dann muss dieses Sub-VI reentrant sein. Um die Reihenfolge musst du dich aber nicht groß kümmern (wie ein paar schnelle Versuche gezeigt haben). Erstell einfach ein auto-indiziertes Array am Ausgang der FOR-Loop, die Ergebnisse entsprechen deinen SubVI-Aufrufen - wenn du zur Sicherheit die Chunk-Size explizit auf 1 einstellst. Hierzu ein kleines Bsp:
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Parallele FOR-Schleife: Parallel in gleiches Array schreiben..?
Hallo,
danke schonmal für Deine Antwort! Das hat mein Problem gelöst, dass ich mein Messwertearray anständig gefüllt bekomme! Ganz herzlichen Dank!
Allerdings bekomme ich beim Auslesen von z.B. 4 Drucksensoren immer noch nur 1/4 der möglichen Messfrequenz hin, was für mich dafür spricht, dass die FOR-Schleife doch noch nicht parallel ausgeführt wird..(?). Oder muss ich - neben der Sub-VI-Einstellung "reentrant" - LabView auch noch an anderer Stelle sagen, dass es bitte parallel mit mehreren Kernen arbeiten soll? Ich benutze LabView 2013 32-bit auf einem 64-bit Windows8.1-System mit 6 Kernen und 12 logischen Prozessoren.
Jetzt mal ne ganz dämliche Frage / These:
Ich habe die 4 Drucksensoren jeweils per seriellem Kabel (RS-485) an einen Seriell-USB-Konverter angeschlossen, der vier serielle Anschlüsse und einen USB-Anschluss hat. Kann es sein, dass gar nicht mein Programm das Problem, sondern die ja auch "seriell" arbeitende Schnittstelle USB das Probem ist? Ich bin da von der Hardwareseite kein Experte, aber 4mal die Datenrate pro Drucksensor sollte deutlich geringer sein als die mögliche Datenrate von USB 2.0, oder? Oder ist vielleicht nicht die Datenrate, sondern die Anzahl an Paketen pro Sekunde das Problem...?
Hab mal ein Bild von meiner FOR-Schleife und dem Sub-VI inkl. dem VISA-Aufruf angefügt, vielleicht macht es das verständlicher.
Liebe Grüße und schönen Abend allerseits,
Sebastian
RE: Parallele FOR-Schleife: Parallel in gleiches Array schreiben..?
(30.09.2016 16:43 )wassersebastian schrieb: Allerdings bekomme ich beim Auslesen von z.B. 4 Drucksensoren immer noch nur 1/4 der möglichen Messfrequenz hin, was für mich dafür spricht, dass die FOR-Schleife doch noch nicht parallel ausgeführt wird..(?). Oder muss ich - neben der Sub-VI-Einstellung "reentrant" - LabView auch noch an anderer Stelle sagen, dass es bitte parallel mit mehreren Kernen arbeiten soll?
Alles SubVIs müssen reentrant sein, nicht nur das direkt in der For-Loop. Auch die Sub-VIs in diesem VI.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Parallele FOR-Schleife: Parallel in gleiches Array schreiben..?
Super, das war`s! Ganz herzlichen Dank!
Noch eine Frage, um sicher zu gehen:
- Da alles parallel läuft: Ist es gewährleistet, dass die Daten bei der Autoinduzierung am Eingang in der richtigen Reihenfolge mit denen am Ausgang verknüpft sind? Soll heißen, wenn das Sensoren-Verbindungsdatenarray am Eingang anliegt mit den Sensoren 0, 1, 2, 3; ist es sicher, dass am autoindizierten Ausgang die Messwerte der Sensoren 0, 1, 2 und 3 auch in dieser Reihenfolge geschrieben werden? Oder könnte da auch was durcheinander kommen, je nach dem welcher Drucksensor zufällig gerade einen Ticken schneller gearbeitet hat als die anderen?
Nochmals herzlichen Dank für die prompte, kompetente und erfolgreiche Hilfe.
Viele Grüße,
Sebastian