Geschwindigkeitsregelung S7 FM350-2

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hatte im falschen Forum gepostet. Bitte den anderen Beitrag schliessen. Danke

Hallo,

vorneweg einige einleitende Worte. Meine S7 Programmierkenntnisse beschränken sich auf einige grundlegende Sachen (einfachste Ablaufsteuerungen usw.).
Mit meinen jetzigen Erfahrungen war dies ohne grosse Probleme möglich.
Was mein Chef nun vorhat sprengt allerdings bei weitem den Rahmen meiner Fertigkeiten. Somit wende ich mich vertrauensvoll an Euch mit der Bitte um Hilfe.

Folgendes Projekt ist geplant:

Geschwindigkeitsregelung eines Pneumatikzylinders von Festo. Dieser treibt einen Arm an der einseitig gelagert ist (ähnlich einer Tür). Zu steuern wäre also die Kreisbahngeschwindigkeit des Armes und zwar in beide Richtungen mit unterschiedlichen Geschwindigkeiten.

Folgende Hardware steht zur Verfügung:

CPU 315-2DP
FM 350-2
SM332 Analog O 4x
SM321 DI 32x
SM332 DO 32x
Festo Proportionalventil
Inkremental Drehgeber HTL 5000 Inkr.
Festo Pneumatikzylinder 320mm

geplante Umsetzung:


Mithilfe des auf der Drehachse angebrachten Drehgebers wird die aktuelle Position des Armes berechnet. Beim Öffnen und Schliessen des Armes wird an je einer definierten Position eine V-Messung durchgeführt.

Lösung zur Zeit: Die Position des Armes wird über das DBW 44.0 abgefragt. Start und Stop der V-Messung wurde über Vergleicher mit Hilfe eines Zeitgliedes durchgeführt.

Probleme dabei:
- Wie kann ich die Position mit der erforderlichen Genauigkeit bestimmen? Das DBW44.0 aus dem UDT1 DB scheint mir nicht ausreichend schnell aktualisiert zu werden.
- Die Messung der Zeit über Timerbausteine ist scheinbar unzureichend genau.

Wie Ihr vielleicht schon erkennen könnt, stellen die SFC des FM 350-2 mein größtes Problem dar. Die Dokumentation von Siemens ist für mich als Laie leider alles andere als gut zu verstehen. Falls jemand auf diesem Gebiet über Erfahrung verfügt, würde ich mich über jedes bißchen Hilfe sehr freuen.

Die Regelung über PID-Control stellt momentan kein Problem dar; da in einem anderen Projekt schon angewendet.

In der Hoffnung auf Hilfe

Mathais
 
Hallo,

habe das Problem mehrfach mit hydraulischen Komponenten gelöst.
Mit pneum. Regelventilen fehlt mir die Erfahrung.
Ich kann mit vorstellen dass es schwieriger wird.
Um dir da einige Tips zu geben fehlen folgende Angaben:

- Verhältnis Min- Max Geschwindigkeit
- Stellzeit von Pos. Min nach Pos. Max
- Impulse pro Sekunde bei Vmax
- Verstellgenauigkeit

Gruß Wilfried
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal bitte ich die Doppelposts zu entschuldigen.

Habe mich inzwischen im Forum registriert.

Nun zu Deinen Fragen:

- Die Geschwindigkeit soll in einem Bereich von 120°/s bis 70°/s regelbar sein

- da wir den Arm nur um 90° bewegen liegen die Verfahrzeiten je Richtung zwischen 0,8s - 1,5s

- der Inkgeber arbeitet mit 5000 Impulsen. Die 350-2 arbeitet mit vierfach Auswertung. Somit bekomme ich pro Vollkreis 20.000 Impulse. Angenommen ich fahre mit voller geschwindigkeit die 90° komplett, so sind dies 5000 Impulse in 0,8s. Sollte also 6250 Impulsen/s entsprechen.

- die Verstellgenauigkeit muss nicht sehr hoch sein. Geplant hatte ich den Einsatz eines Schieberegisters (keine Ahnung wie man sowas handelt :shock: ) um die Quersumme aus den letzten 10 Messwerten zu bilden.

Der Prozeß muss also nicht in Echtzeit geregelt werden, es reicht völlig aus die Regelung während den nächsten Programmabläufen umzusetzen.



mfG Mathias

P.S: Der Kunde interessiert sich weniger für die Winkelgeschwindigkeit als vielmehr für die Kreisbahngeschwindigkeit des Armes an seinem äusseren Punkt. Die Länge beträgt ca. 1,2m. (Ist ja trotzdem irgendwie das gleiche).
Diese Geschwindigkeit muss an 2 Punkten gemessen werden. In Richtung öffnen wäre dies zwischen 20°-30° nach Anlauf. In Richtung schliessen zwischen 70°-60° nach Anlauf. Die restliche Strecke kann regelfrei bleiben und wird mit den Aktuallwerten weitergefahren.
 
