FB_WriteDriveEncoder

 

FB_WriteDriveEncoder - Allgemeine Informationen

Übersicht

Typ

Funktionsbaustein

Verfügbar ab

V1.0.3.0

Übernommen aus

-

Implementiert

-

Versionen:

Aktuelle Version

HINWEIS: Die Elemente FB_WriteDriveEncoder und FC_ReadDriveEncoder sind veraltet.

Verwenden Sie stattdessen die Elemente FB_HomeAbs und FB_HomeSetPos mit dem Modus PDL.ET_HomeSetPosMode.RestoreFromAxisEncoder.

Aufgabe

Die Position des Motorgebers soll verändert werden.

Beschreibung

Durch den Funktionsbaustein wird die Geberposition auf einen vorgegebenen absoluten Positionswert gesetzt. Das Koordinatensystem des Gebers wird verschoben. Hierzu ist ein Schreibvorgang in das EEPROM des Gebers nötig. Für den Schreibzugriff werden einige Millisekunden benötigt. Die Zykluszeit der Task wird vom Funktionsbaustein erhöht.

Die Achse wird während der Ausführung „deaktiviert“ und wieder „aktiviert“, falls sie „aktiviert“ war.

Wartezeiten nach dem Schreibvorgang werden vom Funktionsbaustein automatisch berücksichtigt. Das bedeutet, es braucht nicht mit der Funktion FC_DrvEncPosition­GetState() überprüft zu werden, ob der Schreibvorgang abgeschlossen ist.

Die Position wird nach Abschluss des Schreibvorgangs zurückgelesen und überprüft.

Schnittstelle

Eingang

Datentyp

Beschreibung

i_xEnable

BOOL

Eine steigende Flanke FALSE -> TRUE aktiviert die POU, eine fallende Flanke TRUE -> FALSE deaktiviert sie.

Wenn die POU abgeschaltet ist, führt sie keine Aktionen aus.

HINWEIS: Der Abbruch der Geberpositionsvänderung führt zu undefiniertem Zustand.

Wird der Eingang i_xEnable auf FALSE gesetzt, bevor q_xDone oder q_xError = TRUE wird, wird der Funktionsbaustein beendet und q_xActive geht ebenfalls auf FALSE. Abhängig davon, wann i_xEnable auf FALSE gesetzt wird, wird das Gebersetzen nicht gestartet bzw. die Achse wird deaktiviert und nicht wieder aktiviert.

Bei einer steigenden Flanke an i_xEnable, wird die Zyklus-Überwachungszeit erhöht. Die Überschreitungszeit (Diagnosemeldung 317 „Zykluszeitüberschreitung“) wird um 100 ms erhöht und bei einer negativen Flanke auf den ursprünglichen Wert zurückgesetzt.

i_ifDrive

IF_Drive

Eingang für die zu kontrollierende Achse.

i_lrHomePos

LREAL

Positionswert, auf den der Motorgeber (RefPosition der Achse) gesetzt werden soll.

Der Positionswert muss in der Geberperiode liegen (0 ... MaxEncoderValue). Liegt der Positionswert außerhalb der Geberperiode, muss die Funktion PDL.FC_ReadDriveEncoder benutzt werden. Es werden Single-Turn- und Multi-Turn-Geber unterstützt.

Bei i_lrUserPeriod > 0 wird die Position in die Anwenderperiode (z. B. Maschinenperiode) gesetzt.

i_lrAbsEncOffset

LREAL

Ermöglicht die Rekonstruktion der Position nach einem Reset der Steuerung bzw. des Antriebs (z. B. Lexium 62), wenn die Position der Achse geringer ist als i_lrHomePos. Dies ist nur bei i_ lrUserPeriod = 0 wirksam.

Wertebereich: 0 < lrAbsEncOffset < Max. Geberwert

Beginn Fahrbereich = i_lrHomePos –  i_lrAbsEncOffset

Ende Fahrbereich = Beginn Fahrbereich + Geberperiode

Siehe auch Eingang i_lrUserPeriod.

i_lrUserPeriod

LREAL

Positionsbereich (z. B. Maschinenperiode), innerhalb dessen die Geberposition (EncoderPosition) liegen soll.

oi_lrUserPeriod = 0

Der i_lrAbsEncOffset wird beim Setzen der RefPosition berücksichtigt.

