ST_CrankData - Allgemeine Informationen
Typ |
Datenstruktur |
Verfügbar ab: |
V1.0.3.0 |
Übernommen aus: |
– |
Versionen: |
Aktuelle Version |
Datenstruktur, die sämtliche Daten der Kurbel sowie alle Berechnungsergebnisse des Funktionsbausteins FB_Crank enthält.
Im Folgenden werden nur die Komponenten der Struktur erläutert, die für den Anwender von unmittelbarer Bedeutung sind. Die restlichen Komponenten sind Berechnungsergebnisse der POU, die in der Struktur gespeichert werden.
Vorgaben des Anwenders
Der Abschnitt „Vorgaben des Anwenders“ enthält die Werte, die vom Anwender vor der Aktivierung des Funktionsbausteins vorgegeben werden müssen.
Variable |
Datentyp |
Beschreibung |
---|---|---|
lrRadius: |
LREAL |
Radius der Kurbel (Größe R in Abbildung 1). Einheit: Längeneinheiten, Bereich: > 0,0 |
lrPushRod: |
LREAL |
Länge der Schubstange der Kurbel (Größe L in Abbildung 1). Einheit: Längeneinheiten, Bereich: > 0,0 |
lrOffset |
LREAL |
Offset zwischen Kurbelmittelpunkt und Bewegungsebene der Linearachse (Größe D in Abbildung 1). Einheit: Längeneinheiten, Bereich: - ∞ ... + ∞ |
lrXStart |
LREAL |
Anwenderdefinierter Nullpunkt der Linearposition. Erlaubt eine für die Praxis zweckmäßige Wahl des Nullpunkts der Linearposition. Ist gleich dem Abstand dieses Nullpunkts vom Kurbelmittelpunkt. Einheit: Längeneinheiten, Bereich: - ∞ ... + ∞ |
xCrankLeft |
BOOL |
Diese Variable muss auf TRUE gesetzt werden, wenn die Schubstange der Kurbel nach links zeigt. Zeigt sie nach rechts, so muss diese Variable gleich FALSE sein. |
xRange |
BOOL |
Bei manchen Kurbeln, die keine vollständigen Umdrehungen durchführen können, gibt es zwei mögliche Bewegungsbereiche. Ist diese Variable gleich TRUE, so geht die POU davon aus, dass sich die Kurbel in Bereich 1 bewegt, andernfalls in Bereich 2. Es ist zu beachten, dass die Bereiche 1 und 2 keine direkte geometrische Interpretation haben. Um herauszufinden, welcher Bereich wo liegt, muss xRange entsprechend gesetzt werden. Die Grenzen des Winkelbereichs stehen dann in den Variablen lrPhiLogMin und lrPhiLogMax. |
Bei den Extrempositionen der Linearachse handelt es sich um kritische Punkte der Transformation, da hier die Geschwindigkeit der Linearachse unabhängig von der Geschwindigkeit der Kurbelachse zwingend null wird. Aus diesem Grund ist es nicht möglich, eine lineare Achsbewegung über diesen Punkt hinaus vorzugeben. Andernfalls könnte die Geschwindigkeit der Kurbelachse eine Polposition haben. Um dieses Problem zu vermeiden, wird die Kurbeltransformation durch ein Polynom des 5. Grades ersetzt, dessen Steigung in diesem Bereich nie null wird, in einem konfigurierbaren Bereich in den Extrempositionen der linearen Achse. In diesem Bereich folgt die Linearachse dann nicht mehr der vorgegebenen Bewegung. Die Geschwindigkeit der Kurbelachse bleibt dagegen jedoch beschränkt.
Die Intervalle, in denen die Polynome aktiv sind, werden in Längeneinheiten der Linearachse vorgegeben. Sie beziehen sich auf die logische Position der Linearachse (siehe Abschnitt 4). Die unten aufgeführten Variablen geben die Breiten der Intervallteile von der Extremposition nach unten (Low) und nach oben (High) an. Die Gesamtbreite des Intervalls ist folglich gleich der Summe der beiden Werte.
Variable |
Datentyp |
Beschreibung |
---|---|---|
lrP5Pole1IntervalLow |
LREAL |
Breite des unteren Teils des Intervalls um die Minimalposition der Linearachse. Einheit: Längeneinheiten, Bereich: > 0,0 |
lrP5Pole1IntervalHigh |
LREAL |
Breite der oberen Teils des Intervalls um die Minimalposition der Linearachse. Einheit: Längeneinheiten, Bereich: > 0,0 |
lrP5Pole2IntervalLow |
LREAL |
Breite des unteren Teils des Intervalls um die Maximalposition der Linearachse. Einheit: Längeneinheiten, Bereich: > 0,0 |
lrP5Pole2IntervalHigh |
LREAL |
Breite des oberen Teils des Intervalls um die Maximalposition der Linearachse. Einheit: Längeneinheiten, Bereich: > 0,0 |
Kann die Kurbel keine vollständigen Umdrehungen ausführen, so gibt es nur eine Extremposition der Linearachse. In diesem Fall sind stets die Werte P5Pole1IntervalLow und P5Pole1IntervalHigh zu verwenden.
Die obigen Intervalle können so groß gewählt werden, dass sie sich überlappen. In diesem Fall steht noch eine weitere Möglichkeit zur Verfügung, die Kurbelbewegung den Anforderungen der Anwendung anzupassen, um z. B. die maximal auftretende Geschwindigkeit unter einem bestimmten Wert zu halten. Bei überlappenden Interpolationsintervallen wird der entsprechende Bereich durch eine Polynom-Gerade-Polynom-Kombination interpoliert, die sich in der Regel in Bezug auf die auftretenden Maximalwerte erheblich günstiger verhält als das Aneinandersetzen zweier Polynome. Mit den beiden folgenden Variablen wird der Bereich definiert, in dem die Polynome aktiv sind. Im restlichen Bereich wird eine lineare Funktion verwendet.
Variable |
Datentyp |
Beschreibung |
---|---|---|
lrP5RangeLow |
LREAL |
Bestimmt die Länge des unteren Bereichs, in dem mit einem Polynom interpoliert wird. Einheit: Längeneinheiten, Bereich: > 0,0 |
lrP5RangeHigh |
LREAL |
Bestimmt die Länge des oberen Bereichs, in dem mit einem Polynom interpoliert wird. Einheit: Längeneinheiten, Bereich: > 0,0 |
Ist die Summe dieser Werte gleich dem Abstand der beiden Extremposition der Linearachse, so enthält die resultierende Kurve keinen Geradenanteil.
Wichtig: Die Parameter P5Pole1IntervalLow, P5Pole1IntervalHigh, P5Pole2IntervalLow, P5Pole2IntervalHigh, P5RangeLow und P5RangeHigh müssen immer akzeptable Werte aufweisen, selbst wenn sie für die relevante Anwendung nicht erforderlich sind.
Variable |
Datentyp |
Beschreibung |
---|---|---|
diXLogEqualXMechRange |
DINT |
Festlegung des Bereichs, in dem die logische Position mit der mechanischen übereinstimmt. Es gilt: diXLogEqualXMechRange = 1 -> XLog = XMech im Bereich lrPhiLogMin ... lrPhiLogSwitch diXLogEqualXMechRange = 2 -> XLog = XMech im Bereich lrPhiLogSwitch ... lrPhiLogMax |
lrUserMechPosOffset |
LREAL |
Offset, den der Ausgang q_lrUserCrankMechPosition gegenüber dem Ausgang q_lrCrankMechPosition hat. |
lrUserMechPosDirection |
LREAL |
Drehrichtung des Ausgangs q_lrUserCrankMechPosition. Ist dieser Parameter = 1,0, so haben die Ausgänge q_lrUserCrankMechPosition und q_lrCrankMechPosition die gleiche Drehrichtung. Ist er = -1,0, so sind die Drehrichtungen entgegengesetzt. |
Berechnete mechanische Daten
Der Abschnitt „Berechnete mechanische Daten“ enthält die sich aus den Angaben im vorigen Abschnitt ergebenden mechanischen Berechnungsergebnisse (keine Vorgabe möglich!)
Variable |
Datentyp |
Beschreibung |
---|---|---|
diNumberOfRanges |
DINT |
Anzahl der möglichen Bewegungsbereiche der Kurbel (1 oder 2) |
xEndlessCrank |
BOOL |
oTRUE: Kurbel kann vollständige Umdrehungen ausführen. oFALSE: Kurbel kann sich nur in einem eingeschränkten Bereich bewegen. |
lrXMechMin |
LREAL |
Minimalwert der mechanischen Linearposition (hängt von xRange und xCrankLeft ab). Einheit: Längeneinheiten |
lrXMechMax |
LREAL |
Maximalwert der mechanischen Linearposition (hängt von xRange und xCrankLeft ab). Einheit: Längeneinheiten |
lrPhiMin |
LREAL |
Mechanischer Winkel, an dem der zulässige Bewegungsbereich der Kurbel beginnt (Drehung im Uhrzeigersinn wird angenommen, hängt von xRange ab). Einheit: Grad |
lrPhiMax |
LREAL |
Mechanischer Winkel, an dem der zulässige Bewegungsbereich der Kurbel endet (Drehung im Uhrzeigersinn wird angenommen, hängt von xRange ab). Einheit: Grad |
lrPhiXMechMin |
LREAL |
Mechanischer Winkel, bei dem die Linearachse die Position lrXMechMin annimmt. Einheit: Grad |
lrPhiXMechMax |
LREAL |
Mechanischer Winkel, bei dem die Linearachse die Position lrXMechMax annimmt. Einheit: Grad |
Berechnete logische Daten
Der Abschnitt „Berechnete logische Daten“ enthält die sich aus den Angaben im Abschnitt „Berechnete mechanische Daten“ ergebenden logischen Berechnungsergebnisse (keine Vorgabe möglich!)
Variable |
Datentyp |
Beschreibung |
---|---|---|
lrXLogMin |
LREAL |
Minimalwert der logischen Position der Linearachse. Einheit: Längeneinheiten |
lrXLogSwitch |
LREAL |
Spiegelungspunkt der logischen Position. Bis zu dieser Position stimmen die logische und die mechanische Position der Linearachse überein, danach nicht mehr. Einheit: Längeneinheiten (siehe diXLogEqualXMechRange) |
lrXLogMax |
LREAL |
Maximalwert der logischen Position der Linearachse. Einheit: Längeneinheiten |
lrPhiLogMin |
LREAL |
Minimalwert des logischen Kurbelwinkels. Einheit: Grad |
lrPhiLogSwitch |
LREAL |
Logischer Kurbelwinkel, bei dem die logische Linearposition den Wert lrXLogSwitch annimmt. Einheit: Grad |
lrPhiLogMax |
LREAL |
Maximalwert des logischen Kurbelwinkels. Einheit: Grad |
xXLogDirPos |
BOOL |
Die logische Position ist über den gesamten Bereich lrPhiLogMin ... lrPhiLogMax streng monoton und so definiert, dass sie in dem durch diXLogEqualXMechRange definierten Bereich mit der mechanischen Position übereinstimmt. Das Verhalten der mechanischen Position bestimmt daher, ob die logische Position beim Übergang des logischen Winkels von lrPhiLogMin nach lrPhiLogMax stets monoton wachsend oder stets monoton fallend ist. Im ersten Fall ist xXLogDirPos = TRUE, im zweiten Fall xXLogDirPos = FALSE. |
diP5NumberOfPoles |
DINT |
Variable zur internen Verwendung. |
alrP5XLimLow |
ARRAY[0..5] OF LREAL |
Variable zur internen Verwendung. |
alrP5XLimHigh |
ARRAY[0..5] OF LREAL |
Variable zur internen Verwendung. |
alrP5Coefficients |
ARRAY[0..5,0..5] OF LREAL |
Variable zur internen Verwendung. |
xValidData |
BOOL |
Variable zur internen Verwendung. |
xSynchron |
BOOL |
Variable zur internen Verwendung. |
Mechanische und logische Größen
Im vorangehenden Abschnitt war häufig von mechanischen und logischen Größen die Rede. Hier soll der Grund für das Vorhandensein dieser beiden Typen von Größen erklärt werden:
Die mechanischen Größen sind die Größen, die tatsächlich beobachtet werden:
Der mechanische Kurbelwinkel ist der Winkel φ. Er bewegt sich im Intervall [0°, 360°]. Die mechanische Linearposition entspricht der anwenderdefinierten Position des Schlittens, z. B. dessen Abstand vom vorgegebenen Nullpunkt lrXStart, gemessen in positiver X-Richtung.
Die logischen Größen sind Größen, die eingeführt wurden, um Berechnungen und Abläufe in der POU zu vereinfachen:
Es ist für die durchzuführenden Berechnungen ungünstig, wenn der bei vollständigen Umdrehungen der Kurbel unvermeidliche 360°-Sprung stets beim Übergang 360° -> 0° auftritt. Stattdessen erweist es sich als viel günstiger, diesen Sprung in die Randpunkte des zulässigen Winkelbereichs zu legen. Der logische Kurbelwinkel ist daher ein Winkel, der sich lediglich in einem anderen Bereich bewegt (z. B. –70°...290° oder 50°...410°). Sein Bereich beginnt bei der unteren Grenze des zulässigen Winkelbereichs der Kurbel (Drehung im Uhrzeigersinn angenommen). Der mechanische Kurbelwinkel kann aus ihm wie folgt gewonnen werden:
Mechanischer Kurbelwinkel = (Logischer Kurbelwinkel + 360°) MOD 360°
Bei der Vorgabe der Linearbewegung tritt ein prinzipielles Problem auf. Die Rücktransformation Linearposition -> Kurbelwinkel ist nicht eindeutig, da es stets Linearpositionen gibt, denen zwei Kurbelwinkel entsprechen. Grund für die Einführung der logischen Linearposition ist die Lösung des Problems dieser Nichteindeutigkeit, um eindeutige Bewegungen für die Linearachse vorgeben zu können.
Die logische Linearposition wird durch ein Spiegelungsverfahren aus der mechanischen Linearposition gewonnen. Hierbei wird die mechanische Linearposition an einem ihrer Extremalpunkte gespiegelt. Die logische Position stimmt immer in einem Bereich mit der mechanischen überein. Dieser wird durch den Parameter diXLogEqualXMechRange definiert.
Im Fall diXLogEqualXMechRange = 1 gilt:
Geht man von lrPhiLogMin aus und bewegt sich in Richtung zunehmender Phi‘s, so stimmt die logische Linearposition zunächst bis zu diesem Extremalpunkt mit der mechanischen Linearposition überein. Danach trennen sich logische und mechanische Position: Die mechanische Position ändert sich in entgegengesetzter Richtung, während sich die logische Position weiter in gleicher Richtung ändert. Das Verhalten der mechanischen Position beim Start von lrPhiLogMin aus bestimmt also das Verhalten der logischen Position im gesamten Bereich lrPhiLogMin ... lrPhiLogMax. Wächst die logische Position kontinuierlich, so ist die Variable xXLogDirPos = TRUE, fällt sie kontinuierlich, so gilt xXLogDirPos = FALSE.
Im Fall diXLogEqualXMechRange = 2 gilt:
Geht man von lrPhiLogMax aus und bewegt sich in Richtung abnehmender Phi‘s, so stimmt die logische Linearposition zunächst bis zum Extremalpunkt mit der mechanischen Linearposition überein. Danach trennen sich logische und mechanische Position: Die mechanische Position ändert sich in entgegengesetzter Richtung, während sich die logische Position weiter in gleicher Richtung ändert. Das Verhalten der mechanischen Position beim Start von lrPhiLogMin aus bestimmt also das Verhalten der logischen Position im gesamten Bereich lrPhiLogMin ... lrPhiLogMax. Wächst die logische Position kontinuierlich, so ist die Variable xXLogDirPos = TRUE, fällt sie kontinuierlich, so gilt xXLogDirPos = FALSE.
Die folgenden Erklärungen dienen als Beispiel für den Fall diXLogEqualXMechRange = 1. Das Entsprechende gilt für den Fall diXLogEqualXMechRange = 2.
Kann die Kurbel vollständige Umdrehungen ausführen (xEndlessCrank = TRUE), so sind die Verhältnisse relativ einfach. Bei lrPhiLogMin wird die minimale mechanische Linearposition angenommen. Diese ist auch gleich der minimalen logischen Position lrXLogMin. Die maximale mechanische Linearposition lrXMechMax wird beim Winkel lrPhiLogSwitch angenommen. Es gilt lrXLogSwitch = lrXMechMax. Bis hier stimmen mechanische und logische Position überein. Im Bereich lrPhiLogSwitch ... lrPhiLogMax ( (in diesem Fall gilt lrPhiLogMax = lrPhiLogMin + 360°) nimmt die mechanische Position wieder ab, während die logische weiter zunimmt und bei lrPhiLogMax ihren Maximalwert lrXLogMax = 2,0 * lrXMechMax - lrXMechMin annimmt. In diesem Fall gilt immer xXLogDirPos = TRUE.
Kann die Kurbel keine vollständigen Umdrehungen ausführen (xEndlessCrank = FALSE), so sind die Dinge etwas komplizierter. Startet man von der unteren Grenze lrPhiLogMin des zulässigen Winkelbereichs, so kann die mechanische Position abhängig von den Daten der Kurbel und dem gewählten Winkelbereich (xRange) zu- oder abnehmen. Man kann in diesem Fall beweisen, dass jeder Winkelbereich höchstens ein Extremum der mechanischen Linearposition enthält. Dieses wird beim Winkel lrPhiLogSwitch angenommen. Im Bereich lrPhiLogMin ... lrPhiLogSwitch stimmt die logische Position wie oben mit der mechanischen überein, im Bereich lrPhiLogSwitch ... lrPhiLogMax trennen sich die Werte. Erhöht sich die mechanische Position im Bereich lrPhiLogMin ... lrPhiLogSwitch, so gilt xXLogDirPos = TRUE und die logische Position erhöht sich im gesamten Bereich lrPhiLogMin ... lrPhiLogMax. Verringert sich die mechanische Position im Bereich lrPhiLogMin ... lrPhiLogSwitch, so gilt xXLogDirPos = FALSE und die logische Position verringert sich im gesamten Bereich lrPhiLogMin ... lrPhiLogMax. Wenn xXLogDirPos = TRUE, gilt Position (lrPhiLogMin) = lrXLogMin, Position (lrPhiLogMax) = lrXLogMax, wenn xXLogDirPos = FALSE, gilt Position (lrPhiLogMin) = lrXLogMax, Position (lrPhiLogMax) = lrXLogMin.