So ganz klar ist mir Deine Applikation noch nicht. Aber mal so viel:
Am Conveyor ist ein Synchronisierungschalter angebracht. Wird dieser ausgelöst, zb. Vorderkante eines Pakets, wird $sen_prea_c[] auf 0 gesetzt. Von nun an wird die Base verschoben. In etwa so:
$base_c=base_data[11]:{x $sen_prea_c[1],y 0,z 0,a 0,b 0,c 0}. Deine bez. der base11 geteachten Punkte werden also mitverschoben. Der Roboter holt erst das Teil ab, nach dem das Band eine bestimmte Wegstrecke überschritten hat (Wait for $sen_prea_c[]>Bandfahrweg ; mm),
und stapelt es auf einer Palette.
Der Roboter fährt zum Band zurück und wartet auf erneutes Synchronisierung (nächstes Teil
unterbricht die Lichtschranke).
Soll der Roboter nur tätig werden, wenn eine bestimmte Anzahl von Teilen zum gleichzeitigen
greifen bereit liegen sollen, gibt es verschiedene Ansätze:
- Die Lichtschranke an einen elektronischen externen Zähler anschliessen, dessen Ausgang mit
$meas_pulse[] verbunden ist.
- Am Conveyorband werden in den gewünschten Abständen Markierungen angebracht.
- Nur KRL
Ich habe es noch nie getestet, aber ich glaube, das die Synchronsierung nur dann erfolgt, wenn
dies auch wirklich gewünscht wird: Inlineform "Warte auf Synchronisierung" (1. Teil kommt)
- anschliessend "wait for $sen_prea_c[]>=2000;mm". Roboter fährt zum Band, greift alle Teile
gleichzeitig und fährt wieder zurück zu Warteposition. Gestapelt wird erst mal nix, sondern
wieder "Warte auf Synchronisierung". Ist diese erneute Synchronisierung erfolgt, kann gestapelt
werden. Das Band rollt dabei weiter. Der Roboter fährt zurück und wartet jetzt nur noch bis
$sen_prea_c[]>=2000 -> greifen-> "Warte auf Synchronisierung" -> stapeln -> "wait for
$sen_prea_c[]>=2000" usw.
Fehler - z.B. der Roboter ist zu langsam - könnten wie folgt abgefangen werden:
DEF bsp()
IF teil_im_greifer THEN
stapeln() ; (Base=<10)
ENDIF
warte auf synchronisierung ; $sen_prea_c[]=0, (Base=<10)
LOOP
wait for $sen_prea_c[]>=2000 ; genügend Teile im Greifbereich, (Base=<10)
IF $sen_prea_c[]>=3999 Then ; letztes stapeln dauerte zu lang - Verzögerung nicht abfangbar
; Fehlerstategie: Teile einfach weiter laufen lassen, evtl. Fehlermeldung an sps
warte auf synchronisierung ; $sen_prea_c[]=0, (Base=<10)
ELSE ; normaler Zyklus, der Roboter war für die Bandgeschwindigkeit schnell genug
greifen() ; Warteposition->Teil auf Band greifen->Warteposition ; (Base>=11)
warte auf synchronisierung ; $sen_prea_c[]=0, (Base=<10)
stapeln() ; (Base=<10)
ENDIF
ENDLOOP
END
Das ist natürlich nur eine grobe Struktur ! Das ganze müsste noch auf Basis der ConveyorTech-
Programmstruktur umgesetzt werden.
Würde mich interessieren, wie Du es letztendlich gemacht hast.
Grüße
Berrad