oi_lrUserPeriod <> 0

Der Eingang i_lrAbsEncOffset wird nicht berücksichtigt. Sollte der Wert außerhalb des Periodenbereichs liegen, ermittelt die POU die entsprechende Position innerhalb der Periode (Position = i_lrHomePos MOD i_lrUserPeriod).

i_xExecute

BOOL

Ist i_xEnable = TRUE, so kann mit diesem Eingang der Vorgang des Geberschreibens gestartet werden. Wurde der Vorgang des Geberschreibens einmal gestartet, ist es nicht möglich, mit i_xExecute TRUE -> FALSE den Vorgang wieder abzubrechen.

Ausgang

Datentyp

Beschreibung

q_xActive

BOOL

TRUE: Die POU ist eingeschaltet und muss weiter ausgeführt werden.

FALSE: Die POU ist abgeschaltet.

q_xReady

BOOL

TRUE: Die POU ist betriebsbereit und kann Anwenderbefehle entgegennehmen.

FALSE: Die POU ist nicht bereit, Anwenderbefehle entgegenzunehmen.

q_xBusy

BOOL

Schreibvorgang aktiv, der Funktionsbaustein muss weiter ausgeführt werden.

q_xDone

BOOL

Schreibvorgang abgeschlossen.

q_etDiag

GD.ET_Diag

Allgemeingültige, bibliotheksunabhängige Aussage zur Diagnose.

Ein Wert ungleich ET_Diag.Ok entspricht einer Diagnosemeldung.

q_etDiagExt

ET_DiagExt

POU-spezifischer, diagnosebezogener Ausgang.

q_etDiag = ET_Diag.Ok -> Statusmeldung

q_etDiag <> ET_Diag.Ok -> Diagnosemeldung

q_sMsg

STRING[80]

Ereignisabhängige Meldung mit detaillierten Informationen zum Diagnosezustand.

Beispiele

Beispiele mit Single-Turn-Geber (Geberperiode standardisiert auf 0 ... 360°)

i_lrHomePos

i_lrAbsEncOffset

i_lrUserPeriod

Achsposition gemäß FB_WriteDriveEncoder oder FC_ReadDriveEncoder

Fahrbereich

1000

100

0

1000

900 ... 1260 (Delta 360)

0

100

0

0

-100 ... 260 (Delta 360)

-1000

100

0

-1000

-1100 ... -740 (Delta 360)

1000

0

360

280

0 ... 360

-1000

0

360

80

0 ... 360

1

0

36

1

0 ... 36

35

0

36

35

0 ... 36

54

0

36

18

0 ... 36

-54

0

36

18

0 ... 36

-55

0

36

17

0 ... 36

Diagnosemeldungen

q_etDiag

q_etDiagExt

Enumerationswert

Beschreibung

OK

Disabled

9

Die POU ist deaktiviert.

OK

Initializing

4

Die POU wird initialisiert.

OK

WaitForExecute

180

Warten auf Ausführung.

OK

WaitUntilDriveDisabled

179

Warten, bis der Antrieb deaktiviert ist.

OK

WaitUntilDriveEnabled

145

Warten, bis der Antrieb aktiviert ist.

OK

WaitUntilEncoderWritten

188

Warten, bis in den Geber geschrieben wurde.

OK

WritingPositionDone

184

Die Geberposition wurde geschrieben.

DriveConditionInvalid

DriveEncoderInvalid

175

Der Geber des Antriebs ist nicht gültig.

DriveConditionInvalid

DriveIsMoving

182

Der Antrieb bewegt sich.

DriveConditionInvalid

DriveNotDisabled

183

Der Antrieb ist nicht ausgeschaltet.

DriveConditionInvalid

NoAccessToEEPROM

187

Es ist nicht möglich, auf den EEPROM des Antriebs zuzugreifen.

DriveConditionInvalid

NoRealDrive

176

Der Antrieb ist nicht real.

DriveConditionInvalid

ProgrammingInProgress

189

Es wird in den Geber geschrieben.

DriveConditionInvalid

ProgrammingInvalidEEPROM

186

Fehler beim Schreiben in den EEPROM des Gebers.

ExecutionAborted

AsyncInitNotFinished

290

Init wurde noch nicht beendet.

ExecutionAborted

ColdResetOfControllerNecessary

