Da unser Vertrieb immer abenteuerliche Taktzeiten verkauft versuche ich nach Möglichkeit unnötige Stopps die durch den Programmablauf entstehen, also Zonentyp „fine“ wegen Wait Intruktionen, SyncTask bei MultiMove etc. direkt von vornherein zu vermeiden.
Konkretes nicht allzu außergewöhnliches Beispiel wäre ein MultiMove Handlings System das nicht über eine feste Schrittkette, sondern Zustandsgesteuert läuft. Sprich Bediener verschiedene Baugruppen unterschiedlich schnell vorbestücken und dadurch Ein/Ausfahrfreigaben, Kollisionsverriegelungen, Ready Signale von Prozessausrüstung, Bändern etc. etc. mal anstehen und mal nicht d.h. die Roboter mal warten müssen und mal durchfahren könnten.
Ablauf z.B. (Pseudocode)
Init;
WHILE bAbbruch=FALSE DO
IF conditions 1 THEN
mvTo_Station 1;
Job 1;
ELSEIF conditions 2 THEN
mvTo_Station 2;
Job 2;
ELSEIF conditions n THEN
mvTo_Station n;
Job n;
ELSE
! delay task
WaitTime 0.1;
ENDWHILE
GoHome;
Alles anzeigen
Mein aktueller Ansatz (Pseudocode) weg von
Move fine
SetDo Schrittkettensignal an SPS
WaitUntil condition 1…n
SetDo Schrittkettensignal an SPS
Move zone
ist folgender Interrupt (zB bei Erreichen der VP vor Eintritt in eine Bestückstation):
LOCAL TRAP Trap_Station1
! "selective fine point" ==> if conditions match go, else wait
IF condition 1…n=TRUe THEN
IF bDebug TPWrite " Station1 Trap 'zone'";
! continue
ELSE
StopMove;
SetDO Schrittkettensignale an SPS
IF bDebug TPWrite " Station1 Trap 'fine'";
WaitUntil condition 1…n=TRUE OR bAbbruch;
StartMove;
ENDIF
SetDo Schrittkettensignale an SPS
ENDTRAP
Alles anzeigen
Das Ganze funktioniert zwar, wird aber von der Handhabung schnell umständlich (vorallem die Abbruchbedingung überall mit durchzuziehen da die Motion Task bei Stillstand ja immer in irgendeiner Trap hängt) und unübersichtlich.
Gibt es einen einfacheren Weg für „selektive fine Punkte“, bzw. einen ganz anderen Ansatz? Wie handhabt ihr das?
Grüße
Karsten