01.07.2015, 11:03
Hallo,
ich bin neu in diesem Forum und möchte mich erstmal kurz vorstellen: Mein Name ist Kai und ich bin Student des Maschinenbaus.
Im letzten Jahr habe ich als Belegarbeit eine Prüfstandssteuerung / -regelung für einen Bremsenprüfstand in LabVIEW 8.5 aufgebaut. Jetzt bin ich studentische Hilfskraft und habe in diesem Zusammenhang die Software noch etwas erweitert, um den Prüfstand universeller nutzen zu können.
Kurz zu der geschriebenen Software: Sie wurde als Echtzeitanwendung implementiert. Auf dem Bedienrechner wurde das Programm als .exe kompiliert, um die Bedienung auch LabVIEW - Unerfahrenen zu ermöglichen. Auf dem Echtzeitrechner wurde die Software ebenfalls kompiliert und im Autostart hinterlegt. Das Ganze läuft in dem größeren Rahmen eines Zustandsautomaten mit folgenden Zuständen:
Initialize - Startwerte einstellen, Kontakt zwischen den Rechnern herstellen
Idle - Parameter eingeben und übertragen, auf Start warten
Measure - Durchführung der eigentlichen Messung
Stop - Prüfstand in sicheren Zustand überführen, auf Benutzereingabe warten (neue Messung oder schließen)
Shutdown - beide Programme schließen.
Ich hatte bereits letztes Jahr festgestellt, dass im Zustand Idle manchmal keine Messwerte an den Bedienrechner übergeben werden, habe das aber damals nicht weiter verfolgt, weil das nur in diesem einen Zustand auftrat und ich davon ausging, dass das nicht weiter kritisch wäre.
Jetzt hat sich aber gezeigt, dass dem nicht so ist. Die Messwertübertragung wird auch während des Betriebs unterbrochen. Genauer gesagt funktioniert die gesamte Regelung, Messwerterfassung und Wertausgabe nicht mehr. Das ist äußerst kritisch und kann so nicht bleiben! Ich konnte den Fehler bereits genauer einschränken:
Er liegt im Echtzeit - Hauptprogramm RT-Main.vi. Dort habe ich 3 zeitgesteuerte Schleifen. Eine Schleife übernimmt die gesamte Datenerfassung, -ausgabe und die Regelung. In ihr laufen die einzelnen Messmodi.
Dann gibt es eine Verarbeitungsschleife für die Messdaten. Sie läuft mit einer höheren Frequenz als die Erzeugerschleife. Die Daten werden über einen FIFO übergeben. Wenn eine Einzelmessung des Messprogramms abgearbeitet wurde, werden die Daten über einen weiteren FIFO an eine dritte Schleife übergeben, die die Daten in die TDMS Datei schreibt. So kann ich die Datei kompakt halten.
Der Fehler liegt in der Erzeugerschleife. Das kann ich sehen, weil während eines solchen Aussetzers die CPU Auslastung massiv absinkt. Durch die manuelle Verteilung der Schleifen auf die beiden Prozessorkerne konnte ich sehen, dass nur die CPU Auslastung auf dem Kern absank, der ausschließlich diese Schleife abarbeitet (von ca. 35% auf 6-10 % auf diesem Core, der andere Core bleibt unverändert bei 67 - 69%). Dort finde ich aber kein Problem! Der Schleifenzähler läuft weiter, nur sonst scheint die Schleife nichts mehr zu machen. Die Netzwerkverbindung steht zuverlässig (Sondenwerte werden sauber übertragen). Edit: Das merkwürdige daran ist nur, dass das in unregelmäßigen Abständen passiert. Manchmal vergehen mehrere Minuten zwischen diesen Aussetzern, manchmal nur wenige Sekunden. Die Aussetzer sind unterschiedlich lang, ich schätze mal maximal 10 Sekunden aber das Programm macht immer irgendwann wieder weiter. Wenn es dann wieder weiter geht, ist interessant, dass die CPU Auslastung 2 - 3 Sekunden auf über 50% auf diesem Kern geht und danach wieder auf das Normalniveau absinkt. Ich komme einfach nicht weiter.
Sämtliche DAQ-Tasks sind im MAX definiert und das soll auch so bleiben, da je nach Messung zusätzliche Sensoren integriert werden müssen, für die individuelle Skalierungen nötig sind und dafür keine Programmcodeänderung vorgenommen werden soll.
Vielleicht hat ja einer von euch eine Idee, woran es liegen könnte.
Das Programm lade ich hoch. Ich habe hier zu Hause allerdings kein LabVIEW und komme ziemlich sicher in dieser Woche nicht nochmal an den Prüfstand. Deshalb hoffe ich, dass es kein Problem ist, wenn ich das gesamte Projekt als .zip hochlade.
Weiterhin bitte ich zu entschuldigen, dass es dem gesamten Programm an Übersichtlichkeit mangelt. Es war mein erstes LabVIEW - Projekt und ich konnte nicht einschätzen, wie sich das ausdehnt. Bisher fehlte mir auch die Zeit, alles übersichtlich zu verpacken.
Edit: Vielleicht ist das noch interessant: Alle Werte werden als einzelne Samples gelesen. Die Abtastfrequenz beträgt bedingt durch den Schleifendurchlauf 500 Hz. Es werden analog mittels der PXI-6229 16 Kanäle gemessen und 3 Kanäle geschrieben. Digital werden 4 Kanäle geschrieben, gelesen werden 7 Kanäle. Digital I/O passiert über die PXI-6528.
ich bin neu in diesem Forum und möchte mich erstmal kurz vorstellen: Mein Name ist Kai und ich bin Student des Maschinenbaus.
Im letzten Jahr habe ich als Belegarbeit eine Prüfstandssteuerung / -regelung für einen Bremsenprüfstand in LabVIEW 8.5 aufgebaut. Jetzt bin ich studentische Hilfskraft und habe in diesem Zusammenhang die Software noch etwas erweitert, um den Prüfstand universeller nutzen zu können.
Kurz zu der geschriebenen Software: Sie wurde als Echtzeitanwendung implementiert. Auf dem Bedienrechner wurde das Programm als .exe kompiliert, um die Bedienung auch LabVIEW - Unerfahrenen zu ermöglichen. Auf dem Echtzeitrechner wurde die Software ebenfalls kompiliert und im Autostart hinterlegt. Das Ganze läuft in dem größeren Rahmen eines Zustandsautomaten mit folgenden Zuständen:
Initialize - Startwerte einstellen, Kontakt zwischen den Rechnern herstellen
Idle - Parameter eingeben und übertragen, auf Start warten
Measure - Durchführung der eigentlichen Messung
Stop - Prüfstand in sicheren Zustand überführen, auf Benutzereingabe warten (neue Messung oder schließen)
Shutdown - beide Programme schließen.
Ich hatte bereits letztes Jahr festgestellt, dass im Zustand Idle manchmal keine Messwerte an den Bedienrechner übergeben werden, habe das aber damals nicht weiter verfolgt, weil das nur in diesem einen Zustand auftrat und ich davon ausging, dass das nicht weiter kritisch wäre.
Jetzt hat sich aber gezeigt, dass dem nicht so ist. Die Messwertübertragung wird auch während des Betriebs unterbrochen. Genauer gesagt funktioniert die gesamte Regelung, Messwerterfassung und Wertausgabe nicht mehr. Das ist äußerst kritisch und kann so nicht bleiben! Ich konnte den Fehler bereits genauer einschränken:
Er liegt im Echtzeit - Hauptprogramm RT-Main.vi. Dort habe ich 3 zeitgesteuerte Schleifen. Eine Schleife übernimmt die gesamte Datenerfassung, -ausgabe und die Regelung. In ihr laufen die einzelnen Messmodi.
Dann gibt es eine Verarbeitungsschleife für die Messdaten. Sie läuft mit einer höheren Frequenz als die Erzeugerschleife. Die Daten werden über einen FIFO übergeben. Wenn eine Einzelmessung des Messprogramms abgearbeitet wurde, werden die Daten über einen weiteren FIFO an eine dritte Schleife übergeben, die die Daten in die TDMS Datei schreibt. So kann ich die Datei kompakt halten.
Der Fehler liegt in der Erzeugerschleife. Das kann ich sehen, weil während eines solchen Aussetzers die CPU Auslastung massiv absinkt. Durch die manuelle Verteilung der Schleifen auf die beiden Prozessorkerne konnte ich sehen, dass nur die CPU Auslastung auf dem Kern absank, der ausschließlich diese Schleife abarbeitet (von ca. 35% auf 6-10 % auf diesem Core, der andere Core bleibt unverändert bei 67 - 69%). Dort finde ich aber kein Problem! Der Schleifenzähler läuft weiter, nur sonst scheint die Schleife nichts mehr zu machen. Die Netzwerkverbindung steht zuverlässig (Sondenwerte werden sauber übertragen). Edit: Das merkwürdige daran ist nur, dass das in unregelmäßigen Abständen passiert. Manchmal vergehen mehrere Minuten zwischen diesen Aussetzern, manchmal nur wenige Sekunden. Die Aussetzer sind unterschiedlich lang, ich schätze mal maximal 10 Sekunden aber das Programm macht immer irgendwann wieder weiter. Wenn es dann wieder weiter geht, ist interessant, dass die CPU Auslastung 2 - 3 Sekunden auf über 50% auf diesem Kern geht und danach wieder auf das Normalniveau absinkt. Ich komme einfach nicht weiter.
Sämtliche DAQ-Tasks sind im MAX definiert und das soll auch so bleiben, da je nach Messung zusätzliche Sensoren integriert werden müssen, für die individuelle Skalierungen nötig sind und dafür keine Programmcodeänderung vorgenommen werden soll.
Vielleicht hat ja einer von euch eine Idee, woran es liegen könnte.
Das Programm lade ich hoch. Ich habe hier zu Hause allerdings kein LabVIEW und komme ziemlich sicher in dieser Woche nicht nochmal an den Prüfstand. Deshalb hoffe ich, dass es kein Problem ist, wenn ich das gesamte Projekt als .zip hochlade.
Weiterhin bitte ich zu entschuldigen, dass es dem gesamten Programm an Übersichtlichkeit mangelt. Es war mein erstes LabVIEW - Projekt und ich konnte nicht einschätzen, wie sich das ausdehnt. Bisher fehlte mir auch die Zeit, alles übersichtlich zu verpacken.
Edit: Vielleicht ist das noch interessant: Alle Werte werden als einzelne Samples gelesen. Die Abtastfrequenz beträgt bedingt durch den Schleifendurchlauf 500 Hz. Es werden analog mittels der PXI-6229 16 Kanäle gemessen und 3 Kanäle geschrieben. Digital werden 4 Kanäle geschrieben, gelesen werden 7 Kanäle. Digital I/O passiert über die PXI-6528.