Jump to content

PCM-Befehl Schleife mit Abbruchbedingung


---
 Share

Recommended Posts

Hallo,
ich brauch mal Hilfe bei einem PCM-Befehl.

Ich möchte ein Messelement mit einer Schleife versehen in der Folgendes umgesetzt wird:

Wenn die Form des Messelements größer als 0,01 ist soll das Messelement wiederholt gemessen werden
bis der Wert unterschritten ist
oder die Messung maximal 4x wiederholt wurde.

Aktuell lautet mein Befehl so:

Form=getActual("Ø 105 mm - E - Kreis3").form
Schleifenindex=0

if Form>0.01 then
repeat
if Form>0.01 then
measure("Ø 105 mm - E - Kreis3")
endif
Schleifenindex=Schleifenindex+1
until Schleifenindex==4
endif

Die Messung wir aktuell auch wiederholt leider greift die Abbruchbedingung nach 4 Wiederholungen nicht.

Habt ihr eine Idee wo mein Fehler sein könnte?

Grüße Thomas
Link to comment
Share on other sites

Hallo Thomas,

habe noch nicht viel Erfahrung mit PCM, aber vielleichts an dem doppeltem == in der letzte Zeile.

"if Form>0.01 then
repeat
if Form>0.01 then
measure("Ø 105 mm - E - Kreis3")
endif
Schleifenindex=Schleifenindex+1
until Schleifenindex==4
endif"

Freundlich Grüße
Gerhard
Link to comment
Share on other sites

@Thomas:
measure("Ø 105 mm - E - Kreis3") wird sofort ausgeführt. D.h. deine Formel wird bis zu dem Punkt abgearbeitet, dann kommt der measure-Befehl, und die restliche Formle wird nocht mehr bearbeitet. Calypso arbeitet das Messelement komplett neu ab, Eingangseinstellungen -> Messen -> Ausgangseinstellungen.

@Gerhard:
"==" ist zum Vergleichen zweier Werte (also das mathematische "=")
"=" dient zum definieren einer Variablen
Link to comment
Share on other sites

Das wäre meine erste Frage gewesen: Wo hast du die Befehle plaziert?
Du müsstest zunächst mal den Befehl "Schleifenindex=0" irgendwo ausserhalb des Messelementes unterbringen (z.B. Eingangseinstellungen des Prüfplans), weil der sonst auch bei jedem Durchgang abgearbeitet wird und du niemals auf Zählerstand 4 kommst.

Dann schreibst du folgende Befehle nur in die Ausgangseinstellungen:

Form=getActual("Ø 105 mm - E - Kreis3").form
if Form>0.01 then
Schleifenindex=Schleifenindex+1
if Schleifenindex < 4 then
measure("Ø 105 mm - E - Kreis3")
endif
endif

Dabei gehe ich davon aus, daß das mit dem measure Befehl so abläuft wie Michael es beschreibt. Ich selber habe den noch nie benutzt. Wenn ich heute keinen totalen Hirnknoten habe, müsste es so eigentlich funktionieren.
Link to comment
Share on other sites

Norbert hat recht. Eingangseinstellungen Prüfplan muss "Schleifenindex = 0" enthalten, die Bedingung selbst kommt in die Ausgangseinstellungen des Messelements.

Ich habe gerade mal anstatt einer geschachtelten Bedingung eine UND-Verknüpfung versucht, das geht auch.

RundheitK2 = getActual("Kreis2").form
if (RundheitK2 > (0.01) AND (Schleifenindex < 5))
Schleifenindex=Schleifenindex+1
measure("Kreis2")
endif

ACHTUNG

Folgendes Problem betrifft beide Varianten:
Beim Ablauf nach Prüfmerkmalen wird die Rundheit mit 0,0000mm ausgegeben, sobald die Bedingung anspricht und das Messlement ein zweites mal gemessen wird.
Die Messreihenfolge muss zwingend auf Ablauf nach Messelementen gesetzt werden.
Link to comment
Share on other sites

Please sign in to view this quote.

Irgend sowas habe ich schon befürchtet. Ich wollte eigentlich noch einen Satz anhängen, daß man bei PCM immer mit unerwünschten Nebenwirkungen rechnen muß, aber habe das dann doch weggelassen - man will ja nicht pessimistisch erscheinen 🤠
Link to comment
Share on other sites

Mein meinung nach ist die beste lösung das ergebnis zu löschen, wenn die rundheit abweicht und die iteration <5 ist.
Dann rufen Sie einfach getActual () auf.
Link to comment
Share on other sites

Also Offline hat das ganze schon mal geklappt.
Danke hierfür.

Jetzt habe ich aber noch die Frage was passiert wenn ich diese Schleife auf mehrere Messelemente lege.
Ich gebe ja in den Eingangseinstellungen des Prüfplans vor, dass mein Schleifenindex auf 0 gesetzt wird.
Wird dieser Wert nach abarbeiten des ersten Messelements wieder auf 0 gesetzt oder bleibt er wenn ich beim ersten Element zwei Durchläufe gebraucht habe auf zwei stehen?

Grüße
Link to comment
Share on other sites

Er bleibt auf 2 stehen, weil die Eingangseinstellungen des Prüfplans ja nur einmal am Anfang abgearbeitet werden (und weil das ja keine "offizielle" Calypso-Schleife ist). Nur wenn du - aus welchem Grund auch immer - eine Schleife um den ganzen Prüfplan legen würdest, würde bei jedem neuen Durchgang der Zähler wieder auf Null gesetzt.

Um den Zähler beim nächsten Element wirderzuverwenden, müsste es ausreichen, wenn du ganz am Ende des bestehenden Codes, also nach dem letzten endif, ein "Schleifenindex = 0" einfügst. Denn wenn das Element neu gemessen wird, wird dieser Befehl nicht erreicht, und wenn nicht, brauchst du den Zähler in diesem Element nicht mehr.
Link to comment
Share on other sites

 Share

×
×
  • Create New...