[Ho...] Posted May 15 Share Posted May 15 Hallo zusammen, ein Teil unserer Produkte wird mit 3 Werkzeugen (Walzdorne) gefertigt, die im ständigen Wechsel im Einsatz sind und unsere Fertigungsprüfer sollen dazu verdonnert werden, die zugehörigen Eingaben im Protokollkopf explizit zu tätigen, damit die Ergebnisse später auch entsprechend zugeordnet werden können. Eigentlich selbstverständlich, aber jeder von euch kennt ja die kleinen Ungereimtheiten in der Praxis 😉 Da ich das Feld für die Nesteingabe per userfields.ini vorgegeben habe, habe ich erstmal den defaultvalue auf ein Minuszeichen gesetzt, damit dort eine neutrale Eingabe steht. Für die Nestkennung ist dort auch eine valuelist hinterlegt, damit nicht jeder einträgt, was er möchte. Den angehangenen PCM-Code habe ich mir aus den Rippen geleiert, denn leider fehlt in Sachen PCM eine Schulung. 🙄 //Parameter löschen clearParameter() //Abfrage Nest aus Protokollkopf Nest=getRecordHead("u_field3_5") //Prüfung der erlaubten Eingaben und entsprechende Wertzuweisung if Nest == "Dorn 1" then Dorn1 = 1 else Dorn1 = 0 endif if Nest == "Dorn 2" then Dorn2 = 1 else Dorn2 = 0 endif if Nest == "Dorn 3" then Dorn3 = 1 else Dorn3 = 0 endif if Nest == "unbekannt" then Dorn4 = 1 else Dorn4 = 0 endif //Addition der Wertzuweisungen Summe = Dorn1+Dorn2+Dorn3+Dorn4 //Prüfung der Addition if Summe <> 1 then //Eingabeauforderung setRecordHead("u_field3_5",inquireList("Fehlerhafte Eingabe. Bitte entsprechenden Dorn auswählen:","Dorn 1","Dorn 2","Dorn 3","unbekannt")) //Ende der Prüfung endif Den Code habe ich in die Eingangseinstellungen gepackt und alles funktioniert so, wie es soll. Es gibt aber bestimmt eine elegantere Lösung für solche Anwendungsfälle und hoffe auf geniale Ideen von euch. Vielleicht hilft mein Beitrag aber auch jemanden bei der Umsetzung von ähnlichen Aufgabenstellungen. Gruß Holger Link to comment Share on other sites More sharing options...
[Ma...] Posted May 16 Share Posted May 16 Hallo Holger Mein Vorschlag wäre, dass du die if in ein case umwandelst. Das ist die elegantere Lösung und etwas übersichtlicher. Please sign in to view this quote. Sollte diese aktionen ebenfalls in anderen Programmen nötig sein kannst du den Code ja auch in eine externe Datei Name.pcm auslager und nur in deinem PCM über runPCMFile("Pfad zu der Datei.pcm) aufrufen. Vorsicht sollte der Pfad auf eimen Netzwerk oder Ähnlichem liegen immer prüfen ob die Datei erreichbar ist sonst baust du dir nur unnötige Fehler ein. Gruß Markus Link to comment Share on other sites More sharing options...
[No...] Posted May 16 Share Posted May 16 Sorry für die vielleicht blöde Frage, aber ich verstehe nicht ganz, was du mit der Addition der Werte aus den If-Abfragen bezweckst. Wenn du, wie du sagst, das Eingabefeld im Protokollkopf als Auswahlliste mit vorgegebenen Werten definiert hast, dann ist es ja gar nicht möglich, dort etwas anderes als eins der Listenelemente einzutragen. Somit wirst du bei den If-Abfragen auch immer nur einen der 4 möglichen Werte und damit immer die Summe 1 erhalten. Oder jemand wählt gar nichts aus, dann bekommst du das vorbelegte Minuszeichen zurück. Dann würde aber eine einzige If-Abfrage auf diesen Fall genügen. Außerdem würde ich noch eine Abfrage einbauen, ob bei der Inquire-Funktion der Abbruch-Button geklickt wurde (leerer Rückgabe-String) und dann z.B. den ganzen Ablauf abbrechen. Und wenn man es ganz komfortabel machen will, kann man dem Benutzer den ausgewählten Eintrag nochmal zur Kontrolle präsentieren, denn es könnte ja jemand auch versehentlich was falsches auswählen. So hat man dann nochmal eine Korrekturmöglichkeit: if Summe <> 1 then repeat Auswahl=inquireList("Fehlerhafte Eingabe. Bitte entsprechenden Dorn auswählen:","Dorn 1","Dorn 2","Dorn 3","unbekannt") Korrekt=confirm("Bitte Auswahl bestätigen:"+cr()+cr()+Auswahl) until Korrekt==TRUE //Falls nichts ausgewählt wurde, CNC-Ablauf abbrechen if Auswahl=="" then message("FEHLER!",cr(),"Kein Eintrag ausgewählt!",cr(),"Ablauf wird abgebrochen!") cncBreak() endif setRecordHead("u_field3_5",Auswahl) endif Link to comment Share on other sites More sharing options...
[Ho...] Posted May 16 Author Share Posted May 16 Please sign in to view this quote. Hallo Markus, vielen Dank für Deine Antwort! Damit könnte ich mir die Wertzuweisungen ja auch sparen, sehr cool. Die Standardparameter sind dann auch nicht erfoderlich, da die Parameter ja gleich mit der ersten Befehlszeile gelöscht werden. Es könnte dann so aussehen: //Parameter löschen clearParameter() //Abfrage Nest aus Protokollkopf Nest=getRecordHead("u_field3_5") // Beginn Case selectCase Nest // Zu Prüfende Variable // Case case "Dorn 1" case "Dorn 2" case "Dorn 3" case "unbekannt" // wenn keine Übereinstimmung gefunden caseElse setRecordHead("u_field3_5",inquireList("Fehlerhafte Eingabe. Bitte entsprechenden Dorn auswählen:","Dorn 1","Dorn 2","Dorn 3","unbekannt")) // Ende des Case end Select Das macht schon mal einen schlanken Fuß. Die Idee mit dem Auslagern ist wirklich mega und erspart eine Menge Arbeit, wenn mal wieder etwas geändert werden sollte, denn es stehen noch einige weitere Befehlszeilen in den Eingangs- und Ausgangseinstellungen. Beide Tipps werde ich beherzigen. Vielen Dank für Deinen Beitrag! Gruß Holger Link to comment Share on other sites More sharing options...
[Ho...] Posted May 16 Author Share Posted May 16 Please sign in to view this quote. Hallo Norbert, vielen Dank für Deine Antwort! Es gibt keine blöden Fragen, denn es gibt noch weitere Nestkennungen, die ich nur nicht verraten habe 😉 Die Abfrage ist eine super Idee und die werde ich definitiv noch einbauen. Sowas hatte ich schon ins Auge gefasst, hatte aber keine Idee, wie ich das umsetzen könnte. Vielen Dank für Deinen Beitrag! Gruß Holger Link to comment Share on other sites More sharing options...
[No...] Posted May 16 Share Posted May 16 Please sign in to view this quote. Aha, sowas ähnliches dachte ich mir schon 😉 Link to comment Share on other sites More sharing options...
[Ho...] Posted May 17 Author Share Posted May 17 Hallo zusammen, eure Vorschläge sind umgesetzt und das ganze sieht nun so aus; // Parameter löschen clearParameter() // Abfrage Nest aus Protokollkopf Nest=getRecordHead("u_field3_5") // Beginn Case selectCase Nest // Case case "Dorn 1" case "Dorn 2" case "Dorn 3" case "unbekannt" // wenn keine Übereinstimmung gefunden wurden caseElse repeat Auswahl=inquireList("Bitte entsprechenden Dorn auswählen:","Dorn 1","Dorn 2","Dorn 3","unbekannt") Korrekt=confirm("Bitte Auswahl bestätigen:"+cr()+cr()+Auswahl) setRecordHead("u_field3_5",Auswahl) until Korrekt==TRUE // Case Ende endSelect // Falls nichts ausgewählt wurde, CNC-Ablauf abbrechen Test=getRecordHead("u_field3_5") if Test=="" then message("Fehlerhafte Eingabe!",cr(),"Es wurde kein Eintrag ausgewählt!",cr(),"Ablauf wird abgebrochen!") cncBreak() endif Auch die Pfadangabe mit runPCMFile funktioniert bei uns im Messraum prima, nur leider hat der Rechner der betroffenen Messmaschine kein PCM zur Verfügung und der Ablauf wird ohne PCM mit einer Fehlermeldung quittiert. Echt schade, denn damit könnte man zukünftig wahrscheinlich viel Zeit bei Änderungen sparen. Da es ja auch umständlich geht, wird es wohl weiterhin bei nur einer PCM Lizenz bleiben. Aktuell haben wir noch Calypso 7.2.20 im Serieneinsatz, denn wir möchten erstmal noch das Präsentationsprotokoll nutzen. Ich werde zeitnah mal testen, ob die aktuelle Calypso Version den Code auch ohne PCM Lizenz ausführt. Ich bin gespannt. Ich wünsche euch allen ein wunderschönes Wochenende! Gruß Holger Link to comment Share on other sites More sharing options...
[No...] Posted May 17 Share Posted May 17 Please sign in to view this quote. Das Präsentationsprotokoll kannst du auch in 7.4 und höher ganz normal weiterbenutzen, wenn du es in den Kompatibilitätseinstellungen wieder aktivierst. Vorletzter Punkt "Abgekündigte Protokollvorlagen...." Haken setzen. Danach sind die alten Protokolle wieder im Menü verfügbar. Das musst du allerdings für jeden Prüfplan machen, bei dem das gewünscht ist. Zeiss kommuniziert diese Möglichkeit leider nicht so aktiv, man möchte ja keine falschen Anreize setzen 🤣 Falls du auch das Grafikelement wiederhaben willst, musst du in den höheren Versionen zusätzlich noch den Basic Reporter nachinstallieren. Das geschieht dort nicht mehr automatisch. Please sign in to view this quote. Ich befürchte daran wird sich wohl nichts ändern. 🙁 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