297

Ein Kaltstart der Steuerung ist notwendig.

ExecutionAborted

NoAsyncTasksCreated

289

Es wurden keine asynchronen Tasks erzeugt.

InputParameterInvalid

AbsEncOffsetRange

178

AbsEncOffset ist außerhalb des gültigen Bereichs.

InputParameterInvalid

AsyncInvalid

288

Der Wert von IF_Async ist ungültig.

InputParameterInvalid

DriveInvalid

3

Verbundener Antrieb ist ungültig.

InputParameterInvalid

UserPeriodRange

177

UserPeriod ist außerhalb des gültigen Bereichs.

UnexpectedProgramBehavior

AsyncAddWasNotSuccessful

284

Es war nicht möglich, einen asynchronen Job an eine Task zu übergeben.

UnexpectedProgramBehavior

EncoderWriteTimeOut

185

Timeout bei der Beschreibung des Gebers.

UnexpectedProgramBehavior

InterfaceCastFailed

285

Die Aufforderung für die Schnittstelle ist fehlgeschlagen.

UnexpectedProgramBehavior

SemaphoreMeCreateFailed

287

Das Erzeugen einer Semaphore ist fehlgeschlagen.

UnexpectedProgramBehavior

SercosNotInPhaseFour

19

Der Sercos-Bus befindet sich nicht in Phase 4.

UnexpectedProgramBehavior

UnexpectedFeedback

1

Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten.

UnexpectedProgramBehavior

UnknownState

2

Die POU befindet sich in einem undefinierten Zustand.

AbsEncOffsetRange

Enumerationsname:

AbsEncOffsetRange

Enumerationswert:

178

Beschreibung:

AbsEncOffset ist außerhalb des gültigen Bereichs.

Problem

Ursache

Lösung

-

Am Eingang i_lrAbsEncOffset wurde eine Zahl <= 0 bzw. größer als die Geberperiode übergeben.

Es muss für i_lrAbsEncOffset gelten: 0 < i_lrAbsEncOffset < Maximal möglicher Wert von Dirve.EncoderPosition.

Zulässiger Wertebereich für i_lrAbsEncOffset, siehe Ausgang q_sMsg von FB_WriteDriveEncoder.

AsyncAddWasNotSuccessful

Enumerationsname:

AsyncAddWasNotSuccessful

Enumerationswert:

284

Beschreibung:

Es war nicht möglich, einen asynchronen Job an eine Task zu übergeben.

Problem

Ursache

Lösung

-

Es ist ein Fehler in der internen Verarbeitung aufgetreten.

Bitte informieren Sie das Supportteam über diesen Fehler.

AsyncInitNotFinished

Enumerationsname:

AsyncInitNotFinished

Enumerationswert:

290

Beschreibung:

Init wurde noch nicht beendet.

Problem

Ursache

Lösung

-

Die Methode Init() wurde noch nicht abgeschlossen.

Rufen Sie Init() auf, bevor Sie zum ersten Mal Start() aufrufen.

Wenn Sie Init aufgerufen haben, warten Sie, bis Init erfolgreich ausgeführt wurde. (Init.q_xDone = TRUE)

AsyncInvalid

Enumerationsname:

AsyncInvalid

Enumerationswert:

288

Beschreibung:

Der Wert von IF_Async ist ungültig.

Problem

Ursache

Lösung

-

Am Eingang i_ifAsync wurde kein gültiger Wert übergeben.

Stellen Sie sicher, dass der Wert am Eingang i_ifAsync <> 0.

ColdResetOfControllerNecessary

Enumerationsname:

ColdResetOfControllerNecessary

Enumerationswert:

297

Beschreibung:

Ein Kaltstart der Steuerung ist notwendig.

Problem

Ursache

Lösung

-

Gc_udiNumOfAsyncTasks wurde geändert.

Ein Kaltstart der Steuerung und Aufruf von Init() ist notwendig.

Disabled

Enumerationsname:

Disabled

Enumerationswert:

9

Beschreibung:

Die POU ist deaktiviert.

Der Funktionsbaustein ist deaktiviert und führt keinerlei Aktionen aus. i_xEnable und q_xActive werden auf FALSE gesetzt.

DriveEncoderInvalid

Enumerationsname:

DriveEncoderInvalid

Enumerationswert:

