Jump to content

Prüfung auf korrekte Eingabe im Protokollkopf


---
 Share

Recommended Posts

---
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

---
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

---
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

---

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

---

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

---

Please sign in to view this quote.

Aha, sowas ähnliches dachte ich mir schon 😉
Link to comment
Share on other sites

---
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

---

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

 Share

×
×
  • Create New...