Beiträge von Heinz Merk

    Ja da hast du recht! andererseits ist es für mich für die IBN verdammt praktisch wenn ich so wie beim fanuc einfach hinspringen kann wo ich will. das erleichtert mir die arbeit schon um einiges :biggrins: ich denke die variable kann man zur IBN schon auf true stellen, aber im normlen produktionsablauf ist das ja auch auf keinen fall nötig!


    wollte eben nur wissen ob das schon jemand gewusst hat, bzw ob es da zu irgendwelchen gröberen Problemen kommen kann

    Hallo Zusammen!


    Hat jemand schon mal Erfahrungen mit der Variable "LINE_SEL_LOCAL_SUB" gemacht? Die befindet sich im Verzeichnis **\krc\ROBOTER\Config\User\Common\KrcConfig.xml und ist standardmäßig auf false gestellt. Wenn man diese auf true stellt - Steuerungsneustart vorausgesetzt - kann man vom Hauptprogramm eine Satzanwahl in ein lokales Unterprogramm machen. Habs getestet und es funktioniert auch!
    Kann man das bedenkenlos machen oder sollte die lieber auf false bleiben?


    Grüße Heinz

    wenn die sub einmal gestartet ist, dann läuft das bis man es wieder stoppt, es startet sich ebenfalls automatisch wenn man die steuerung vom roboter einschaltet usw.
    in die sub sollte eingentlich der ganze datentausch rein der zyklisch passieren soll.
    zur sicherheit sollte aber immer in der ini zeile deines programms der CWRITE befehl stehen, der die sub startet

    ja PTP {E1 100} :biggrins:


    ne vielleicht kennt jemand anders noch eine Andere Möglichkeit, aber am einfachsten ist es mit Sicherheit so denke ich!


    Grüße
    Heinz

    Hallo,


    ich bin mir nicht ganz sicher, aber ich glaube dass diese Offset-Berechnung nur für Frames gillt.
    Ich weiß aber nicht, ob man dein offset2 auch als E6POS deklarieren kann.


    Aber was mir gerade auffällt, du beschreibst das offset2 und berechnest xp7 aber mit xp4 und offset4


    Vielleicht konnte ich dir ja ein Stückchen weiter helfen!


    Grüße
    Heinz

    Hallo, eine relativ einfache Art um abzufragen ob der Roboter im Stillstand ist, ist diese hier:


    So setze ich das meistens um und für die Anwendungen reicht es eigentlich auch!


    BOOL A1Stop
    BOOL A2Stop
    BOOL A3Stop
    BOOL A4Stop
    BOOL A5Stop
    BOOL A6Stop
    REAL A1PosOld
    REAL A2PosOld
    REAL A3PosOld
    REAL A4PosOld
    REAL A5PosOld
    REAL A6PosOld
    BOOL NoMovement


    A1Stop=((A1PosOld+0.005)>$AXIS_ACT.A1) AND ((A1PosOld-0.005)<$AXIS_ACT.A1)
    A2Stop=((A2PosOld+0.005)>$AXIS_ACT.A2) AND ((A2PosOld-0.005)<$AXIS_ACT.A2)
    A3Stop=((A3PosOld+0.005)>$AXIS_ACT.A3) AND ((A3PosOld-0.005)<$AXIS_ACT.A3)
    A4Stop=((A4PosOld+0.005)>$AXIS_ACT.A4) AND ((A4PosOld-0.005)<$AXIS_ACT.A4)
    A5Stop=((A5PosOld+0.005)>$AXIS_ACT.A5) AND ((A5PosOld-0.005)<$AXIS_ACT.A5)
    A6Stop=((A6PosOld+0.005)>$AXIS_ACT.A6) AND ((A6PosOld-0.005)<$AXIS_ACT.A6)


    A1PosOld=$AXIS_ACT.A1
    A2PosOld=$AXIS_ACT.A2
    A3PosOld=$AXIS_ACT.A3
    A4PosOld=$AXIS_ACT.A4
    A5PosOld=$AXIS_ACT.A5
    A6PosOld=$AXIS_ACT.A6


    NoMovement=A1Stop AND A2Stop AND A3Stop AND A4Stop AND A5Stop AND A6Stop


    Die +0.005 ist ein Toleranzfenster und kann auch verkleinert werden!
    Das ganze befindet sich logischerweise im Submit Interpreter :zwink:
    Vielleicht kansnt du ja etwas damit anfangen :)


    Grüße
    Heinz

    Dann hab ich das wohl falsch verstanden, aber da hast du recht ja
    wie Hermann schon sagte, am besten mal CANCEL ausprobieren und schauen was er dann macht.


    Hermann, brauchst mir nicht gleich drohen nur weil ich Beispiele genannt habe, wie man es umsetzen könnte ;)
    Ich selbst bevorzuge es auch immer den Submit komplett rennen zu lassen und wenn es irgendwo nötig ist, dann überspringt man eben n paar Zeilen/Befehle mit nehm IF


    Grüße
    Heinz

    Hallo,
    ja das ist kein Problem!


    CWRITE($CMD,STAT,MODE,"STOP /R1/SPS()") lässt den Submit stoppen!


    Ich bevorzuge aber die Variante das ganze mit einer Variable zu steuern. Die wird z.b. in der config.dat deklariert, heißt meinetwegen stop_sub oder so. Die kann ich dann nach belieben im Hauptprogramm TRUE und FALSE setzen wie ich will.
    Und im Submit frag ich die Variable einfach am Anfang des LOOPs mit einem WAIT FOR/ REPEAT UNTIL oder Ähnliches auf TRUE ab. Wenn sie dann wieder FALSE ist, dann gehts wieder weiter.


    Aber ist Geshmackssache denke ich mal!


    Grüße Heinz

    Hallo tech,


    das habe ich auch schon probiert, wenn ich die Maus deaktiviere verschwindet der Fehler auch. Aber wenn ich sie wieder aktiviere erscheint er sofort, sogar ohne Drücken des Zustimmtasters!

    Hallo Zusammen,


    seit heute morgen habe ich an meinem KR100 R3500 press mit KRC4 v8.3.8 Steuerung das Problem, dass immer die Fehlermeldung von der Spacemouse kommt:


    "KSS13025: 6D-Maus ausgelenkt- Maus in Nullstellung bringen, Zustimmung erneut drücken."


    Kennt sicher jeder die Meldung und wie man sie behebt ist auch jedem klar, nur mein Problem ist eben, dass sich die Maus in Nullstellung befindet, sich aber trotzdem nicht quittieren lässt :denk:


    Steuerungs-PC wurde auch schon neugestartet usw, aber leider ohne Erfolg! Mir ist auch nicht das SmartPad runtergefallen oder Ähnliches, was theoretisch auch den Fehler hervorrufen könnte, deshalb weiß ich aktuell grad nicht weiter :huh:


    Weiss jemand einen Rat?


    Grüße
    Heinz

    Hallo,


    Ich kenne das nur so, dass Sensoren, die eine separate Spannungsversorgung brauchen auch eben separat versorgt werden müssen.


    Als Beispiel nehme ich jetzt mal einen M710iC mit RJ3iC Steuerung her. Der EE-Stecker hat hier 24 Pole
    Eingangsseitig werden hier 24V zur Verfügung gestellt, welche man dann mit Schaltern o.Ä. auf die RIs beschalten kann.
    Ausgangsseitig werden von den ROs 24V/0,1A zur Verfügung gestellt, die man über die 0V des EE-Steckers verwenden kann.


    Einstellen/Aktivieren der RI/RO wäre mir jetzt neu und kann ich mir auch nicht vorstellen!


    Um welchen Sensor/Anwendung handelt es sich denn? Vielleicht kann ich dir dann mehr helfen!


    Grüße
    Heinz

    Hallo Viper,
    ja das ist mir dann auch noch eingefallen, dass man ja separate GIs für positive und negative Werte braucht, da ein GI nicht negativ sein kann. Da muss man dann halt ein bisschen rum tricksen ;)


    In einem früheren Projekt habe ich das mal so realisiert:


    9: LBL[1] ;
    10: ;
    11: R[130:RROffsetPlus]=(GI[14:RROffsetPlus]/1000) ;
    12: R[131:RROffsetMinus]=(GI[15:RROffsetMinus]/1000) ;
    13: ;
    14: IF (R[130:RROffsetPlus]*R[131:RROffsetMinus]<>0),JMP LBL[10] ;
    15: ;
    16: PR[57,1:Plac Offset]=0 ;
    17: PR[57,2:Plac Offset]=0 ;
    18: PR[57,3:Plac Offset]=(R[130:RROffsetPlus]-R[131:RROffsetMinus]) ;
    19: PR[57,4:Plac Offset]=0 ;
    20: PR[57,5:Plac Offset]=0 ;
    21: PR[57,6:Plac Offset]=0 ;
    22: ;
    23: END ;
    24: ;
    25: LBL[10] ;
    26: !One of the values is not 0 ;
    27: PAUSE ;
    28: JMP LBL[1] ;
    29: ;


    Das hat eigentlich auch gut funktioniert!


    Aber wenn es so nun klappt, ist ja alles in Ordnung :D


    Viele Grüße
    Heinz

    Hallo Viper,
    also wenn ich eine Anwendung mit Korrekturwert, bzw Offset hatte, hab ich das nicht über eine Frame-Manipulation gemacht, sondern die Offset-Werte in ein Positionsregister geschoben und den punkt dann mit diesem PR als Offset angefahren.
    Ich weiß zwar nicht was in deinem Karel-Programm drin steht oder ob das in deinem fall überhaupt möglich ist. Aber wenn du nur Offset-Werte von der SPS bekommst, dann halte ich meine Lösung für sinnvoll, bzw am leichtesten!


    Ansonsten lässt sich natürlich auch ein Frame manipulieren!
    Könnte so ausschauen:


    1: PR[33]=UFRAME[1] ;
    2: PR[34,1]=PR[33]+GI[1] ;
    3: PR[34,2]=PR[33]+GI[2] ;
    4: PR[34,3]=PR[33]+GI[3] ;
    5: PR[34,4]=PR[33]+GI[4] ;
    6: PR[34,5]=PR[33]+GI[5] ;
    7: PR[34,6]=PR[33]+GI[6] ;
    8: UFRAME[2]=PR[34] ;
    9: UFRAME_NUM=2 ;


    Dabei ist Frame 1 dein "Basisframe" und Frame 2 dann dein Basisframe pluf Offsets. Ich bin mirr nicht sicher, ob man die PR direkt mit einem GI beschreiben kann, hab grad leider kein Fanuc zur Hand, ansonsten muss man halt die GI zuerst auf R schreiben und dann die R auf die PR schreiben.


    Ich hoffe ich konnte dir damit ein wenig weiter helfen!


    Grüße
    Heinz

    Hallo,


    Was ist denn die Arbeitsaufgabe der Roboter? Sollen die jeder für sich was machen und z.B. alle drei an eine Ablage fahren, oder sollen z.B. 2 Roboter syncron fahren/Bauteil heben?


    Wenn du "nur" die Arbeitsbereiche verriegeln willst, dann würde ich das über die Arbeitsraumüberwachung und eine SPS machen.
    Bin aktuell an einem Projekt, dort habe ich 2 Roboter in einer Zelle mit jeweils einer eigenen Entstapelstelle, aber eine gemeinsame Ablage.
    Roboter 1 fordert (früh genug) an in den Kollisionsbereich zu wollen. Je nach dem ob sich Roboter 2 aktuell darin befindet (Signal der Arbeitsraumüberwachung) oder nicht, gibt die SPS dem Roboter 1 die Freigabe zu fahren und sperrt automatisch den zweiten. Erst wenn der erste wieder aus dem gemeinsamen Kollisionsbereich draußen ist, kann der zweite einfahren (wenn er die anforderung gestellt hat).
    Ich habe in dem fall hier generell die Freigaben gesperrt, so lange keine Anforderung ansteht von einem Roboter.


    Ich hoffe, dass ich dir ein bisschen weiter helfen konnte!


    Viele Grüße
    Heinz

    Hallo,


    Probier mal Folgendes:


    1: !BG_LG setup OK and in RUN ? ;
    2: IF (($MIX_BG[1].$mode=2) AND ($MIX_BG[1].$status=2)),JMP LBL[1] ;
    3: PAUSE ;
    4: $MIX_BG[1].$mode=2 ;
    5: $MIX_BG[1].$status=2 ;
    6: LBL[1]


    Versuch es mal damit, so mach ich das immer. Bei manchen Steuerungen ist die Variable "$MIX_BG[1].$status" aber schreibgeschützt und lässt sich somit nicht verändern, aber vielleicht weiß da jemand anders noch eine Lösung!


    Grüße
    Heinz