175

Beschreibung:

Der Geber des Antriebs ist nicht gültig.

Problem

Ursache

Lösung

-

Der Geber der Achse wird nicht unterstützt.

Benutzen Sie eine Achse mit einem anderen Geber.

DriveInvalid

Enumerationsname:

DriveInvalid

Enumerationswert:

3

Beschreibung:

Verbundener Antrieb ist ungültig.

Problem

Ursache

Lösung

-

An den Eingang i_ifDrive wurde kein Antrieb angelegt.

Dem Eingang i_ifDrive muss ein gültiger Antrieb übergeben werden.

-

Der angeschlossene Antrieb unterstützt nicht alle nötigen Funktionen.

Entnehmen Sie dem Ausgang q_sMsg, welche Funktionen der Antrieb nicht unterstützt.

Verwenden Sie einen Antrieb, der alle nötigen Funktionen unterstützt.

DriveIsMoving

Enumerationsname:

DriveIsMoving

Enumerationswert:

182

Beschreibung:

Der Antrieb bewegt sich.

Problem

Ursache

Lösung

-

Die Achse bewegt sich.

Überprüfen Sie den Zustand der Achse.

DriveNotDisabled

Enumerationsname:

DriveNotDisabled

Enumerationswert:

183

Beschreibung:

Der Antrieb ist nicht ausgeschaltet.

Problem

Ursache

Lösung

-

Die Achse befindet sich nicht im AxisState 1.

Überprüfen Sie den Zustand der Achse.

EncoderWriteTimeOut

Enumerationsname:

EncoderWriteTimeOut

Enumerationswert:

185

Beschreibung:

Timeout bei der Beschreibung des Gebers.

Problem

Ursache

Lösung

-

Der Schreibvorgang des Gebers hat zu lange gedauert.

Überprüfen Sie die Verbindung zum Geber und versuchen Sie es dann erneut.

Initializing

Enumerationsname:

Initializing

Enumerationswert:

4

Beschreibung:

Die POU wird initialisiert.

Der Funktionsbaustein wird initialisiert und ist noch nicht bereit, Befehle an seinen Eingängen entgegenzunehmen.

Der Funktionsbaustein meldet seine Betriebsbereitschaft mit dem Signal q_xReady = TRUE.

InterfaceCastFailed

Enumerationsname:

InterfaceCastFailed

Enumerationswert:

285

Beschreibung:

Die Aufforderung für die Schnittstelle ist fehlgeschlagen.

Problem

Ursache

Lösung

-

Es ist ein Fehler in der internen Verarbeitung aufgetreten.

Bitte informieren Sie das Supportteam über diesen Fehler.

NoAccessToEEPROM

Enumerationsname:

NoAccessToEEPROM

Enumerationswert:

187

Beschreibung:

Es ist nicht möglich, auf den EEPROM des Antriebs zuzugreifen.

Problem

Ursache

Lösung

-

Der Zugriff auf den Geber wurde verweigert.

Prüfen Sie den Zustand der Achse.

NoAsyncTasksCreated

Enumerationsname:

NoAsyncTasksCreated

Enumerationswert:

289

Beschreibung:

Es wurden keine asynchronen Tasks erzeugt.

Problem

Ursache

Lösung

-

Gc_udiNumOfAsyncTasks = 0

Weisen Sie Gc_udiNumOfAsyncTasks einen Wert > 0 und <= 10 zu.

NoRealDrive

Enumerationsname:

NoRealDrive

Enumerationswert:

176

Beschreibung:

Der Antrieb ist nicht real.

Problem

Ursache

Lösung

-

Am Eingang i_ifDrive wurde eine virtuelle Achse angelegt.

Dem Eingang i_ifDrive muss eine reale Achse übergeben werden.

ProgrammingInProgress

Enumerationsname:

ProgrammingInProgress

Enumerationswert:

189

Beschreibung:

Es wird in den Geber geschrieben.

Problem

Ursache

Lösung

-

Der Geber kann nicht beschrieben werden, weil bereits ein Schreibvorgang aktiv ist.

Warten Sie bis zum Ende des aktiven Schreibvorgangs und versuchen Sie dann erneut, FB_WriteDriveEncoder auszuführen.

Erscheint die Diagnosemeldung auch nach mehrmaliger Wiederholung, dann benachrichtigen Sie den Support über diesen Fehler.

