Workshop Deterministische Anwendungen mit LabVIEW Real-Time Carsten Sckopke Applications Engineer National Instruments Germany GmbH 1
Inhaltsverzeichnis Übung 1: Real-Time-Projekt erstellen... 3 Übung 2: Steuerung des Motors... 9 Übung 3: Geschwindigkeitsregelung...16 Notizen...22 National Instruments Germany GmbH 2
Übung 1: Real-Time-Projekt erstellen In Übung 1 lernen Sie, wie man mit dem Project Wizard ein neues Real-Time-Projekt erstellt. Ein Assistent führt Sie durch die einzelnen Konfigurationsschritte. So werden beispielsweise das Echtzeitzielsystem, die Kommunikation zwischen Zielsystem und Host-PC und die Softwarearchitektur festgelegt. Nach dem Durchlaufen der Schritte wird aus den Angaben ein bereits lauffähiges LabVIEW-Projekt erzeugt, das die Basis für die eigentliche Anwendung bildet. National Instruments Germany GmbH 3
Starten Sie LabVIEW. Erstellen Sie ein Echtzeitprojekt (New» Real-Time Project). Geben Sie als Projektname Motorregelung ein. Wählen Sie C:\HandsOn\LabVIEW.Real-Time\Exercises als Projektverzeichnis aus und klicken Sie auf Weiter >. National Instruments Germany GmbH 4
Wählen Sie zwei Schleifen (Two loops) für das Zielsystem und als Benutzeroberfläche Host VI aus. Klicken Sie danach wieder auf Weiter >. Danach können Sie mit einem Klick auf die Schaltfläche Browse das Zielsystem festlegen: Da Sie in diesem Hands-On-Kurs mit einem CompactRIO-System arbeiten, erweitern Sie bitte durch einen Klick auf das [+] die Kategorie Real-Time CompactRIO und wählen Sie das schon fertig für Sie konfigurierte System criohandson aus. Bestätigen die Auswahl mit OK. National Instruments Germany GmbH 5
Jetzt können Sie den Kommunikationsmodus zu den Signalkonditionierungsmodulen des Chassis festlegen. Für diesen Kurs behalten Sie bitte die Auswahl Scan Interface bei und klicken auf Continue. Nun sehen Sie das ausgewählte Zielgerät unter Selected target und können auf Weiter > klicken. Da somit alle notwendigen Vorgaben gemacht wurden, zeigt LabVIEW Ihnen eine Zusammenfassung der automatisch zu generierenden VIs an. Klicken Sie auf Beenden, um den Code fertigzustellen. National Instruments Germany GmbH 6
Im Project Explorer sehen Sie als Ausgangspunkt Ihr Projekt. Dieses Projekt beinhaltet Ihren PC (My Computer) ) und das Echtzeitzielgerät (criohandson). Unter My Computer sehen Sie das Host-VI, welches auf Ihrem Rechner ausgeführt wird und durch Shared Variables (Umgebungsvariablen) mit dem Echtzeitsystem kommuniziert. Unter dem Echtzeitsystem (criohandson) sehen Sie das Chassis. Erweitern Sie das Chassis, um die Module sehen zu können. Die einzelnen Module können wiederum erweitert werden, damit die Ein-/Ausgabe-Schnittstellen (I/O-Variablen bzw. Kanäle) sichtbar werden. Des Weiteren sehen Sie noch das Target-VI, welches auf dem Zielsystem ausgeführt wird. Klicken Sie auf das Frontpanel des host network RT (separate).vi und öffnen Sie mit der Tastenkombination Strg + E das Blockdiagramm. Wiederholen Sie dies für das Target-VI. A C B F D E Blockdiagramm des Host-VI National Instruments Germany GmbH 7
Funktion: In einer While-Schleife, die mit 10 Millisekunden (A) getaktet ist, werden die Daten des Echtzeitsystems in einem Graphen (B) dargestellt. Diese Daten werden über die Shared Variable data..network (C) übergeben. Durch das Betätigen des Stop- Buttons (D) im Frontpanel des VIs wird die Schleife gestoppt und über die Shared Variable stop..network (E) auch das VI am Echtzeitsystem angehalten. Zur fehlerfreien Ausführung wird deshalb diese Shared Variable beim Start des VIs auf False gesetzt (F). B C A D C F D E Blockdiagramm des Target VI Funktion: Es wurden zwei zeitgesteuerte Schleifen erstellt, die beide mit 10 Millisekunden getaktet sind. Die obere Schleife (Priorität 100) ) hat eine höhere Priorität als die untere Schleife (Priorität 50). Dies bewirkt, dass die obere Schleife immer Rechenzeit erhält, wenn diese benötigt wird. Des Weiteren kann man auf Mehrprozessorsysteme (Multicore) jeder Schleife einen dedizierten Prozessorkern zuweisen. In der oberen Schleife werden aus dem SubVI DATA (B) Daten an die Shared Variable data. RT übergeben. en. Diese Schleife wird mittels der Shared Variable stop..rt (D) angehalten. Die Variable erhält ihren Wert in der unteren Schleife durch die Shared Variable stop..network (E) aus dem Host-System. Darüber hinaus werden in der unteren Schleife die Daten aus der oberen Schleife an das Host-System übertragen (F). Somit ist eine Struktur geschaffen, die in der oberen Schleife zeitkritische Aufgaben durchführt wie z. B. Daten erfassen, Regelungen durchführen und Geräte steuern. In der unteren Schleife können weniger zeitkritische Aufgaben durchgeführt werden. Beim Beenden des VIs werden die Shared Variables wieder auf FALSE zurückgesetzt. Ende Schritt 1 National Instruments Germany GmbH 8
Übung 2: Steuerung des Motors In Übung 2 lernen Sie, wie man den Gleichspannungsservomotor mittels PWM ansteuert. Dazu muss zunächst das 24-VDC-Digitalausgangsmodul per Software so konfiguriert werden, dass mittels ScanEngine dort PWM-Signale ausgegeben werden können. Eine so genannte I/O-Variable erlaubt es dann, den Tastgrad (Duty Cycle) der PWM direkt zu steuern. Das Tastverhältnis kann so beispielsweise über einen Drehknopf zwischen 0 und 100 % variiert werden, wodurch sich der Motor langsamer oder schneller dreht. National Instruments Germany GmbH 9
Erweitern Sie Ihr Projekt im Project Explorer, so dass die beiden C-Serie-Module unterhalb des Chassis-Eintrags sichtbar sind und klicken Sie mit der rechten Maustaste auf Mod1 (Slot 1, NI 9474), um im Kontextmenü die Properties des Moduls auszuwählen. Wählen Sie im sich öffnenden Dialog C Series Module Properties die Kategorie Specialty Digital Configuration. Für den Kanal PWM0 wählen Sie dann den Modus Pulse-Width Modulation aus und setzen den Wert für die PWM-Basisfrequenz Frequency (Period) auf 20 khz (50 us). Bestätigen Sie diese Einstellungen dann mit OK. National Instruments Germany GmbH 10
Danach können Sie den konfigurierten Kanal (PWM0) des Moduls Mod1 (Slot 1, NI 9474) mittels Drag and drop als I/O-Variable in die obere Schleife ( deterministic loop ) Ihres Target-VIs ziehen. Öffnen Sie nun den Dialog Zeitgesteuerte Schleife konfigurieren, indem Sie mit der rechten Maustaste auf den Eingangsknoten (Input Node) der oberen Schleife klicken. Wählen Sie anschließend im Kontextmenü Eingangsknoten konfigurieren aus. Wählen Sie im Bereich Schleifen-Timing-Quelle die Option Mit Scan Engine synchronisieren und klicken Sie auf OK. National Instruments Germany GmbH 11
Die Vorgabe des Tastgrades für die PWM0-Ausgabe soll über das Host-VI erfolgen und mittels Shared Variablen an das Real-Time-System übergeben werden. Benennen Sie deshalb als nächstes die data -Variablen um. Dabei kommen zwei verschieden konfigurierte Variablen zum Einsatz: a. Eine netzwerkpublizierte Variable zur Kommunikation zwischen Host und Real-Time-Target. Die Pufferung einer bestimmten Anzahl von übertragenen Werten ist möglich, um ein Auslesen aller Werte auch dann zu garantieren, wenn die Empfängerschleife zeitweilig verzögert wird. Für die statische Übertragung des Soll-Tastgrades in diesem Hands-On-Projekt ist die Pufferung allerdings nicht notwendig. b. Eine als Single-Element-FIFO konfigurierte Einzelprozess-Variable, welche einen deterministischen Zugriff der zeitkritischen Schleife auf den Sollwert erlaubt. Erweitern Sie dazu im Project Explorer die Bibliothek variables network RT (separate).lvlib. Führen Sie dann einen Doppelklick auf den Eintrag data network aus oder verwenden Sie das Eigenschaften-Kontextmenü, um den Konfigurationsdialog der Variablen zu öffnen. Geben Sie der Variablen den Namen Sollgeschw. - network. Vergewissern Sie sich, dass der Datentyp auf Double steht. Wechseln Sie dann in die Konfigurationskategorie Netzwerk und stellen Sie sicher, dass das Häkchen vor dem Eintrag Use Buffering deaktiviert ist. Deaktivieren! Beenden Sie den Konfigurationsdialog dann mit OK. National Instruments Germany GmbH 12
Benennen Sie dann die Variable data RT auf die gleiche Weise in Sollgeschw. RT um. Beachten Sie, dass dies die Einzelprozess-Variable ist (sie soll nur auf dem Real- Time-System verfügbar sein). Um die Variable in der zeitkritischen Schleife einsetzen zu können, muss in der Konfigurationskategorie RT FIFO die FIFO-Nutzung freigegeben sein. Für das Hands-On-Projekt stellen Sie den FIFO-Typ auf Einzelnes Element. Da sich die Übertragungsrichtung der Geschwindigkeits-Variablen gegenüber dem Ausgangsprojekt umgekehrt hat, sollten Sie im Blockdiagramm des target multi rate - variables.vi die Schreib- und Lesezugriffe auf die Variablen anpassen. Das in dieser Schleife bereits enthaltene SubVI support - acquire data.vi ( DATA ) können Sie löschen. Die nach dem Löschen des DATA-SubVIs übrig gebliebene unterbrochene Datenleitung entfernen Sie mit der Tastenkombination STRG-B. Schieben Sie nach dem Löschen des DATA-SubVIs mit der Maus die Variable Sollgeschw. RT etwas nach links und ändern Sie über das Kontextmenü mittels Zugriffsmodus -> Lesen den Zugriff auf Lesen. Verbinden Sie dann den Werteausgang der Variablen mit dem Werteeingang der PWM0-I/O-Variablen. Kehren Sie ebenfalls über das jeweilige Kontextmenü die Schreib- und Lesezugriffe der beiden Variablen in der nichtdeterministischen Schleife um, so dass die National Instruments Germany GmbH 13
Netzwerkvariable auf die RT-Variable schreibt. Ordnen Sie die beiden Variablen danach sinnvoll an und speichern Sie dann das VI. Fügen Sie als nächstes dem Frontpanel-Fenster des host network RT (separate).vi ein Bedienelement für die Geschwindigkeitsvorgabe hinzu. Öffnen Sie dazu wieder das Frontpanel und wählen Sie als Quelle für die Sollgeschwindigkeit einen Drehknopf aus der Palette Modern-Numerisch. Nennen Sie diesen Sollgeschwindigkeit (%). Die Beschriftung können Sie direkt durch einen Doppelklick auf den entsprechenden Titel anpassen. Ändern Sie so auch die Bezeichnung des Signalverlaufs-Charts ( Data ) in Geschwindigkeit... Geben Sie als Maximalwert für die Sollgeschwindigkeit 100 an, indem Sie auf den Wert 10 des Drehknopfes einen Doppelklick ausführen und diesen durch den neuen Maximalwert ersetzen. Ändern Sie so auch die Skalierung des Graphen auf den National Instruments Germany GmbH 14
Bereich 0 bis 100. Ändern Sie so ebenfalls den Darstellungsbereich des Graphen auf 0 bis 100. Wechseln Sie dann mittels Tastenkombination STRG-E in das Blockdiagramm oder wählen Sie dafür den Menüeintrag Window» Show Block Diagram.. Ändern Sie den Zugriffsmodus der Variablen Sollgeschw. network in Schreiben, indem Sie mit der rechten Maustaste auf die Variable klicken und im Kontextmenü Zugriffsmodus -> Schreiben auswählen. Verbinden Sie dann noch mit dem Verdrahtungswerkzeug den Ausgang des Drehknopfes Sollgeschwindigkeit (%) mit der Shared Variable und dem Eingang des Signalverlaufs-Charts Geschwindigkeit : Speichern Sie alle VIs und das Projekt. Führen Sie nun Target- und Host-VI aus. Verwenden Sie den Drehknopf, um die Sollgeschwindigkeit zu verändern. Der eingestellte Wert wird gleichzeitig im Graphen dargestellt. Ende Schritt 2 National Instruments Germany GmbH 15
Übung 3: Geschwindigkeitsregelung In Übung 3 erweitern Sie die Echtzeitanwendung durch einen PID-Regler, um die Geschwindigkeit des Motors zu regeln. Dazu wird das 5-VDC-Digitaleingangsmodul als Quadraturencodermodul verwendet, um die Encoderpulse des Motors auslesen zu können. Das Modul liefert über zwei I/O-Variablen sowohl die Geschwindigkeit als auch die Position des Motors zurück. Des Weiteren wird ein PID-Funktionsblock nach IEC 1131 für die Regelung des Motors verwendet. National Instruments Germany GmbH 16
Erweitern Sie das CompactRIO-Chassis in Ihrem Projekt im Project Explorer und klicken Sie mit der rechten Maustaste auf Mod2 (Slot 2, NI 9401), um im Kontextmenü die Eigenschaften des Moduls auszuwählen. Wählen Sie im Dialog C Series Module Properties die Kategorie Specialty Digital Configuration. Unter Specialty Mode wählen Sie Quadrature. Setzen Sie dann den Wert für Velocity Timebase auf 32768 us und den Parameter Index Mode auf Phase B0 A0. Klicken Sie anschließend auf OK. Öffnen Sie dann den Eigenschaften-Dialog der I/O-Variable velocity0 und aktivieren Sie die Skalierung. Geben Sie als Maximum der linearen Skalierung 218600 ein. Beenden Sie den Dialog mit OK und ziehen Sie die I/O-Variable in die deterministische Schleife des Target-VIs. Erweitern Sie dann die Variablenbibliothek variables - network - RT (separate).lvlib und duplizieren Sie die beiden Sollgeschw.-Variablen, indem Sie sie mit gedrückter National Instruments Germany GmbH 17
STRG-Taste Taste ein Stückchen weiter unten wieder in die Bibliothek ziehen. Benennen Sie die Kopien in Istgeschw. network und Istgeschw. RT um. Wechseln Sie in das Blockdiagramm des Target-VIs und ziehen Sie aus der Funktionspalette Real-Time» Function Blocks» Control einen PID-Funktionsblock in die deterministische Schleife. National Instruments Germany GmbH 18
Öffnen Sie den Konfigurationsdialog des PID-Funktionsblock mittels Doppelklick und ändern Sie den Default-Wert des Eingangs output low von -100 auf 0 ab. Vervollständigen Sie dann Target- und Host-VI wie auf nachfolgenden Abbildungen zu sehen. National Instruments Germany GmbH 19
Target-VI: National Instruments Germany GmbH 20
Host-VI: Führen Sie dann Target- und Host-VI aus. Drehen Sie den Drehschalter, um die Sollgeschwindigkeit zu verändern. Die Werte für Soll- und Istgeschwindigkeit werden im Graphen dargestellt. Ende Schritt 3 National Instruments Germany GmbH 21
Notizen National Instruments Germany GmbH 22
Notizen National Instruments Germany GmbH 23
Notizen National Instruments Germany GmbH 24