Jump to content

Prüfmerkmale die sich ausserhalb der Toleranz befinden abgreifen


---
 Share

Recommended Posts

Hallo,
ich habe mich gefragt ob es neben der Abfrage inspectionToleranceState() auch eine Möglichkeit gibt genau abzufragen welches Prüfmerkmal außerhalb der Toleranz liegt?
Habe schon etwas rumprobiert aber bin nicht weiter gekommen, vielleicht hat hier schon mal jemand was in diese Richtung gemacht?
Link to comment
Share on other sites

Hintergrund ist, der Maschinenbediener soll gezwungen werden eine Bemerkung einzugeben falls sich ein Prüfmerkmal ausserhalb der Toleranz befindet.

Die Abfrage inspectionToleranceState() reicht mir hier nicht aus, da der Bediener wenn ich diese in den Parameter Ausgangseinstellungen des Prüfplans oder z.B. eines Textfeldes am Ende des Prüfplans abfrage, noch keinen Blick auf das Protokoll werfen konnte. Somit kann er auch keine Bemerkung abgeben, da er noch nicht weiß welche Prüfmerkmale es genau betrifft etc.

Habe wie geschrieben leider keine Möglichkeit gefunden den Toleranzstatus einzelner Prüfmerkmale abzufragen, jetzt überlege ich ob es eine Möglichkeit gibt nach Ablauf der Protokollerstellung und Ansicht des Protokolls nochmal ein zweites Protokoll erzeugen zu lassen, bei dem ich dann eine Bemerkung eingeben könnte die auf diesem Protokoll erscheint.

Es gibt ja die Möglichkeiten mit "inspection_end_pcm.txt" usw., auch nach Ablauf noch einzugreifen, nur egal was ich da eingebe, Calypso reagiert überhaupt nicht darauf, deshalb die Frage jetzt nochmal, kann man in den "inspection_end.." usw. Dateien überhaupt ganz normale PCM Programmierungen verwenden?

Zweite Variante die ich mir überlegt habe, aber auch hier weiß ich nicht ob das möglich ist, eine Funktion einfügen die Calypso, falls die Bedingung eintritt dass ein Prüfmerkmal außerhalb der Toleranz ist, den Prüfplan nochmal durchrechnen zu lassen ohne dass der Haken bei "Alte Resultate rücksetzen", gesetzt ist, so dass ein zweites Protokoll mit den identischen Messergebnissen erzeugt wird und der Bediener auf diesem aber zusätzlich seine Bemerkung eintragen könnte. Aber auch hierzu habe ich nichts in den PCM Beschreibungen finden können.

Hat jemand schonmal so etwas oder ähnliches gemacht dass mir evtl. weiterhelfen könnte. Oder hat jemand eine andere Idee die mir nicht gekommen ist um so ein Vorhaben zu realisieren. Wäre über jede Hilfe dankbar.
Link to comment
Share on other sites

Ich weiß nicht, ob es das ist, was Sie meinen, aber wenn Sie "Multiple Printout" verwenden, können Sie zwei Berichtsseiten erstellen - die erste mit allen Merkmalen, die zweite nur mit den Merkmalen außerhalb der Toleranz. Siehe Foto im Anhang

"inspection_end_pcm.txt" - ja, es liest das PCM und diese Datei muss sich entweder global befinden und wird jedes Mal für jedes Programm ausgeführt oder lokal für einen bestimmten Prüfplan.

Entschuldigung für Syntax und Sprache, ich benutze einen Online-Übersetzer 😃

multiple printout.png

Link to comment
Share on other sites

Hello Mateusz,

die Übersetzung passt sehr gut. 😃
Leider ist es nicht das was ich suche. Ich verwende aktuell auch noch kein PiWeb.
Das einfachste wäre für mich wenn es eine Möglichkeit gäbe ohne große Umwege den Toleranzstatus jedes einzelnen Prüfmerkmals abzufragen.
Link to comment
Share on other sites

Ich habe jetzt nochmal überlegt wie ich das auf andere Art umsetzen könnte. Nur mal als Beispiel, es ist aber sehr umständlich:

Zahl=4
if Zahl > 3
Ergebnis = false
else
Ergebnis = true
endif
//message(Ergebnis)

Zahl1=4
if Zahl1 > 4
Ergebnis1 = false
else
Ergebnis1 = true
endif
//message(Ergebnis1)

Bemerkung=("Die Nummer ist")
if Ergebnis == true 
Einfügen=(Bemerkung + Zahl + cr())
else
Einfügen=(" ")
and 
if Ergebnis1 == true and (Ergebnis == true)
Einfügen1=(cr() + Bemerkung + Zahl1 )
else
and
if Ergebnis1 == true and (Ergebnis == false)
Einfügen1=(Bemerkung + Zahl1 )
else
endif
endif
endif
Habe jetzt nur der Einfachheit um zu testen "Zahl" geschrieben, das sollte dann im Prüfplan das jeweilige Prüfmerkmal sein.
Es ist sehr umständlich und auch nicht 100% zufriedenstellend.
"Einfügen..Einfügen1 usw. rufe ich dann in einem Textelement zurück um es letztlich auf dem Protokoll abbilden zu können.
Um das lesbar zu halten muss ich den Umweg gehen und mit dem Zeilenumbruch spielen und ich brauche einen Platzhalter für den Fall dass ich nichts schreiben will, weil das "Prüfmerkmal", hier die Zahl, in Ordnung ist. Da Calypso im Textelement ansonsten einfach das alte Ergebnis stehen lässt.
Im Textelement rufe ich dann über Formel, Einfügen + Einfügen1 zurück. Das würde dann immer weiter fortgeführt bis ich alle Prüfmerkmale durch hätte.
Würde aber auch immer komplexer wegen den ganzen if Varianten die ich auf diese Weise Schreiben müsste.