Hallo Mathias,
für eine Geschwindigkeitsregelung ist die Verstellzeit zu kurz.
Bei Pneumatik ist die Reaktion des Zylinders auf das Prop.-Ventil zu träge. Wenn das GD² des Arms immer gleich ist würde ich die Geschwindigkeit nur Steuern und nicht Regeln.

Wenn das nicht genau genug ist, glaube ich, dass nur ein Elektromotor das schafft (Spindel- Hubantrieb).

Wie sieht es denn mit der Endabschaltung (Positionierung) aus. Fährst du z.B. in eine mechanische Dämpfung mit Anschlag?

Um die Reaktion des Zylinders auf das Prop.- Ventil zu testen würde ich den Sollwert für den Arm zu verfahren alle 100ms umschalten (z.B. 50%-70%-50%...) Wenn der Arm sichtbar ruckelt habe ich mich mit der Trägheit geirrt. Dann kann man doch über Regelung reden.

Gruß Wilfried
 
Für mich ruft das Problem eher nach einen FM352-5, statt einer FM350-2.

Der FM352-5 hat seinen eigenen Parallel-Prozessor mit 1 micro-Sek. Zykluszeit und arbeitet völlig unabhängig vom CPU (kriegt nur die nötige Parameter Sollwerte usw. per DB übertragen). Der wurde locker mithalten. Einziges Problem - der FM352-5 hat eine gewaltige Lernkurve wenn man versucht allein damit zurecht zu kommen - aber da, oder besser gesagt, hier, kann geholfen werden!:)
 
@old_willi, danke für die Ergänzung, ich habe mit sowas null Erfahrung, aber nach ein wahsnsinns Kampf mit der Lernkurve des FM352-5, dies wirklich zu schätzen gelernt. Das Ding ist wirklich was aus der Reihe, man muss es nur beherrschen können, dann kann man wirklich unglaublich schnelle Abläufe erledigen. In meinem Fall ging es um sychronisieren von Signalen mit <100 micro-Sekunden Abweichung.
 
(Neben vielen anderen Dingen) ist es wichtig, dass das Proportionalventil, mit dem du regeln willst, auf der Abluftseite des Zylinders angeschlossen wird. Dadurch wird der Zylinder in ein Luftkissen eingespannt und macht keine "Stotterbewegungen"... :wink:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schon mal vielen Dank für die Hilfe.

Wie ich sehe habe ich mich wohl etwas undeutlich formuliert. Ich probiere das Problem nochmal etwas zu präzisieren.

Der Zylinder soll einen Hebelarm mit einer definierten Geschwindigkeit bewegen.Dieser Sollwert wird später nicht mehr geändert. Der Wert wird durch den Kunden festgelegt und bewegt sich in den oben angegebenen Bereichen. Mögliche Störgrössen sind die Umgebungstemperatur (wechselnd zwischen -30° und +80°) sowie Verschleiss. Durch die Steuerung sollen diese Geschwindigkeitsschwankungen aufgefangen werden.
Die Korrektur muß nicht in Echtzeit erfolgen sondern kann nachgeregelt werden. Sprich die Steuerung liest beim ersten Fahren des Armes die Istwerte ein, vergleicht diese anschliessend mit den Sollwerten und bestimmt daraus den Regelwert. Beim nächsten Fahren des Zylinders wird der aus dem letzen Zyklus berechnete Regelwert benutzt. u.s.w.

Ausschlaggebend für die Ermittlung des Istwertes ist nur ein kleines Fenster im Gesamtfahrweg. Sprich zwischen 20°-30°. Meine Idee war nun folgende, bei erreichen der Inkrementzahl die den 20° entspricht, sollten 100ms lang die Impulse gezählt werden und im Anschluss daraus die V berechnet werden. V=Inkr./t

Das Problem liegt darin, das ich nicht weiß wie ich die Inkremente ausreichend schnell auslesen kann und wie ich den für die 100ms nötigen OB35 in das Programm einbeziehe. (siehe oben habe wenig Erfahrungen).

Ich hoffe das hilft etwas.

@RMA
FM352-5 kommt leider nicht in Frage, da wir mehere unabhängige Aufbauten realisieren müssen und die Kosten zu hoch wären. Vom Spindelmotor will ich da gar nicht erst reden. Pneumatische Betätigung ist Anforderung.

@old_willi
Endanschläge sind beidseitig vorhanden.
Der Zylinder ruckelt bei 100ms Wechselbelastung. Aber wie gesagt eine Regelung der aktuellen Verfahrgeschwindigkeit ist ja nicht nötig.

Somit belibt momentan die Frage, wie ich die Geschwindigkeitsabfrage realisiere? Falls dazu jemanden noch etwas einfällt, würde ich mich sehr freuen.

Gruss Mathias
 
