[Th...] Posted January 29, 2019 Share Posted January 29, 2019 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 More sharing options...
[Ge...] Posted January 29, 2019 Share Posted January 29, 2019 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 More sharing options...
[Mi...] Posted January 30, 2019 Share Posted January 30, 2019 @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 More sharing options...
[No...] Posted January 30, 2019 Share Posted January 30, 2019 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 More sharing options...
[Mi...] Posted January 31, 2019 Share Posted January 31, 2019 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 More sharing options...
[No...] Posted January 31, 2019 Share Posted January 31, 2019 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 More sharing options...
[Er...] Posted February 1, 2019 Share Posted February 1, 2019 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 More sharing options...
[Th...] Posted February 4, 2019 Author Share Posted February 4, 2019 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 More sharing options...
[No...] Posted February 4, 2019 Share Posted February 4, 2019 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 More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in