Vielleicht hat ja jemand eine Idee wie man das einfacher gestalten könnte.
Link to comment
Share on other sites

Please sign in to view this quote.

Sie können diesen Code ausprobieren, aber er durchläuft alle Merkmale, auch wenn Sie nur wenige Merkmale auswählen, die gemessen werden sollen

charList = getCFNames()
for i = 1 to charList.size
charName=getParameterNamed(charList,i)
if (text(getCFAttribute(charName,"toleranceState")) <> "inTolerance") then
	//do whatever if char IS NOT in tolerance
	display(charName+" "+ text(getCFAttribute(charName,"toleranceState")))
else 
	//do whatever if char IS in tolerance
	display(charName +" is OK")
endif
next i
Link to comment
Share on other sites

Thank you very much. Thats almost perfect and exactly what i was looking for.

Is there a secret list of PCM commands or where did you get these parameter queries from? 🙂
Link to comment
Share on other sites

These commands can be found in Calypso Help. Some of them (which are not specified in the manual) I have learned from this forum.
Link to comment
Share on other sites

Now I have another problem, I would like to be able to make a comment for each "outof tolerance" test feature, which should then also appear on the protocol.
I am now trying to retrieve the whole thing in a simple text field via formula. Unfortunately, it only ever takes the last char and writes it in the text field. How could I realize it that every char out of tolerance written in the text field?
Can i maybe get it about the Anzahl=inspectionToleranceState? But how? I played with array but it doesn´t work.

charList = getCFNames()
for i = 1 to charList.size
charName=getParameterNamed(charList,i)
if (text(getCFAttribute(charName,"toleranceState")) == "outOfTolerance") then
	//do whatever if char IS NOT in tolerance
	//display(charName+" "+ text(getCFAttribute(charName,"toleranceState")))
Anzahl = inspectionToleranceState("outOfTolerance")
for Anzahl = 1 to Anzahl.size
	Protokoll=(charName+" "+ text(getCFAttribute(charName,"toleranceState"))+"ist außerhalb der Toleranz ,definieren Sie eine Maßnahme: ") + inquireText("Prüfmerkmal ausserhalb der Toleranz, bitte definieren Sie eine Maßnahme: ")
next Anzahl
else
if (text(getCFAttribute(charName,"toleranceState")) == "inTolerance") then
	//do whatever if char IS in tolerance
	//display(charName+" "+ text(getCFAttribute(charName,"toleranceState")))
endif
endif
next i
Here is the test i made with array but it doesn´t work

charList = getCFNames()
messageArray = [ ] // Array zur Speicherung von Nachrichten
for i = 1, charList.size do
    charName = getParameterNamed(charList, i)
    if (text(getCFAttribute(charName, "toleranceState")) == "outOfTolerance") then
        messageText = inquireText(charName + " " + text(getCFAttribute(charName, "ist außerhalb der Toleranz, bitte Maßname definieren: ")) 
        table.insert(messageArray, messageText) // Fügt Nachricht zum Array hinzu
    else 
        // do whatever if char IS in tolerance
        display(charName .. " is OK")
    end
end
next i

// Schleife durch das Array, um die Nachrichten auszugeben
Anzahl = inspectionToleranceState("outOfTolerance")
for j = 1 to Anzahl
    message(messageArray[j] .. cr()) // Ausgabe jeder Nachricht mit Zeilenumbruch
end
next j
I have problems to write the array in the correct way or maybe it is the complete wrong way. I would be grateful for any help
Link to comment
Share on other sites

Unfortunately you cannot make arrays like you wrote ( [...] )

As Calypso's manual says:

Please sign in to view this quote.

Back to first code block - as I read your code it does what you said because you have only 1 variable called Protokoll which is being overwritten many times. If you want to make an array-like object you have to create something like counter for example:

//outOfTolerance counter
counter = 0

charList = getCFNames()
for i = 1 to charList.size
charName=getParameterNamed(charList,i)
if (text(getCFAttribute(charName,"toleranceState")) == "outOfTolerance") then
	counter = counter + 1
	Protokoll[counter]=charName +" is out of tolerance. Do something about it!"
endif
next i

for j = 1 to counter
	display(Protokoll[j])
next j
If you want to combine strings with PCM function you have to exchange quotes with qm() or do triple quotes, for example

aaaa = "myString"
test1 = "inquireText("+qm()+aaaa+qm()+")"
test2 = "inquireText("""+aaaa+""")"
display(test1)
getParameterNamed(test1)
Link to comment
Share on other sites

 Share

×
×
  • Create New...