ProgrammingInvalidEEPROM

Enumerationsname:

ProgrammingInvalidEEPROM

Enumerationswert:

186

Beschreibung:

Fehler beim Schreiben in den EEPROM des Gebers.

Problem

Ursache

Lösung

-

Der Geber wird bereits beschrieben.

Versuchen Sie es zu einem anderen Zeitpunkt erneut.

SemaphoreMeCreateFailed

Enumerationsname:

SemaphoreMeCreateFailed

Enumerationswert:

287

Beschreibung:

Das Erzeugen einer Semaphore ist fehlgeschlagen.

Problem

Ursache

Lösung

-

Es ist ein Fehler in der internen Verarbeitung aufgetreten.

Bitte informieren Sie das Supportteam über diesen Fehler.

SercosNotInPhaseFour

Enumerationsname:

SercosNotInPhaseFour

Enumerationswert:

19

Beschreibung:

Der Sercos-Bus befindet sich nicht in Phase 4.

Problem

Ursache

Lösung

-

Der Parameter State des SERCOS-Busses ist nicht 4.

Setzen Sie den SERCOS-Busparameter PhaseSet auf 4.

Überprüfen Sie den SERCOS-Bus auf Fehler.

UnexpectedFeedback

Enumerationsname:

UnexpectedFeedback

Enumerationswert:

1

Beschreibung:

Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten.

Problem

Ursache

Lösung

-

Es ist ein Fehler in der internen Abarbeitung aufgetreten.

Bitte informieren Sie das Supportteam über diesen Fehler.

UnknownState

Enumerationsname:

UnknownState

Enumerationswert:

2

Beschreibung:

Die POU befindet sich in einem undefinierten Zustand.

Problem

Ursache

Lösung

-

Es ist ein Fehler in der internen Abarbeitung aufgetreten.

Bitte informieren Sie das Supportteam über diesen Fehler.

UserPeriodRange

Enumerationsname:

UserPeriodRange

Enumerationswert:

177

Beschreibung:

UserPeriod ist außerhalb des gültigen Bereichs.

Problem

Ursache

Lösung

-

Der Eingang i_lrUserPeriod ist negativ.

Für den Eingang i_lrUserPeriod muss ein positiver Wert oder null angegeben werden.

-

Der Eingang i_lrUserPeriod passt nicht in die Geberperiode.

Belegen Sie den Eingang i_lrUserPeriod mit null, um keinen Offset zu berücksichtigen.

Der Eingang i_lrUserPeriod muss so gewählt werden, dass er die folgende Formel erfüllt:

ABS(lrEncoderPeriode/i_lrUserPeriod - TRUNC_INT(lrEncoderPeriode / i_lrUserPeriod)) = 0

mit

lrEncoderPeriode := EncoderRange * FeedConstant * DINT_TO_LREAL(GearIn) / DINT_TO_LREAL(GearOut)

EncoderRange, FeedConstant, GearIn und GearOut sind Parameter der Achse i_ifDrive.

WaitForExecute

Enumerationsname:

WaitForExecute

Enumerationswert:

180

Beschreibung:

Warten auf Ausführung.

Der Funktionsbaustein ist funktionsbereit. Auf eine positive Flanke von i_xExecute hin werden die Daten in den Geber geschrieben.

WaitUntilDriveDisabled

Enumerationsname:

WaitUntilDriveDisabled

Enumerationswert:

179

Beschreibung:

Warten, bis der Antrieb deaktiviert ist.

Die Achse wird deaktiviert.

WaitUntilDriveEnabled

Enumerationsname:

WaitUntilDriveEnabled

Enumerationswert:

145

Beschreibung:

Warten, bis der Antrieb aktiviert ist.

Der Funktionsbaustein aktiviert die Lageregelung der Achse.

WaitUntilEncoderWritten

Enumerationsname:

WaitUntilEncoderWritten

Enumerationswert:

188

Beschreibung:

Warten, bis in den Geber geschrieben wurde.

Es wird in den Geber der Achse geschrieben.

WritingPositionDone

Enumerationsname:

WritingPositionDone

Enumerationswert:

184

Beschreibung:

Die Geberposition wurde geschrieben.

Das Schreiben in den Geber der Achse ist abgeschlossen.