Hallo Mathias,
weil der OB35 sich mit seinem Takt nicht nach der Position des Armes richtet, wirst du den Messbeginn bis zu 100ms nach überfahren der 20° Position erwischen.
Also muss ein Interupt her. Baue an der 20° (und 70°) Position einen Ini. an und starte damit die Messung auf der FM350.
Wenn es nicht genau die 20° sein müssen, so bilde eine Flanke wenn der Arm die 20° überschreitet. Den aktuellen Istwert speichere ab und starte einen Timer. Wenn der Arm die 30° überschreitet bilde die Differenz zwischen Alt- und Neuwert. Die Zeit für den Weg kannst du am Timer in 1/10Sek ablesen. Aus beiden Werten ergibt sich die Geschwindigkeit.

Ich bin erstaunt, dass die Pneumatik so schnell reagiert. Wieder was gelernt.

Gruß Wilfried
 
Hallo Mathias,

ich habe Vergleichbares leider noch nicht gemacht. Daher nur ein kurzer Gedanke von mir.

Du kannst doch die Baugruppe auf Frequenzmessung und Hardwaretor parametrieren, oder? Wenn das möglich ist brauchst du eigentlich für die Messung nichts anderes tun. Ohne Hardwaretor auf der FM wird's wahrscheinlich bei deinen 10° nicht gehen, denke ich. Warum kannst du die Messung nicht über einen grösseren Verfahrbereich machen? Wie stoppt der lange Arm in den Endlagen und welche Masse hat er (nur mal interessehalber gefragt)?

Das Hardwaretor könnte man event. auch mittels Vergleichswerten über die hauseigenen Ausgänge der FM realisieren? Die Mindesteinschaltzeit der Ausgänge beträgt allerdings 300ms! Wie auch immer, wichtig wäre meines Erachtens, dass die Messung von der CPU-Zykluszeit unabhängig ist.

Die FM bietet darüber hinaus eine Grenzwertüberwachung der gemessen Frequenz an. Diese Überwachung wüde ich per Prozessalarm dazu nutzen, den Antrieb ab zu schalten!


Gruss, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie Onkel Dagobert schon sagt kann man doch alles ueber die integrierten Eingaenge der Baugruppe erledigen. Du parametrierst die FM fuer Frequenzmessung und nimmst als Harwaretore die beiden Endschalter (besser waere ein zusaetzlicher Grenztaster kurz nach dem Startpunkt, um die Beschleunigung des Zylinders nicht beruecksichtigen zu muessen). Am Ende der Messung liest du die Pulsanzahl aus der Baugruppe mit einem Prozessalarm aus. Die Geschwindigkeit kannst du dann ganz einfach errechnen (den Abstand der beiden Grenztaster kennst du ja). :wink:
Noch einfacher ist die "Periodendauermessung". Da gibt die Baugruppe direkt einen Zeitwert zurueck.....und du kannst deinen Drehgeber fuer etwas anderes benutzen (z.B. um die Umdrehungen der Klopapierrolle zuhause zu messen :lol: )
 
Mal wieder vielen Dank für die Tipps.

Kurze Erläuterung noch zu der Hardware. Der Arm und der Zylinder sind nicht fest miteinander verbunden. Wir arbeiten faktisch nur mit einem Impuls. Somit ist die Abfrage über HW Gate leider nicht möglich.

Die Projektierung läuft derzeit recht gut aber ein Problem gibt es da noch.
Da die Geschwindigkeitsberechnung über die Positionsabfrage läuft, ist es nötig einen möglichst genauen Zeitgeber zu verwenden, um die Impulse während eines Fensters (100ms) auszulesen.

Die FC4 schreibt die Zählerdaten kontinuierlich in den DB1 (erstellt aus UDT1). Diese Daten versuche ich im OB35 abzufragen. Leider klappt das nicht. Ganz kurz die AWL:

OB35:

Netz1
L MW 30 // Durchlaufzähler OB 35 je Aufruf +1
L1
+I
T MW 30
-----------------
Netz 2
L MW 30
L 20 // beim 20. Durchlauf soll das DBD 148 ausgelesen werden
==I
SPBN NE20
LDB1.DBD148 // Auslesen des DBD
DTB // Wandeln
T MW 40.0 // Ablegen DBD148 Wert in MW40
NE20: NOP 0
-----------------
Netz 3
U M 1.0 // Bewegungsrichtung Umkehr
SPBN NE30
L 0
T MW 30 // setze MW30=0
NE30: NOP 0
-----------------

Nach Programmstart liest er die Daten aus dem DB1 nur sporadisch bzw. überhaupt nicht. Teilweise läuft er 30 Zyklen ohne Aktualisierung durch.
Die Zykluszeit des OB 35 ist auf 100ms eingestellt.

Hat jemand eine Idee woran das liegen kann?

Gruss Mathias
 
Zurück
Oben