Lageregelung auf der Steuerung mit SM_Drive_PosControl
Sehen Sie hierzu das Beispielprojekt PosControl.project
im Installationsverzeichnis von CODESYS unter ..\CODESYS SoftMotion\Examples
.
In den meisten Fällen übernimmt ein Servoregler neben der Strom- und Drehzahlregelung auch die Lageregelung des Antriebs. Es gibt jedoch Anwendungsfälle, bei denen die Steuerung die Lageregelung der Achsen übernimmt. Dieses Beispiel zeigt, wie ein drehzahlgesteuertes Gerät wie beispielsweise ein Frequenzumrichter mit Positionsrückführung von CODESYS SoftMotion lagegeregelt wird.
Voraussetzung dafür ist ein Gerät, das über Sollgeschwindigkeit angesteuert wird und das seine aktuelle Position zurück liefert. Exemplarisch wird in diesem Beispiel eine 10V-Analog-Ausgangsklemme EL4031 verwendet, deren Signal als Drehzahlsollwert für einen Frequenzumrichter verwendet wird. Für die Rückführung der Position wird eine Encoder-Klemme EL5101 verwendet.
Achsposition mit SM_Drive_PosControl regeln
Fügen Sie im Gerätebaum unterhalb von SoftMotion General Axis Pool eine lagegeregelte Achse des Typs
SM_Drive_PosControl
hinzu.Fügen Sie im Gerätebaum die Klemmen für den Analogausgang (EL4031) und den Encoder (EL5101) hinzu.
Gerätebaum:
Tipp
Die Gerätebeschreibungen der Feldbusgeräte müssen beim Hersteller herunter geladen und installiert werden.
Öffnen Sie das Gerät
SM_Drive_PosControl
im Editor und tragen Sie die allgemeinen Parameter Modulo mit dem Modulowert360.0
in der Registerkarte Allgemein ein.Wechseln Sie zur Registerkarte Skalieren/Mapping. Die Anzahl der Inkremente pro Motorumdrehung entnehmen Sie dem Datenblatt des Encoders. In diesem Beispiel sind
4096
Inkremente (1) eine Motorumdrehung. Da Sie in der Applikation mit Winkelgraden arbeiten, geben Sie bei Einheiten in der Applikation den Wert360
(2).Einstellungen:
Wechseln Sie zur Registerkarte SoftMotion Antrieb: Lageregelung und geben Sie folgende Parameter ein:
D 2.0
Die Totzeit legt die Anzahl an Zyklen fest, um die die empfangene Istposition (Encoder) phasenverschoben zur Sollposition der Achse ist. Die Totzeit ist abhängig von den verwendeten Komponenten und muss experimentell ermittelt werden.
Kp 0.0
Die Proportionalitätskonstante ist der Faktor, mit dem der Lagefehler, also die Abweichung zwischen Soll- und Istposition multipliziert wird, um später auf die Sollgeschwindigkeit addiert zu werden. Setzen Sie diesen Wert zunächst auf
0
. Sie werden den Wert später experimentell ermitteln.Bit width: 16
Die Bitbreite des Istwerts wird in Abhängigkeit von den verwendeten Komponenten empfangen und kann als 16-, 24- oder 32-Bit-Wert gesetzt sein. Setzen Sie den Wert
16
, da die verwendete Komponente die Position alsUINT
übergibt.max
Lassen Sie die Lagefehlerüberwachung zunächst ausgeschaltet. Sie können sie anschließend bei Bedarf wieder einschalten. Dazu aktivieren Sie die Checkbox und geben einen maximal zulässigen Schleppfehler ein. Wird dieser Wert während des Betriebs überschritten, geht die Achse in einen Fehlerzustand.
δ/δt
Der Parameter hat den Wert 1 und sollte nur in sehr speziellen Fällen verändert werden. Er definiert das Verhältnis von Sollgeschwindigkeit zur Ableitung der Position. Der Wertebereich reicht von 0 bis 1:
0
: Nur die numerische Ableitung vonfSetPosition
wird verwendet.1
: NurfSetVelocity
wird verwendet.
Regelkreis:
Nun stellen Sie die Geschwindigkeitswerte ein, die an den Aktuator gesendet werden. Dazu muss Ihnen die Maximalgeschwindigkeit in Applikationseinheiten und der dazugehörige Rohwert der übertragenen Daten bekannt sein. In diesem Beispiel wird die Maximalgeschwindigkeit durch Ausgabe des Werts
16#7FFF
erreicht, der einer Geschwindigkeit von 10 Umdrehungen/s entspricht. Gemäß den gesetzten Einstellungen entspricht dies 3600 Grad/s.Einstellungen:
Variablen auf Ein-/Ausgänge abbilden
Bilden Sie die Variablen mit den Achsdaten auf die E/A-Module ab. Die verfügbaren zyklischen Daten der Achse liegen in den Datenstrukturen in
und out
. Sie können diese Verbindung entweder programmatisch oder direkt im Geräteeditor des Ein- bzw. Ausgabegeräts herstellen.
Verbinden Sie den Ausgang (Solldrehzahl) mit dem Gerät EL4031. Öffnen Sie dazu das Gerät im Editor und wählen Sie die Registerkarte EtherCAT E/A-Abbild. Weisen Sie darin dem Ausgang die Variable
out.iSetVelocity
der Achse zu. Im Falle eines 32-Bit-Ausgangs wirdout.diSetVelocity
verwendet.Mapping:
Verfahren Sie in der gleichen Weise mit dem Positionseingang. Öffnen Sie dazu das Gerät EL5101 im Editor und legen Sie den Positionseingangswert auf
in.wActPosition
fest. Im Falle eines 32-Bit-Eingangs setzen Sie den Wert aufin.dwActPosition
. Mapping:Damit die Reglerfreigabe, der Quickstopp und die Endschalter funktionieren, müssen die entsprechenden Eingänge von
SMC_PosControlInput
mit den Werten des Antriebs beschrieben werden. Die Ausgänge vonSMC_PosControlOutput
müssen an den Antrieb übertragen werden (Beschreibung siehe unten). Wenn der Antrieb beispielsweise keinen Quickstopp unterstützt, mussSM_Drive_PosControl.in.bDriveStartRealState := TRUE
gesetzt werden undSM_Drive_PosControl.out.bDriveStart
kann ignoriert werden. In diesem Beispiel müssenbDriveStartRealState
undbRegulatorRealState
in der Applikation gesetzt werden.
SM_Drive_PosControl.in.bDriveStartRealState := TRUE; SM_Drive_PosControl.in.bRegulatorRealState := TRUE;
Totzeit des Systems ermitteln
Gehen Sie jetzt mit der Achse in den Onlinebetrieb und stellen Sie die Regelparameter ein.
Wichtig
Bitte beachten Sie, dass die Achse sich dabei möglicherweise unkontrolliert bewegen kann und treffen Sie entsprechende Sicherheitsvorkehrungen.
Versuchen Sie zunächst, die Achse ohne Lageregler zu betreiben. fKp
ist bereits auf 0.0 gestellt und die Skalierungseinstellungen werden verifiziert. Schalten Sie dazu die Achse mit MC_Power
ein und starten Sie MC_MoveVelocity
. Die Achse bewegt sich nun mit der programmierten Geschwindigkeit von 1 U/s. Bei Abweichungen müssen Sie die Skalierung entsprechend korrigieren.
Beenden Sie die Bewegung, beispielsweise mit
MC_MoveRelative
und starten Sie die Tracefunktion.Bestimmen Sie die Totzeit des Systems durch Messen der Zeitdifferenz zwischen Soll- und Istposition.
Stellen Sie dazu in
MC_MoveRelative
die Maximalgeschwindigkeit und eine große Beschleunigung ein. Starten Sie die Traceaufzeichnung mitMC_MoveRelative
. Bestimmen Sie nun die Zeitdifferenz zwischen dem Bewegungsstart der Sollposition und der ersten Reaktion der Istposition.Trace:
Zur Bestimmung der Totzeit
D
teilen Sie diese Zeitdifferenz durch die Zykluszeit (D = Zeitdifferenz / Zykluszeit). Tragen Sie diesen Wert auf der Registerkarte SoftMotion Antrieb: Lageregelung im Regelkreis beiD
ein.Versuchen Sie jetzt, die korrekte Einstellung für
fKp
zu ermitteln. Verändern Sie dazu den Wert der Variablen<Drive>.controller.fKp
in einer Überwachungsliste.Setzen Sie
fKp
auf eine kleine Zahl (zum Beispiel 0.0001) und erhöhen Sie den Wert schrittweise. Überprüfen Sie das Verhalten bei jeder Änderung mit der Traceaufzeichnung. Sobald Sie Schwingungen feststellen, ist die Obergrenze erreicht. Verringern Sie nun den Wert vonfKp
um etwa 10% und tragen Sie ihn auf der Registerkarte SoftMotion Antrieb: Lageregelung im Regelkreis beiKp
ein.Sie können die Achse nun verwenden.
Funktionsbaustein SMC_PosControlInput
Bibliothek: SM3_Drive_PosControl
Name | Datentyp | Initialwert | Beschreibung |
---|---|---|---|
|
| Endschalter in positive Richtung (nur bei finiten Achsen) Seit SoftMotion Version 4.12.0.0 ist die Endschalterüberwachung standardmäßig aktiv. Bei älteren Versionen muss diese manuell aktiviert werden, indem
| |
|
| Endschalter in negativer Richtung
| |
|
| Aktuelle Position (Istposition) als 16-Bit-Wert | |
|
| Aktuelle Position (Istposition) als 32-Bit-Wert | |
|
| Externer Fehler | |
|
|
| |
|
|
| |
|
|
| |
|
|
Anwendungsfall: Der Wert wird auf |
Funktionsbaustein SMC_PosControlOutput
Bibliothek: SM3_Drive_PosControl
Name | Datentyp | Initialwert | Beschreibung |
---|---|---|---|
|
|
| |
|
|
| |
|
| Sollgeschwindigkeit | |
|
| Sollgeschwindigkeit |
Funktionsbaustein SMC_SetPosControlParams
Bibliothek: SM3_Drive_PosControl
Ändert die Parameter einer SM3_Drive_PosControl
-Achse
Name | Datentyp | Initialwert | Beschreibung |
---|---|---|---|
|
| Achsenreferenz | |
|
|
| |
|
| -1 | Proportionalverstärkung für Schleppfehler Ein Wert kleiner als 0 wird ignoriert. |
|
| -1 | Faktor für die Geschwindigkeitsregelung mit 0: keine Geschwindigkeitspilotsteuerung, 1: direkte Ausgabe von |
|
| -1 | Zeitverzögerung in Zyklen zwischen Dieser Wert darf nicht 0 sein. Ein Wert kleiner als 0 wird ignoriert. |
|
| -1 | Maximale Positionsdifferenz 0 deaktiviert die Prüfung der maximalen Positionsverzögerung. Ein Wert kleiner als 0 wird ignoriert. |
Name | Datentyp | Initialwert | Beschreibung |
---|---|---|---|
|
| Die Ausführung des Funktionsbausteins wurde beendet. | |
|
|
| |
|
| Fehleridentifikation |
Die Parameter des Achsenantriebs SM_Drive_PosControl
werden gesetzt.
PROGRAM PLC_PRG VAR fbSetPosControlParams : SMC_SetPosControlParams; END_VAR fbSetPosControlParams.fKp := 1; fbSetPosControlParams.fPartVelPilotControl :=0; fbSetPosControlParams.fDeadTime :=0.1; fbSetPosControlParams.fMaxPositionDiff :=1; fbSetPosControlParams(Axis:= SM_Drive_PosControl, bExecute:= TRUE);