Ansteuerung einer Schrittmotor-Achse mit NI Labview: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(322 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:2013_WS_MTR7_Praktikum_GPE]]
[[Kategorie:2013_WS_MTR7_Praktikum_GPE]]
[[Kategorie:LabView]]
==Einleitung==
Im Rahmen des Produktionstechnik II Praktikums und dem übergeordnetem Projekt "[[3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR)]]" ist es die Aufgabe, mittels NI [[LabView]] die Ansteuerung eines CNC Fräsportals (3 Linearachsen + 1 Rotationsachse) zu realisieren.
Unsere Namen sind [[Maximilian Bröer]] und [[Jarco Groenhagen]]. Wir haben uns im Wintersemester 2019/2020 mit diesem Thema beschäftigt.


==== LabView: Einleitung====
Folgende Studenten haben sich mit dieser Aufgabe beschäftigt:
{| class="mw-datatable"
! style="font-weight: bold;" | Student(en)
! style="font-weight: bold;" | Semester
! style="font-weight: bold;" | Anmerkung
|-
| [[Maximilian Bröer]] und [[Jarco Groenhagen]]
| Wintersemester 2019/2020
|
|-
| [[Rainer Heither]] und [[Joel Dongmeza]]
| Wintersemester 2016/2017
|
|-
| [[Raphael Bertelt]]
| Wintersemester 2015/2016
|
|-
| [[Felix Kortmann]] und [[Dominik Rebein]]
| Wintersemester 2014/2015
|
|-
| [[Martin Klingen ]]
| Wintersemester 2013/2014
| Erstellung des Artikels
|}


Das Programm LabView des Herstellers National Instruments ermöglicht die Programmierung von Simulationsmodellen und/oder Eingabe/Ausgabe- Programmen mittels einer graphischen Oberfläche. Im englischen Sprachgebrauch wird dabei häufig der Begriff I/O (Input/Output) verwendet.
Die verwendete Software ist LabView 2014 von National Instruments.


Dabei ist die Handhabung ähnlich den Produkten Matlab Simulink oder LEGO Mindstorms BricX.
Es wurden die vorherigen Dateien "String lesen" und "Step machen" passend zusammengeführt und erweitert. Ausserdem wurde durch eine Kabel die Möglichkeit geschaffen Zukünftig das Programm, dass auf dem cRIO 9024 gespeichert und verarbeitet wird, über den cRIO 9403 zur Fräse  zu senden.  


Grundbestandteile sind dabei unterschiedliche Funktionsbausteine, welche durch farbige Linien in der graphischen Programmieroberfläche miteinander logisch verknüpft werden können.


Der Vorteil der graphischen Programmierung ist, dass die Erkennung der Zusammenhänge von Variablen bzw. Werten durch Verfolgen der Verbindungslinien visuell sehr leicht möglich ist. So kann u.U. schneller ein Verständnis für die Grundaufgaben des Programmes erzielt werden, als wenn nur abstrakter Funktionscode betrachtet wird.
__TOC__


Nachteil der graphischen Programmierung ist, dass bei einem stark verschachtelten Aufbau die Übersichtlichkeit des Programmes leidet. In diesen Fällen kann u.U. die selbe Aufgabe mit einer schriftbasierten Programmiersprache (bspw. C) übersichtlicher gelöst werden.
==Regelkreis, technischer Systementwurf und Aufbau==


