Hallo zusammen,
ich kämpfe gerade mit einem komischen Phänomen an einer S4C+ Steuerung.
Es handelt sich um einen Entnahmeroboter einer Presse, der das Teil aus der Presse holt und auf ein Band ablegt.
Die Teile werden mittels Sauger und Vakuumventil aufgenommen und abgeblasen.
Nun kommt es unter bestimmten Umständen vor, daß das Umschalten auf Saugen nach dem Abblasbefehl nicht ausgeführt wird
Roboter bewegt sich in dieser Schleife :
ZitatAlles anzeigenWHILE TRUE DO
AccSet AccBa_Pr{nTeil_Num},AccBa_Pr{nTeil_Num};
UserMove\J,pWarte_EntLaden,v3000,z200,tGreifer;
SetGO rgoRobPosInfo,PosWartFreigEntl;
IF NOT TestFreigEntlad(pWarte_EntLaden) RETURN;
Vakuum;
UserTriggs\J,Offs(pEntLaden,0,0,100),vmax,trigVerriegVor0\Topc2:=trigVakFunktTest,z100,tGreifer;
UserMove\L,pEntLaden,v500,fine,tGreifer;
EntlRueckluft1;
GripLoad Teilladen;
IF nBefehl=BefehlSaugEins Saugereins;
MoveTriggs\L,Offs(pEntLaden,0,0,150),v500,z200,tGreifer,boLoadAuthAh,trigFreigLaden;
MoveTriggs\L,pAus_EntLaden,vmax,z200,tGreifer,NOT boLoadAuthAh,trigFreigLaden\TriggSecure:=trigVerriegVor1;
AccSet AccPr_Ba{nTeil_Num},AccPr_Ba{nTeil_Num};
UserMove\J,pWarte_Laden,vmax,z200,tGreifer;
SetGO rgoRobPosInfo,PosWartFreigLade;
IF TestVakuum(pWarte_Laden)=FALSE RETURN;
IF Vak_Funkt_Test()=FALSE RETURN;
IF TestFreigLaden(pWarte_Laden)=FALSE RETURN;
IF TestWibond(pWarte_Laden)=FALSE RETURN;
UserTriggs\J,Offs(pLaden,0,0,100),vmax,trigVerriegNach0,z100,tGreifer;
UserTriggs\L,pLaden,v500,trigAbblasen,fine,tGreifer;
GripLoad load0;
MoveTriggs\L,Offs(pLaden,0,0,300),v800,z200,tGreifer,boLoadConfAh,trigTeil_Laden;
MoveTriggs\J,pAus_Laden,vmax,z200,tGreifer,NOT boLoadConfAh,trigTeil_Laden\TriggSecure:=trigVerriegNach1;
ENDWHILE
Das Abblasen wird über Trigger und einer Traproutine ausgeführt (trigAbblasen) :
ZitatAlles anzeigenIF boArbeit_KA1=TRUE THEN
SetDO doVakuum_KA1,0;
PulseDO\High\PLength:=1.5,doBlasenAus_KA1;
ENDIF
IF boArbeit_KA2=TRUE THEN
SetDO doVakuum_KA2,0;
PulseDO\High\PLength:=1.5,doBlasenAus_KA2;
ENDIF
Im regulären Ablauf kommt es nach dem Ablegen auf dem Band zu Verzögerungen, weil der Roboter kurz vor der Presse warten muss.
Dann funktioniert alles wie gewollt.
Ist dies aber nicht der Fall und der Roboter kann sofort einfahren (Abfrage in der 4. Zeile der Schleife), dann werden die Befehle im nachfolgenden Unterprogramm "Vakuum" komplett ignoriert.
ZitatReset doBlasenAus_KA1;
WaitDO doBlasenAus_KA1,0;
Set doVakuum_KA1;
Selbst das nachträglich eingefügte "WaitDO" scheint ihn nicht zu kümmern. Das Programm bleibt an dieser Stelle nicht stehen aber Ausgang Vakuum_KA1 wird nicht gesetzt.
Verringere ich die Programmgeschwindigkeit, dann wird kurz nach dem Abblasen sofort umgeschaltet.
Das bedeutet, daß trotz 3 Bewegungsinstruktionen der Zeigervorlauf so weit ist, daß der Trigger und die "Vakuum" Routine warscheinlich gleichzeitig abgearbeitet werden.
Ich zerbreche mir gerade den Kopf, wie das möglich sein kann bzw. wie kann ich das lösen, ohne einen Genauhalt vor "Vakuum"programmieren zu müssen, um den Vorlauf aufzuhalten.
Hat von euch schon mal jemand das gleiche Problem gehabt ?
Würde mich über eine Antwort sehr freuen.
Gruß Maddin