TwinCat 3 Achsen Positionierung ST | FUP

Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
vorweg, ich habe noch nicht viele Berührungspunkte mit SPS Steuerungen gehabt und versuche gerade folgende Funktion mit TwinCat3 zu realisieren:

Ein Objekt wird auf dem Förderband transportiert, unterbricht das Objekt den Reflexionssensor - soll die Achse des Förderbandes stoppen.
Die aktuelle Position der Achse muss mit einem Sollwert aus der Visualisierung addiert werden und den Wert in "MC_SetPosition" schreiben . Anschließend soll die Achse zur festgelegten Position fahren und warten.

Zuerst habe ich es in FUP probiert, aber das scheint nicht zu klappen. Also versuchte ich mich an ST.
1648152541888.png
Nun erwartet TwinCat ein DO, obwohl ich noch prüfen möchte ob der Reflexionssensor unterbrochen ist. Habt ihr eine Idee, wie ich das anders schreiben kann?

Danach wollte ich beim erreichen der errechneten Soll Pos. wieder die Variable ".....calculated_setPos" auf 0 setzen (Weil sonst wird es beim nächsten Durchlauf nicht funktionieren, oder die Achse bewegt sich wieder auf "0" ?)😓

Ich stehe total auf dem Schlauch.
Habt ihr eine Idee, oder könnt mir gezielt sagen was ich mir durchlesen muss um eine Lösung zu finden.

Vielen Dank!
 
Die Abfrage hinter While enthält eine Zuweisung (:=) das ist schon mal falsch, das rot unterstrichene Komma ist zu viel. Außerdem wäre es eine Dauerschleife, zumindest falls sich die beiden Variablen nicht in einem anderen Task verändern
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Anhang anzeigen 59994
Nun erwartet TwinCat ein DO, obwohl ich noch prüfen möchte ob der Reflexionssensor unterbrochen ist. Habt ihr eine Idee, wie ich das anders schreiben kann?
Oberchefe hat zu dem Thema ja schon einiges geschrieben, aber einen Nachschlag hätte ich noch. Du verwechselst da vermutlich was.
Der Compiler möchte nicht, dass Du einen digitalen Ausgang (DO) nutzt, sondern aufgrund der von Oberchefe erwähnten Fehler im Kopf der While-Schleife denkt der Compiler, Du hättest die While-Schleife nicht komplett erstellt und meint, ihm fehle das DO am Ende des Kopfes der While-Schleife.
Übrigens, lies Dir bitte die Funktionsweise von Schleifen einmal durch, aber das hatte indirekt Oberchefe auch schon erwähnt.
 
Hallo Zusammen,
vorweg, ich habe noch nicht viele Berührungspunkte mit SPS Steuerungen gehabt und versuche gerade folgende Funktion mit TwinCat3 zu realisieren:

Ein Objekt wird auf dem Förderband transportiert, unterbricht das Objekt den Reflexionssensor - soll die Achse des Förderbandes stoppen.
Die aktuelle Position der Achse muss mit einem Sollwert aus der Visualisierung addiert werden und den Wert in "MC_SetPosition" schreiben . Anschließend soll die Achse zur festgelegten Position fahren und warten.

Zuerst habe ich es in FUP probiert, aber das scheint nicht zu klappen. Also versuchte ich mich an ST.
Anhang anzeigen 59994
Nun erwartet TwinCat ein DO, obwohl ich noch prüfen möchte ob der Reflexionssensor unterbrochen ist. Habt ihr eine Idee, wie ich das anders schreiben kann?

Danach wollte ich beim erreichen der errechneten Soll Pos. wieder die Variable ".....calculated_setPos" auf 0 setzen (Weil sonst wird es beim nächsten Durchlauf nicht funktionieren, oder die Achse bewegt sich wieder auf "0" ?)😓

Ich stehe total auf dem Schlauch.
Habt ihr eine Idee, oder könnt mir gezielt sagen was ich mir durchlesen muss um eine Lösung zu finden.

Vielen Dank!
Willkommen im Forum NoFaultDesciption,

zunächst einmal musst du verstehen, wie eine SPS arbeitet. Eine SPS liest zyklisch die Eingänge ein (Prozessabbild der Eingänge),
verarbeitet das geschriebene Programm und aktualisiert anschließend das Prozessabbild der Ausgänge.

