FB_WriteDriveEncoder - Allgemeine Informationen
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.
Die Position des Motorgebers soll verändert werden.
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_DrvEncPositionGetState() überprüft zu werden, ob der Schreibvorgang abgeschlossen ist.
Die Position wird nach Abschluss des Schreibvorgangs zurückgelesen und überprüft.
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 |
Allgemeingültige, bibliotheksunabhängige Aussage zur Diagnose. Ein Wert ungleich ET_Diag.Ok entspricht einer Diagnosemeldung. |
|
q_etDiagExt |
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 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 |
q_etDiag |
q_etDiagExt |
Enumerationswert |
Beschreibung |
---|---|---|---|
OK |
9 |
Die POU ist deaktiviert. |
|
OK |
4 |
Die POU wird initialisiert. |
|
OK |
180 |
Warten auf Ausführung. |
|
OK |
179 |
Warten, bis der Antrieb deaktiviert ist. |
|
OK |
145 |
Warten, bis der Antrieb aktiviert ist. |
|
OK |
188 |
Warten, bis in den Geber geschrieben wurde. |
|
OK |
184 |
Die Geberposition wurde geschrieben. |
|
DriveConditionInvalid |
175 |
Der Geber des Antriebs ist nicht gültig. |
|
DriveConditionInvalid |
182 |
Der Antrieb bewegt sich. |
|
DriveConditionInvalid |
183 |
Der Antrieb ist nicht ausgeschaltet. |
|
DriveConditionInvalid |
187 |
Es ist nicht möglich, auf den EEPROM des Antriebs zuzugreifen. |
|
DriveConditionInvalid |
176 |
Der Antrieb ist nicht real. |
|
DriveConditionInvalid |
189 |
Es wird in den Geber geschrieben. |
|
DriveConditionInvalid |
186 |
Fehler beim Schreiben in den EEPROM des Gebers. |
|
ExecutionAborted |
290 |
Init wurde noch nicht beendet. |
|
ExecutionAborted |
297 |
Ein Kaltstart der Steuerung ist notwendig. |
|
ExecutionAborted |
289 |
Es wurden keine asynchronen Tasks erzeugt. |
|
InputParameterInvalid |
178 |
AbsEncOffset ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
288 |
Der Wert von IF_Async ist ungültig. |
|
InputParameterInvalid |
3 |
Verbundener Antrieb ist ungültig. |
|
InputParameterInvalid |
177 |
UserPeriod ist außerhalb des gültigen Bereichs. |
|
UnexpectedProgramBehavior |
284 |
Es war nicht möglich, einen asynchronen Job an eine Task zu übergeben. |
|
UnexpectedProgramBehavior |
185 |
Timeout bei der Beschreibung des Gebers. |
|
UnexpectedProgramBehavior |
285 |
Die Aufforderung für die Schnittstelle ist fehlgeschlagen. |
|
UnexpectedProgramBehavior |
287 |
Das Erzeugen einer Semaphore ist fehlgeschlagen. |
|
UnexpectedProgramBehavior |
19 |
Der Sercos-Bus befindet sich nicht in Phase 4. |
|
UnexpectedProgramBehavior |
1 |
Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten. |
|
UnexpectedProgramBehavior |
2 |
Die POU befindet sich in einem undefinierten Zustand. |
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. |
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. |
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) |
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. |
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.
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. |
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. |
Enumerationsname: |
DriveIsMoving |
Enumerationswert: |
182 |
Beschreibung: |
Der Antrieb bewegt sich. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Die Achse bewegt sich. |
Überprüfen Sie den Zustand der Achse. |
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. |
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. |
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.
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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.
Enumerationsname: |
WaitUntilDriveDisabled |
Enumerationswert: |
179 |
Beschreibung: |
Warten, bis der Antrieb deaktiviert ist. |
Die Achse wird deaktiviert.
Enumerationsname: |
WaitUntilDriveEnabled |
Enumerationswert: |
145 |
Beschreibung: |
Warten, bis der Antrieb aktiviert ist. |
Der Funktionsbaustein aktiviert die Lageregelung der Achse.
Enumerationsname: |
WaitUntilEncoderWritten |
Enumerationswert: |
188 |
Beschreibung: |
Warten, bis in den Geber geschrieben wurde. |
Es wird in den Geber der Achse geschrieben.
Enumerationsname: |
WritingPositionDone |
Enumerationswert: |
184 |
Beschreibung: |
Die Geberposition wurde geschrieben. |
Das Schreiben in den Geber der Achse ist abgeschlossen.