Jump to content

Nestbezeichnung mit PCM beschreiben


---
 Share

Recommended Posts

Hallo zusammen,
ich möchte die Nestbezeichnung anhand der Palettenplatznummer beschreiben.
Auf unserer Messvorrichtung werden 6 Teile gemessen. Teil 1-3 soll die Nestbezeichnung "Spur1" und Teil 4-6 die Bezeichnung "Spur2" erhalten.

Ich würde es über folgenden PCM Befehl lösen:
if getRecordHead("palletlocationnumber") == 1 then
setRecordHead("nestname","Spur1")
endif

if getRecordHead("palletlocationnumber") == 2 then
setRecordHead("nestname","Spur1")
endif

if getRecordHead("palletlocationnumber") == 3 then
setRecordHead("nestname","Spur1")
endif

if getRecordHead("palletlocationnumber") == 4 then
setRecordHead("nestname","Spur2")
endif

if getRecordHead("palletlocationnumber") == 5 then
setRecordHead("nestname","Spur2")
endif

if getRecordHead("palletlocationnumber") == 6 then
setRecordHead("nestname","Spur2")
endif
Die Befehle scheinen so nicht zu funktionieren.
Hat jemand eine Idee woran es liegen könnte?

Vielen Dank im Voraus!
Link to comment
Share on other sites

Hast du schon mal versucht, die abgefragten Nummern in Anführungszeichen zu setzen?
Also statt == 1 mal == "1" versuchen.

Wo hast du denn die Befehle eingefügt?

Update:
Gerade ausprobiert. Es sind die Anführungszeichen 🙂
Link to comment
Share on other sites

Moin,

Ohne eine Ahnung von PCM zu haben müsste das auch so gehen:

if abs(getRecordHead("palletlocationnumber")) <= 3 then
setRecordHead("nestname","Spur1")
else
setRecordHead("nestname","Spur2")
endif

Davon ausgehend, das abs() dann den Integerwert vom char "1" zurück gibt ( Also so etwas wie atoi() ) 😃

Gruß
Karsten
Link to comment
Share on other sites

Hallo ,
ist diese Methode auch ohne PCM möglich ,wenn ja, wie.
Ich weiß diese Frage wird oft gestellt.
Wäre interessant da wir auch eine 6 Fach Vorrichtung haben, und diese im Autorun Modus laufen lassen

Danke schon mal im Voraus

Gruß Jörg



Please sign in to view this quote.

Link to comment
Share on other sites

Ich will nicht ausschließen, daß da mit viel Kreativität was zu machen wäre, aber ich kann es mir nur schwer vorstellen. Das Hauptproblem dürfte sein, daß ohne PCM das If...then Konstrukt fehlt. Das mit Bedingungen so nachzubilden, daß am Ende das obige Ergebnis erreicht wird, stelle ich mir sehr umständlich und aufwendig vor. Aber vielleicht täusche ich mich ja auch 😉
Freiwillige vor.
Link to comment
Share on other sites

Please sign in to view this quote.

Das funktioniert übrigens nur, wenn man zusätzlich noch ein val() einbaut, also:

abs(val(getRecordHead("palletlocationnumber"))) == 1

Den direkten Output von getRecordHead() schluckt die abs() Funktion leider nicht.
Aber eigentlich kann man dann das abs() auch gleich ganz weglassen. abs() braucht man ja nur, um garantiert einen positiven Wert zu bekommen. Aber palletlocationnumber kann ja gar nicht negativ werden.
Link to comment
Share on other sites

Please sign in to view this quote.

Und schon hab ich mich selber widerlegt. Man sollte halt nicht immer so voreingenommen sein: Pfüüh, ohne PCM, das geht doch nicht... 🤣

War eigentlich gar nicht schwer. Man nehme:
  • 2 Resultatselemente mit Bedingung
    Sie sollten (müssen aber nicht zwingend) unmittelbar hintereinander stehen und am besten ganz oben in der Liste: 127_a42cac69b1673cb6fb002a47e597156d.jpg
  • Die Bedingungen müssen so aussehen: 127_3086822601065f433bd7afad82fd09c0.jpg
    127_ca35f7f6b55b149fb94991931fd79f5f.jpg
  • In den Resultatselementen jeweils eine Formel einfügen, die das Protokollkopffeld setzt: 127_baa441cebbf7fad6021cfd04d92a845a.jpg
    127_950d5fd30f3aa9f446c1c69b4dfa507d.jpg

Das war's eigentlich schon. Den Ablauf muss man entweder mit der Reihenfolge nach Prüfmerkmalen starten, oder anderweitig sicherstellen, dass immer beide Resultatselemente ausgewertet werden.

Nachteil an der Methode ist, dass die Resultatselemente im Protokoll auftauchen, aber das könnte man mit etwas Mehraufwand auch noch beheben (maskieren und durch Formeln anderswo Bezug darauf nehmen)

