Skip to main content

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

  1. Fügen Sie im Gerätebaum unterhalb von SoftMotion General Axis Pool eine lagegeregelte Achse des Typs SM_Drive_PosControl hinzu.

  2. Fügen Sie im Gerätebaum die Klemmen für den Analogausgang (EL4031) und den Encoder (EL5101) hinzu.

    Gerätebaum:

    _sm_img_example_poscontrol_1.png

    Tipp

    Die Gerätebeschreibungen der Feldbusgeräte müssen beim Hersteller herunter geladen und installiert werden.

  3. Öffnen Sie das Gerät SM_Drive_PosControl im Editor und tragen Sie die allgemeinen Parameter Modulo mit dem Modulowert 360.0 in der Registerkarte Allgemein ein.

  4. 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 Wert 360 (2).

    Einstellungen:

    _sm_img_example_poscontrol_2.png
  5. 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 als UINT übergibt.

    • _cds_icon_option_deactivated.pngmax

      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 von fSetPosition wird verwendet.

      1: Nur fSetVelocity wird verwendet.

    Regelkreis:

    _sm_img_example_poscontrol_3.png
  6. 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:

    _sm_img_example_poscontrol_5.png

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.

  1. 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 wird out.diSetVelocity verwendet.

    Mapping:

    _sm_img_example_poscontrol_7.png
  2. 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 auf in.dwActPosition. Mapping:

    _sm_img_example_poscontrol_8.png
  3. 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 von SMC_PosControlOutput müssen an den Antrieb übertragen werden (Beschreibung siehe unten). Wenn der Antrieb beispielsweise keinen Quickstopp unterstützt, muss SM_Drive_PosControl.in.bDriveStartRealState := TRUE gesetzt werden und SM_Drive_PosControl.out.bDriveStart kann ignoriert werden. In diesem Beispiel müssen bDriveStartRealState und bRegulatorRealState 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.

  1. Beenden Sie die Bewegung, beispielsweise mit MC_MoveRelative und starten Sie die Tracefunktion.

  2. 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 mit MC_MoveRelative. Bestimmen Sie nun die Zeitdifferenz zwischen dem Bewegungsstart der Sollposition und der ersten Reaktion der Istposition.

    Trace:

    _sm_img_example_poscontrol_6.png
  3. 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 bei D ein.

  4. 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 von fKp um etwa 10% und tragen Sie ihn auf der Registerkarte SoftMotion Antrieb: Lageregelung im Regelkreis bei Kp ein.

    Sie können die Achse nun verwenden.

Funktionsbaustein SMC_PosControlInput

Bibliothek: SM3_Drive_PosControl

Tabelle 2. Eingänge (VAR_INPUT)

Name

Datentyp

Initialwert

Beschreibung

bLimitPos

BOOL

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 bHWLimitEnable auf TRUE gesetzt wird. Das erreicht man typischerweise durch Schreiben der entsprechenden Parameternummer 1206 mittels MC_WriteBoolParameter.

TRUE: Endschalter nicht betätigt

FALSE: Endschalter betätigt

bLimitNeg

BOOL

Endschalter in negativer Richtung

TRUE: Endschalter nicht betätigt

FALSE: Endschalter betätigt

wActPosition

WORD

Aktuelle Position (Istposition) als 16-Bit-Wert

dwActPosition

DWORD

Aktuelle Position (Istposition) als 32-Bit-Wert

bExternalError

BOOL

Externer Fehler

bRegulatorRealState

BOOL

TRUE: Achse in Regelung

bDriveStartRealState

BOOL

FALSE: Achse in Schnellhalt (Quick Stop)

dwEncoderCounterModulo

DWORD

0

bDelayActivation

BOOL

TRUE: Solange bDelayActivationTRUE ist, schaltet SM3_Drive_PosControl nicht in den Kommunikationszustand 100.

Anwendungsfall: Der Wert wird auf TRUE gehalten, bis der verwendete Encoder gültige Positionswerte liefert.



Funktionsbaustein SMC_PosControlOutput

Bibliothek: SM3_Drive_PosControl

Tabelle 3. Ausgänge (VAR_OUTPUT)

Name

Datentyp

Initialwert

Beschreibung

bRegulatorOnIn

BOOL

TRUE: Die Achse soll in Regelung schalten.

bDriveStart

BOOL

FALSE: Die Achse soll Schnellhalt ausführen.

diSetVelocity

DINT

Sollgeschwindigkeit

iSetVelocity

INT

Sollgeschwindigkeit



Funktionsbaustein SMC_SetPosControlParams

Bibliothek: SM3_Drive_PosControl

Ändert die Parameter einer SM3_Drive_PosControl-Achse

Tabelle 4. Eingänge (VAR_INPUT)

Name

Datentyp

Initialwert

Beschreibung

Axis

AXIS_REF_POSCONTROL

Achsenreferenz

bExecute

BOOL

TRUE: Aktiviert die Ausführung des Funktionsbausteins

fKp

LREAL

-1

Proportionalverstärkung für Schleppfehler

Ein Wert kleiner als 0 wird ignoriert.

fPartVelPilotControl

LREAL

-1

Faktor für die Geschwindigkeitsregelung mit fSetPosition

0: keine Geschwindigkeitspilotsteuerung, 1: direkte Ausgabe von fSetVelocity. Ein Wert kleiner als 0 wird ignoriert.

fDeadTime

LREAL

-1

Zeitverzögerung in Zyklen zwischen fSetPosition und fActPositioin

Dieser Wert darf nicht 0 sein. Ein Wert kleiner als 0 wird ignoriert.

fMaxPositionDiff

LREAL

-1

Maximale Positionsdifferenz

0 deaktiviert die Prüfung der maximalen Positionsverzögerung. Ein Wert kleiner als 0 wird ignoriert.



Tabelle 5. Ausgänge (VAR_OUTPUT)

Name

Datentyp

Initialwert

Beschreibung

bDone

BOOL

Die Ausführung des Funktionsbausteins wurde beendet.

bError

BOOL

TRUE: Ein Fehler ist im Funktionsbaustein aufgetreten.

ErrorID

SMC_ERROR

Fehleridentifikation



Beispiel 2. Beispiel

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);