Hallo bin jetzt soweit das:
Motor vor / zurück / Stop funktioniert
Reset (über DigIn1) um Fehler zu quittieren
es fehlt nur noch das ich den "Error" vom MU_Power --> auf den DigOut1 bringe. Dies gelingt mir bisher nicht.
Generell das Ansprechen der Digitalen Ausgänge des Maxon Epos2P 24/5 gelingt mir nicht.
Im I/O Mananger funktioniert er, aber vom Programm bekomme ich ihn nicht angesprochen. Bitte um Hilfe
VAR_EXTERNAL
END_VAR
VAR_GLOBAL
END_VAR
VAR
myAxis : AXIS_REF := (AxisNo := 0);
fbReset : MC_Reset;
fbPower : MC_Power;
fbGetAllDigitalInputs : MU_GetAllDigitalInputs;
fbSetAllDigitalOutputs : MU_SetAllDigitalOutputs;
fbVelovor : MC_MoveVelocity;
fbVelozuruck : MC_MoveVelocity;
fbStop : MC_Stop;
(*Steuersignale*)
Stop1 :BOOL :=TRUE;
Stop2 :BOOL :=TRUE;
Motor_vor : BOOL;
Motor_zuruck : BOOL;
Stoerung : BOOL;
(*Eingänge*)
Signal_vor : BOOL := FALSE;
Signal_zuruck : BOOL := FALSE;
RESET : BOOL := FALSE;
(*Ausgänge*)
Stoermeldung : BOOL := FALSE;
(*Motorvariablen*)
Speed1 : UDINT:= 6000; (*Geschwindigkeit vor / max.8000*)
Speed2 : UDINT:= 2000; (*Geschwindigkeit zurück / max.8000*)
Beschleunigung1 : UDINT:= 5000; (*Beschleunigung vor*)
Beschleunigung2 : UDINT:= 5000; (*Beschleunigung zurück*)
Brems1 : UDINT:= 1000; (*Bremsrampe vor*)
Brems2 : UDINT:= 1000; (*Bremsrampe zurück*)
BremsStop : UDINT:= 15000; (*Bremsbaustein*)
END_VAR
(*Motorcontroller Einschalten*)
fbPower (Axis := myAxis, Enable := TRUE);
(*Motorvaraiblen ausschalten*)
Motor_vor := FALSE;
Motor_zuruck := FALSE;
Stoermeldung := FALSE;
(*Einlesen der Hardwareeingänge*)
fbGetAllDigitalInputs (Axis := myAxis, Enable := TRUE); (*Eingänge lesen*)
Signal_vor := fbGetAllDigitalInputs.GenPurpA;
Signal_zuruck := fbGetAllDigitalInputs.GenPurpB;
RESET := fbGetAllDigitalInputs.GenPurpC;
(*Setzen der Hardwareausgänge*)
fbSetAllDigitalOutputs (Axis := myAxis, Execute := TRUE); (*Ausgänge schreiben*)
Stoermeldung := fbSetAllDigitalOutputs.GenPurpA;
(*Abfrage der Eingänge und Ausgabe auf Variablen*)
(*Motor vor*)
IF (Signal_vor and NOT Signal_zuruck) THEN;
Motor_vor := TRUE;
Motor_zuruck := FALSE;
END_IF;
(*Motor zurück*)
IF (Signal_zuruck and NOT Signal_vor) THEN;
Motor_vor := FALSE;
Motor_zuruck := TRUE;
Stoermeldung := TRUE;
END_IF;
(*Motor STOP*)
IF (Signal_vor OR Signal_zuruck) THEN
Stop1 :=FALSE;
ELSE
Stop1 :=TRUE;
END_IF;
(*Ansteuern des Motors --> vorwärts*)
fbVelovor (Axis :=myAxis, Execute := Motor_vor, Velocity := Speed1, Acceleration := Beschleunigung1, Deceleration := Brems1, Direction := MCpositive);
(*Ansteuern des Motors --> zurück*)
fbVelozuruck (Axis :=myAxis, Execute := Motor_zuruck, Velocity := Speed2, Acceleration := Beschleunigung2, Deceleration := Brems2, Direction := MCnegative);
(* Motor-STOP*)
fbStop (Axis :=myAxis, Execute := Stop1, Deceleration :=BremsStop);
(* Controller Reset *)
IF (RESET) THEN
fbReset (Axis := myAxis, Execute := TRUE);
ELSE
fbReset (Axis := myAxis, Execute := FALSE);
END_IF;
(* Achsen Fehler *)
If fbPower.Error THEN
Stoerung := TRUE;
ELSE
Stoerung := FALSE;
END_IF;
(* Stoerung --> DigOut1 *)