"Rampe" über Schleifenfunktion

McNugget

Level-1
Beiträge
220
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits.

Ich arbeite in Codesys und habe so meine Probleme mit Schleifen.

Ich versuche eine Rampe über eine Schleife zu generieren.

Das heisst, wenn ein Motor eine Drehzahl von 2000 rpm hat, soll über eine Rampe z.B. in 100er-Schritten (könnten auch 20er-Schritte sein) auf 1000 Umdrehungen reduziert werden.

Das Ganze wird per ASCII-String übergeben.

Ich will also bei Signal zur Drehzahlumstellung haben, dass eine Schleife 1900, dann 1800, dann 1700 usw. ausgibt. Natürlich möchte ich die Zeit zwischen den Reduzierungen definieren können.

Kann ich eine solche Schleife dann auch verwenden, um die Drehzahl wieder zu erhöhen?

Könnte mir da mal jemand auf die Sprünge helfen?

Vielen Dank

McNugget
 
Mir fällt gerade nicht ein, wie du bei einer SPS die zyklisch arbeitet hier eine wie auch immer geartete "Schleife" einsetzen möchtest.
Außer deine Rampe soll innerhalb eines Zyklus ablaufen, dann aber vermutlich für den Antrieb ohne eine sichtbare Funktion.

Üblich ist für den Anwendungsfall eher einen FB in einem festen Zyklus von z.B. 0,1 Sekunden aufzurufen.
Diesem gibst du die gewünschte Rampensteigung z.B. in 1/Min pro Sekunde vor.
Wenn du dann eine Steigung von 100 1/Min pro Sekunde vorgibst und der FB im 0,1 Sekundenraster aufgerufen wird, dann musst du je Aufruf den Wert um 10 1/Min erhöhen/verringern bis er den Zielwert erreicht hat.
So eine Funktion ist bestimmt auch in der Oscat Bibliothek enthalten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Hallo allerseits.

Ich arbeite in Codesys und habe so meine Probleme mit Schleifen.

willst Du jetzt Schleifen üben oder ist die Anstiegsbegrenzung hier das Problem?

Schleifen werden immer in einem Zyklus abgearbeitet und das dann gegebenenfalls in jedem Zyklus.

Falls Du den Anstiegsbegrenzer benötigst siehe Dir mal den Link an, dort ist gezeigt was Du machen mußt: https://www.mathworks.com/help/simulink/slref/ratelimiter.html Du mußt das nur noch in SPS Code umsetzen.

Gruß
 
Schleifen werden immer in einem Zyklus abgearbeitet und das dann gegebenenfalls in jedem Zyklus.
Man kann aber auch einen Zyklus als einen Durchlauf durch eine EndlosSchleife ansehen.
Das BetriebsSystem sorgt dafür, dass "geschliffen" wird, solange die PLC läuft.
Und der Programmierer sorgt in jedem Zyklus dafür, dass das jeweils Nötige veranlasst wird, also "seine" Schleife gestartet, n-mal wiederholt und irgendwann auch beendet wird:
- entweder nichts, wenn die Schleife nicht aktiv sein soll,
- oder die Schleife in Grundstellung versetzt und gestartet wird,
- oder der nächste SchleifenDurchlauf ausgeführt wird (z.B. inkl. Inkrementieren des SchleifenZählers),
- u.s.w., bis das EndeKriterium erreicht ist
- oder die Schleife beendet wird.
Wer die StichWorte FOR NEXT DO WHILE UNTIL u.s.w. im QuellText vermisst, kann sie ja zur Not in den Kommentaren "verstecken" ;o)
Das kann doch nicht sooo schwer sein. Etwas unübersichtlicher wird es doch erst, wenn man z.B. von ganz vielen "SchleifenDurchläufen" nur eine begrenzte Anzahl > 1 pro Zyklus ausführen will, um einerseits die ZyklusZeit nicht unnötig anwachsen zu lassen und andererseits auch nicht zuviel Zeit für die Abarbeitung aller SchleifenDurchläufe zu beanspruchen.

Gruss, Heinileini
 
Zurück
Oben