FB_CTRL_3PHASE_SETPOINT_GENERATOR (nur auf einem PC-System)
Der Funktionsbaustein stellt einen 3-Phasen Sollwertgenerator dar.
Beschreibung:
Dieser Funktionsbaustein erzeugt ein 3-Phasen Sollwertprofil mit einem rechteckigen Beschleunigungsverlauf. Während der Generator aktiv ist, ist es möglich einen neuen Parametersatz vorzugeben. Je nach angegebenem Typ des Parametersatzes wird dieser sofort zur Wirkung gebracht (eNewParameterType := eCTRL_NEW_PARAMETER_TYPE_Instant), oder alternativ wird erst die aktuelle Bewegung zu Ende geführt und dann eine neue Bewegung mit dem neuen Parametersatz gestartet. (eNewPosType := eCTRL_NEW_PARAMETER_TYPE_NotInstant).
Hinweis | |
1. Bei Vorgabe eines neuen Parametersatzes ist es möglich, dass die alte Endposition überfahren wird. Siehe Beispiel. |
VAR_INPUT
VAR_INPUT
bStart : BOOL;
bStop : BOOL;
bReset : BOOL;
fOverride : LREAL;
END_VAR
bStart : Mit einer positiven Flanke am Eingang bStart wird die Sollwertgenerierung gestartet, wenn der Generator nicht aktiv ist und die Eingänge bStop und bReset FALSE sind.
bStop : Mit einer positiven Flanke am Eingang bStop wird die Sollwertgenerierung gestoppt. Es wird mit der Verzögerung des aktuellen Parametersatzes gebremst und der eventuell gespeicherte Folgeauftrag gelöscht.
bReset : Reset des Sollwertgenerators. Eine eventuell aktive Positionierung wird sofort abgebrochen, die Ausgänge fSetVelo und fSetAcc werden zu 0.0, die Sollposition wird auf die Startposition gesetzt und die internen Zustände werden gelöscht.
fOverride : Mit dem Override im Intervall [ 0 .. 100.0 % ] kann die Sollgeschwindigkeit skaliert werden. Bei einem Override von 100% wird ein Profil mit der im Parametersatz angegebenen Sollgeschwindigkeit generiert. Der hier implementierte Override berechnet bei einer Overrideänderung keine Skalierung der aktuellen Laufzeittabellen, sondern es wird ein interner Nachstartauftrag mit geänderter Sollgeschwindigkeit generiert. Die Auflösung des Overrides beträgt 0.1%.
VAR_OUTPUT
VAR_OUTPUT
fSetPos : LREAL; (* generated setpoint position *)
fSetVelo : LREAL; (* generated setpoint velocity *)
fSetAcc : LREAL; (* generated setpoint acceleration *)
nSetDirection : INT; (* generated direction *)
bCommandBuffered : BOOL;
bDone : BOOL;
bCommandAborted : BOOL;
eErrorId : E_CTRL_ERRORCODES;
bError : BOOL;
END_VAR
fSetPos : Sollposition
fSetVelo : Sollgeschwindigkeit
fSetAcc : Sollbeschleunigung
nSetDirection : Bewegungsrichtung [-1, 0, 1],
1 --> Bewegungsrichtung positiv
0 --> Generator inaktiv
-1 --> Bewegungsrichtung negativ
bGeneratorActive : Signalisiert, ob der Generator aktiv ist.
bCommandBuffered : Dieser Ausgang signalisiert mit einem TRUE, dass ein Fahrauftrag gespeichert ist, der nach dem aktuellen Auftrag gestartet wird.
Ein gespeicherter Auftrag wird gelöscht, wenn der folgende Sonderfall als Parametersatz angegeben wird:
fAcceleration := 0.0;
fDeceleration := 0.0;
fStartPos := 0.0;
fStartVelo := 0.0;
fTargetPos := 0.0;
fTargetVelo := 0.0;
fVelocity := 0.0;
tCtrlCycleTime := T#0s;
tTaskCycleTime := T#0s;
eNewParameterType := eCTRL_NEW_PARAMETER_TYPE_NotInstant;
bDone : Dieser Ausgang wird TRUE, wenn die Bewegung abgeschlossen ist und die Zielpositon erreicht wurde.
bCommandAborted : Dieser Ausgang wird TRUE, wenn die aktuelle Bewegung abgebrochen wurde. Dieses kann beispielsweise durch eine steigende Flanke am Eingang bStop verursacht werden.
eErrorId : Liefert bei einem gesetzten bError-Ausgang die Fehlernummer.
bError : Wird TRUE, sobald eine Fehlersituation eintritt.
VAR_IN_OUT
VAR_IN_OUT
stParams : ST_CTRL_3PHASE_SETPOINT_GENERATOR_PARAMS;
END_VAR
stParams : Parameterstruktur des Sollwertgenerators. Diese besteht aus den folgenden Elementen:
TYPE
ST_CTRL_RAMP_GENERATOR_PARAMS :
STRUCT
tTaskCycleTime : TIME; (* task cycle time [TIME]
*)
tCtrlCycleTime : TIME; (* controller cycle time [TIME]
*)
fStartPos : LREAL;
fStartVelo : LREAL;
fVelocity : LREAL; (* >= 0.0 *)
fTargetPos : LREAL;
fTargetVelo : LREAL;
fAcceleration : LREAL; (* > 0.0 *)
fDeceleration : LREAL; (* > 0.0 *)
eNewParameterType : E_CTRL_NEW_PARAMETER_TYPE;
END_TYPE
tCtrlCycleTime : Zykluszeit, mit der der Regelkreis bearbeitet wird. Diese muss größer oder gleich der TaskCycleTime sein. Der Funktionsbaustein berechnet mit dieser Eingangsgröße intern, ob die Zustands- und Ausgangsgrößen im aktuellen Zyklus aktualisiert werden müssen.
tTaskCycleTime : Zykluszeit, mit der der Funktionsbaustein aufgerufen wird. Diese entspricht der Task-Zykluszeit der aufrufenden Task, wenn der Baustein in jedem Task-Zyklus aufgerufen wird.
fStartPos : Startposition des Bewegungsprofils.
fStartVelo : Startgeschwindigkeit des Bewegungsprofils.
fVelocity : Geschwindigkeit in Einheiten / Sekunde.
fTargetPos : Zielposition des Bewegungsprofils.
fTargetVelo : Zielgeschwindigkeit des Bewegungsprofils.
fAcceleration : Beschleunigung in Einheiten / Sekunde2.
fDeceleration : Verzögerung in Einheiten / Sekunde2.
eNewParameterType :
TYPE E_CTRL_NEW_PARAMETER_TYPE :
(
eCTRL_NEW_PARAMETER_TYPE_NotInstant := 0,
eCTRL_NEW_PARAMETER_TYPE_Instant := 1
);
END_TYPE
eCTRL_NEW_PARAMETER_TYPE_Instant: Wenn ein Nachstartauftrag mit einem neuen Parametersatz erfolgt, wird dieser sofort übernommen. D. h., aus dem aktuellen Bewegungszustand wird eine Transition auf die Daten des neuen Parametersatzes berechnet, wobei die alten Parameter verworfen werden.
eCTRL_NEW_PARAMETER_TYPE_NotInstant: Wenn ein Nachstartauftrag mit einem neuen Parametersatz erfolgt, wird dieser nicht sofort übernommen. D. h., die aktuelle Bewegung wird erst zu Ende ausgeführt und danach wird mit den neuen Parametern auf das neue Ziel positioniert. Ein TRUE an dem Ausgang bCommandBuffered zeigt an, dass ein nicht instantaner Nachstartauftrag gespeichert ist. Ein bereits gespeicherter Auftrag kann durch einen anderen neuen nicht instantanen Parametersatz überschrieben oder gelöscht werden.
Beispielpositionierungen
Beispielpositionierung 1: | stParams.fStartPos := -500.0; |
| |
| |
Beispielpositionierung 2: | stParams.fStartPos := 1000.0; |
| |
| |
Beispielpositionierung 3: | stParams.fStartPos := -500.0;
Parameteränderung wenn fSetPos > 1000.0, eNewPosType := eCTRL_NEW_POS_TYPE_NotInstant stParams.fTargetPos := 0.0; |
| |
| |
Beispielpositionierung 4: | stParams.fStartPos := -500.0;
Parameteränderung wenn fSetPos > 1000.0, eNewPosType := eCTRL_NEW_POS_TYPE_Instant stParams.fTargetPos := 0.0;
|
| |
| |
Beispielpositionierung 5: | Start auf Punkt 1: stParams.fStartPos := -100.0; Nachstarten auf Punkt 2: stParams.fTargetPos := 400.0; Nachstarten auf Punkt 3: stParams.fTargetPos := 200.0; Nachstarten auf Punkt 4: stParams.fTargetPos := 600.0; |
|
Hinweis | |
Wenn einer neuer Parametersatz mit dem Type " |
Beispiel:
stParams.fTargetPos := 1000.0;
stParams.fStartPos := 0.0;
stParams.fVelocity := 500.0;
stParams.fAcceleration := 1000.0;
stParams.fDeceleration := 1000.0;
IF fSetPos > 800.0
THEN
stParams.fTargetPos := 400.0;
stParams.fVelocity := 500.0;
stParams.fAcceleration := 1_000.0;
stParams.fDeceleration := 500.0;
stParams.eNewPosType := eCTRL_NEW_POS_TYPE_Instant;
END_IF
In der nachfolgenden Scope-Aufnahme ist deutlich zu sehen, dass die ursprüngliche Zielposition von 1000 mm überfahren wird, was darauf zurück zu führen ist, dass die Verzögerung in dem neuen Parametersatz verringert wird.
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.8 | PC (i386) | TcControllerToolbox.lib |