Implementierung über PLC
In der SPS wird das Dynamische Koordinatensystem (DK) aktiviert, sobald transition_w.command := 1 gesetzt ist. Dabei wechselt der Zustand des DK von 0 nach 1 und dann 2 (s. Abb. „Zustand des dynamischen Koordinatensystems“ in Kapitel „PLC als Master“). Entsprechend müssen die gewünschten Parameter davor gesetzt sein.
Achtung
Um das DK zu aktivieren wird hier eine M-Funktion (M100) verwendet werden, da eine Aktivierung über #TRACK CS ON das DK ein zweites Mal aktiviert und zu abnormalem Verhalten führen kann.
Programmierbeispiel
SPS
PROGRAM DynCsPLC_M
VAR
Init : BOOL;
KbCs : HLI_COORDINATE_SYSTEM_INT;
pDynCs : POINTER TO MC_CONTROL_DYN_CS_UNIT;
END_VAR
…
IF NOT Init
THEN
pDynCs^.enable_w := TRUE;
(*Verschiebung zum Drehtischmittelpunkt*)
kb_cs.translation[0] := DINT#-13059200;
kb_cs.translation[1] := DINT#0;
kb_cs.translation[2] := DINT#800000;
kb_cs.rotation[0] := DINT#0;
kb_cs.rotation[1] := DINT#0;
kb_cs.rotation[2] := DINT#0;
(*Setzten der konfig. Parameter*)
pDynCs^.transition_w.f_kin_base := TRUE;
pDynCs^.transition_w.f_set_zero := FALSE;
pDynCs^.transition_w.f_rot_trans := FALSE;
pDynCs^.transition_w.filter_max_ticks := UDINT#0;
pDynCs^.transition_w.option := UDINT#1;
pDynCs^.transition_w.kinematic_base_cs := kb_cs;
pDynCs^.transition_w.f_wait := TRUE;
Init := TRUE;
END_IF;
(* Wurde mit M100 das DK aktiviert*)
(*IF M100.ACTIVE THEN *)
pDynCs^.transition_w.command := DINT#1;
(*M100.ACTIVE := FALSE Trigger zurücksetzen *)
(* END_IF *)
(* Wurde mit M101 das DK deaktiviert*)
(*IF M101.ACTIVE THEN *)
pDynCs^.transition_w.command := DINT#-1;
(*M101.ACTIVE := FALSE Trigger zurücksetzen *)
(* END_IF *)
(* Rotation um den in KbCs gesetzten Nullpunkt, *)
(* um Z-Achse mit Winkel der Drehachse des Tisches*)
IF pDynCs^.state_r.actual_state = UDINT#2 AND
pDynCs^.command_semaphor_rw = FALSE
THEN
pDynCs^.command_w.rotation[2]:= gpAx[6]^.lr_state.current_position_acs_r;
pDynCs^.command_semaphor_rw := TRUE;
END_IF;
Programmierbeispiel
Slave
…
N200 X1305.92 Y0
N210 M100
N230 G92 X1305.92
N240 Z90
; Roboter auf Drehachse positioniert um Sprünge
; zu verhindern
; Drehtisch (X1) wird unabhängig vom Roboter gedreht
N250 X0 Y0 X1[INDP_ASYN POS=-90 G01 F500 G90]
N260 Z80
N270 X-60
N280 X60
N290 X0
N300 Y-60
N310 Y60
N320 Z90
…
N480 #WAIT INDP ALL
; Roboter zum Drehtisch Mittelpunkt um Sprünge
; zu verhindern
N490 G01 X0 Y0
N500 M101
…
Programmierbeispiel
SDA
…
m_synch[100] MVS_SVS ( Activate dynamic CS)
m_synch[101] MVS_SVS ( Deactivate dynamic CS)
…