Hallo zusammen,
ich arbeite aktuell mit Automation Studio 4.12, einer X20CP0483 CPU und mapp Motion.
Das Homing mit mcHOMING_ABSOLUTE
funktioniert bereits.
Nun möchte ich aber mcHOMING_RESTORE_POSITION
nutzen, damit die Motorposition nach einem Neustart/Power Cycle erhalten bleibt.
Laut Doku soll dazu eine remanente Variable vom Typ McAcpAxRestorePosType
angelegt werden, in der die Positionsdaten gespeichert werden. Diese Variable muss zwischen den Zyklen gespeichert und wieder eingelesen werden.
Meine Fragen:
-
Wie deklariere und initialisiere ich korrekt eine remanente Variable in ST, sodass die Achsposition dauerhaft erhalten bleibt?
-
Gibt es ein Minimalbeispiel in Structured Text, wie die remanente Variable angelegt wird und wie ich den Funktionsblock MC_BR_InitHome_AcpAx
in Verbindung mit mcHOMING_RESTORE_POSITION
verwende?
Rahmenbedingungen meiner Applikation:
-
Motor mit Single-Turn Encoder
-
Mechanik kann ca. 720° verfahren
-
Keine Endschalter vorhanden
Ich habe die Dokumentation bereits durchgesehen, hänge aber genau an dem Punkt, wie die remanente Variable erstellt und richtig verwendet wird.
Ein kleines Codebeispiel oder eine kurze Schritt-für-Schritt-Erklärung wäre super hilfreich.
Vielen Dank im Voraus für die Unterstützung!
Viele Grüße
Dominik
Hallo Dominik,
um eine Variable remanent zu deklarieren musst du den Haken “Retain” aktivieren.
du kannst dann z.B. mit dem FUB “MC_BR_InitHome_AcpAx” den Referenzmode einstellen.
Gruß
Stephan
Hallo Stephan,
Vielen Dank für deine Antwort!
Ich verwende bisher die Blöcke MpAxisBasic und MpAxisBasicParType.
Mein bisheriges Skript:
VAR
MpAxisBasic_0 : MpAxisBasic;
AxisParameters : MpAxisBasicParType;
do_03 : BOOL := FALSE; (*
McAxisReadParameters : MC_ReadParameter;
*) (* Create variable to permanently store the motor position
restorePosVar: McAcpAxRestorePosType;
restorePosVarAddress: UDINT;
McAxisInitHome : MC_BR_InitHome_AcpAx; *)
zero_drive_position : BOOL;
Timer1 : TON;
(* MC_BR_InitHome_AcpAx01 : MC_BR_InitHome_AcpAx; *)
END_VAR
(*
VAR RETAIN
RestorePosition : ARRAY[0..2] OF McAcpAxRestorePosType;
END_VAR
*)
PROGRAM _INIT
do_03 := TRUE; //Activate the enable pin on the drive
MpAxisBasic_0.Enable := TRUE;
AxisParameters.Position := 100.0;
AxisParameters.Velocity := 40.0;
AxisParameters.Acceleration := 50.0;
AxisParameters.Deceleration := 50.0;
AxisParameters.Homing.Mode := mcHOMING_ABSOLUTE;
(* AxisParameters.Homing.Mode := mcHOMING_RESTORE_POSITION;
AxisParameters.Homing.Options.RestorePositionVariableAddress := ADR(RestorePosition[0]); *)
END_PROGRAM
PROGRAM _CYCLIC
AxisParameters.Position := d_mix_set / 100 * 720; // calculate set value for motor position according to set mixing chamber diameter
d_mix_act := MpAxisBasic_0.Position / 720 * 100; // calculate act mixing chamber diameter in percent
MpAxisBasic_0.MpLink := ADR(gAxis_1);
MpAxisBasic_0.Parameters := ADR(AxisParameters);
MpAxisBasic_0();
// MC_BR_InitHome_AcpAx01.Axis := ADR(gAxis_1);
IF zero_drive_position = TRUE THEN
Timer1(IN := TRUE, PT := T#100ms);
AxisParameters.Homing.Mode := mcHOMING_DEFAULT;
AxisParameters.Homing.Position := 0;
MpAxisBasic_0.Home := TRUE;
IF Timer1.Q AND MpAxisBasic_0.IsHomed = TRUE THEN
Timer1(IN := FALSE, PT := T#100ms);
MpAxisBasic_0.Home := FALSE;
AxisParameters.Homing.Mode := mcHOMING_ABSOLUTE;
zero_drive_position := FALSE;
END_IF
END_IF
END_PROGRAM
Könntest du mir vielleicht noch genauer erklären wie ich den Block MC_BR_InitHome_AcpAx verwenden muss?
Vielen Dank 
Dominik
Hallo Dominik,
wie oben beschrieben kannst den FUB “MC_BR_InitHome_AcpAx” mit den beschriebenen Einstellungen aufrufen und das Execute setzen. Damit wird dann der Referenzmodus eingestellt.
Danach setzt du dann beim MpAxisBasic den Home Eingang auf TRUE mit dem Mode “mcHOMING_INIT”. Es wird die letzte Position wieder hergestellt.
Da du nur ein Singleturn Geber hast funktioniert das wiederherstellen nur wenn der Geber keinen Überlauf hat. Du darfst also nur maximal eine Umdrehung verfahren ansonsten brauchst du einen Multiturn Geber.
Bei der Inbetriebnahme fährst du die Achse auf den gewünschten Nullpunkt und führst ein Homing “mcHOMING_DIRECT” durch.
Hallo Dominik,
ich habe ein paar kleine Ergänzungen zu den Antworten von Stephan.
Man kann die Variable für die Endlosposition auch in der Hardwarekonfiguration fix zuweisen und muss dann nicht MC_BR_InitHome_AcpAx aufrufen:
Im nicht referenzierten Zustand, d.h. spannungslos oder bevor MC_Home aufgerufen wurde, darf sich die Achse nicht weiter als 1/2 Geberzählbereich bewegen,
damit die Position richtig wiederhergestellt werden kann.
Wenn die Achse referenziert ist darf sie sich beliebig weit bewegen, auch mit einem Singleturn-Geber.
Vielen Dank @Martin.Schrott und @stephan.herbig für eure Antworten.
Leider ist es mir immer noch nicht klar wie ich den Baustein MC_BR_InitHome_AcpAx in Verbindung mit den andereren
Bausteinen einsetze.
Könnte ich mir vielleicht nochmal schritt für schritt erklären welche Werte ich für welche Parameter in welcher Reihenfolge
übergeben muss um das Homing so auszuführen, dass ich nach einem Powercylce des Systems, die Absolutposition des
Rotors wieder herstellen kann?
Ich bitte um Verständnis, ich bin noch relativ am Anfang meiner B&R Zeit ^^
Vielen Dank und Liebe Grüße,
Dominik