In der Folge soll der Einsatz der Software in Verbindung mit einem Eingabe/Ausgabe-Controller anhand einer Ansteuerung eines Schrittmotors erläutert werden.
Vor der Hardware- und Softwarerealisierung  wurde zunächst ein Regelkreis für die Ansteuerung des Schrittmotors entworfen. Für die Ansteuerung des Schrittmotors wird ein Motorcontroller des Typs Gecko Drive ([http://www.geckodrive.com/g201x.html Gecko G201X])<ref> http://www.geckodrive.com/g201x.html </ref> verwendet. Dieser übernimmt die leistungsseitige Ansteuerung des Motors. Der Motor bewegt eine Linearachse, deren Bewegung für eine Achse einer Bearbeitungsmaschine verwendet wird. Der NI Controller fungiert als Steuerteil des Aufbaus, indem die benötigten Signale an den Motorcontroller gesendet werden. Über einen Motorpositionssensor ist es möglich, die Bewegungen des Motors softwareseitig einzulesen und für einen Regelkreis zu verwenden. Dabei soll der Weg s, den die Linearachse zurücklegt, geregelt werden. Den Regelkreis zeigt die folgende Abbildung 1.<br>
[[Datei:Regelkreislabview.jpg|800px|Regelkreis für das Verfahren der Achse <ref> Regelkreis für das Verfahren der Achse  (eigene Abbildung) </ref>]]


====Regelkreis====
Abbildung 1: ''Regelkreis für Schrittmotoransteuerung''<br>
<br>


Vor der Realisierung in Hardware und Software wurde zunächst ein Regelkreis für die Ansteuerung des Schrittmotors entworfen. Für die Ansteuerung des Schrittmotors wird ein Motorcontroller des Typs Gecko Drive verwendet. Dieser übernimmt die leistungsseitige Ansteuerung des Motors. Der Motor bewegt eine Linearachse, deren Bewegung für eine Achse einer Bearbeitungsmaschine verwendet wird. Der NI Controller fungiert als Steuerteil des Aufbaus, indem die benötigten Signale an den Motorcontroller gesendet werden. Über einen Motorpositionssensor ist es möglich, die Bewegungen des Motors softwareseitig einzulesen und für einen Regelkreis zu verwenden. Dabei soll der Weg s, den die Linearachse zurücklegt, geregelt werden. Den Regelkreis zeigt die folgende Abbildung 1.
Abbildung 2 zeigt den technischen Systementwurf des Gesamtsystems bestehend aus den einzelnen Bestandteilen zur Motoransteuerung. <br>
[[Datei:Technischer Systementwurf für die Automatisierung mit LabView.png|800px]]<br>
Abbildung 2: ''Technischer Systementwurf mit NI-LabView'' <br>
''Originaldatei: [[Datei:Technischer_Systementwurf_LabView.vsdx]]''
<br>


[[Datei:Regelkreislabview.jpg]]
Abbildung 3 zeigt die Verdrahtung der cRio 9024 im Ganzen. Sie soll als Orientierungshilfe für nachfolgende Projekte gedacht sein, um einen Einstieg zu bekommen oder mögliche Fehler in der Hardwareverdrahtung entdecken zu können.  <br>
[[Datei:Verdrahtung_der_cRIO_9024.jpeg|600px]]<br>
Abbildung 3: ''Verdrahtung und Aufbau cRio 9024'' <br>
<br>
Link zum Handbuch: '' [http://www.ni.com/pdf/manuals/375233f.pdf cRIO 9024 - Handbuch]''


Abbildung 1: ''Regelkreis für Schrrittmotoransteuerung''
==Belegungsplan für Motoransteuerung==
Zunächst sollten die benötigten Eingänge und Ausgänge, die für die Funktion des Motors benötigt werden, definiert werden. In diesem Fall wurde zur Ansteuerung des Schrittmotors ein Leistungsmodul des Typs Gecko Drive verwendet. Aus dem [http://www.geckodrive.com/gecko/images/cms_files/G201X%20REV-6%20Manual.pdf Datenblatt]<ref> http://www.geckodrive.com/gecko/images/cms_files/G201X%20REV-6%20Manual.pdf </ref> lassen sich die notwendigen Informationen über die Beschaffenheit der benötigten Signale entnehmen.


====Belegungsplan für Motoransteuerung====
Schließlich kann das Leistungsmodul mit dem Schrittmotor verbunden werden und es können entsprechende Leitungen für den Anschluss an den NI Controller verlegt werden.


Zunächst sollten die benötigten Eingänge und Ausgänge, die für die Funktion des Motors benötigt werden, definiert werden. In diesem Fall wurde zur Ansteuerung des Schrittmotors ein Leistungsmodul des Typs Gecko Drive verwendet. Aus dem Datenblatt lassen sich die notwendigen Informationen über die Beschaffenheit der benötigten Signale entnehmen.
In diesem Fall wurde nach dem Belegungsplan in Abbildung 4 verkabelt.


Schließlich kann das Leistungsmodul mit dem Schrittmotor verbunden werden und entsprechende Leitungen für den Anschluss an den NI Controller verlegt werden.  
[[Datei:Schaltplan neu.jpg|700px]]


In diesem Fall wurde nach dem Belegungsplan in Abbildung 2 verkabelt.
Abbildung 4: ''Belegungsplan für Schrittmotoransteuerung''


[[Datei:Schaltplan neu.jpg]]
== Erstellung eines neuen Projekts ==


Abbildung 2: ''Belegungsplan für Schrittmotoransteuerung''
Um mit der Programmierung zu starten, muss wie in Bild 5 zunächst ein leeres Projekt erstellt werden. Dieses enthält später alle Informationen, Schnittstellen und graphischen Oberflächen, die man für ein Programm benötigt.


==== Installation der Hardware ====
Dafür muss die aktuell auf dem Computer installierte Version von National Instruments LabView (wir haben NI LabView 2014 verwendet) gestartet werden. Es öffnet sich ein Fenster.


Um mit der Programmierung zu starten, muss zunächst ein leeres Projekt erstellt werden. Dieses enthält später alle Informationen, Schnittstellen und graphischen Oberflächen, die man für ein Programm benötigt.
Dort muss zum Start erstmal die Umgbungseinstellung gewählt werden. <br>
<br>
[[Datei:NP_1.png|400px|Umgebungseinstellungen für neues Projekt wählen <ref> Umgebungseinstellungen für neues Projekt wählen  (eigenes Foto) </ref>]]


Dafür muss die aktuell auf dem Computer installierte Version von National Instruments LabView gestartet werden. Es öffnet sich ein Fenster.
Abbildung 5: Umgebungseinstellungen für neues Projekt wählen


Dort muss zum Start die Option '''==> Leeres Projekt erzeugen''' gewählt werden. Daraufhin zeigt sich der sogenannte Projekt-Explorer, welcher alle wichtigen Bestandteile des Projektes als auf-und zuklappbare Reiter darstellt.
<br>
Als nächstes kann dann das neue Projekt erstellt werden:<br>
<br>
[[Datei:NP_2.png|400px|Neues Projekt erstellen <ref> Neues Projekt erstellen  (eigenes Foto) </ref>]]


Möchte man das Projekt mit einem Eingabe/Ausgabegerät verwenden, muss dieses zunächst hinzugefügt werden. Die folgenden Schritte beschreiben, wie ein I/O Controller cRIO 9024 in ein Projekt eingebunden werden kann.
Abbildung 6: Neues Projekt erstellen<br>


Im Project-Explorer befindet sich nun das leere Projekt, dem nun die Hardware hinzugefügt wird:
''Originaldatei:[[https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/3D_Bearbeitungsmaschine/Automatisierung_LabView/05_Entwicklung/Screenshots/Neues%20Projekt%20anlegen/NP_2.png Datei:NP_2.png]]'' <br>
<br>
Wählen Sie  ==> Alle ==> Leeres Projekt ==> Fertigstellen <br>
<br>
[[Datei:NP_3.png|400px|Leeres Projekt erstellen <ref> Leeres Projekt erstellen  (eigenes Foto) </ref>]]


• Rechtsklick auf das Projekt => Neu => Ziele und Geräte
Abbildung 7: Leeres Projekt erstellen<br>


• Im Ordner Real-Time CompactRIO befindet sich die über das Netzwerk verbundene  HSHL-CRIO-CPU02 und wird über einen Doppelklick zum bestehenden Projekt hinzugefügt.


Daraufhin zeigt sich der sogenannte Projekt-Explorer, welcher alle wichtigen Bestandteile des Projektes als auf-und zuklappbare Reiter darstellt.


Möchte man das Projekt mit einem Eingabe-/Ausgabegerät verwenden, muss dieses zunächst hinzugefügt werden. Die folgenden Schritte beschreiben, wie ein I/O Controller cRIO 9024 in ein Projekt eingebunden werden kann.


[[Datei:Leeres Projekt..jpg]]
Im Project-Explorer befindet sich nun das leere Projekt, dem nun die Hardware hinzugefügt wird:


Abbildung 3: ''Leeres Projekt''
• Rechtsklick auf das Projekt => Neu => Ziele und Geräte <br>


<br>
[[Datei:Np4.png|400px|Hardware cRio 9024 einbinden <ref> Hardware cRio 9024 einbinden  (eigenes Foto) </ref>]]


Anschließend erscheint im Project-Explorer die Hardware Chassis (CRIO-9114). Das im Slot 1 befindliche Modul zeigt alle DIO´s (DIO = digital Input/Output) welche über einen Rechtsklick auf Mod1 konfiguriert werden können, d.h. die jeweiligen DIO´s können als Input oder Output definiert werden.
Abbildung 8: Hardware cRio 9024 einbinden<br>


• Im Ordner Real-Time CompactRIO befindet sich die über das Netzwerk verbundene  HSHL-CRIO-CPU02 und wird über einen Doppelklick zum bestehenden Projekt hinzugefügt.
<br>
[[Datei:Np5.png|400px|Hardware cRio 9024 einbinden (2) <ref>Hardware cRio 9024 einbinden (2) (eigenes Foto) </ref>]]


• Um potenzielle Fehler zu vermeiden, ist es sinnvoll den verwendeten Input bzw. Output direkt umzubenennen. Dazu muss lediglich doppelt auf die Bezeichnung des DIO (bspw. DIO20) im Projektexplorer geklickt werden und der gewünschte Name eingetragen und durch die Enter-Taste bestätigt werden.
Abbildung 9: Hardware cRio 9024 einbinden (2)<br>


Nun muss noch der Programmiermodus ausgewählt werden.<br>
<br>
[[Datei:Np6.png|400px|Programmiermodus ausgewählen <ref>Programmiermodus ausgewählen (eigenes Foto) </ref>]]


[[Datei:Einfügen der Hardware.jpg]]
Abbildung 10: Programmiermodus ausgewählen <br>


Abbildung 4: ''Einbindung der Hardware CompactRIO''
Anschließend erscheint im Project-Explorer (siehe Bild 11) die Hardware Chassis (cRio 9024). Das im Slot 1 befindliche Modul zeigt alle DIO´s (DIO = digital Input/Output), welche über einen Rechtsklick auf Mod1 konfiguriert werden können, d.h. die jeweiligen DIO´s können als Input oder Output definiert werden.
<br>
[[Datei:Np7.png|300px|Erfolgreich Eingebundene Hardware in neuene Projekt <ref>Erfolgreich Eingebundene Hardware in neuene Projekt (eigenes Foto) </ref>]]


Abbildung 11: Erfolgreich Eingebundene Hardware in neuene Projekt<br>


Die Hardware wurde nun mit dem Programm "bekannt gemacht" und kann verwendet werden.


Das folgende Kapitel beschreibt die notwendigen Schritte, um mit der Programmierung zu starten und welche Bestandteile die Programmieroberfläche aufweist.


==== Grundlegendes: VI und Blockdiagramm====
• Um potenzielle Fehler zu vermeiden ist es sinnvoll, den verwendeten Input bzw. Output direkt umzubenennen. Dazu muss lediglich doppelt auf die Bezeichnung des DIO (bspw. DIO20) im Projektexplorer geklickt werden und der gewünschte Name eingetragen und durch die Enter-Taste bestätigt werden.


In ein erstelltes leeres Projekt kann nun ein "Visual Interface", kurz VI genannt, eingefügt werden. Es handelt sich dabei um eine graphische Benutzeroberfläche für das zugehörige Programm. Auf dieser Oberfläche lassen sich Bedienelemente oder Eingabefelder anordnen, um durch diese Einfluss auf das Programm zu nehmen. Außerdem lassen sich Zustände und Werte des Programmes durch Anzeigeelemente darstellen, um den Fortschritt des Programmes während des Laufes verfolgen zu können. Dies erleichtert oftmals die Fehlerbehebung. Um ein VI hinzuzufügen, muss auf das weiße-Blatt-Symbol oben links in der Projekt-Explorer Ansicht geklickt werden:
''Originaldatei der Bilder:[[Datei:Originaldatei_NP.pptx]]'' <br>
<br>


[[Datei:neues VI.jpg]]


Abbildung 5:''Erstellung eines leeren VI''
Die Hardware wurde nun mit dem Programm "bekannt gemacht" und kann verwendet werden.


Es erscheint daraufhin ein leeres VI. Dieses stellt ein graphic user interface für die Interaktion mit dem späteren Programm dar. Das eigentliche Programm wird in einem "Blockdiagramm" genannten Fenster erzeugt und editiert. Das Blockdiagramm wird folgendermaßen geöffnet:
Das folgende Kapitel beschreibt die notwendigen Schritte, um mit der Programmierung zu starten und welche Bestandteile die Programmieroberfläche aufweist.


"Fenster" => "Blockdiagramm"
== Ansteuerung eines Schrittmotors mit LabView ==


VI und Blockdiagramm stehen in direkter Beziehung. Es können Eingaben im VI gemacht werden, die das Blockdiagramm beeinflussen und es können Ausgaben des Blockdiagramms auf dem VI dargestellt werden.
Grundsätzlich gibt es mehrere Möglichkeiten über LabView einen Schrittmotor anzusteuern. Voraussetzung dafür ist eine Art Pulsweitenmodulation (PWM) zu erhalten. Eine Option ist einen von LabView bereits fertigen "Signalgenerator" zu wählen. Dieser ist einfach und übersichtlich aufgebaut. Jedoch führte es schnell zu Problemen, sobald man einen Zähler oder ein Abbruchkriterium hinzufügen möchte.  In dem folgenden Programm wird dies über eine "flache Sequenz" realisiert.


Besonders zu beachten ist, dass es sich in diesem Fall um ein Programm handelt, welches auch trotz Installation der Hardware, stets nur auf dem PC abläuft. Dadurch können sich Schwierigkeiten bei der Übertragung ergeben. Dies gilt besonders bei verhältnismäßig "schnellen" Signalen (d.h. Signale mit hohen Frequenzen). In diesem Fall soll die Ansteuerung eines Schrittmotors mit Signalen im Mikrosekunden-Bereich erfolgen. Daher wird die Nutzung des sogenannten Host-Programmes, d.h. des Programmes welches auf dem PC läuft, nicht zum Erfolg bei der Ansteuerung führen. LabView bietet durch den sogenannten RealTime-Modus eine Funktionalität um diese Problematik zu Umgehen.  
Befindet man sich im Blockdiagramm, so können über die von LabView gestellte Funktionspalette die gewünschten Bausteine mittels drag&drop in die Arbeitsfläche gezogen werden.  Unter "Programmierung" => "Strukturen" befindet sich der Baustein "Flache Sequenz". Die Funktion dieses Bausteins ist es, die entsprechenden Operationen, die in der Sequenz angegeben werden, zyklisch zu wiederholen. Nachdem der Baustein auf die Arbeitsfläche gefügt wird, besteht dieser Baustein nur aus einer Sequenz in Form eines Rahmens wie man in Bild 12 erkennt. Da wir für die Ansteuerung des Schrittmotors jedoch zwei unterschiedliche  Zustände (1/0) benötigen, kann man über ein Rechtsklick der Sequenz "einen Rahmen danach einfügen" wählen. Um die Zustände der jeweiligen Sequenz zu definieren, wird über "Programmierung" => "Boolesch" eine "True"- bzw. "False-Konstante" eingefügt. Die Länge der einzelnen Zustände werden über Wartezeiten ("Warten auf ein Vielfaches von…") bestimmt ("Programmierung" => "Timing").
Um den Output des Signals festzulegen, muss über den Projekt-Explorer der gewünschte DIO in das Blockdiagramm gefügt werden. Wichtig: Der gleiche DIO muss in jeder der Beiden Sequenzen vorhanden sein. Anschließen muss die True- bzw. False-Konstante mit dem jeweiligen DIO verbunden werden (Hier DIO0). Somit ändert sich der Zustand nach der definierten Wartezeit  von z.B. 20ms von 1 (5V) auf 0(0V). Dieser Ablauf würde einem Step entsprechen. Um dies zu duplizieren, wird das Programm in eine While-Schleife gefügt ("Programmierung" => "Strukturen" => "While-Schleife"). Damit werden die Sequenzen so oft wiederholt, bis über ein Abbruchkriterium die Schleife gestoppt wird. Anfangs ist es sinnvoll, dies über einen Schalter o.ä. zu realisieren (Rechtsklick auf das Abbruchkriterium der Schleife=> "Erstellen" => "Bedienelement").


Das folgende Kapitel erläutert zunächst, wie die eigentliche Programmierung im Blockdiagramm umgesetzt wird.
[[Datei:Flache Sequenz.jpg]]


==== Erste Schritte: Programmieren im Blockdiagramm====
Abbildung 12:''Programmierung einer flachen Sequenz''


In das leere Blockdiagramm können nun Schleifen, Variablen und Funktionsbausteine per drag&drop aus dem "Funktionsmenü" eingefügt und miteinander verknüpft werden.
Die Verbindungen zwischen Bausteinen werden grafisch durch Linien gebildet, die mit der Computermaus gezogen werden:


[[Datei:Blockdiagramm.jpg]]


Abbildung 6: ''Beispieldarstellung im Blockdiagramm''
Damit auch vom VI Einfluss auf diese Zeiten und damit die Fahrgeschwindigkeit des Schrittmotors genommen werden kann, ist ein Regler einzufügen, welcher außerhalb der „flachen Sequenzen“ liegt. Dieser kann mit beiden Warteelementen (siehe Bild 13) verbunden werden, da die Wartezeiten beider Zustände immer identisch sein sollte. (High- / Low-Flanken jeweils 50%)


Die Funktionspalette enthält eine Vielzahl an Elementen, die unterschiedlichste Möglichkeiten von Berechnungen, Umformungen, Vergleichen etc. bieten.
[[Datei:Regler.jpg]]
Besonders beachtet werden muss, dass nicht jeder Baustein mit jedem verknüpft werden kann, da teilweise die verwendeten Datentypen nicht kompatibel sind.
Am sinnvollsten ist es, wenn man einen neuen Baustein einsetzen möchte, diesen zunächst anzuklicken und unter "Hilfe" die Beschreibung zu studieren. Dort sind alle Eingangs-und Ausgangsgrößen, die Funktion und die benötigten Datentypen des Bausteins beschrieben.


Die unterschiedlichen Datentypen, die in einem Blockdiagramm zum Einsatz kommen, werden durch unterschiedliche Farben der Verbindungslinien dargestellt. Die wichtigsten sind:
Abbildung 13:''Einstellung des Taktverhältnisses''


- blau = integer
- orange = double
- grün = bool


Teilweise können Datentypen auch durch Bausteine entsprechend transformiert werden, um sie einsetzen zu können.
Im Falle von Programm-Schleifen zeigt sich der Vorteil der graphischen Programmierung: Eine Schleife wird durch einen Rahmen dargestellt, in den entsprechende Operationen eingefügt werden können. Der Inhalt des Rahmens entspricht dann dem Teil des Programmes, welches entsprechend der Laufzeit der Schleife wiederholt wird. Als Abbruchbedingung für die Schleife kann beispielsweise ein Bedienelement auf dem VI dienen oder es kann eine Laufzeit der Schleife analog zu anderen Programmiersprachen vorgegeben werden.
Eine Eingabemöglichkeit im VI, die dann auf das Programm im Blockdiagramm Einfluss nimmt, lässt sich folgendermaßen umsetzen: Man fügt zunächst ein Bedienelement im Blockdiagramm ein. Dieses erscheint dann gleichzeitig auch im VI und kann dort beliebig platziert werden.
==== Ansteuerung eines Schrittmotors mit LabView ====
Grundsätzlich gibt es mehrere Möglichkeiten über LabView einen Schrittmotor anzusteuern. Voraussetzung dazu ist eine Art Pulsweitenmodulation (PWM) zu erhalten. Eine Option ist einen von LabView bereits fertigen "Signalgenerator" zu wählen. Dieser ist einfach und übersichtlich aufgebaut. Jedoch führte es schnell zu Problemen sobald man einen Zähler oder ein Abbruchkriterium hinzufügen möchte.  In dem folgenden Programm wird dies über eine "flache Sequenz" realisiert.
Befindet man sich im Blockdiagramm, so können über die von LabView gestellte Funktionspalette die gewünschten Bausteine mittels drag&drop in die Arbeitsfläche gezogen werden.  Unter "Programmierung" => "Strukturen" befindet sich der Baustein "Flache Sequenz". Die Funktion dieses Bausteins ist es, die entsprechenden Operationen, die in der Sequenz angegeben werden, zyklisch zu wiederholen. Nachdem der Baustein auf die Arbeitsfläche gefügt wird, besteht dieses Bauteil nur aus einer Sequenz in Form eines Rahmens. Da wir für die Ansteuerung des Schrittmotors jedoch zwei unterschiedliche  Zustände (1/0) benötigen, kann man über ein Rechtsklick der Sequenz "einen Rahmen danach einfügen" wählen. Um die Zustände der jeweiligen Sequenz zu definieren, wird über "Programmierung" => "Boolesch" eine "True"- bzw. "False-Konstante" eingefügt. Die Länge der einzelnen Zustände werden über Wartezeiten ("Warten auf ein Vielfaches von…") bestimmt ("Programmierung" => "Timing").
Um den Output des Signals festzulegen, muss über den Projekt-Explorer der gewünschte DIO in das Blockdiagramm gefügt werden. Wichtig: Der gleiche DIO muss in jeder der Beiden Sequenzen vorhanden sein. Anschließen muss die True- bzw. False-Konstante mit dem jeweiligen DIO verbunden werden (Hier DIO0).  Somit ändert sich der Zustand nach der definierten Wartezeit  von z.B. 20ms von 1 (5V) auf 0(0V). Dieser Ablauf würde einem Step entsprechen. Um dies zu duplizieren, wird das Programm in eine While-Schleife gefügt ("Programmierung" => "Strukturen" => "While-Schleife"). Damit werden die Sequenzen so oft wiederholt, bis über ein Abbruchkriterium die Schleife gestoppt wird. Anfangs ist es sinnvoll, dies über einen Schalter o.ä. zu realisieren (Rechtsklick auf das Abbruchkriterium der Schleife=> "Erstellen" => "Bedienelement").
[[Datei:Flache Sequenz.jpg]]
Abbildung 7:''Programmierung einer flachen Sequenz''
Damit auch vom VI Einfluss auf diese Zeiten und damit die Fahrgeschwindigkeit des Schrittmotors genommen werden kann, ist ein Regler einzufügen, welcher außerhalb der „flachen Sequenzen“ liegt. Dieser kann mit beiden Warteelementen verbunden werden, da die Wartezeiten beider Zustände immer identisch sein sollte. (High- / Low-Flanken jeweils 50%)
[[Datei:Regler.jpg]]
Abbildung 8:''Einstellung des Taktverhältnisses''


=====Verfahren einer vorgegebenen Wegstrecke=====
=====Verfahren einer vorgegebenen Wegstrecke=====
Zeile 137: Zeile 166:
Einfügen eines Zählers:
Einfügen eines Zählers:


Um mit dem Schrittmotor eine definierte Strecke zu verfahren, müssen vorab die tatsächlichen Zustandsänderungen gezählt werden. Auch hierbei gibt es mehrere Möglichkeiten. Eine einfache wie funktionelle Lösung wird im Folgenden beschrieben:
Um mit dem Schrittmotor eine definierte Strecke zu verfahren, müssen vorab die tatsächlichen Zustandsänderungen, wie in Bild 14 dargestellt, gezählt werden. Auch hierbei gibt es mehrere Möglichkeiten. Eine einfache wie funktionelle Lösung wird im Folgenden beschrieben:


• Vorab muss eine Konstante erstellt werden, welche für den Startwert des Zählers steht (Programmierung => Numerisch => Num. Konstante) Diese muss für diesen Fall vor der ersten Sequenz positioniert werden.
• Vorab muss eine Konstante erstellt werden, welche für den Startwert des Zählers steht (Programmierung => Numerisch => Num. Konstante) Diese muss für diesen Fall vor der ersten Sequenz positioniert werden.


• Sobald das Programm in die erste Sequenz springt soll der Zähler um 1 gesteigert werden. Dazu dient der Baustein Programmierung => Numerisch => Inkrementieren.
• Sobald das Programm in die erste Sequenz springt, soll der Zähler um 1 gesteigert werden. Dazu dient der Baustein Programmierung => Numerisch => Inkrementieren.


• Der Feedback-Node dient hierbei als Speicher und Rückkopplungselement.  
• Der Feedback-Node dient hierbei als Speicher und Rückkopplungselement.  


• Um sich den aktuellen Zählerwert ausgeben zu lassen muss ein numerisches Anzeigeelement eingefügt werden, welches den Zählerstand nach dem Inkrementieren abgreift.
• Um sich den aktuellen Zählerwert ausgeben zu lassen, muss ein numerisches Anzeigeelement eingefügt werden, welches den Zählerstand nach dem Inkrementieren abgreift.


• Das eingefügte Anzeigeelementes erscheint ebenso automatisch im VI und kann dort jederzeit abgelesen werden.
• Das eingefügte Anzeigeelement erscheint ebenso automatisch im VI und kann dort jederzeit abgelesen werden.


[[Datei:Zähler.jpg]]
[[Datei:Zähler.jpg]]


Abbildung 9:''Einbindung eines Schleifenzählers''
Abbildung 14:''Einbindung eines Schleifenzählers''
 
 


Jedoch werden in diesem Fall nur die Anzahl der Steps angezeigt. Für die Ausgabe in Millimeter ist vorab eine kleine Rechenoption nötig. Aus dem Datenblatt des Schrittmotors lässt sich entnehmen, dass ein Schritt 0,033mm entspricht. Daher muss die Anzahl der Schritte mit 0,033 multipliziert werden. Ein weiteres Anzeigeelement ermöglicht die Ausgabe der aktuell verfahrenen Strecke in Millimeter. Fügt man ein Eingabeelement hinzu, um die gewünschte Strecke im Millimeter einzugeben, muss dieser daher mit 30 multipliziert werden um die nötige Anzahl der Steps zu ermitteln.  Um ein Abbruchkriterium der While-Schleife zu erzeugen, greift man den aktuellen Zählerwert der bereits gefahrenen Schritte ab und vergleicht („größer/gleich“) dieses Ergebnis mit der Anzahl an Steps, welche  für die vorgegebene Wegstrecke nötig sind.  Sobald dieser Vergleich „True“ ist, ist die Bedingung erfüllt um die While-Schleife zu verlassen. Mit diesem Vorgehen ist ein Verfahren einer vorgegebenen Wegstrecke möglich.
Jedoch werden in diesem Fall nur die Anzahl der Steps angezeigt. In Abbildung 15 ist die Funktion erweitert worden. Für die Ausgabe in Millimeter ist vorab eine kleine Rechenoption nötig. Aus dem Datenblatt des Schrittmotors lässt sich entnehmen, dass ein Schritt 0,033mm entspricht. Daher muss die Anzahl der Schritte mit 0,033 multipliziert werden. Ein weiteres Anzeigeelement ermöglicht die Ausgabe der aktuell verfahrenen Strecke in Millimeter. Fügt man ein Eingabeelement hinzu, um die gewünschte Strecke im Millimeter einzugeben, muss dieser daher mit 30 multipliziert werden, um die nötige Anzahl der Steps zu ermitteln.  Um ein Abbruchkriterium der While-Schleife zu erzeugen, greift man den aktuellen Zählerwert der bereits gefahrenen Schritte ab und vergleicht („größer/gleich“) dieses Ergebnis mit der Anzahl an Steps, welche  für die vorgegebene Wegstrecke nötig ist.  Sobald dieser Vergleich „True“ ist, ist die Bedingung erfüllt, um die While-Schleife zu verlassen. Mit diesem Vorgehen ist ein Verfahren einer vorgegebenen Wegstrecke möglich.


[[Datei:Definierter_Verfahrweg.jpeg]]
[[Datei:Definierter_Verfahrweg.jpeg]]


Abbildung 10:''Verfahren einer definierten Wegstrecke''
Abbildung 15:''Verfahren einer definierten Wegstrecke''
 


=====Richtungsänderung des Schrittmotors=====
=====Richtungsänderung des Schrittmotors=====


Um die Verfahrrichtung des Schrittmotors zu ändern, muss zunächst ein Schalter, welches anschließend über das VI zu bedienen ist, in das Blockdiagramm eingefügt werden. Für die Übergabe des Signals an die Hardware ist der jeweilige DIO-Port (Hier DIO-1) aus dem Projekt-Explorer in das bestehende Programm zu involvieren. Da dies eine einmalige Abfrage beim Start des Programmes ist, ist der Befehl außerhalb der While-Schleife zu positionieren.  Je nach Schaltlage gibt dieser ein Highpegel(5V) oder Lowpegel (0V) an den zuvor definierten Output des NI Controllers, welcher mit dem Input "Direction" des Gecko Drive verbunden ist. Damit ist die Drehrichtung des Motors definiert. In diesem Beispiel wird mittels LED´s die aktuell gefahrene Richtung visualisiert.
Um die Verfahrrichtung des Schrittmotors zu ändern, muss zunächst ein Schalter, welche anschließend über das VI zu bedienen ist, in das Blockdiagramm eingefügt werden. Für die Übergabe des Signals an die Hardware ist der jeweilige DIO-Port (Hier DIO-1) aus dem Projekt-Explorer in das bestehende Programm zu involvieren. Da dies eine einmalige Abfrage beim Start des Programmes ist, ist der Befehl außerhalb der While-Schleife zu positionieren.  Je nach Schaltlage gibt dieser ein Highpegel(5V) oder Lowpegel (0V) an den zuvor definierten Output des NI Controllers, welcher mit dem Input "Direction" des Gecko Drive verbunden ist. Damit ist die Drehrichtung des Motors definiert. In diesem Beispiel wird mittels LED´s, wie in Bild 16 zu erkennen ist, die aktuell gefahrene Richtung visualisiert.


[[Datei:Richtungsänderung.jpg]]
[[Datei:Richtungsänderung.jpg]]


Abbildung 11:''Einstellung der Fahrtrichtung''
Abbildung 16:''Einstellung der Fahrtrichtung''
 
 


VORSICHT: In dem oben genannten Modus ist keine Real-time Übertragung an die Hardware möglich, d.h. im laufenden Programm kann keine Richtungsänderung mehr durchgeführt werden. Das Programm wird nur auf dem PC ausgeführt und die notwendigen Signale über die Netzwerkverbindung zum NI Controller geleitet. Ist eine Einflussnahme während des laufenden Betriebes erwünscht, muss vorab das VI im Real-time Modus angelegt werden!
VORSICHT: In dem oben genannten Modus ist keine Real-time Übertragung an die Hardware möglich, d.h. im laufenden Programm kann keine Richtungsänderung mehr durchgeführt werden. Das Programm wird nur auf dem PC ausgeführt und die notwendigen Signale über die Netzwerkverbindung zum NI Controller geleitet. Ist eine Einflussnahme während des laufenden Betriebes erwünscht, muss vorab das VI im Real-time Modus angelegt werden!
Zeile 184: Zeile 218:
Die softwareseitig eingebundenen Endschalter bieten auch die Möglichkeit, diese als Positionierhilfen zu verwenden. Denn auch wenn der Speicher der Software gelöscht worden sein könnte und daher die Ist-Position der Achse unbekannt ist, kann durch Verfahren bis zum Endschalter eine neue bekannte Ist-Position angelernt werden. Dabei muss jedoch sichergestellt sein, dass die Achse auf ihrem Weg zum Endschalter keinen Schaden anrichten kann (beispielsweise Bearbeitungswerkzeug NICHT im Eingriff).
Die softwareseitig eingebundenen Endschalter bieten auch die Möglichkeit, diese als Positionierhilfen zu verwenden. Denn auch wenn der Speicher der Software gelöscht worden sein könnte und daher die Ist-Position der Achse unbekannt ist, kann durch Verfahren bis zum Endschalter eine neue bekannte Ist-Position angelernt werden. Dabei muss jedoch sichergestellt sein, dass die Achse auf ihrem Weg zum Endschalter keinen Schaden anrichten kann (beispielsweise Bearbeitungswerkzeug NICHT im Eingriff).


=====Realtime-Projekt erstellen=====
Die Abbildung 17 zeigt die Umsetzung der Verkabelung am im D-Sub-Stecker zum NI-9403 Modul. Die Widerstände sind [http://www.elektronik-kompendium.de/public/schaerer/pullr.htm Pull-Down-Widerstände] um die anliegende Spannung an dem jeweiligen Eingang nach dem Umschalten der Spannung abzuziehen.
 
[[Datei:32_Poliger_D_Sub_Stecker.jpg|500px]]
 
Abbildung 17:''Stecker NI-9403''
 
 
 
In der untenstehenden Tabelle ist die Pinbelegung der Steckverbindung zwischen dem NI-9403 Modul und dem Geckodrive G201X einzusehen. Außerdem ist zu erkennen, wie die Pull-Down-Widerstände (siehe Abbildung 10 rot umkreist) im inneren des Steckers zu verlöten sind [[Datei:Steckerbelegungsplan_32_D_Sub_Stecker.xlsx]].
 
{| border="1"
 
|-
|'''Pin 32-Poliger D-Sub-Stecker'''
|'''Bezeichner in LabView'''
|'''Bezeichner Geckodrive G201X'''
|'''Sonstige Bauteile'''
|-
|1
|01 Step
|Step
|
 
|-
|2
|Direction
|Direction
|
 
|-
|3
|03 Konstanter Endschalter Außen
|
|1. Endschalter/1. Hochohmiger Widerstand
 
|-
|4
|04 Konstanter Endschalter Motor
|
|2. Endschalter/2. Hochohmiger Widerstand
 
|-
|20
|
|Disable
|
 
|-
|21
|21 Schalter betaetigt Motor
|
|1. Endschalter
 
|-
|22
|Schalter betaetigt Außen
|
|2. Endschalter
 
|-
|28
|
|
|1. Hochohmiger Widerstand/2. Hochohmiger Widerstand
 
|-
|29
|
|Common
|
|}
 
===Realtime-Projekt erstellen===


Es zeigte sich die Problematik, dass keine Änderungen am laufenden Programm durchgeführt werden können (z.B.: Richtung, Geschwindigkeit oder Weg). Um dieses Problem zu umgehen kann in LabView ein Programm im Realtime-Modus erstellt werden:
Es zeigte sich die Problematik, dass keine Änderungen am laufenden Programm durchgeführt werden können (z.B.: Richtung, Geschwindigkeit oder Weg). Um dieses Problem zu umgehen kann in LabView ein Programm im Realtime-Modus erstellt werden:


Um ein Programm im Realtime-Modus zu erstellen, muss vorab ein Projekt (wie bereits beschrieben) erstellt werden. Anschließend lässt sich über „Werkzeuge“ => „Project Wizard“ ein neues Fenster öffnen, in dem die notwendigen Voreinstellungen durchgeführt werden müssen. Als erstes ist dem Realtime-Projekt ein Projektname zuzuordnen. Die weiteren Voreinstellungen können direkt übernommen werden. Es ist notwendig das Feld bei „include user-interface“ zu markieren. Im folgenden Schritt lässt sich die Hardware im Unterordner „Real-Time ComapctRIO“ wählen und somit in das Projekt einfügen. Das Feld „Fertigstellen“ öffnet direkt das VI im Realtime-Modus.
Um ein Programm im Realtime-Modus zu erstellen, muss vorab ein Projekt (wie bereits beschrieben) erstellt werden. Anschließend lässt sich über „Werkzeuge“ => „Project Wizard“ ein neues Fenster öffnen, in dem die notwendigen Voreinstellungen durchgeführt werden müssen. Als erstes ist dem Realtime-Projekt ein Projektname zuzuordnen. Die weiteren Voreinstellungen können direkt übernommen werden. Es ist notwendig das Feld bei „include user-interface“ zu markieren. Im folgenden Schritt lässt sich die Hardware im Unterordner „Real-Time ComapctRIO“ wählen und somit in das Projekt einfügen. Das Feld „Fertigstellen“ (siehe Abbildung 18) öffnet direkt das VI im Realtime-Modus.


[[Datei:realtime.jpg]]
[[Datei:realtime.jpg]]


Abbildung 12:''Erstellung eines VI im Realtime-Modus''
Abbildung 18:''Erstellung eines VI im Realtime-Modus''


<br>
''<span style="color:#FF0000"> (Dieses Thema wurde im Wintersemester 2019/2020 nicht bearbeitet) </span>''




Zeile 199: Zeile 308:


'''Real-Time VI to Host VI Communication Methods'''
'''Real-Time VI to Host VI Communication Methods'''
http://digital.ni.com/public.nsf/allkb/48D244EC86971D3986256BD4005CCC28
<ref> http://digital.ni.com/public.nsf/allkb/48D244EC86971D3986256BD4005CCC28 </ref>


'''Sharing Data Using Shared Variables (RT Module)'''
'''Sharing Data Using Shared Variables (RT Module)'''
http://zone.ni.com/reference/en-XX/help/370622G-01/lvrtconcepts/rt_projectvariable/
<ref> http://zone.ni.com/reference/en-XX/help/370622G-01/lvrtconcepts/rt_projectvariable/ </ref>


'''Lossless Communication with Network Streams: Components, Architecture, and Performance'''
'''Lossless Communication with Network Streams: Components, Architecture, and Performance'''
http://www.ni.com/white-paper/12267/en/
<ref> http://www.ni.com/white-paper/12267/en/ </ref>




'''Host- und Target-Programm'''
'''Host- und Target-Programm'''
Im Projektbaum zeigt sich bei der Erstellung eines Realtime-Projekts eine neue Struktur auf. Das Programm untergliedert sich in diesem Fall in zwei Teile. Das „Host-VI“ und das „Target-VI“. Das „Host-VI“ läuft in der Regel in einer Endlosschleife auf dem Rechner. Es dient bei Änderungen des Programms zur Variablenübergabe zum „Target-VI“. Das Target VI hingegen läuft auf der Hardware und wird nur dann ausgeführt, wenn sich die Absolutposition des Schrittmotors ändern soll. Für die Übergabe von Werten zwischen den beiden Programmen können Variablen definiert werden.
Im Projektbaum zeigt sich bei der Erstellung eines Realtime-Projekts eine neue Struktur. Das Programm untergliedert sich in diesem Fall in zwei Teile. Das „Host-VI“ und das „Target-VI“. Das „Host-VI“ läuft in der Regel in einer Endlosschleife auf dem Rechner. Es dient bei Änderungen des Programms zur Variablenübergabe zum „Target-VI“. Das Target VI hingegen läuft auf der Hardware und wird nur dann ausgeführt, wenn sich die Absolutposition des Schrittmotors ändern soll. Für die Übergabe von Werten zwischen den beiden Programmen können Variablen definiert werden.


'''Variablen definieren'''
'''Variablen definieren'''
Zeile 222: Zeile 331:
[[Datei:hostvstarget.jpg]]
[[Datei:hostvstarget.jpg]]


Abbildung 13:''Verknüpfung des Host- und Targetprogrammes mittels Variablen''
Abbildung 19:''Verknüpfung des Host- und Targetprogrammes mittels Variablen''
 


=====Einbindung der automatischen Richtungsänderung in Abhängigkeit der Absolutposition=====
=====Einbindung der automatischen Richtungsänderung in Abhängigkeit der Absolutposition=====


Mittels eines Vergleichs von der aktuellen Absolutwertposition und des Vorgabewertes wird die Richtung ermittelt, in die der Schrittmotor verfahren muss. Ist der Vorgabewert größer als der Absolutwert, hat die boolsche Variable (Data) den Zustand "true". Im anderen Fall wird der Zustand auf "false" gesetzt. Eine Case-Struktur sorgt zustandsabhängig für eine Addition bzw. Subtraktion der Werte von Verfahrweg und Absolutposition. Nach jeder Rechenoption wird der Wert der Variable (abs_pos) überschrieben und kann über ein Anzeigeelement im Host-VI dargestellt werden.
Mittels eines Vergleichs von der aktuellen Absolutwertposition und des Vorgabewertes wird die Richtung ermittelt, in die der Schrittmotor verfahren muss. Ist der Vorgabewert größer als der Absolutwert, hat die boolsche Variable (Data) den Zustand "true". Im anderen Fall wird der Zustand auf "false" gesetzt. Eine Case-Struktur, wie in der nächsten Abbildung, sorgt zustandsabhängig für eine Addition bzw. Subtraktion der Werte von Verfahrweg und Absolutposition. Nach jeder Rechenoption wird der Wert der Variable (abs_pos) überschrieben und kann über ein Anzeigeelement im Host-VI dargestellt werden.




[[Datei:directioncase.jpg]]
[[Datei:directioncase.jpg]]


Abbildung 14:''Automatische Fahrtrichtungsänderung''
Abbildung 20:''Automatische Fahrtrichtungsänderung''
 
 




Zeile 238: Zeile 350:
Die Programmausschnitte wurden aus dem aktuellen LabView-Programm entnommen, welches im entsprechenden Ordner im Versionierungswerkzeug SVN auf der Hochschulseite abgelegt wurde.
Die Programmausschnitte wurden aus dem aktuellen LabView-Programm entnommen, welches im entsprechenden Ordner im Versionierungswerkzeug SVN auf der Hochschulseite abgelegt wurde.


====Einbindung der RS232 Schnittstelle zur Datenübertragung (WICHTIG für weitere Praktika in diesem Bereich!)====
=====Erweitertes Target-Programm mit Verarbeitung eines übernommenen Strings=====
 
In diesem Kapitel geht es darum, einen String der übergeben wird zu speichern, diesen gespeicherten String in X-,Y-,Z- und F-Werte zu separieren und mit einer weiteren Funktion die separierte Soll-Position anzufahren.
 
Wie in der Abbildung 21 links zu erkennen ist, erhalten wir in diesem Ausschnitt des erweiterten Target-Programms den übergebenen String z.B. durch das Terminal Programm Hercules. Wie man ein RS232 Modul einbindet und Funktionen in LabView verbindet um im Endeffekt ein String zu übergeben, ist in dem Artikel [[LabVIEW_RS232_Schnittstelle]] nachzulesen. Aufgrund der While-Schleife, in der Sich das komplette Programms befinde, wird der übergebene String durchgängig mit dem nächsten Schleifendurchlauf überschrieben. Um aber einen String verarbeiten zu können, benötigt man einen zusammenhängenden String, der zur Verarbeitung abgespeichert werden muss. Dies übernimmt die programmierte Funktion oben links in der Abbildung über dem Case-Struktur-Kästchen. Der übergebene String wird hier mit der Funktion „Strings verknüpfen“ mit dem zuletzt gespeicherten String verknüpft, so dass einzelne übergebene Zeichen miteinander verkettet werden können.
 
Die darauffolgende Funktion „Teil-String“ begrenzt den zu speichernden String auf 20 Zeichen, welches die exakte Länge eines Strings ist, um X-,Y-,Z-, und F-Werte mit jeweils 4 Zahlen und einem abschließenden Semikolon z.B. „X1234Y1234Z1234F1234;“ zu erhalten. Die numerische Zahl 20 ist somit mit der Funktion am Eingang "Länge" zu verknüpfen.
 
Die rosa Kästchen mit dem schwarzen Häuschen sind lokale Variablen, die sich unter den Funktionen in der Registerkarte Datenaustausch befinden. Um eine lokale Variable verwenden zu können, müssen sie jedoch schon definiert bzw. vorhanden sein. Hierzu muss erst ein String-Anzeigeelement im Frontpanel erstellt werden. Durch einen Links-klick auf die lokale Variable lässt sich nun die zu verwendende Variable auswählen und durch einen Rechts-klick und auf „In ‚Lesen‘ ändern“ so ändern, dass die gespeicherte Variable bei der Funktion „Strings verknüpfen“ verwendet werden kann.
 
[[Datei:Filter.jpg]]
 
Abbildung 21:''String speichern''
 
 
Unter der Funktion zum Speichern des Strings befindet sich eine Case-Struktur. Alle Funktionen, die sich in dem Case-Struktur-Kästchen befinden, werden ausgeführt, wenn sich der boolische Wert am Case-Selektor von 0 auf 1 ändert. Die Bedingung, dass die Funktionen in der Case-Struktur ausgeführt werden, wird hier durch einen gleich-Operator realisiert. Wenn sich in dem übergebenen String ein Semikolon befindet, wird durch die „Gleich?“ Funktion der boolesche Wert 1 an die Case-Struktur übergeben und die sich darin befindende Funktionen ausgeführt.
 
In der Case-Struktur befindet sich wieder die lokale Variable „Speicher“, in der alle X-,Y-,Z- und F-Werte gespeichert wurden. Die sich in der Mitte befindende Funktion „In String suchen“ kann den eingelesenen String in verschiedene Formate umformatieren und teilweise, komplett oder unterteilt wieder ausgeben. Die sich darüber befindende Codierung „X%4dY%4dZ%4dF%4d“ realisiert, dass die Zahlen des Strings nach X, Y, Z und F alle natürlichen Zahlen separat an verschiedene Ausgängen ausgeben werden. Die verschiedenen Codierungen sind in einer Tabelle in der erweiterten Hilfe von LabView hinterlegt.
 
Die 0 am Eingang „Anfangssuchposition“ gibt lediglich an, ab welcher Stelle der String untersucht werden soll und ist daher mit 0 angegeben. Der Ausgang „verbleibender String“ sollte nach der Durchführung nichts ausgeben, da alle Werte verarbeitet werden sollten. Auch das Semikolon sollte im String nicht enthalten sein, da die Case-Struktur im Programmablauf vor dem Speichern des Semikolons ausgeführt wird. Alle „gefilterten“ X-, Y-, Z- und F-Werte werden hier von den Ausgängen an das Frontpanel weitergeleitet und durch numerische Anzeigeelemente visualisiert. Außerdem werden sie dadurch auch wieder in lokale Variablen gespeichert, um sie an anderer Stelle im Programm zu verwenden. 
 
[[Datei:Schritt.jpg]]
 
Abbildung 22:''Position anfahren''
 
 
 
In der Abbildung 22 ist eine erweiterte Funktion des VI aus dem Kapitel „Verfahren einer vorgegebenen Wegstrecke“ dargestellt.  Die erweiterte Funktion ermittelt den Unterschied zwischen der Ist-Position zur Soll-Position und lässt den Motor in die Richtung fahren, um zur übergebenen Soll-Position zu gelangen. Wie in dem VI aus dem Kapitel „Verfahren einer vorgegebenen Wegstrecke“ wird dies mit Vergleichern realisiert.
 
Die beiden Vergleicher „größer“ und „kleiner“ unterhalb der Funktion „Flache Sequenz“ addieren bzw. subtrahiert mit jedem Schleifendurchlauf immer eine 1 zur aktuellen Ist-Position. Um allerdings einen Wert von 1 zu addieren bzw. zu subtrahieren, benötigt man an dieser Stelle einen Konvertierer der boolesche Werte zu einen numerischen Wert konvertiert, da die Vergleicher keine numerischen Werte ausgeben können. Diese Funktion findet man unter der Registerkarte „Programmierung“ und „Boolesch“. Weil die booleschen Werte einen Schalter zur Richtungsänderung ersetzen, wird hier eine Verbindung zum zuvor definierten Output des NI Controllers geschaffen (siehe Kapitel “Richtungsänderung des Schrittmotors“). Die Funktion erkennt nun, in welche Richtung der Motor fahren muss und gibt das Signal autonom an den Motor Controller weiter.
 
Um den Motor bei Abweichung der Ist-Position mit dem Soll-Position fahren zu lassen, wird bei der erweiterten Funktion der Ist-Wert mit dem Soll-Wert, der übergeben wurde, verglichen. Dies übernimmt ein ungleich Operator „Ungleich?“. Bei Abweichung des Ist-Werts vom Soll-Wert wird auch hier ein True (1) an den DIO angelegt und der Motor dreht sich (siehe Kapitel „Ansteuerung eines Schrittmotors mit LabView“).
 
In der nächsten Abbildung werden die Endschalter Softwaretechnisch ausgelesen. Dazu müssen vier Umgebungsvariablen der While-Schleife hinzugefügt werden. Zwei müssen davon durch ein rechtsklick zu „lesen“ geändert werden und für eine Visualisierung auf dem Frontpanel mit LED’s verbunden werden. Damit der Motor nicht weiter dreht, ist eine Verbindung wie oben links in der Abbildung 23 zu schaffen. „oder“ Operatoren dienen hier einer gefächerten Verbindung und Stoppen das Programm bei Betätigung eines Schalters. Um eine Verbindung zu den richtigen Ein- und Ausgängen zu schaffen, werden wieder durch einen Linksklick auf die Umgebungsvariablen die zuvor Konfigurierten Ausgänge ausgewählt. Zum Schluss müssen noch zwei Umgebungsvariablen mit einer „True-Konstante“ verbunden werden, um sie mit Spannung zu versorgen.
 
[[Datei:Endschalter.jpg]]
 
Abbildung 23:''Endschalter''
 
 


Bisher wurde in diesem Artikel der Umgang mit LabVIEW beschrieben und die Programmierung eines funktionsfähigen Programmes zur Steuerung einer Achse. Ein weiterer wichtiger Bereich zur Realisierung einer autonomen Achsenbewegung ist allerdings die autonome Übergabe von Parametern zur Steuerung der Achse. Dabei ist es von Bedeutung, eine Real-Time Anwendung zu gewährleisten. Hierzu wird in dem Artikel LabVIEW RS232 Schnittstelle eine Möglichkeit aufgezeigt, Daten über die RS232 Schnittstelle zu erhalten und im Blockdiagramm weiterführend zu verwenden.
Weil das komplette Programm (VI) die maximale Upload-Größe überschreitet, finden Sie das Originalprogramm im SVN an dem Ort:


====Aufgetretene Probleme====
\MTR_GPE_Praktikum\Fachthemen\Automatisierung_LabView\Programme\Motoransteuerung_RealtimePro


Neueinbindung der DIOs bei Neustart des Rechners:
unter den Namen: Target_Programm


Beim Neustart des Computers wird der Hardware eine neue IP-Adresse zugeordnet. Die Hardware muss neu eingebunden werden, da das bestehende Programm diese nicht mehr erkennt. Das führt dazu, dass die digitalen In- und Outputs im gewünschten Programm neu zugeordnet werden müssen. Dabei gehen auch die vormals hinzugefügten Bezeichnungen der DIO's verloren.
====Einbindung der RS232 Schnittstelle zur Datenübertragung (WICHTIG für weitere Praktika in diesem Bereich!)====


Alternativ kann im Projektexplorer die angezeigte Hardware mit der "alten" IP-Adresse gelöscht werden und anstatt dessen die Hardware nochmal neu eingebunden und an dieser Stelle eingefügt werden.
Bisher wurde in diesem Artikel der Umgang mit LabVIEW beschrieben und die Programmierung eines funktionsfähigen Programmes zur Steuerung einer Achse erläutert. Ein weiterer wichtiger Bereich zur Realisierung einer autonomen Achsenbewegung ist allerdings die autonome Übergabe von Parametern zur Steuerung der Achse. Dabei ist es von Bedeutung, eine Real-Time Anwendung zu gewährleisten. Hierzu wird in dem Artikel [[LabVIEW_RS232_Schnittstelle]] eine Möglichkeit aufgezeigt, Daten über die RS232 Schnittstelle zu erhalten und im Blockdiagramm weiterführend zu verwenden.


Falsche Datentypen:
===Aufgetretene Probleme in der Programmierung===
'''Falsche Datentypen:'''


Teilweise kann es bei zyklischen Abfragen eines bool'schen Datentyps (bspw. in jedem Durchlauf einer Schleife) zu Problemen kommen, wenn dieser Wert für die Abbruchbedingung der Schleife verwendet wird. Dabei wird ein Fehler angezeigt, dass es sich nicht um einen bool'schen Wert an sich, sondern um ein eindimensionales Array handelt.
Teilweise kann es bei zyklischen Abfragen eines bool'schen Datentyps (bspw. in jedem Durchlauf einer Schleife) zu Problemen kommen, wenn dieser Wert für die Abbruchbedingung der Schleife verwendet wird. Dabei wird ein Fehler angezeigt, dass es sich nicht um einen bool'schen Wert an sich, sondern um ein eindimensionales Array handelt.


'''National Instruments Support:'''


====Ausblick====
Im Kontext der Einbindung der RS232 Schnittstelle zur Übergabe von Parametern zur Motorbewegung konnte der Support leider keine Hilfestellung leisten. Der betreuende Mitarbeiter verwies auf die Vielzahl der Module von NI und konnte leider zu keiner Lösung beitragen. Dazu möchte ich anmerken, dass die Hilfe des Supports angenommen werden soll, jedoch vor allem bei spezifischen Problemen es einer parallelen Eigenrecherche bedarf. Für weitere Informationen und Hilfestellungen beachten Sie bitte den eigenständigen Artikel [[LabVIEW_RS232_Schnittstelle]].
===Ausblick===


'''Encoder'''
'''Encoder'''
Das aktuelle Programm stellt nur eine Steuerung des Motors dar. D.h. es wird davon ausgegangen, dass das Ausgangssignal der Steuerung eine entsprechende Bewegung des Motors zur Folge hat. Beispielsweise unter Belastung oder anderen Betriebszuständen kann die Ist-Position des Motors jedoch von der Soll-Position im Programm abweichen. Um diese Abweichung zu erkennen und ausgleichen zu können, kann ein Motorpositionssensor eingesetzt werden. Dieser wird auch als Encoder bezeichnet. Anhand des Beschaltungsplanes kann dieser an mehrere Eingänge des Controllers angeschlossen werden und so entsprechend die Position des Motors an das Programm übermittelt werden.
Das aktuelle Programm stellt nur eine Steuerung des Motors dar. D.h. es wird davon ausgegangen, dass das Ausgangssignal der Steuerung eine entsprechende Bewegung des Motors zur Folge hat. Beispielsweise unter Belastung oder anderen Betriebszuständen kann die Ist-Position des Motors jedoch von der Soll-Position im Programm abweichen. Um diese Abweichung zu erkennen und ausgleichen zu können, kann ein Motorpositionssensor eingesetzt werden. Dieser wird auch als Encoder bezeichnet. Anhand des Beschaltungsplanes kann dieser an mehrere Eingänge des Controllers angeschlossen werden und so entsprechend die Position des Motors an das Programm übermittelt werden.


'''Einbindung der RS232 Schnittstelle'''
'''Auswertung des Strings über die RS232 Schnittstelle'''
Um die Achsen miteinander kommunizieren zu lassen, ist es notwendig eine RS232 Schnittstelle einzubinden. Dazu gilt es ein weiteres Modul in die Hardware einzufügen und in der Software zu implementieren.  
 
Wie in dem Kapitel "Erweitertes Target-Programm mit Verarbeitung eines übernommenen Strings" beschrieben wird, ist das Programm in der Lage, einen String zu analysieren, die Z-Werte zu separieren und einen Motor damit anzusteuern. Um jedoch alle Motoren der CNC-Maschine anzusteuern, muss das Programm noch vervollständigt werden und weitere Ausgänge angesteuert werden.
 
'''Real-Time'''
 
Außerdem ist die Funktion, dass das Target- mit dem Host-Programm  interagiert noch nicht funktionsfähig. Globale Variablen sind in dem Host-Programm und dem "Erweitertes Target-Programm" zwar bereits erstellt worden, es konnte jedoch aus zeitlichen Gründen noch nicht zu Ende programmiert werden.
 
====Softwareerweiterung auf mehrere Achsen====
 
Bisher wurden Einzelprogramme geschrieben und alles für eine Achse geschrieben. in Zukunft soll es möglich sein die Fräse mit LabVIEW ansteuern zu können.
Der jetzige Stand wird nun wiedergegeben
 
 
 
====Software Zusammensetzung====
 
Nach der Zusammensetzung den beiden Dateien "Step machen" und "String lesen" und der Erweiterung auf 4 Achsen durchgeführt wurde, ist es nun möglich, die vorher aus den String extrahierten Koordinaten, weiter zu leiten an die jeweiligen Achsen und diese dann anzusteuern. Die Programmierung ist im Blockdiagramm zu sehen(Abb. 25). X-, Y-, Z- und F- Achsen Ansteuerungen die in Abbildung 19 nicht richtig erkennbar sind, sind in Abbildung 16 [[Datei:Schritt.jpg]] genau zu erkennen.Im Frontpanel (Abb. 20) ist erkennbar dass der String in die 4 verschiedenen Koordinierten extrahiert. Ausserdem ist es möglich die Step Geschwindigkeit zu beeinflussen, es ist erkennbar ob und welcher Endschalter betätigt ist und in welche Richtung der Motor läuft.
 
 
 
[[Datei:Blockdiagramm.jpg|1000px]]
 
Abbildung 25: ''Blockdiagramm''
 
 
 
[[Datei:Frontpanel.jpg|1000px]]
 
Abbildung 26: ''Frontpanel''
 
===Verkabelung zwischen der LabVIEW Hardware und der Fräse===
 
Es wurde ein Kabel angefertigt, dass die Kommunikation zwischen der LabVIEW Hardware NI 9403 und der Fräse sichert.
 
 
[[Datei:Leitung.jpg]]
 
Abbildung 27: ''Leitung''
 
 
 
 
=====Pinnbelegung=====
 
Um den NI 9403 (37Pin) mit dem Fräse (25Pin) zu verbinden, brauchen wir eine besondere Verkabelung; Die D`Sub 37 Pin wird in D'Sub 25 Pin umgewandelt. Die Umwandlung erfolgt durch die willkürliche Zuteilung von Pin.
Die nachfolgende Tabelle zeigt eine mögliche Zuteilung. ''<span style="color:#FF0000"> (Dieses Thema wurde im Wintersemester 2019/2020 nicht bearbeitet ==> Pinbelegung muss überarbeitet werden) </span>''
 
{| border="1"
 
|-
|'''D'Sub 25 pin'''
|'''Belegung bei LPT-Ports'''
|'''Belegung im Schaltschrank'''
|'''D`Sub 37 pin'''
|-
|1
|
|
|
 
|-
|2
|
|Step x-Achse
|1 DIO 0
 
|-
|3
|
|Direction x-Achse
|2 DIO 1
 
|-
|4
|
|Step y-Achse
|5 DIO 4
 
|-
|5
|
|Direction y-Achse
|6 DIO 5
 
|-
|6
|
|Step z-Achse
|7 DIO 6
 
|-
|7
|
|Direction z-Achse
|8 DIO 7
 
|-
|8
|
|Step Rotationsachse
|9 COM
 
|-
|9
|
|Direction Rotationsachse
|10 COM
 
|-
|10
|
|Step Extruder
|11 DIO 8
 
|-
|11
|
|Direction Extruder
|12 DIO 9
 
|-
|12
|
|Relais Spindel
|13 DIO 10
 
|-
|13
|
|Relais Staubsauger
|14 DIO 11
 
|-
|14
|
|Relais noch frei
|15 DIO 12
 
|-
|15
|
|
|
 
|-
|16
|
|
|
 
|-
|17
|
|
|
 
|-
|18
|Ground
|
|
 
|-
|19
|Ground
|
|
 
|-
|20
|Ground
|
|
 
|-
|21
|Ground
|Common x-Achse
|16 DIO 13
 
|-
|22
|Ground
|Common y-Achse
|17 DIO 14
 
|-
|23
|Ground
|Common z-Achse
|18 DIO 15
 
|-
|24
|Ground
|Common Rotationsachse
|19 RSVD (Pin reserviert speziell für Kommunikation mit NI-Zubehör)
 
|-
|25
|Ground
|Common Extruder
|23 DIO 19
|}
Abbildung 28: ''Pinbelegung''
 
====Anhang====
Das Programm zum Download als .zip-Datei<br>
[[Datei:Automatisierung_LabView.zip]]
 
==Derzeitige Probleme==
'''Generell:'''
 
*Nach der Verschachteln der Schleifen, haben wir probiert unsere Programm laufen zu lassen, leider sind wir auf folgende Probleme gestoßen:
*Der Motor bewegt sich aber sehr langsam: Das könnte einfacht gelöst werden, indem man die Änderung des Parameters "Scan Period" im Unterpunkt "Scan Engine" bei den Einstellungen der "Real-Time CompactRIO Properties" die Geschwindigkeit der Achse  verbessert --> Auch das funktioniert nicht, da dann Fehlermeldung ausgegeben wird <br>
<br>
[[Datei:Sce2.2.PNG|400px|Einstellung der Stufenweite auf 1 µs <ref> Einstellung der Stufenweite auf 1 µs  (eigenes Foto) </ref>]]<br>
Abbildung 29: ''Einstellung der Stufenweite auf 1 µs'' <br>
 
<br>
[[Datei:Scanperiode_1ns_FEHLERMELDUNG.PNG|400px|Fehlermeldung für Stufenlänge 1 µs <ref> Fehlermeldung für Stufenlänge 1 µs (eigenes Foto) </ref>]]<br>
Abbildung 30: ''Fehlermeldung für Stufenlänge 1 µs'' <br>
<br>
 
* Die Dauer der Steps ist bis max. 10 ms runterskalierbar. Danach gibt die cRIO nur noch ein dauerhaftes HIGH-Signal aus --> Wünschenswert wäre eine Steplänge von 1 µs <br>
[[Datei:Zeit_TRUE_10ms_FALSE_10ms.PNG|400px|Stufensignal mit Stufenzeit 10ms <ref> Zeit_TRUE_10ms_FALSE_10ms (eigenes Foto)</ref>]]<br>
Abbildung 31: ''Zeit_TRUE_10ms_FALSE_10ms.PNG'' <br>
<br>
 
==Lösungsansätze==
===Lösungsmöglichkeit laut NI Support===
* Hardware des PC's (Stand: 13.1.2020) zu langsam ("nur" 4GB RAM)
* LabView 2014 Sofrware "nur" als 32-bit Version vorhanden
* Um mehr als 4GB Systemspeicher nutzen zu können wird ein 64-bit Betriebssystem notwendig
==> Abhilfe schafft:
* Leistungsfähigere Hardware (mind. 16 GB RAM)
* Installation NI LabView als 64-bit Version
* Windows-Betriebssystem als 64-bit Version
<br>
 
===Einstellung der Scan-Rate===
'''<span style="color:#FF0000"> Erst sinnvoll, wenn Computer aufgerüstet ist. </span>'''
 
Ziel:
Durch die Änderung des Parameters "Scan Period" im Unterpunkt "Scan Engine" bei den Einstellungen der  "Real-Time CompactRIO Properties" kann die Geschwindigkeit der Achse eminent verbessert werden. Die "Scan Period" ist die maximale Abtastrate zwischen CRio und dem NI9403-Modul. Durch eine schnellere Abtastrate ist es möglich, mehr Stepsignale an den Geko-Drive zu übertragen um somit die Geschwindigkeit der Achse zu erhöhen. Durch die Änderung dieses Parameters auf die minimale Zeit von 1ms ist es möglich, eine erhebliche und ausreichende, maximal mögliche Geschwindigkeit zu erlangen.
 
'''Einstellung der Scan-Rate wie folgt:'''
 
1. Im Projekt ==> Rechtsklick auf cRIO-Modul ==> "Eigenschaften" <br>
<br>
[[Datei:Sce1.png|300px|Einstellung der Scan-Rate <ref> Einstellung der Scan-Rate 1 (eigenes Foto)</ref>]]<br>
Abbildung 32: ''Einstellung der Scan-Rate 1'' <br>
<br>
 
2. Klick auf Kategorie "Scan Engine" ==> Einstellung der Scan-Rate wie im markierten Feld (vgl. Bild unten) <br>
<br>
[[Datei:Fehler 1mys 1.PNG|400px|Einstellung der Scan-Rate für Stufenlänge 1 µs <ref> Einstellung der Scan-Rate 2 (eigenes Foto)</ref>]]<br>
Abbildung 33: ''Einstellung der Scan-Rate 2'' <br>
<br>
''Originaldatei der Bilder:[[Datei:Originaldatei_sce.pptx]]''
 
== Literatur ==
<references />
 


Mittels der Schnittstelle können dann Koordinaten seriell übertragen werden. Es wurde sich entschieden eine definierte Zahlen/Buchstabenfolge (String) zu übertragen.
Übergeordnetes Projekt:[[3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR)]]
Dieser kann wie folgt aussehen: X1000Y0000Z0000E. Dieses Format ermöglicht die Weitergabe der einzelnen Soll-Positionen an die Achsen. Jeder Achse wird hinter einem Buchstaben X,Y oder Z ein Wert für die Soll-Position vorgegeben, die diese dann selbständig anfahren soll. Der String muss dafür Zeichen für Zeichen entziffert werden, damit die entsprechende Achse ihren Teil der "Botschaft" erkennen und verarbeiten kann. Beispielsweise muss die Z-Achse den String auf den Buchstaben "Z" hin durchsuchen. Ist der Buchstabe gefunden, wird die folgende Folge von Ziffern eingelesen und in eine Variable geschrieben, welche die Absolutposition der Z-Achse vorgibt. Nach Einlesen des Buchstaben E (E = Ende des Strings) kann die Achse daraufhin mit dem Anfahren der Sollposition beginnen.

Aktuelle Version vom 6. Februar 2020, 12:29 Uhr

Einleitung

Im Rahmen des Produktionstechnik II Praktikums und dem übergeordnetem Projekt "3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR)" ist es die Aufgabe, mittels NI LabView die Ansteuerung eines CNC Fräsportals (3 Linearachsen + 1 Rotationsachse) zu realisieren. Unsere Namen sind Maximilian Bröer und Jarco Groenhagen. Wir haben uns im Wintersemester 2019/2020 mit diesem Thema beschäftigt.

Folgende Studenten haben sich mit dieser Aufgabe beschäftigt:

Student(en) Semester Anmerkung
Maximilian Bröer und Jarco Groenhagen Wintersemester 2019/2020
Rainer Heither und Joel Dongmeza Wintersemester 2016/2017
Raphael Bertelt Wintersemester 2015/2016
Felix Kortmann und Dominik Rebein Wintersemester 2014/2015
Martin Klingen Wintersemester 2013/2014 Erstellung des Artikels

Die verwendete Software ist LabView 2014 von National Instruments.

Es wurden die vorherigen Dateien "String lesen" und "Step machen" passend zusammengeführt und erweitert. Ausserdem wurde durch eine Kabel die Möglichkeit geschaffen Zukünftig das Programm, dass auf dem cRIO 9024 gespeichert und verarbeitet wird, über den cRIO 9403 zur Fräse zu senden.


Regelkreis, technischer Systementwurf und Aufbau

Vor der Hardware- und Softwarerealisierung wurde zunächst ein Regelkreis für die Ansteuerung des Schrittmotors entworfen. Für die Ansteuerung des Schrittmotors wird ein Motorcontroller des Typs Gecko Drive (Gecko G201X)[1] verwendet. Dieser übernimmt die leistungsseitige Ansteuerung des Motors. Der Motor bewegt eine Linearachse, deren Bewegung für eine Achse einer Bearbeitungsmaschine verwendet wird. Der NI Controller fungiert als Steuerteil des Aufbaus, indem die benötigten Signale an den Motorcontroller gesendet werden. Über einen Motorpositionssensor ist es möglich, die Bewegungen des Motors softwareseitig einzulesen und für einen Regelkreis zu verwenden. Dabei soll der Weg s, den die Linearachse zurücklegt, geregelt werden. Den Regelkreis zeigt die folgende Abbildung 1.
Regelkreis für das Verfahren der Achse [2]

Abbildung 1: Regelkreis für Schrittmotoransteuerung

Abbildung 2 zeigt den technischen Systementwurf des Gesamtsystems bestehend aus den einzelnen Bestandteilen zur Motoransteuerung.

Abbildung 2: Technischer Systementwurf mit NI-LabView
Originaldatei: Datei:Technischer Systementwurf LabView.vsdx

Abbildung 3 zeigt die Verdrahtung der cRio 9024 im Ganzen. Sie soll als Orientierungshilfe für nachfolgende Projekte gedacht sein, um einen Einstieg zu bekommen oder mögliche Fehler in der Hardwareverdrahtung entdecken zu können.

Abbildung 3: Verdrahtung und Aufbau cRio 9024

Link zum Handbuch: cRIO 9024 - Handbuch

Belegungsplan für Motoransteuerung

Zunächst sollten die benötigten Eingänge und Ausgänge, die für die Funktion des Motors benötigt werden, definiert werden. In diesem Fall wurde zur Ansteuerung des Schrittmotors ein Leistungsmodul des Typs Gecko Drive verwendet. Aus dem Datenblatt[3] lassen sich die notwendigen Informationen über die Beschaffenheit der benötigten Signale entnehmen.

Schließlich kann das Leistungsmodul mit dem Schrittmotor verbunden werden und es können entsprechende Leitungen für den Anschluss an den NI Controller verlegt werden.

In diesem Fall wurde nach dem Belegungsplan in Abbildung 4 verkabelt.

Abbildung 4: Belegungsplan für Schrittmotoransteuerung

Erstellung eines neuen Projekts

Um mit der Programmierung zu starten, muss wie in Bild 5 zunächst ein leeres Projekt erstellt werden. Dieses enthält später alle Informationen, Schnittstellen und graphischen Oberflächen, die man für ein Programm benötigt.

Dafür muss die aktuell auf dem Computer installierte Version von National Instruments LabView (wir haben NI LabView 2014 verwendet) gestartet werden. Es öffnet sich ein Fenster.

Dort muss zum Start erstmal die Umgbungseinstellung gewählt werden.

Umgebungseinstellungen für neues Projekt wählen [4]

Abbildung 5: Umgebungseinstellungen für neues Projekt wählen


Als nächstes kann dann das neue Projekt erstellt werden:

Neues Projekt erstellen [5]

Abbildung 6: Neues Projekt erstellen

Originaldatei:[Datei:NP_2.png]

Wählen Sie ==> Alle ==> Leeres Projekt ==> Fertigstellen

Leeres Projekt erstellen [6]

Abbildung 7: Leeres Projekt erstellen


Daraufhin zeigt sich der sogenannte Projekt-Explorer, welcher alle wichtigen Bestandteile des Projektes als auf-und zuklappbare Reiter darstellt.

Möchte man das Projekt mit einem Eingabe-/Ausgabegerät verwenden, muss dieses zunächst hinzugefügt werden. Die folgenden Schritte beschreiben, wie ein I/O Controller cRIO 9024 in ein Projekt eingebunden werden kann.

Im Project-Explorer befindet sich nun das leere Projekt, dem nun die Hardware hinzugefügt wird:

• Rechtsklick auf das Projekt => Neu => Ziele und Geräte


Hardware cRio 9024 einbinden [7]

Abbildung 8: Hardware cRio 9024 einbinden

• Im Ordner Real-Time CompactRIO befindet sich die über das Netzwerk verbundene HSHL-CRIO-CPU02 und wird über einen Doppelklick zum bestehenden Projekt hinzugefügt.
Hardware cRio 9024 einbinden (2) [8]

Abbildung 9: Hardware cRio 9024 einbinden (2)

Nun muss noch der Programmiermodus ausgewählt werden.

Programmiermodus ausgewählen [9]

Abbildung 10: Programmiermodus ausgewählen

Anschließend erscheint im Project-Explorer (siehe Bild 11) die Hardware Chassis (cRio 9024). Das im Slot 1 befindliche Modul zeigt alle DIO´s (DIO = digital Input/Output), welche über einen Rechtsklick auf Mod1 konfiguriert werden können, d.h. die jeweiligen DIO´s können als Input oder Output definiert werden.
Erfolgreich Eingebundene Hardware in neuene Projekt [10]

Abbildung 11: Erfolgreich Eingebundene Hardware in neuene Projekt


• Um potenzielle Fehler zu vermeiden ist es sinnvoll, den verwendeten Input bzw. Output direkt umzubenennen. Dazu muss lediglich doppelt auf die Bezeichnung des DIO (bspw. DIO20) im Projektexplorer geklickt werden und der gewünschte Name eingetragen und durch die Enter-Taste bestätigt werden.

Originaldatei der Bilder:Datei:Originaldatei NP.pptx


Die Hardware wurde nun mit dem Programm "bekannt gemacht" und kann verwendet werden.

Das folgende Kapitel beschreibt die notwendigen Schritte, um mit der Programmierung zu starten und welche Bestandteile die Programmieroberfläche aufweist.

Ansteuerung eines Schrittmotors mit LabView

Grundsätzlich gibt es mehrere Möglichkeiten über LabView einen Schrittmotor anzusteuern. Voraussetzung dafür ist eine Art Pulsweitenmodulation (PWM) zu erhalten. Eine Option ist einen von LabView bereits fertigen "Signalgenerator" zu wählen. Dieser ist einfach und übersichtlich aufgebaut. Jedoch führte es schnell zu Problemen, sobald man einen Zähler oder ein Abbruchkriterium hinzufügen möchte. In dem folgenden Programm wird dies über eine "flache Sequenz" realisiert.

Befindet man sich im Blockdiagramm, so können über die von LabView gestellte Funktionspalette die gewünschten Bausteine mittels drag&drop in die Arbeitsfläche gezogen werden. Unter "Programmierung" => "Strukturen" befindet sich der Baustein "Flache Sequenz". Die Funktion dieses Bausteins ist es, die entsprechenden Operationen, die in der Sequenz angegeben werden, zyklisch zu wiederholen. Nachdem der Baustein auf die Arbeitsfläche gefügt wird, besteht dieser Baustein nur aus einer Sequenz in Form eines Rahmens wie man in Bild 12 erkennt. Da wir für die Ansteuerung des Schrittmotors jedoch zwei unterschiedliche Zustände (1/0) benötigen, kann man über ein Rechtsklick der Sequenz "einen Rahmen danach einfügen" wählen. Um die Zustände der jeweiligen Sequenz zu definieren, wird über "Programmierung" => "Boolesch" eine "True"- bzw. "False-Konstante" eingefügt. Die Länge der einzelnen Zustände werden über Wartezeiten ("Warten auf ein Vielfaches von…") bestimmt ("Programmierung" => "Timing"). Um den Output des Signals festzulegen, muss über den Projekt-Explorer der gewünschte DIO in das Blockdiagramm gefügt werden. Wichtig: Der gleiche DIO muss in jeder der Beiden Sequenzen vorhanden sein. Anschließen muss die True- bzw. False-Konstante mit dem jeweiligen DIO verbunden werden (Hier DIO0). Somit ändert sich der Zustand nach der definierten Wartezeit von z.B. 20ms von 1 (5V) auf 0(0V). Dieser Ablauf würde einem Step entsprechen. Um dies zu duplizieren, wird das Programm in eine While-Schleife gefügt ("Programmierung" => "Strukturen" => "While-Schleife"). Damit werden die Sequenzen so oft wiederholt, bis über ein Abbruchkriterium die Schleife gestoppt wird. Anfangs ist es sinnvoll, dies über einen Schalter o.ä. zu realisieren (Rechtsklick auf das Abbruchkriterium der Schleife=> "Erstellen" => "Bedienelement").

Abbildung 12:Programmierung einer flachen Sequenz


Damit auch vom VI Einfluss auf diese Zeiten und damit die Fahrgeschwindigkeit des Schrittmotors genommen werden kann, ist ein Regler einzufügen, welcher außerhalb der „flachen Sequenzen“ liegt. Dieser kann mit beiden Warteelementen (siehe Bild 13) verbunden werden, da die Wartezeiten beider Zustände immer identisch sein sollte. (High- / Low-Flanken jeweils 50%)

Abbildung 13:Einstellung des Taktverhältnisses


Verfahren einer vorgegebenen Wegstrecke

Einfügen eines Zählers:

Um mit dem Schrittmotor eine definierte Strecke zu verfahren, müssen vorab die tatsächlichen Zustandsänderungen, wie in Bild 14 dargestellt, gezählt werden. Auch hierbei gibt es mehrere Möglichkeiten. Eine einfache wie funktionelle Lösung wird im Folgenden beschrieben:

• Vorab muss eine Konstante erstellt werden, welche für den Startwert des Zählers steht (Programmierung => Numerisch => Num. Konstante) Diese muss für diesen Fall vor der ersten Sequenz positioniert werden.

• Sobald das Programm in die erste Sequenz springt, soll der Zähler um 1 gesteigert werden. Dazu dient der Baustein Programmierung => Numerisch => Inkrementieren.

• Der Feedback-Node dient hierbei als Speicher und Rückkopplungselement.

• Um sich den aktuellen Zählerwert ausgeben zu lassen, muss ein numerisches Anzeigeelement eingefügt werden, welches den Zählerstand nach dem Inkrementieren abgreift.

• Das eingefügte Anzeigeelement erscheint ebenso automatisch im VI und kann dort jederzeit abgelesen werden.

Abbildung 14:Einbindung eines Schleifenzählers


Jedoch werden in diesem Fall nur die Anzahl der Steps angezeigt. In Abbildung 15 ist die Funktion erweitert worden. Für die Ausgabe in Millimeter ist vorab eine kleine Rechenoption nötig. Aus dem Datenblatt des Schrittmotors lässt sich entnehmen, dass ein Schritt 0,033mm entspricht. Daher muss die Anzahl der Schritte mit 0,033 multipliziert werden. Ein weiteres Anzeigeelement ermöglicht die Ausgabe der aktuell verfahrenen Strecke in Millimeter. Fügt man ein Eingabeelement hinzu, um die gewünschte Strecke im Millimeter einzugeben, muss dieser daher mit 30 multipliziert werden, um die nötige Anzahl der Steps zu ermitteln. Um ein Abbruchkriterium der While-Schleife zu erzeugen, greift man den aktuellen Zählerwert der bereits gefahrenen Schritte ab und vergleicht („größer/gleich“) dieses Ergebnis mit der Anzahl an Steps, welche für die vorgegebene Wegstrecke nötig ist. Sobald dieser Vergleich „True“ ist, ist die Bedingung erfüllt, um die While-Schleife zu verlassen. Mit diesem Vorgehen ist ein Verfahren einer vorgegebenen Wegstrecke möglich.

Abbildung 15:Verfahren einer definierten Wegstrecke


Richtungsänderung des Schrittmotors

Um die Verfahrrichtung des Schrittmotors zu ändern, muss zunächst ein Schalter, welche anschließend über das VI zu bedienen ist, in das Blockdiagramm eingefügt werden. Für die Übergabe des Signals an die Hardware ist der jeweilige DIO-Port (Hier DIO-1) aus dem Projekt-Explorer in das bestehende Programm zu involvieren. Da dies eine einmalige Abfrage beim Start des Programmes ist, ist der Befehl außerhalb der While-Schleife zu positionieren. Je nach Schaltlage gibt dieser ein Highpegel(5V) oder Lowpegel (0V) an den zuvor definierten Output des NI Controllers, welcher mit dem Input "Direction" des Gecko Drive verbunden ist. Damit ist die Drehrichtung des Motors definiert. In diesem Beispiel wird mittels LED´s, wie in Bild 16 zu erkennen ist, die aktuell gefahrene Richtung visualisiert.

Abbildung 16:Einstellung der Fahrtrichtung


VORSICHT: In dem oben genannten Modus ist keine Real-time Übertragung an die Hardware möglich, d.h. im laufenden Programm kann keine Richtungsänderung mehr durchgeführt werden. Das Programm wird nur auf dem PC ausgeführt und die notwendigen Signale über die Netzwerkverbindung zum NI Controller geleitet. Ist eine Einflussnahme während des laufenden Betriebes erwünscht, muss vorab das VI im Real-time Modus angelegt werden!

Einbindung der Endlagenschalter

Um eine unbeabsichtigte Kollision des Schlittens der Linearachse mit den mechanischen Endanschlägen zu vermeiden, werden Endlagenschalter eingesetzt, welche softwareseitig den Verfahrweg begrenzen. Es handelt sich dabei um Mikroschalter, welche als Schließerkontakt mit der Hardware verbunden werden. Dabei wird pro Schalter ein Ausgang der Hardware permanent auf High (5V) gesetzt und mit einem Kontakt des Schalters verbunden. Der andere Kontakt wird mit einem Eingang der Hardware verbunden, sodass bei betätigen des Schalters ein High-Signal auf einem Eingang festgestellt und entsprechend in der Software verarbeitet werden kann.

Die Umsetzung des Endlagen-Stops erfolgt durch die Verbindung mit der Abbruchbedingung der While-Schleife. Als Visualisierung können im VI LED´s eingefügt werden, die die Betätigung der Schalter anzeigen.

Auch hier gilt, dass das VI im Real-time Modus angelegt werden muss, um in Echtzeit durch die Endlagenschalter das Programm beeinflussen zu können.

Eine hundertprozentige Sicherheit gegen einen Crash bietet diese Lösung nicht! Es empfiehlt sich daher, um auch Softwarefehler auszuschließen, zusätzlich pro Seite der Linearachse einen Öffnerkontakt zu platzieren, welcher bei Betätigung die Stromzufuhr des Motors unterbricht und so ein weiteres Verfahren unmöglich macht.

Die softwareseitig eingebundenen Endschalter bieten auch die Möglichkeit, diese als Positionierhilfen zu verwenden. Denn auch wenn der Speicher der Software gelöscht worden sein könnte und daher die Ist-Position der Achse unbekannt ist, kann durch Verfahren bis zum Endschalter eine neue bekannte Ist-Position angelernt werden. Dabei muss jedoch sichergestellt sein, dass die Achse auf ihrem Weg zum Endschalter keinen Schaden anrichten kann (beispielsweise Bearbeitungswerkzeug NICHT im Eingriff).

Die Abbildung 17 zeigt die Umsetzung der Verkabelung am im D-Sub-Stecker zum NI-9403 Modul. Die Widerstände sind Pull-Down-Widerstände um die anliegende Spannung an dem jeweiligen Eingang nach dem Umschalten der Spannung abzuziehen.

Abbildung 17:Stecker NI-9403


In der untenstehenden Tabelle ist die Pinbelegung der Steckverbindung zwischen dem NI-9403 Modul und dem Geckodrive G201X einzusehen. Außerdem ist zu erkennen, wie die Pull-Down-Widerstände (siehe Abbildung 10 rot umkreist) im inneren des Steckers zu verlöten sind Datei:Steckerbelegungsplan 32 D Sub Stecker.xlsx.

Pin 32-Poliger D-Sub-Stecker Bezeichner in LabView Bezeichner Geckodrive G201X Sonstige Bauteile
1 01 Step Step
2 Direction Direction
3 03 Konstanter Endschalter Außen 1. Endschalter/1. Hochohmiger Widerstand
4 04 Konstanter Endschalter Motor 2. Endschalter/2. Hochohmiger Widerstand
20 Disable
21 21 Schalter betaetigt Motor 1. Endschalter
22 Schalter betaetigt Außen 2. Endschalter
28 1. Hochohmiger Widerstand/2. Hochohmiger Widerstand
29 Common

Realtime-Projekt erstellen

Es zeigte sich die Problematik, dass keine Änderungen am laufenden Programm durchgeführt werden können (z.B.: Richtung, Geschwindigkeit oder Weg). Um dieses Problem zu umgehen kann in LabView ein Programm im Realtime-Modus erstellt werden:

Um ein Programm im Realtime-Modus zu erstellen, muss vorab ein Projekt (wie bereits beschrieben) erstellt werden. Anschließend lässt sich über „Werkzeuge“ => „Project Wizard“ ein neues Fenster öffnen, in dem die notwendigen Voreinstellungen durchgeführt werden müssen. Als erstes ist dem Realtime-Projekt ein Projektname zuzuordnen. Die weiteren Voreinstellungen können direkt übernommen werden. Es ist notwendig das Feld bei „include user-interface“ zu markieren. Im folgenden Schritt lässt sich die Hardware im Unterordner „Real-Time ComapctRIO“ wählen und somit in das Projekt einfügen. Das Feld „Fertigstellen“ (siehe Abbildung 18) öffnet direkt das VI im Realtime-Modus.

Abbildung 18:Erstellung eines VI im Realtime-Modus


(Dieses Thema wurde im Wintersemester 2019/2020 nicht bearbeitet)


Weitere Lösungsmöglichkeiten und Anregungen finden sich in folgenden Links des Softwareherstellers:

Real-Time VI to Host VI Communication Methods [11]

Sharing Data Using Shared Variables (RT Module) [12]

Lossless Communication with Network Streams: Components, Architecture, and Performance [13]


Host- und Target-Programm Im Projektbaum zeigt sich bei der Erstellung eines Realtime-Projekts eine neue Struktur. Das Programm untergliedert sich in diesem Fall in zwei Teile. Das „Host-VI“ und das „Target-VI“. Das „Host-VI“ läuft in der Regel in einer Endlosschleife auf dem Rechner. Es dient bei Änderungen des Programms zur Variablenübergabe zum „Target-VI“. Das Target VI hingegen läuft auf der Hardware und wird nur dann ausgeführt, wenn sich die Absolutposition des Schrittmotors ändern soll. Für die Übergabe von Werten zwischen den beiden Programmen können Variablen definiert werden.

Variablen definieren Der Realtime-Modus ermöglicht es Variablen zu erstellen und zu definieren. Diese können innerhalb mehrerer Blockdiagramme jeweils gelesen bzw. geschrieben werden. Mit einem Rechtsklick auf „Variablen“ im Projektbaum können diese verwaltet (erstellt, umbenannt, etc.) werden. Diese lassen sich anschließend mittels „drag&drop“ (analog zu den DIOs ) in das gewünschte Blockdiagramm einfügen. Über einen Rechtsklick auf den Baustein kann der Zugriffsmodus (lesen oder schreiben) definiert werden.

Absolutwert-Berechnung

Den aktuellen Verfahrweg in Millimeter, welcher im VI des Targetprogrammes eingegeben wird, wird in der folgenden Abbildung im Blockdiagramm des Target-Programmes vor dem Anzeigeelement abgegriffen und in die Variable "abs_pos" geschrieben. Diese Variable wird im Blockdiagramm des Host-Programmes ausgelesen und richtungsabhängig als positiver bzw. negativer Wert auf die aktuelle Absolutposition addiert.

Der folgende Screenshot zeigt Verknüpfung von Host- und Targetprogramm durch die globale Variable "abs_pos" (rot umrandet):

Abbildung 19:Verknüpfung des Host- und Targetprogrammes mittels Variablen


Einbindung der automatischen Richtungsänderung in Abhängigkeit der Absolutposition

Mittels eines Vergleichs von der aktuellen Absolutwertposition und des Vorgabewertes wird die Richtung ermittelt, in die der Schrittmotor verfahren muss. Ist der Vorgabewert größer als der Absolutwert, hat die boolsche Variable (Data) den Zustand "true". Im anderen Fall wird der Zustand auf "false" gesetzt. Eine Case-Struktur, wie in der nächsten Abbildung, sorgt zustandsabhängig für eine Addition bzw. Subtraktion der Werte von Verfahrweg und Absolutposition. Nach jeder Rechenoption wird der Wert der Variable (abs_pos) überschrieben und kann über ein Anzeigeelement im Host-VI dargestellt werden.


Abbildung 20:Automatische Fahrtrichtungsänderung



Quellen:

Die Programmausschnitte wurden aus dem aktuellen LabView-Programm entnommen, welches im entsprechenden Ordner im Versionierungswerkzeug SVN auf der Hochschulseite abgelegt wurde.

Erweitertes Target-Programm mit Verarbeitung eines übernommenen Strings

In diesem Kapitel geht es darum, einen String der übergeben wird zu speichern, diesen gespeicherten String in X-,Y-,Z- und F-Werte zu separieren und mit einer weiteren Funktion die separierte Soll-Position anzufahren.

Wie in der Abbildung 21 links zu erkennen ist, erhalten wir in diesem Ausschnitt des erweiterten Target-Programms den übergebenen String z.B. durch das Terminal Programm Hercules. Wie man ein RS232 Modul einbindet und Funktionen in LabView verbindet um im Endeffekt ein String zu übergeben, ist in dem Artikel LabVIEW_RS232_Schnittstelle nachzulesen. Aufgrund der While-Schleife, in der Sich das komplette Programms befinde, wird der übergebene String durchgängig mit dem nächsten Schleifendurchlauf überschrieben. Um aber einen String verarbeiten zu können, benötigt man einen zusammenhängenden String, der zur Verarbeitung abgespeichert werden muss. Dies übernimmt die programmierte Funktion oben links in der Abbildung über dem Case-Struktur-Kästchen. Der übergebene String wird hier mit der Funktion „Strings verknüpfen“ mit dem zuletzt gespeicherten String verknüpft, so dass einzelne übergebene Zeichen miteinander verkettet werden können.

Die darauffolgende Funktion „Teil-String“ begrenzt den zu speichernden String auf 20 Zeichen, welches die exakte Länge eines Strings ist, um X-,Y-,Z-, und F-Werte mit jeweils 4 Zahlen und einem abschließenden Semikolon z.B. „X1234Y1234Z1234F1234;“ zu erhalten. Die numerische Zahl 20 ist somit mit der Funktion am Eingang "Länge" zu verknüpfen.

Die rosa Kästchen mit dem schwarzen Häuschen sind lokale Variablen, die sich unter den Funktionen in der Registerkarte Datenaustausch befinden. Um eine lokale Variable verwenden zu können, müssen sie jedoch schon definiert bzw. vorhanden sein. Hierzu muss erst ein String-Anzeigeelement im Frontpanel erstellt werden. Durch einen Links-klick auf die lokale Variable lässt sich nun die zu verwendende Variable auswählen und durch einen Rechts-klick und auf „In ‚Lesen‘ ändern“ so ändern, dass die gespeicherte Variable bei der Funktion „Strings verknüpfen“ verwendet werden kann.

Abbildung 21:String speichern


Unter der Funktion zum Speichern des Strings befindet sich eine Case-Struktur. Alle Funktionen, die sich in dem Case-Struktur-Kästchen befinden, werden ausgeführt, wenn sich der boolische Wert am Case-Selektor von 0 auf 1 ändert. Die Bedingung, dass die Funktionen in der Case-Struktur ausgeführt werden, wird hier durch einen gleich-Operator realisiert. Wenn sich in dem übergebenen String ein Semikolon befindet, wird durch die „Gleich?“ Funktion der boolesche Wert 1 an die Case-Struktur übergeben und die sich darin befindende Funktionen ausgeführt.

In der Case-Struktur befindet sich wieder die lokale Variable „Speicher“, in der alle X-,Y-,Z- und F-Werte gespeichert wurden. Die sich in der Mitte befindende Funktion „In String suchen“ kann den eingelesenen String in verschiedene Formate umformatieren und teilweise, komplett oder unterteilt wieder ausgeben. Die sich darüber befindende Codierung „X%4dY%4dZ%4dF%4d“ realisiert, dass die Zahlen des Strings nach X, Y, Z und F alle natürlichen Zahlen separat an verschiedene Ausgängen ausgeben werden. Die verschiedenen Codierungen sind in einer Tabelle in der erweiterten Hilfe von LabView hinterlegt.

Die 0 am Eingang „Anfangssuchposition“ gibt lediglich an, ab welcher Stelle der String untersucht werden soll und ist daher mit 0 angegeben. Der Ausgang „verbleibender String“ sollte nach der Durchführung nichts ausgeben, da alle Werte verarbeitet werden sollten. Auch das Semikolon sollte im String nicht enthalten sein, da die Case-Struktur im Programmablauf vor dem Speichern des Semikolons ausgeführt wird. Alle „gefilterten“ X-, Y-, Z- und F-Werte werden hier von den Ausgängen an das Frontpanel weitergeleitet und durch numerische Anzeigeelemente visualisiert. Außerdem werden sie dadurch auch wieder in lokale Variablen gespeichert, um sie an anderer Stelle im Programm zu verwenden.

Abbildung 22:Position anfahren


In der Abbildung 22 ist eine erweiterte Funktion des VI aus dem Kapitel „Verfahren einer vorgegebenen Wegstrecke“ dargestellt. Die erweiterte Funktion ermittelt den Unterschied zwischen der Ist-Position zur Soll-Position und lässt den Motor in die Richtung fahren, um zur übergebenen Soll-Position zu gelangen. Wie in dem VI aus dem Kapitel „Verfahren einer vorgegebenen Wegstrecke“ wird dies mit Vergleichern realisiert.

Die beiden Vergleicher „größer“ und „kleiner“ unterhalb der Funktion „Flache Sequenz“ addieren bzw. subtrahiert mit jedem Schleifendurchlauf immer eine 1 zur aktuellen Ist-Position. Um allerdings einen Wert von 1 zu addieren bzw. zu subtrahieren, benötigt man an dieser Stelle einen Konvertierer der boolesche Werte zu einen numerischen Wert konvertiert, da die Vergleicher keine numerischen Werte ausgeben können. Diese Funktion findet man unter der Registerkarte „Programmierung“ und „Boolesch“. Weil die booleschen Werte einen Schalter zur Richtungsänderung ersetzen, wird hier eine Verbindung zum zuvor definierten Output des NI Controllers geschaffen (siehe Kapitel “Richtungsänderung des Schrittmotors“). Die Funktion erkennt nun, in welche Richtung der Motor fahren muss und gibt das Signal autonom an den Motor Controller weiter.

Um den Motor bei Abweichung der Ist-Position mit dem Soll-Position fahren zu lassen, wird bei der erweiterten Funktion der Ist-Wert mit dem Soll-Wert, der übergeben wurde, verglichen. Dies übernimmt ein ungleich Operator „Ungleich?“. Bei Abweichung des Ist-Werts vom Soll-Wert wird auch hier ein True (1) an den DIO angelegt und der Motor dreht sich (siehe Kapitel „Ansteuerung eines Schrittmotors mit LabView“).

In der nächsten Abbildung werden die Endschalter Softwaretechnisch ausgelesen. Dazu müssen vier Umgebungsvariablen der While-Schleife hinzugefügt werden. Zwei müssen davon durch ein rechtsklick zu „lesen“ geändert werden und für eine Visualisierung auf dem Frontpanel mit LED’s verbunden werden. Damit der Motor nicht weiter dreht, ist eine Verbindung wie oben links in der Abbildung 23 zu schaffen. „oder“ Operatoren dienen hier einer gefächerten Verbindung und Stoppen das Programm bei Betätigung eines Schalters. Um eine Verbindung zu den richtigen Ein- und Ausgängen zu schaffen, werden wieder durch einen Linksklick auf die Umgebungsvariablen die zuvor Konfigurierten Ausgänge ausgewählt. Zum Schluss müssen noch zwei Umgebungsvariablen mit einer „True-Konstante“ verbunden werden, um sie mit Spannung zu versorgen.

Abbildung 23:Endschalter


Weil das komplette Programm (VI) die maximale Upload-Größe überschreitet, finden Sie das Originalprogramm im SVN an dem Ort:

\MTR_GPE_Praktikum\Fachthemen\Automatisierung_LabView\Programme\Motoransteuerung_RealtimePro

unter den Namen: Target_Programm

Einbindung der RS232 Schnittstelle zur Datenübertragung (WICHTIG für weitere Praktika in diesem Bereich!)

Bisher wurde in diesem Artikel der Umgang mit LabVIEW beschrieben und die Programmierung eines funktionsfähigen Programmes zur Steuerung einer Achse erläutert. Ein weiterer wichtiger Bereich zur Realisierung einer autonomen Achsenbewegung ist allerdings die autonome Übergabe von Parametern zur Steuerung der Achse. Dabei ist es von Bedeutung, eine Real-Time Anwendung zu gewährleisten. Hierzu wird in dem Artikel LabVIEW_RS232_Schnittstelle eine Möglichkeit aufgezeigt, Daten über die RS232 Schnittstelle zu erhalten und im Blockdiagramm weiterführend zu verwenden.

Aufgetretene Probleme in der Programmierung

Falsche Datentypen:

Teilweise kann es bei zyklischen Abfragen eines bool'schen Datentyps (bspw. in jedem Durchlauf einer Schleife) zu Problemen kommen, wenn dieser Wert für die Abbruchbedingung der Schleife verwendet wird. Dabei wird ein Fehler angezeigt, dass es sich nicht um einen bool'schen Wert an sich, sondern um ein eindimensionales Array handelt.

National Instruments Support:

Im Kontext der Einbindung der RS232 Schnittstelle zur Übergabe von Parametern zur Motorbewegung konnte der Support leider keine Hilfestellung leisten. Der betreuende Mitarbeiter verwies auf die Vielzahl der Module von NI und konnte leider zu keiner Lösung beitragen. Dazu möchte ich anmerken, dass die Hilfe des Supports angenommen werden soll, jedoch vor allem bei spezifischen Problemen es einer parallelen Eigenrecherche bedarf. Für weitere Informationen und Hilfestellungen beachten Sie bitte den eigenständigen Artikel LabVIEW_RS232_Schnittstelle.

Ausblick

Encoder

Das aktuelle Programm stellt nur eine Steuerung des Motors dar. D.h. es wird davon ausgegangen, dass das Ausgangssignal der Steuerung eine entsprechende Bewegung des Motors zur Folge hat. Beispielsweise unter Belastung oder anderen Betriebszuständen kann die Ist-Position des Motors jedoch von der Soll-Position im Programm abweichen. Um diese Abweichung zu erkennen und ausgleichen zu können, kann ein Motorpositionssensor eingesetzt werden. Dieser wird auch als Encoder bezeichnet. Anhand des Beschaltungsplanes kann dieser an mehrere Eingänge des Controllers angeschlossen werden und so entsprechend die Position des Motors an das Programm übermittelt werden.

Auswertung des Strings über die RS232 Schnittstelle

Wie in dem Kapitel "Erweitertes Target-Programm mit Verarbeitung eines übernommenen Strings" beschrieben wird, ist das Programm in der Lage, einen String zu analysieren, die Z-Werte zu separieren und einen Motor damit anzusteuern. Um jedoch alle Motoren der CNC-Maschine anzusteuern, muss das Programm noch vervollständigt werden und weitere Ausgänge angesteuert werden.

Real-Time

Außerdem ist die Funktion, dass das Target- mit dem Host-Programm interagiert noch nicht funktionsfähig. Globale Variablen sind in dem Host-Programm und dem "Erweitertes Target-Programm" zwar bereits erstellt worden, es konnte jedoch aus zeitlichen Gründen noch nicht zu Ende programmiert werden.

Softwareerweiterung auf mehrere Achsen

Bisher wurden Einzelprogramme geschrieben und alles für eine Achse geschrieben. in Zukunft soll es möglich sein die Fräse mit LabVIEW ansteuern zu können. Der jetzige Stand wird nun wiedergegeben


Software Zusammensetzung

Nach der Zusammensetzung den beiden Dateien "Step machen" und "String lesen" und der Erweiterung auf 4 Achsen durchgeführt wurde, ist es nun möglich, die vorher aus den String extrahierten Koordinaten, weiter zu leiten an die jeweiligen Achsen und diese dann anzusteuern. Die Programmierung ist im Blockdiagramm zu sehen(Abb. 25). X-, Y-, Z- und F- Achsen Ansteuerungen die in Abbildung 19 nicht richtig erkennbar sind, sind in Abbildung 16 genau zu erkennen.Im Frontpanel (Abb. 20) ist erkennbar dass der String in die 4 verschiedenen Koordinierten extrahiert. Ausserdem ist es möglich die Step Geschwindigkeit zu beeinflussen, es ist erkennbar ob und welcher Endschalter betätigt ist und in welche Richtung der Motor läuft.


Abbildung 25: Blockdiagramm


Abbildung 26: Frontpanel

Verkabelung zwischen der LabVIEW Hardware und der Fräse

Es wurde ein Kabel angefertigt, dass die Kommunikation zwischen der LabVIEW Hardware NI 9403 und der Fräse sichert.


Abbildung 27: Leitung



Pinnbelegung

Um den NI 9403 (37Pin) mit dem Fräse (25Pin) zu verbinden, brauchen wir eine besondere Verkabelung; Die D`Sub 37 Pin wird in D'Sub 25 Pin umgewandelt. Die Umwandlung erfolgt durch die willkürliche Zuteilung von Pin. Die nachfolgende Tabelle zeigt eine mögliche Zuteilung. (Dieses Thema wurde im Wintersemester 2019/2020 nicht bearbeitet ==> Pinbelegung muss überarbeitet werden)

D'Sub 25 pin Belegung bei LPT-Ports Belegung im Schaltschrank D`Sub 37 pin
1
2 Step x-Achse 1 DIO 0
3 Direction x-Achse 2 DIO 1
4 Step y-Achse 5 DIO 4
5 Direction y-Achse 6 DIO 5
6 Step z-Achse 7 DIO 6
7 Direction z-Achse 8 DIO 7
8 Step Rotationsachse 9 COM
9 Direction Rotationsachse 10 COM
10 Step Extruder 11 DIO 8
11 Direction Extruder 12 DIO 9
12 Relais Spindel 13 DIO 10
13 Relais Staubsauger 14 DIO 11
14 Relais noch frei 15 DIO 12
15
16
17
18 Ground
19 Ground
20 Ground
21 Ground Common x-Achse 16 DIO 13
22 Ground Common y-Achse 17 DIO 14
23 Ground Common z-Achse 18 DIO 15
24 Ground Common Rotationsachse 19 RSVD (Pin reserviert speziell für Kommunikation mit NI-Zubehör)
25 Ground Common Extruder 23 DIO 19

Abbildung 28: Pinbelegung

Anhang

Das Programm zum Download als .zip-Datei
Datei:Automatisierung LabView.zip

Derzeitige Probleme

Generell:

  • Nach der Verschachteln der Schleifen, haben wir probiert unsere Programm laufen zu lassen, leider sind wir auf folgende Probleme gestoßen:
  • Der Motor bewegt sich aber sehr langsam: Das könnte einfacht gelöst werden, indem man die Änderung des Parameters "Scan Period" im Unterpunkt "Scan Engine" bei den Einstellungen der "Real-Time CompactRIO Properties" die Geschwindigkeit der Achse verbessert --> Auch das funktioniert nicht, da dann Fehlermeldung ausgegeben wird


Einstellung der Stufenweite auf 1 µs [14]
Abbildung 29: Einstellung der Stufenweite auf 1 µs


Fehlermeldung für Stufenlänge 1 µs [15]
Abbildung 30: Fehlermeldung für Stufenlänge 1 µs

  • Die Dauer der Steps ist bis max. 10 ms runterskalierbar. Danach gibt die cRIO nur noch ein dauerhaftes HIGH-Signal aus --> Wünschenswert wäre eine Steplänge von 1 µs

Stufensignal mit Stufenzeit 10ms [16]
Abbildung 31: Zeit_TRUE_10ms_FALSE_10ms.PNG

Lösungsansätze

Lösungsmöglichkeit laut NI Support

  • Hardware des PC's (Stand: 13.1.2020) zu langsam ("nur" 4GB RAM)
  • LabView 2014 Sofrware "nur" als 32-bit Version vorhanden
  • Um mehr als 4GB Systemspeicher nutzen zu können wird ein 64-bit Betriebssystem notwendig

==> Abhilfe schafft:

  • Leistungsfähigere Hardware (mind. 16 GB RAM)
  • Installation NI LabView als 64-bit Version
  • Windows-Betriebssystem als 64-bit Version


Einstellung der Scan-Rate

Erst sinnvoll, wenn Computer aufgerüstet ist.

Ziel: Durch die Änderung des Parameters "Scan Period" im Unterpunkt "Scan Engine" bei den Einstellungen der "Real-Time CompactRIO Properties" kann die Geschwindigkeit der Achse eminent verbessert werden. Die "Scan Period" ist die maximale Abtastrate zwischen CRio und dem NI9403-Modul. Durch eine schnellere Abtastrate ist es möglich, mehr Stepsignale an den Geko-Drive zu übertragen um somit die Geschwindigkeit der Achse zu erhöhen. Durch die Änderung dieses Parameters auf die minimale Zeit von 1ms ist es möglich, eine erhebliche und ausreichende, maximal mögliche Geschwindigkeit zu erlangen.

Einstellung der Scan-Rate wie folgt:

1. Im Projekt ==> Rechtsklick auf cRIO-Modul ==> "Eigenschaften"

Einstellung der Scan-Rate [17]
Abbildung 32: Einstellung der Scan-Rate 1

2. Klick auf Kategorie "Scan Engine" ==> Einstellung der Scan-Rate wie im markierten Feld (vgl. Bild unten)

Einstellung der Scan-Rate für Stufenlänge 1 µs [18]
Abbildung 33: Einstellung der Scan-Rate 2

Originaldatei der Bilder:Datei:Originaldatei sce.pptx

Literatur

  1. http://www.geckodrive.com/g201x.html
  2. Regelkreis für das Verfahren der Achse (eigene Abbildung)
  3. http://www.geckodrive.com/gecko/images/cms_files/G201X%20REV-6%20Manual.pdf
  4. Umgebungseinstellungen für neues Projekt wählen (eigenes Foto)
  5. Neues Projekt erstellen (eigenes Foto)
  6. Leeres Projekt erstellen (eigenes Foto)
  7. Hardware cRio 9024 einbinden (eigenes Foto)
  8. Hardware cRio 9024 einbinden (2) (eigenes Foto)
  9. Programmiermodus ausgewählen (eigenes Foto)
  10. Erfolgreich Eingebundene Hardware in neuene Projekt (eigenes Foto)
  11. http://digital.ni.com/public.nsf/allkb/48D244EC86971D3986256BD4005CCC28
  12. http://zone.ni.com/reference/en-XX/help/370622G-01/lvrtconcepts/rt_projectvariable/
  13. http://www.ni.com/white-paper/12267/en/
  14. Einstellung der Stufenweite auf 1 µs (eigenes Foto)
  15. Fehlermeldung für Stufenlänge 1 µs (eigenes Foto)
  16. Zeit_TRUE_10ms_FALSE_10ms (eigenes Foto)
  17. Einstellung der Scan-Rate 1 (eigenes Foto)
  18. Einstellung der Scan-Rate 2 (eigenes Foto)


Übergeordnetes Projekt:3-D-Bearbeitungsmaschine (Projekt des Schwerpunkts GPE im Studiengang MTR)