Step 7 Bei abfallender Flanke, Ausgang auf 1 setzen

rufus

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Moin ;),
ich habe eine Frage bezüglich abfallender Flanken, und zwar:

Wir haben ein analoges Eingangssignal von einer Druckzelle, auf dieser wird ein Produkt zerdrückt durch einen Stempel der durch einen Motor runterfährt.
Nun wollen wir aber das der Stempel nicht erst hochfährt wenn er die untere Endlage erreicht hat sonder wenn das Produkt bricht, das heißt sozusagen am Scheitelwert wenn der Druck wieder sinkt weil das Produkt gebrochen wurde. Mit einer Flanke ist dies nicht möglich weil immer noch ein bisschen Druck vorhanden ist nach dem Bruch. Gibt es irgendeine andere Möglichkeit dies zu machen? Das wir ein Signal bekommen wenn der Druck wieder sinkt, sodass der Stempel wieder hochfahren kann.

Ich programmiere in FUP, und bin noch nicht sehr fortgeschritten was SPS Programmierung angeht, hoffe aber trotzdem, dass ihr mir weiterhelfen könnt.

Mit freundlichen Grüßen

Rufus
 
Moin,
mal so aus der Hüfte geschossen, würde ich mir einfach den Druck vom aktuellen SPS-Zyklus merken -> also in einen DB oder einer Static-Variable speichern. Im nächsten SPS-Zyklus vergleichst du dann den alten Druck mit dem aktuellen Druck und kannst so entscheiden, ob dieser gestiegen ist (also weiter drücken) oder gesunken ist (drücken stoppen). Ggf. muss du noch ein Toleranzband dabei berücksichtigen, aber grundsätzlich könnte ich mir eine solche Lösung vorstellen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Howard,

erstmal Danke für deine schnelle Antwort.
Das Problem ist aber, dass wir unser Produkt auf härte prüfen sollen und das funktioniert automatisch!
Das heißt der Stempel soll automatisch wieder hochfahren sobald der Newton Wert sinkt. (Wenn das Produkt gebrochen ist=weniger Druck)
Wir wissen nur leider nicht wie wir sowas realisieren können ... da nach dem Bruch immernoch Druck besteht!


Rufus
 
Ich verstehe nicht genau, wo das Problem ist :confused:
Aktuell werdet ihr ja programmiert haben, dass bei "EndlageUntenErreicht" -> "StempelHochfahren" ausgeführt wird. Dieses "EndlageUntenErreicht" muss jetzt mit einem ODER erweitert werden:
Also "EndlageUntenErreicht" ODER "DruckSinktWeilProduktGebrochen" -> "StempelHochfahren"
Folglich müsst ihr euch das neue Signal "DruckSinktWeilProduktGebrochen" erzeugen ... das ginge bspw. wie zuvor in #2 beschrieben.
 
Ja so wie du das sagst stimmt das schon! So würden wir es ja auch machen aber wir haben keine Ahnung wie wir den höchsten Wert speichern können. Bzw. er hochfährt sobald dein Druckverlust vorliegt!
Außerdem werden die Werte nicht immer gleich sein, da das Produkt unterschiedliche beschaffenheiten haben kann und somit geht es nur beim Druckverlust. Gibt es dafür ein fertigen Functionblock?

PS: Sind zwei Azubis die diese Machine als Projekt von unserem Meister bekommen haben. Also haben wir das 100% wissen noch nicht. Und bitten um verständniss :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1. Erstellt einen FB - dieser benötigt den Analogwert des Drucksensors als Eingang ("AktuellerDruck"), ein Bool-Eingang zum Starten ("Start") und einen Ausgang (Bool) "DruckSinktWeilProduktGebrochen"
2. Legt im FB eine Static-Variable (also eine speichernde Variable, die sich ihren Inhalt über mehrere SPS-Zyklen merken kann) mit dem Namen "DruckLetzterZyklus" an
3. Programmiert den Ablauf ;)

Ablauf:
-Bei positiver Flanke Start schreibt den Wert "
DruckLetzterZyklus" auf 0
-Vergleicht den Wert "
DruckLetzterZyklus" mit dem Eingang "AktuellerDruck"
Ausgang "
DruckSinktWeilProduktGebrochen" wird 1 wenn "AktuellerDruck" < "DruckLetzterZyklus"
Ausgang "DruckSinktWeilProduktGebrochen" wird 0 wenn "AktuellerDruck" > "DruckLetzterZyklus"
- Schreibt den Wert "
AktuellerDruck" in "DruckLetzterZyklus" für den Vergleich im nächsten SPS-Zyklus

Das wäre jetzt mal ganz rudimentär beschrieben, wie sowas aussieht. Man wird das bestimmt noch mit einem Filter versehn müssen, um kleine Schwankungen zu ignorieren usw... aber so kann man erstmal loslegen ;)
 
Zuletzt bearbeitet:
Beispiel Signal "DruckSinktWeilProduktGebrochen:

Oscat Bibliothek - Trend Baustein, oder wie in Beitrag 2
1. Druck(Trend) steigt —> Zeit 500ms: Kontakt mit Prüfling, setze Messung gestartet
2. Druck(Trend) fällt —> Zeit 200ms + Merker Messung gestartet: Bruch, Stempel hoch
3. Merker Messung gestartet rücksetzten(Stempel hoch, Abbruch, Endlage unten..?)

Die Verzögerungszeit muss dem Prozess angepasst werden.

Peter
 
Danke Peter.
Wir haben das jetzt alles hinbekommen sodass wir die Trend-Funktion auch benutzen könnten. Nur leider wissen wir nicht, wie wir den Baustein bennenen sollen und wohin er kommt... OB oder FB ? Die Bennenung des Bausteines muss ja in der Symboltabelle eingetragen sein. Welche Adresse und welchen DatenTyp muss ich angeben damit ich den Baustein später benennen kann?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es kommt ja darauf an wie der Rest deines Programms aussieht.
Wenn du einen FB hast, wo der ganze Ablauf geregelt ist, dann würde ich den Trendbaustein dort auch reinpacken. Ansonsten machst du mit dem OB0 nichts verkehrt. Das mit dem Benennen versteh ich nicht, du kannst dem Kind ja den Namen geben, den du möchtest. Nenne ihn doch einfach "Trendbaustein". Wenn es ein FB ist, wird der DB dazu ja automatisch erstellt, wenn du den FB aufrufst (bei Einzelinstanz) Bei Multiinstanz kannst du die Variable ja nennen wie du möchtest, das geht ja über das Assistentenfester. Meinethalben "Trend_Druck". Dann hast du die Variable "Trend_Druck" vom Typ "Trendbaustein"

Ich würde es machen wie in #6, und den Vergleichswert aber mit einer prozentualen Abweichung vergleichen, meinethalben 2% um eventuelle Schwankungen des "Druckmotors" auszugleichen. Also wenn der Druck_Aktuell < 0,98*Druck_Alt den entsprechenden Ausgang "1" setzen

p.s. Ups grad gesehn das ist ja STEP7. Ich arbeite kaum mit classic, daher kann es sein, dass es da kein "Assistentenfenster" gibt wenn du den FB aufrufst.
 
Zuletzt bearbeitet:
Zurück
Oben