Programmierhilfe für SPS EPOS 2P 24/5 - einfache Drehzahlgeschichte

Smather

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe ein kleines Problem beim Programmieren der internen SPS von der EPOS 2P 24/5 Steuerung.
Das Freigeben der Steuerung über den Funktionsbaustein 'MCpower' und das Einlesen des Analogeingangs 1 mit 'getAnalogInput' funktioniert sehr gut.
Jetzt möchte ich mit folgender Logik den Antrieb steuern:

Analogeingang1 < 2V --> Antrieb dreht rechts
Analogeingang1 > 2,5V --> Antrieb dreht links
2V< Analogeingang1 > 2,5V --> Antrieb steht

Entweder eine Case-Anweisung oder IF-Schleife werde ich hierfür verwenden. Das ist auch nicht das Problem, sondern die Funktion zum Ansteuern des Antriebes.
Hier stelle ich mir das so vor, den Antrieb mit einem Funktionsbaustein in Drehzahlregelung zu stellen und die Drehzahl und Drehrichtung diesem Funktionsbaustein zu übergeben. 'MCMoveVelocity' (glaub so heißt diese Funktion') hab ich schon ausprobiert, nur muss ich hier für die Drehrichtung einen ENUM Parameter ('MCpositive' und 'MCnegative') eingeben und diesen kann ich nicht als Variable anlegen. Zumindest weiß ich nicht wie das geht und ob überhaupt. Habe dies schon als String Variable versucht, bekomme aber dann den Fehler das Typ nicht übereinstimmen :confused:
Vielleicht ist das ja gar nicht notwendig, da es einen einfacheren Funktionsbaustein gibt?!? Wie gesagt stelle ich mir das so vor: Velocity Mode, Antrieb freigeben und dann mit der IF-Schleife einfach die Drehzahl (Drehrichtung mit Vorzeichen?) in eine Variable für einen 'Velocity'-Funktionsbaustein zu übergeben. +2000rpm Antrieb dreht rechts, -2000rpm Antrieb dreht links, 0rpm Antrieb steht. Ist dies machbar? wenn ja wie? :confused:

Oder gibt es eine andere Lösung mit den Funktionsbausteinen? Hat jemand dazu eine schöne Lösung, die funktioniert?
Für Eure Hilfe und Unterstützung danke ich euch schon mal.:p

Gruß
Smather
 
Anmerkung

Hier noch kurz vielleicht Möglichkeiten, wobei ich die zweite Favorisiere, aber ich keine einfache Funktion kenne um den Antrieb einfach in Drehzahlregelung zu fahren :rolleyes:!! Bei Variante 1 muss die Funktion in der IF-Schleife aufgerufen werden, da ich nicht weiß wie ich einen ENUM Parameter (hier Direction!) als Variable angeben kann! Oder gibt es noch eine andere Möglichkeit??:rolleyes:

Variante 1 ?!?


(* Variable Declaration *)

VAR

execute1 : Bool;
myAxis : AXIS_REF := (AxisNo := 0);
fbPower : MC_Power;
fbReset : MC_Reset;
fbGetAnalogInput : MU_GetAnalogInput;
fbVelo1 : MC_MoveVelocity;
fbVelo2 : MC_MoveVelocity;
fbStop : MC_Stop;
Start1 : BOOL := FALSE;
Start2 : BOOL := FALSE;
Start3 : BOOL := FALSE;

END_VAR



fbPower(Axis := myAxis, Enable := TRUE);
fbReset(Axis := myAxis, Execute := execute1);
fbGetAnalogInput(Axis := myAxis, Enable := TRUE, Number :=1);

start1:=false;
Start2:=false;
Start3:=false;

if fbGetAnalogInput.value < 2000 then
start1:=true;
fbVelo1(Axis := myAxis, Execute := Start1, Velocity := 2000, Acceleration := 10000,
Deceleration := 10000, Direction := MCpositive);

elsif fbGetAnalogInput.value >2500 then
Start2:=true;
fbVelo2(Axis := myAxis, Execute := Start2, Velocity := 2000, Acceleration := 10000,
Deceleration := 10000, Direction := MCnegative);

else
Start3:=true;
fbStop(Axis := myAxis, Execute := Start3, Deceleration := 10000);

end_if






Variante 2:

(* Variable Declaration *)

VAR

execute1 : Bool;
myAxis : AXIS_REF := (AxisNo := 0);
fbPower : MC_Power;
fbReset : MC_Reset;
fbGetAnalogInput : MU_GetAnalogInput;
velocity: DINT;

END_VAR


fbPower(Axis := myAxis, Enable := TRUE);
fbReset(Axis := myAxis, Execute := execute1);
fbGetAnalogInput(Axis := myAxis, Enable := TRUE, Number :=1);


einfach in Drehzahlregelung schalten, Funktion????? mit Velocityeingabe



if fbGetAnalogInput.value < 2000 then
velocity:=+2000;

elsif fbGetAnalogInput.value >2500 then
velocity:=-2000;

else
velocity:=0;

end_if
 
Zurück
Oben