Bahnschaltpunkte 1: Einfaches Beispiel
Das hier beschrieben Beispielprojekt Robotics_Trigger.project
finden Sie im Installationsverzeichnis von CODESYS unter ..\CODESYS SoftMotion\Examples
.
Bahnschaltpunkte dienen dazu zu erfahren, wann genau eine Achsgruppe einen bestimmten Punkt auf der kommandierten Bahn erreicht. Diese Information kann beispielsweise genutzt werden, um ein Werkzeug exakt zum richtigen Zeitpunkt ein- oder auszuschalten. Dieses Beispiel zeigt, wie ein einzelner Bahnschaltpunkt auf einer Bewegung kommandiert und im Anschluss zyklisch ausgelesen wird. Das Projekt Bahnschaltpunkte 2: Beispiel Klebeprozess zeigt darauf aufbauend ein realistisches Anwendungsbeispiel.
Struktur der Applikation
Die Applikation besteht aus zwei Programmen, einem Main_PRG
, das in der Bustask läuft, und einem Planning_PRG
, das in der Planungs-Task der Achsgruppe läuft. Außerdem gibt es einen Trace.
Main_PRG
:
Das Programm Main_PRG
enthält die Hauptzustandsmaschine der Applikation. Die ersten beiden Zustände dienen der Initialisierung und dem Einschalten der Antriebe und der Achsgruppe. Im Zustand STATE_COMMAND_MOVEMENT_WITH_TRIGGER
wird zunächst mithilfe einer Instanz des Funktionsbausteins SMC_GroupPrepareTrigger
ein Bahnschaltpunkt vorbereitet. Die Position wird relativ mit einem Wert von 0.6 angegeben. Somit wird der Bahnschaltpunkt an den Punkt gelegt, an dem 60% der zugewiesenen Bewegung abgeschlossen sind. Der vorbereitete Bahnschaltpunkt wird der nächsten kommandierten Bewegung zugewiesen. In diesem Beispiel ist das eine Linearbewegung zur Position (X=20, Y=10), die mittels eines MC_MoveLinearAbsolute
kommandiert wird.
prepTrigger.PositionType := SMC_TriggerPositionType.MvtRelative; prepTrigger.Position.MvtPosition := 0.6; prepTrigger(AxisGroup:= AxisGroup, Execute:= TRUE); moveLinear(AxisGroup:= AxisGroup, Execute:= prepTrigger.Prepared);
Im nächsten Zustand STATE_ENABLE_READ_TRIGGER
wird eine Instanz von SMC_GroupReadTrigger
gestartet, um den Status des kommandierten Bahnschaltpunkts auslesen zu können. Die Verknüpfung zum Bahnschaltpunkt wird über die von SMC_GroupPrepareTrigger
zurückgegebene TriggerId
hergestellt.
readTrigger.TriggerId := prepTrigger.TriggerId; readTrigger.Enable := TRUE;
Im Zustand STATE_CHECK_TRIGGER
wird schließlich zyklisch der Status des Bahnschaltpunkts überprüft. Sobald SMC_GroupReadTrigger
als Status Active
meldet, kann die Dauer bis zum Erreichen des Bahnschaltpunkts ausgelesen werden. Die Dauer bezieht sich immer auf den Anfang des aktuellen Zyklus. Der Bahnschaltpunkt wird also im aktuellen Zyklus erreicht, wenn die Dauer kleiner als die Zykluszeit, in diesem Beispiel 0.004 s, ist:
IF readTrigger.TriggerInfo.status = SMC_TRIGGER_STATUS.Active THEN IF readTrigger.TriggerInfo.triggerTime <= 0.004 THEN triggerFired := TRUE; ... END_IF END_IF
Planning_PRG
Im Programm Planning_PRG
wird mittels des Funktionsbausteins SMC_TuneCPKernel
die Dauer der Vorausschau der Planung konfiguriert. Der Baustein SMC_GroupReadTrigger
kann im Rahmen dieser Vorausschau ausgeben, wann ein Bahnschaltpunkt erreicht wird. Im Beispiel wird die Dauer der Vorausschau auf 0.1 s gesetzt. Der Status des Bausteins SMC_GroupReadTrigger
wechselt deshalb 0.1 s bevor die Achsgruppe den Bahnschaltpunkt erreicht auf Active
und gibt ab dann eine gültige Dauer aus.
tuneCpKernel(AxisGroup:= axisGroup, Execute:= TRUE, fPlanningForecastDuration:= 0.1);
Trace
Mithilfe des Trace kann das Verhalten des Bausteins SMC_GroupReadTrigger
nachvollzogen werden.
Im ersten Diagramm ist zu sehen, dass eine Bewegung von (X=0, Y=0) zu (X=20, Y=10) ausgeführt wird. Der Bahnschaltpunkt liegt an der relativen Position 0.6 auf der Bewegung, also bei (X=12, Y=6).
Im zweiten Diagramm wird der Wert des Ausgangs triggerTime
von SMC_GroupReadTrigger
dargestellt. Der Wert springt auf 0.1 s, weil die Dauer der Vorausschau der Planung 0.1s ist, und fällt dann linear ab, bis an der Position (X=12, Y=6) der Wert 0 erreicht ist.
Im dritten Diagramm ist der Wert der Variablen triggerFired
zu sehen, der im Zustand STATE_CHECK_TRIGGER
des Main_PRG
gesetzt wird, sobald die Achsgruppe noch weniger als 0.004 s vom Bahnschaltpunkt entfernt ist.