FB_Crank - Allgemeine Informationen
Typ |
Funktionsbaustein |
Verfügbar ab |
V1.0.3.0 |
Übernommen aus |
- |
Implementiert |
- |
Versionen: |
Aktuelle Version |
Realisierung einer Schubkurbel
Der Funktionsbaustein stellt die folgenden Funktionen zur Verfügung:
oEs können sämtliche Varianten von Kurbeln verwaltet werden. Dies umfasst auch Kurbeln, die auf Grund der Längenverhältnisse von R, L, und D keine vollständigen Umdrehungen ausführen können, und solche, bei denen sich die Schubstange auf der „linken“ Seite befindet (gestrichelt dargestellt).
oFreie Parametrierung der Interpolationsintervalle um die Umkehrpunkte des Schlittens und die Verwendung von variablen Geradenanteilen bei der Überlappung von Interpolationsbereichen.
Anlagenprinzip für FB_Crank
Damit wird eine Transformation der linearen Bewegung des Schlittens in eine Drehbewegung der Kurbel durchgeführt. Die Bewegung des Schlittens kann dadurch ohne Rücksicht auf die Nichtlinearität des Antriebs erfolgen.
Anforderungen:
Die Mechanik muss so angelegt sein, dass die Kurbel ihre Drehung (360°-Drehung) abschließen kann, selbst wenn nicht der vollständige Weg genutzt wird.
Bedingt durch die endliche Dynamik des Antriebs wird der Weg des Schlittens nicht vollständig linearisiert. Es wird ein Abstand PoleDistance zu den Maximalwerten eingehalten.
Es wird sowohl der obere Teil der Kurbel, lrPhiMin bis lrPhiMax, als auch der untere Teil linearisiert. Zwischen den linearisierten Teilen werden allgemeine Polynome 5. Grades eingebaut. Dies erlaubt auch einen Betrieb über den linerarisierten Bereich hinaus. Der Kurbel-Funktionsbaustein erlaubt ein unbeschränktes Überfahren aller Positionen in jeder Richtung.
Der lineare Weg wird für eine Kurbelumdrehung in positiver Richtung gezählt. Auch wenn der Schlitten im unteren Bereich der Kurbel rückwärts fährt, ist die Zählweise positiv.
Die Periode für die Linearachse ist 2 * (X1 – X0). X1 ist die rechte maximale und X0 die linke maximale Position des Schlittens. Die Periode für die Kurbel ist 360°.
Zählweise bei der Kurbeltransformation
Die Kurbelposition reicht von 0° bis 360°. Die Schlittenposition reicht von 0 mm bis 100 mm, und dann nicht rückwärts, sondern weiterlaufend bis 200 mm. Danach beginnt sowohl die Position der Kurbel als auch die des Schlittens wieder bei 0.
Linearisierung der kompletten Kurbelumdrehung (vorwärts und rückwärts). An den Polen der Kurbel wird ein poly5com verwendet. Für die Berechnung sind ca. 10 ms erforderlich, die Funktion zur Zykluszeitüberwachung wird für die Berechnung auf 50 ms gesetzt.
Skizze des Anlagenprinzips
HINWEIS: Das obige X-Y-Koordinatensystem kann beliebig im Raum orientiert werden. Nur Folgendes ist zu berücksichtigen: Bei einer Draufsicht wird der Winkel wie dargestellt im Uhrzeigersinn entgegen der negativen X-Richtung gemessen. Der Parameter für die Motorrichtung der Kurbelachse („Motor Direction of the Crank Axis“) muss so eingestellt werden, dass ihre Position bei einer Drehung im Uhrzeigersinn (aus dieser Perspektive betrachtet) größer wird.
Anlagenprinzip für den Kurbel-FB
Ein Schlitten wird über eine Kurbel von einem Servoantrieb positioniert.
Blockschaltbild für FB_Crank
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. Mit der ansteigenden Flanke werden die Daten der Struktur ST_CrankData eingelesen und in das Bewegungsgesetz umgerechnet. Diese Vorberechnungen sind zeitintensiv. Hierzu werden die Überwachungszeiten für die Zykluszeitüberwachung vorübergehend hochgesetzt. Es sollte daher vermieden werden, mehrere dieser POUs im gleichen Zyklus einer Task zu aktivieren. Mit der fallenden Flanke werden alle Ressourcen, die die POU belegt hat, wieder freigegeben. |
i_xStart |
BOOL |
Verbindet den durch i_lencEncoder vorgegebenen logischen Geber mit der virtuellen Schlittenachse (i_ifDriveSlide) und startet die Kurbeltransformation. Änderungen der Eingangsdaten werden bei den Flanken dieses Eingangs nicht berücksichtigt. |
i_ifDriveCrank |
IF_Drive |
Eingang für die zu steuernde Kurbelachse. |
i_ifDriveSlide |
IF_Drive |
Eingang für eine virtuelle Schlittenachse, die vorgibt, wie sich die reale Schlittenachse bewegen soll. |
i_xHomed |
BOOL |
Bevor der Funktionsbaustein die Verarbeitung startet, muss entweder die Kurbel- oder die Schlittenachse referenziert werden, d. h. eine definierte Position innerhalb des zulässigen Verarbeitungsbereichs (lrPhiLogMin ... lrPhiLogMax für die Kurbelachse und lrXLogMin ... lrXLogMax für die Linearachse) aufweisen. Die Position der nicht referenzierten Achse wird hieraus berechnet und von der POU gesetzt. Dieser Eingang muss vor dem Setzen des Eingangs i_xStart gesetzt werden, wenn eine der Achsen referenziert wurde. Die POU arbeitet dann im normalen Transformationsmodus. Ist der Eingang i_xHomed beim Setzen des Start-Eingangs nicht gesetzt, so überträgt der Funktionsbaustein die vorgegebene Linearbewegung 1:1 auf die Kurbelachse. |
i_diStartMode |
DINT |
Referenziermodi: o0 = Der Sensor befindet sich an der Kurbelachse. Die Position der Kurbelachse muss daher beim Referenzieren extern auf den entsprechenden Wert gesetzt werden. Die zugehörige Position der Linearachse wird beim Setzen des Start- Eingangs von der POU gesetzt. o1 = Der Sensor befindet sich an der Linearachse. Die Position der Linearachse muss daher beim Referenzieren extern auf den entsprechenden Wert gesetzt werden. Die zugehörige Position der Kurbelachse wird beim Setzen des Start- Eingangs von der POU gesetzt. o2 = Die Position der Linearachse wird auf ihren Minimalwert und die Position der Kurbelachse auf den diesem entsprechenden Winkel gesetzt. o3 = In diesem Referenziermodus wird die oben für den Eingang i_xHomed angeführten 1:1-Transformationsmodus für die Referenzierfahrt verwendet. Wie oben bereits erläutert, überträgt die POU die vorgegebene Linearbewegung 1:1 auf die Kurbelachse, wenn beim Setzen des Eingangs i_xStart der Eingang i_xHomed = FALSE ist. Diese Transformation kann für Referenzierfahrten eingesetzt werden: Wenn das System seine Referenzposition erreicht hat, muss die Position der virtuellen Linearachse auf den entsprechenden Wert der Istposition gesetzt werden. Anschließend muss der Eingang i_xHomed auf TRUE gesetzt werden. Daraufhin bricht die Kurbel-POU ihre 1:1-Transformationskurve ab, berechnet aus der Linearposition die zugehörige Position der Crank-Achse und setzt diese auf den berechneten Wert. Der Funktionsbaustein muss jetzt neu gestartet werden (steigende Flanke am Eingang i_xStart). Währenddessen muss der Eingang i_xHomed = TRUE bleiben. Die POU berechnet und setzt dann die zugehörige Linearposition und ist betriebsbereit. Die Kurbelposition muss unbedingt gesetzt werden, da sich die Kurbel in der Zeit zwischen der Referenzierfahrt und dem Neustart der POU bewegen kann. Die Linearposition ist dann nicht mehr gültig. |
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_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. |
q_xSynchron |
BOOL |
Dieser Ausgang ist gesetzt, wenn sich die Kurbel in einem Bereich befindet, in dem keine Interpolation stattfindet. Wenn dieser Ausgang gesetzt wird, stimmt die Linearposition mit der Sollposition überein. |
q_lrSlideLogPosition |
LREAL |
Aktuelle logische Position der Linearachse. |
q_lrSlideMechPosition |
LREAL |
Aktuelle mechanische Position der Linearachse. Einheit: Längeneinheiten |
q_lrCrankLogPosition |
LREAL |
Aktuelle logische Position der Kurbelachse. |
q_lrCrankMechPosition |
LREAL |
Aktuelle mechanische Position der Kurbelachse. Einheit: Grad |
q_lrUserCrankMechPosition |
LREAL |
Anwenderdefinierte mechanische Position der Kurbelachse, Leitet sich aus q_lrCrankMechPosition durch Addition eines Offsets und Multiplikation mit einer Drehrichtung ab (siehe iq_stCrankData.lrUserMechPosOffset und iq_stCrankData.lrUserMechPosDirection). Einheit: Grad |
Ein-/Ausgang |
Datentyp |
Beschreibung |
---|---|---|
iq_lencEncoder |
L_ENC |
Eingang für einen logischen Geber, der ganz dem Kurbelbaustein zur Verfügung stehen muss. Er wird bei Setzen des Eingangs Start an die Schlittenachse i_ifDriveSlide gebunden und für die Kurvenbefehle benötigt, die der Funktionsbaustein verwendet. |
iq_stCrankData |
Struktur, die sämtliche Daten der Kurbel sowie alle Berechnungsergebnisse der Crank3-POU enthält. |
olrRadius: 100 mm
olrPushRod: 300 mm
olrOffset: 0
olrXStart: 0 mm
Daraus ergeben sich die obigen Positionsverläufe, je nachdem, ob die Kurbelstange links (rot) oder rechts (blau) liegt. Die gestrichelten Linien sind die „logischen Positionen“. Diese sind eine Spiegelung der „mechanischen Positionen“ ab der 2. Polstelle. Dies ist nötig, um eine eindeutige Zuordung der Schlittenposition zur Kurbelposition zu erreichen.
Mit den Parametern lrP5Pole1IntervalLow, lrP5Pole1IntervalHigh, lrP5Pole2IntervalLow und lrP5Pole2IntervalHigh lässt sich der Bereich festlegen, in dem die Kurbel linearisiert wird. Die Lücken der linearisierten Bereiche über die Polstellen werden mit „allgemeinen Polynomem 5.Grades“ verbunden.
Mechaniken, die nicht durchdrehen können:
Beispiel1: Sehr kurze Kurbelstange (lrPushRod)
olrRadius = 100
olrPushRod = 50
olrOffset = 0
olrXStart = 0
Hier sind zwei mögliche Verarbeitungsbereiche für die Kurbel verfügbar.
Die gestrichelte rote Linie ist wieder die logische Position, die am Pol1 gespiegelt ist. Der logische Bewegungsbereich des Schlittens reicht somit von ca. 87 bis 213 mm und -87 bis -13. Der logische Winkel der Kurbel liegt demzufolge im Bereich von 150 bis 210 Grad und -30 bis +30 Grad. Der Übergang an der Polstelle wird mit einem „allgemeinen Polynom 5. Grades“ durchfahren.
Beispiel 2: Relativ kurze Kurbelstange (lrPushRod) und lrOffset hoch.
olrRadius = 100
olrPushRod = 100
olrOffset = 100
olrXStart = 0
oKurbelstange rechts
-> Ein Verarbeitungsbereich und begrenzte Drehung
Die gestrichelte rote Linie ist wieder die logische Position, die am Pol1 gespiegelt ist. Der logische Bewegungsbereich des Schlittens reicht somit von ca. 87 bis 213 mm und -87 bis -13. Der logische Winkel der Kurbel liegt demzufolge im Bereich von 150 bis 210 Grad und -30 bis +30 Grad. Der Übergang an der Polstelle wird mit einem „allgemeinen Polynom 5. Grades“ durchfahren.
Programmierbeispiel:
Die Parameter für den Crank3 müssen noch vor der Aktivierung der POU gesetzt werden.
G_stCrankData.lrRadius := 100;
G_stCrankData.lrPushRod := 300;
G_stCrankData.lrXStart := 200;
G_stCrankData.lrOffset := 0;
G_stCrankData.lrP5Pole1IntervalLow := 10;
G_stCrankData.lrP5Pole1IntervalHigh := 20;
G_stCrankData.lrP5Pole2IntervalLow := 20;
G_stCrankData.lrP5Pole2IntervalHigh := 10;
G_stCrankData.xCrankLeft := FALSE;
G_stCrankData.xRange := FALSE;
xCrankLeft = FALSE bedeutet, die Kurbelstange ist rechts.
XRange = FALSE bedeutet, dass range2 verwendet wird, wenn zwei Verarbeitungsbereiche vorhanden sind.
Parametrierungsbeispiele
In den folgenden Abbildungen gilt stets:
oR = 100 mm
oL = 200 mm
G_stCrankData.lrRadius := 100;
G_stCrankData.lrPushRod := 200;
G_stCrankData.lrXStart := 170;
G_stCrankData.lrOffset := 50;
G_stCrankData.xCrankLeft := FALSE;
G_stCrankData.lrRadius := 100;
G_stCrankData.lrPushRod := 200;
G_stCrankData.lrXStart := 120;
G_stCrankData.lrOffset := -50;
G_stCrankData.xCrankLeft := FALSE;
G_stCrankData.lrRadius := 100;
G_stCrankData.lrPushRod := 200;
G_stCrankData.lrXStart := -120;
G_stCrankData.lrOffset := 50;
G_stCrankData.xCrankLeft := TRUE;
G_stCrankData.lrRadius := 100;
G_stCrankData.lrPushRod := 200;
G_stCrankData.lrXStart := 150;
G_stCrankData.lrOffset := -50;
G_stCrankData.xCrankLeft := TRUE;
Beispiel für die Parameter lrP5Pole1IntervalLow, lrP5Pole1IntervalHigh, lrP5Pole2IntervalLow, lrP5Pole2IntervalHigh, lrP5RangeLow, lrP5RangeHigh
Im folgenden Beispiel gilt:
G_stCrankData.lrRadius := 100;
G_stCrankData.lrPushRod := 200;
G_stCrankData.lrXStart := 0;
G_stCrankData.lrOffset := 50;
G_stCrankData.xCrankLeft := FALSE;
In diesem Fall kann die Kurbel vollständige Umdrehungen ausführen (es gilt daher G_stCrankData.xEndlessCrank = TRUE) und es ergibt sich für den Bereich der logischen Position:
lrXLogMin = 86.6..., lrXLogSwitch = 295.8..., lrXLogMax = 505.0...
Und für den logischen Winkel:
lrPhiLogMin = 330, lrPhiLogSwitch = 530.4..., lrPhiLogMax = 690
Des Weiteren G_stCrankData.xXLogDirPos = TRUE, z. B. lrXLogMin ist gleich lrPhiLogMin und lrXLogMax ist gleich lrPhiLogMax. Aktion
G_stCrankData.lrP5Pole1IntervalLow = 10
G_stCrankData.lrP5Pole1IntervalHigh = 20
G_stCrankData.lrP5Pole2IntervalLow = 30
G_stCrankData.lrP5Pole2IntervalHigh = 40
Dann ergibt sich folgender Verlauf. Die Bereiche, in denen mit „allgemeinen Polynomen 5. Grades“ interpoliert wird, sind mit Cursor gekennzeichnet. Der rote Trace stellt die logische Position der Linearachse dar, der blaue Trace den logischen Winkel der Kurbelachse. Wie weiter oben beschrieben, liegt Pol 1 bei lrPhiLogMin, Pol 2 bei lrPhiLogSwitch.
Bereich, der lrP5Pole1IntervalHigh entspricht
Bereich, der lrP5Pole2IntervalLow entspricht
Bereich, der lrP5Pole2IntervalHigh entspricht
Bereich, der lrP5Pole1IntervalLow entspricht
Die Interpolations-Intervalle für die Pole wurden hier so gewählt, dass keine Überlappung vorhanden war. Die Parameter lrP5RangeLow und lrP5RangeHigh waren daher nicht aktiv.
Nun werden lrP5Pole2IntervalHigh und lrP5Pole1IntervalLow so groß gewählt, dass im Bereich lrXLogSwitch ... lrXLogMax eine Überlappung auftritt. Da IrXLogMax - IrXLogSwitch = 209,2..., ist das der Fall, wenn
G_stCrankData.lrP5Pole2IntervalHigh = 150
G_stCrankData.lrP5Pole1IntervalLow = 150
ausgewählt wird. Dieser Bereich wird dann mit drei Abschnitten interpoliert: Poly5 – Gerade – Poly5. Die Länge des Poly5-Abschnitts wird von den Parametern lrP5RangeLow und lrP5RangeHigh festgelegt. Die Wahl
G_stCrankData.lrP5RangeLow = 50
G_stCrankData.lrP5RangeHigh = 100
liefert folgendes Ergebnis:
lrP5RangeLow
lrP5RangeHigh
q_etDiag |
q_etDiagExt |
Enumerationswert |
Beschreibung |
---|---|---|---|
OK |
9 |
Die POU ist deaktiviert. |
|
OK |
4 |
Die POU wird initialisiert. |
|
OK |
5 |
Warten auf Startbefehl. |
|
OK |
8 |
Warten, bis die POU deaktiviert ist. |
|
OK |
99 |
Die POU ist aktiv. |
|
DriveConditionInvalid |
10 |
Der Antrieb ist nicht bereit für Bewegungsbefehle. |
|
HomingFailed |
251 |
Die Position von DriveCrank ist außerhalb des gültigen Bereichs. |
|
HomingFailed |
252 |
Die Position von DriveSlide ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
247 |
Der Bewegungsbereich des DriveCrank ist zu klein. |
|
InputParameterInvalid |
3 |
Verbundener Antrieb ist ungültig. |
|
InputParameterInvalid |
246 |
Die mechanischen Daten sind ungültig. |
|
InputParameterInvalid |
131 |
P5Pole1IntervalHigh ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
248 |
P5Pole1IntervalLow ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
133 |
P5Pole2IntervalHigh ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
132 |
P5Pole2IntervalLow ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
249 |
P5PoleDistance ist zu groß. |
|
InputParameterInvalid |
137 |
P5RangeHigh ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
147 |
P5RangeLow ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
55 |
Die Summe der P5Range ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
64 |
PushRod ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
21 |
Radius ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
253 |
StartMode ist nicht bestimmbar. |
|
UnexpectedProgramBehavior |
116 |
Das Profil wird bereits verwendet. |
|
UnexpectedProgramBehavior |
250 |
Es konnten keine Bewegungsprofile angelegt werden. |
|
UnexpectedProgramBehavior |
254 |
Die Kurve konnte nicht gestartet werden. |
|
UnexpectedProgramBehavior |
1 |
Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten. |
|
UnexpectedProgramBehavior |
2 |
Die POU befindet sich in einem undefinierten Zustand. |
Enumerationsname: |
CrankPositionRange |
Enumerationswert: |
251 |
Beschreibung: |
Die Position von DriveCrank ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Füri_diMode = 0 oder i_diMode = 3 (Initiator an der Kurbel) liegt bei iq_stCrankDate.xEndlessCrank = FALSE (die Kurbelachse kann aufgrund mechanischer Randparameter keine volle Umdrehung ausführen), die RefPosition der Kurbelachse außerhalb des gültigen Bereichs. |
Für dieRefPosition von i_ifDriveCrank muss Folgendes gelten: iq_stCrankData.lrPhiLogMin <= i_ifDriveCrank RefPosition <= iq_stCrankData.lrPhiLogMax. |
Enumerationsname: |
CrankTravelRangeTooSmall |
Enumerationswert: |
247 |
Beschreibung: |
Der Bewegungsbereich des DriveCrank ist zu klein. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Der mögliche Bewegungsbereich der Kurbelachse ist zu klein. |
Es muss gelten: iq_stCrankData.lrPhiLogMax - iq_stCrankData.lrPhiLogMin >= 1 Überprüfen Sie iq_stCrankData.lrRadius, iq_stCrankData.lrPushRod und iq_stCrankData.lrOffset. |
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: |
DriveInvalid |
Enumerationswert: |
3 |
Beschreibung: |
Verbundener Antrieb ist ungültig. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang i_ifDriveCrank oder i_ifDriveSlide wurde keine Antrieb angelegt. |
Den Eingängen i_ifDriveCrank und i_ifDriveSlide müssen gültige Antriebe ü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: |
DriveNotReady |
Enumerationswert: |
10 |
Beschreibung: |
Der Antrieb ist nicht bereit für Bewegungsbefehle. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Die Achse befindet sich nicht in Lageregelung. |
Überprüfen Sie den Zustand der Achse. |
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: |
MechanicalDataIncompatible |
Enumerationswert: |
246 |
Beschreibung: |
Die mechanischen Daten sind ungültig. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Das Verhältnis der mechanischen Daten ist ungültig. |
Die mechanischen Daten müssen so gewählt werden, dass die folgende Formel erfüllt ist: (iq_stCrankData.lrOffset - iq_stCrankData.lrPushRod) / iq_stCrankData.lrRadius < 1,0 Die mechanischen Daten müssen so gewählt werden, dass die folgende Formel erfüllt ist: (iq_stCrankData.lrOffset + iq_stCrankData.lrPushRod) / iq_stCrankData.lrRadius > -1,0 |
Enumerationsname: |
P5Pole1IntervalHighRange |
Enumerationswert: |
131 |
Beschreibung: |
P5Pole1IntervalHigh ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang iq_stCrankData.lrP5Pole1IntervalHigh wurde ein ungültiger Wert angelegt. |
Dem Eingang iq_stCrankData.lrP5Pole1IntervalHigh muss ein Wert größer als 0 übergeben werden. |
Enumerationsname: |
P5Pole1IntervalLowRange |
Enumerationswert: |
248 |
Beschreibung: |
P5Pole1IntervalLow ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang iq_stCrankData.lrP5Pole1IntervalLow wurde ein ungültiger Wert angelegt. |
Dem Eingang iq_stCrankData.lrP5Pole1IntervalLow muss ein Wert größer als 0 übergeben werden. |
Enumerationsname: |
P5Pole2IntervalHighRange |
Enumerationswert: |
133 |
Beschreibung: |
P5Pole2IntervalHigh ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang iq_stCrankData.lrP5Pole2IntervalHigh wurde ein ungültiger Wert angelegt. |
Dem Eingang iq_stCrankData.lrP5Pole2IntervalHigh muss ein Wert größer als 0 übergeben werden. |
Enumerationsname: |
P5Pole2IntervalLowRange |
Enumerationswert: |
132 |
Beschreibung: |
P5Pole2IntervalLow ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang iq_stCrankData.lrP5Pole2IntervalLow wurde ein ungültiger Wert angelegt. |
Dem Eingang iq_stCrankData.lrP5Pole2IntervalLow muss ein Wert größer als 0 übergeben werden. |
Enumerationsname: |
P5PoleDistanceTooBig |
Enumerationswert: |
249 |
Beschreibung: |
P5PoleDistance ist zu groß. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Die Polynomintervalle überlappen sich in allen Fällen. |
Die Eingänge iq_stCrankData.lrP5Pole1IntervalLow, iq_stCrankData.lrP5Pole1IntervalHigh, iq_stCrankData.lrP5Pole2IntervalLow und iq_stCrankData.lrP5Pole2IntervalHigh müssen so gewählt werden, dass sich die Bereiche für die Polynomintervalle im Bereich von SlideLogPos min bis SlideLogPos max höchstens einmal überlappen. |
Enumerationsname: |
P5RangeHighRange |
Enumerationswert: |
137 |
Beschreibung: |
P5RangeHigh ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Die Überlappung der Polynomintervalle wurde so gewählt, dass der X-Abschnitt eines Polynoms gleich 0 wird. |
Die Eingänge iq_stCrankData.lrP5Pole1IntervalLow, iq_stCrankData.lrP5Pole1IntervalHigh, iq_stCrankData.lrP5Pole2IntervalLow und iq_stCrankData.lrP5Pole2IntervalHigh müssen so gewählt werden, dass der gesamte Intervallbereich für iq_stCrankData.lrP5Pole1IntervalHigh und iq_stCrankData.lrP5Pole2IntervalHigh aufgrund der Überlappung zu einer Geraden gezwungen werden. |
Enumerationsname: |
P5RangeLowRange |
Enumerationswert: |
147 |
Beschreibung: |
P5RangeLow ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Die Überlappung der Polynomintervalle wurde so gewählt, dass der X-Abschnitt eines Polynoms gleich 0 wird. |
Die Eingänge iq_stCrankData.lrP5Pole1IntervalLow, iq_stCrankData.lrP5Pole1IntervalHigh, iq_stCrankData.lrP5Pole2IntervalLow und iq_stCrankData.lrP5Pole2IntervalHigh müssen so gewählt werden, dass der gesamte Intervallbereich für iq_stCrankData.lrP5Pole1IntervalLow und iq_stCrankData.lrP5Pole2IntervalLow aufgrund der Überlappung zu einer Geraden gezwungen werden. |
Enumerationsname: |
P5RangeSumRange |
Enumerationswert: |
55 |
Beschreibung: |
Die Summe der P5Range ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Die Überlappung der Polynomintervalle wurde so gewählt, dass der X-Abschnitt eines Polynoms gleich 0 wird. |
Die Eingänge iq_stCrankData.lrP5Pole1IntervalLow, iq_stCrankData.lrP5Pole1IntervalHigh, iq_stCrankData.lrP5Pole2IntervalLow und iq_stCrankData.lrP5Pole2IntervalHigh müssen so gewählt werden, dass die Überlappung der zwei Polynom-Bereiche den Abstand von SlideLogPos min bis SlideLogPos switch oder von SlideLogPos max bis SlideLogPos switch nicht überschreitet. Das bedeutet, dass die Überlappung über den nächsten Pol der Kurbel hinausreicht. |
Enumerationsname: |
ProfileAlreadyInUse |
Enumerationswert: |
116 |
Beschreibung: |
Das Profil wird bereits verwendet. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Das Bewegungsprofil wird bereits verwendet. |
Überprüfen Sie die Bewegungsdaten. |
Enumerationsname: |
PushRodRange |
Enumerationswert: |
64 |
Beschreibung: |
PushRod ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang iq_stCrankData.lrPushRod wurde ein negativer Wert angelegt. |
Dem Eingang iq_stCrankData.lrPushRod muss ein Wert größer als 0 übergeben werden. |
Enumerationsname: |
RadiusRange |
Enumerationswert: |
21 |
Beschreibung: |
Radius ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang iq_stCrankData.lrRadius wurde ein negativer Wert angelegt. |
Dem Eingang iq_stCrankData.lrRadius muss ein Wert größer als 0 übergeben werden. |
Enumerationsname: |
SlidePositionRange |
Enumerationswert: |
252 |
Beschreibung: |
Die Position von DriveSlide ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
i_diStartMode ist 1 gesetzt. iq_stCrankData.xEndlessCrank ist auf FALSE gesetzt und die Position der Achse i_ifDriveSlide ist außerhalb des Intervalls [iq_stCrankData.lrXLogMin, iq_stCrankData.lrXLogMax]. |
Stellen Sie sicher, dass die Position von i_ifDriveSlide kleiner oder gleich iq_stCrankData.lrXLogMax und größer oder gleich iq_stCrankData.lrXLogMin bleibt. Überprüfen Sie die Grenzen der Schubstange iq_stCrankData.lrXLogMin und iq_stCrankData.lrXLogMax. Wählen Sie eine andere Betriebsart für iq_stCrankData.xEndlessCrank und i_diStartMode. |
- |
i_diStartMode ist auf 3 gesetzt. Die Position der Achse i_ifDriveSlide ist außerhalb des Intervalls [iq_stCrankData.lrXLogMin, iq_stCrankData.lrXLogMax]. |
Stellen Sie sicher, dass die Position von i_ifDriveSlide kleiner oder gleich iq_stCrankData.lrXLogMax und größer oder gleich iq_stCrankData.lrXLogMin bleibt. Überprüfen Sie die Grenzen der Schubstange iq_stCrankData.lrXLogMin und iq_stCrankData.lrXLogMax. Wählen Sie eine andere Betriebsart für i_diStartMode. |
Enumerationsname: |
UnableToCreateMotionProfiles |
Enumerationswert: |
250 |
Beschreibung: |
Es konnten keine Bewegungsprofile angelegt werden. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Es konnten keine Bewegungsprofile für die Achse geladen werden. |
Stellen Sie sicher, dass nicht zu viele Profile geladen und nicht mehr benutzte Profile gelöscht wurden. |
Enumerationsname: |
UnableToStartCam |
Enumerationswert: |
254 |
Beschreibung: |
Die Kurve konnte nicht gestartet werden. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Es war nicht möglich, den Fahrbefehl der Achse abzusetzen. |
Überprüfen Sie die Bewegungsparameter iq_stCrankData.lrXLogMin, iq_stCrankData.lrPhiLogMin, iq_stCrankData.lrXLogMin und iq_stCrankData.lrXLogMax. Stellen Sie sicher, dass sich das SERCOS-System in Phase 4 befindet. |
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: |
UnknownStartMode |
Enumerationswert: |
253 |
Beschreibung: |
StartMode ist nicht bestimmbar. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang i_diStartMode wurde ein ungültiger Wert angelegt. |
Der Eingang i_diStartMode muss mit Werten zwischen 0 und 3 belegt werden. |
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: |
WaitForStart |
Enumerationswert: |
5 |
Beschreibung: |
Warten auf Startbefehl. |
Der Funktionsbaustein hat seine Initialisierung abgeschlossen und wartet auf eine positive Flanke am Eingang i_xStart, bevor er mit der Abarbeitung fortfährt.
Enumerationsname: |
WaitUntilDisabled |
Enumerationswert: |
8 |
Beschreibung: |
Warten, bis die POU deaktiviert ist. |
Der Funktionsbaustein ist deaktiviert. Alle internen Zustände werden zurückgesetzt und verbundene Resourcen (z. B. Achsen) werden in einen sicheren Zustand überführt. Der Funktionsbaustein muss weiterhin aufgerufen werden, bis er q_xActive = FALSE meldet.
Enumerationsname: |
Working |
Enumerationswert: |
99 |
Beschreibung: |
Die POU ist aktiv. |
Der Funktionsbaustein führt die Kurbeltransformation aus.