Ich habe bei mir zur Sicherheit auch mal die PCM-Lizenz deaktiviert, um zu sehen, ob es dann auch noch funktioniert. Tut es.

Viel Spaß und schönes Wochenende 😃
Link to comment
Share on other sites

Hallo Norbert,
Danke für deine Anleitung. Kann es aber erst Testen wenn ich wieder Arbeite. Habe Urlaub.
Nächste Woche wenn ich Zeit habe , werde ich es Testen.

Danke noch mal für deine Mühe

Gruß Jörg
Link to comment
Share on other sites

Hallo Jörg,

hier mal ein anderer Vorschlag, wie es schon jahrelang bei uns im Betrieb funktioniert:

---> PCM Prüfplan Eingangseinstellungen

//alle Parameter zurücksetzen
clearParameter()

//Pfad definieren
Pfad = getActualInspectionDir()

//Position zu Beginn bestimmen
Position = getRecordHead("palletlocationnumber")
selectCase Position
	case is == getRecordHead("firstpalletlocationnumber")
//Prüfungs-Kennung eingeben
		setRecordHead("procid",inquireList("Werkzeug- & Teil-Nummer:","WZ111_TN1","WZ111_TN2","WZ121_TN3"))
	case is == getRecordHead("lastpalletlocationnumber")
//evtl. Code
endSelect
Kennung = getRecordHead("procid")
if Kennung <> "" then
	pTrennzeichen = inStr(Kennung,"_")
	lKennung = len(Kennung)
	WZ = mid(Kennung,1,pTrennzeichen-1)
	setRecordHead("tooldf",WZ)
	TN = mid(Kennung,pTrennzeichen+1,lKennung)
	setRecordHead("partnbLong",TN)
//Parameterdatei einlesen
	runPCMFile(Pfad + "\" + WZ + ".txt")
	runPCMFile(Pfad + "\" + TN + ".txt")
else
	display("Keine Werkzeug- & Teil-Nummer ausgewählt!")
	cncBreak()
endif
---> PCM Prüfplan Ausgangseinstellungen

//Position zum Ende bestimmen
Position = getRecordHead("nestname")
selectCase Position
	case "Pos1"
		Nest = Pos1
	case "Pos2"
		Nest = Pos2
	case "Pos3"
		Nest = Pos3
	case "Pos4"
		Nest = Pos4
	case "Pos5"
		Nest = Pos5
	case "Pos6"
		Nest = Pos6
	caseElse
		Nest = "Test"
endSelect
//Nestnummer eintragen
setRecordHead("nestname", Nest)
---> PCM Prüfplanverzeichnis "TN".txt
(diverse Parameter)

---> PCM Prüfplanverzeichnis "WZ".txt

Pos1 = "Spur1"
Pos2 = "Spur1"
Pos3 = "Spur1"
Pos4 = "Spur2"
Pos5 = "Spur2"
Pos6 = "Spur2"
---> Autorun Palette
Vorbelegung "nestname"* Position 1 mit "Pos1", usw.

*Das Ganze kann natürlich auch mit einem anderen Protokollkopf-Parameter umgesetzt werden.

So bleibt der Code flexibel und kann für andere Fälle leicht und schnell geändert werden.
Link to comment
Share on other sites

Hallo Thomas,
vielen Dank für deinen Vorschlag. Aber wie weiter vorne im Post schon erwähnt, habe ich kein PCM.
Leider bin ich noch nicht zu Norbert Vorschlag gekommen, den auszuprobieren .
Aber sobald ich ein bis'chen Zeit habe werde ich es testen.

Danke aber noch mal Thomas für den Erklärung. Sollten wir irgendwann mal PCM bekommen, werde ich deinen Vorschlag auch Testen.

Gruß Jörg
Link to comment
Share on other sites

Instead of using if-conditions you could just do it like this.
//Get the pallet locationnumber and make it a number to be able to do some math.
PalletLocationValue = val(getRecordHead("palletlocationnumber"))
//Reduce it by one and divide it by three and take the integer-value.
//(1-1)/3 = 0,000 => int:0   (2-1)/3 = 0,333 => int:0  (3-1)/3 = 0,666 => int:0 
//(4-1)/3 = 1,000 => int:1  (5-1)/3 = 1,333 => int:1  (6-1)/3 = 1,666 => int:1 
//Then add 1 to the value
SpurValue = int((PalletLocationValue-1)/3)+1

setRecordHead("nestname","Spur" +text(SpurValue))

Or combine in into one long string.

setRecordHead("nestname","Spur" +text(int((val(getRecordHead("palletlocationnumber"))-1)/3)+1))
This one line can be input as a formula in a comment field in either feature list or Characteristics list.

Note: I have not tested this but I think it should work.
Link to comment
Share on other sites

 Share

×
×
  • Create New...