Zum anderen verstehe ich nicht so recht, warum das Förderband läuft, dann bei Unterbrechung der Lichtschranke gestoppt und nach addieren eines Offset wieder gestartet werden soll. Da die SPS die Daten ja recht schnell verarbeitet wird ein Stoppen kaum erkennbar sein.

Hier ein eher rudimentäres Programmbeispiel wie es funktionieren könnte:
Code:
PROGRAM PRG_Foederband
VAR
    xSensor         : BOOL;     // Wechsel von TRUE auf FALSE = Lichtschranke unterbrochen (Sensoreingang)
    xConveyorPower  : BOOL;     // Förderbandmotor; TRUE = Motor ein, FALSE = Motor aus (Motorausgang)
    lrActPos        : LREAL;    // Aktuelle Position (Eingang)
    lrOffset        : LREAL;    // HMI Offset (Eingang)
   
    ftrigSensor     : Tc2_Standard.F_TRIG; // interne Variable um Wechsel von TRUE auf FALSE zu erkennen
    lrSetPos        : LREAL;    // Sollposition
END_VAR


ftrigSensor(CLK := xSensor);
IF ftrigSensor.Q THEN
    lrSetPos        := lrActPos + lrOffset;
    xConveyorPower  := TRUE;
END_IF

IF xConveyorPower AND lrActPos >= lrSetPos THEN
    xConveyorPower  := FALSE;
END_IF
Nach Erkennen der Unterbrechung der Lichtschranke, fährt der Motor noch die Streckenlänge "lrOffset".


Wenn Fragen sind einfach melden.

-Stirni
 
Hallo Zusammen,
wow besten Dank für die zahlreichen Antworten!
Da ich nicht mehr so viel Zeit hatte | habe , habe ich es mittlerweile über ein FUP Netzwerk realisiert und dabei schon jede Menge gelernt.
Tatsächlich brauchte ich für die Visualisierung (Tachos) ein kleines ST Programm um negative Drehzahlen darauf darstellen zu können.
(Wenn auch simpel, ich habe es gerafft!)

// Negative Drehzahl M1 für HMI in Positive umwandeln.
RPM_M1_ActVelo := SW_Axis.SW_Axis1.NcToPlc.ActVelo;
IF RPM_M1_ActVelo < 0
THEN
Negative_RPM_M1_converted:= RPM_M1_ActVelo * (-1);
ELSE
Negative_RPM_M1_converted := RPM_M1_ActVelo;
END_IF

// Negative Drehzahl M2 für HMI in Positive umwandeln.
RPM_M2_ActVelo := SW_Axis.SW_Axis2.NcToPlc.ActVelo;

IF RPM_M2_ActVelo < 0
THEN
Negative_RPM_M2_converted := RPM_M2_ActVelo * (-1);
ELSE
Negative_RPM_M2_converted := RPM_M2_ActVelo;
END_IF

@Stirni
Ja das eine SPS eine Zyklauszeit hat, habe ich gemerkt - als ich noch keine Flankenerkennung eingearbeitet hatte. Da ist es nämlich ständig passiert, dass eine Variable nicht über die Dauer eines Zyklus auf bspw. 1 gehalten wurde und damit diverse Folgefehler resultierten.

Mein FUP Netzwerk für den Automatikbetrieb habe ich angehängt (XML-Dokument), falls jemand neugierig ist.
Ich habe TwinCat3 Build 4024.22 verwendet. Das hat im FUP zuvor nicht funktioniert, da ich keine richtigen Transitionen eingebaut habe und sich X Zustände überlappt haben. Natürlich habe ich auch den Fehler mitgenommen, einen Ausgang mehrfach zu beschreiben und vieles mehr.
(Hatte halt 0 Ahnung)

However, sorry das ich keine Lösung in ST vorstellen werde - ich muss in ca. 14 Tagen fertig sein. Dokumentation ist noch offen.......
Wollte mich zumindest mal zurückgemeldet haben und mich bedanken, dass ihr euch die Zeit zum lesen und für Feedback genommen habt.

ST zu verstehen und mehr über Automatisierungstechnik zu lernen ist auf alle Fälle auf meiner Bucketlist!

Mit besten Grüßen

NoFaultDescription
 

Anhänge

Zurück
Oben