Beiträge von DiDi

    Hallo,


    neben dem Türschloss ist auch die VKRC HW-Schnittstelle sehr unterschiedlich zur KRC. Dort braucht man z.B. die zweikanaligen Schlüsselschalter E2, E7 um bei offener Schutztür #T1 / #T2 fahren zu können. Da hilft aber wohl auch nur der Schaltplan mit Beispiel.
    Doku ist bei der VKRC normalerweise nicht im Schrank, gibt es auf Anfrage bei KUKA oder hier im Forum.


    Gruss DiDi

    Hallo,


    Funktion ist: Vorlauf wartet programmierte Zeit ohne Vorlaufstopp auszulösen. Kann sinnvoll sein, wenn man im Vorlauf ein bestimmtes Timing von Signalen braucht ohne den Überschleif auszubremsen.


    Gruss DiDi

    Hallo,


    beim einfachen Umschalten in Hand und retour in Auto sollte eigentlich gar nichts passieren. Wenn du allerdings in Hand Satzanwahl machts, rückwärts/vorwärts fährst, die Bahn verlässt oder änderst kommt der Trockenlauf dran.
    Der wird die Merker zunächst deaktivieren, dann wieder restaurieren. Beim Restaurieren durchstöbert er das Modul von oben bis zur aktuellen Stelle. Schaut alle PSPSen inclusive Makros an und setzt die Merker dann auf den letzen Wert den er findet. Wenn er nichts findet, setzt er auch nichts.


    Damit das funktioniert, solltest du am Beginn jedes Moduls (Folge,UP) die Merker z.B. mit einem Makro Initialisieren. Das ist auch deshalb sinnvoll, damit die Module auch funktionieren wenn sie direkt angewählt werden bzw. in beliebiger Reihenfolge aufgerufen werden.


    Gruss DiDi

    Hallo,


    das Problem ist wohl, das Trig nie wieder FALSE wird und der Interrupt nur auf Flanken reagiert. Einen Sekunden Trigger vom Submit würde wie folgt realisieren.
    Im Init Teil des Submit, nicht in der Loop:


    $Timer_Stop[1]=true
    $Timer[1]=-500
    Trig=False
    Interrupt Decl 10 when $Timer_Flag[1] Do Timer_UP()
    Interrupt on 10
    $Timer_Stop[1]=false


    und als lokales UP im Submit:
    DEF Timer_UP()
    $Timer[1]=-500
    Trig=not(Trig)
    END


    Gruss DiDi

    Hallo,


    C_VEL als Überschleifkriterium und $APO.CVel =100 % ist die beste Vorgabe wenn man ohne Geschwindigkeiteinbruch überschleifen möchte.
    Die Einstellung bedeutet, das der Roboter auf eine Überschleifkontur geht, wenn beim Einzelsatz die Bremsrampe beginnen würde und auf dem nächsten Satz dort ankommt wo die Beschleunigungsrampe enden würde.
    Wichtig ist dabei die Beschleunigung $ACC.CP. In den Maschinendaten wurden früher $ACC_MA.CP = 4.6m/s² vorgegeben, neuerdings = 10.0m/s². Allerdings wurde der Wert häufig, durch die Einstellung DEF_ACC_CP=2.3 in $config.dat runtergesetzt.


    Um mal eine Grössenordnung für Parameter zu geben, ist das Dreiecksprofil auf dem Einzelsatz sinnvoll. Damit ergibt sich z.B. ein Mindestabstand für Punkte wenn man die programmierte Geschwindigkeit erreichen möchte:
    Mindestabstand = $VEL.CP²/$ACC.CP


    Beispiel: $VEL.CP= 0.3m/s, $ACC.CP=4.6m/s² ==> Mindestabstand rund 20mm


    Anderrum kann man natürlich auch eine Beschleunigung ausrechnen wenn man Abstand und Geschwindigkeit hat. Das Ganze hat natürlich auch Grenzen. Wenn man die Beschleunigung zu hoch setzt wird der Roboter mit Überwachungen aussteigen, bzw. sehr unruhig werden.


    Das Ganze ist aber nur eine Abschätzung. Geschwindigkeitsreduzierungen wegen Zusatzachsen, Orientierung oder Winkel der Bahnen zueinander sind aussen vor, dürften aber bei CamRob Applikationen auch keine Rolle spielen.



    Gruss DiDi

    Hallo,


    es gibt zwei Möglichkeiten, wo es schief gehen kann.


    Zum einen prüft die Software vor dem Anzeigen der Referenzliste, ob sich etwas geändert hat, das sich auf die Referenzliste auswirkt. Falls die Software der Meinung ist, das sich nichts geändert hat, zeigt sie die alte Liste weiter an. Man kann den Fall daran erkennen, das die Anzeige sofort kommt und nicht die Wartezeit mit den scroll bars. Abhilfe in diesem Fall wäre, einen beliebigen Befehl Ändern / Eingabe, dann sollte die Referenzliste wieder neu erzeugt werden.


    Die zweite Möglichkeit ist ein Problem mit der gespeicherten Liste. Wenn sie einmal automatisch erzeugt und gespeichert wurde, reagiert die Software beleidigt wenn man die Datei manuell löscht oder ändert. Die Software schreibt dann gar keine neuen Referenzlisten mehr auf Festplatte. In diesem Fall hilft löschen der aktuellen Referenzliste im Init-Verzeichnis und Kaltstart.


    Gruss DiDi

    Hello,


    $conf_mess is an acknowlege signal. Usual behaviour of the controller is a state message as long as the fault is present e.g. emgerency stop. After the fault has gone, the state message disappears and an acknowledge message shows up, e.g. ackn. EStop. $conf_mess acknowledge this message and you are ready to go.
    If your light barrier is independent and does not force any faults on the robot controller, you can reset it with a second contact on your ackn. pusch button. Other wise you can use a fouth push button to reset your light barrier or press the push achnowledge button twice.


    Good luck
    DiDi

    Hallo,


    hinter $Filter steck ein Mittelwertfilter. z.B. bedeutet ein Wert $Filter=240, das über 20 Takte a 12ms gemittelt wird. Merkt man z.B. daran, das man beim Positionieren nach Sollwert=0 noch 240ms braucht bis der Istwert 0 ist.
    Der Defaultfilter ist im wesentlichen auf Nennlast und PTP-Postionieren eingestellt. Wenn man dran dreht sollte man vorsichtig drehen. Bei deutlich grösseren Werten wird die Bahn sehr weich und rund, weicht aber sehr deutlich von der programmierten Bahn ab. Wenn man deutlich kleiner wird, wird es ruppiger beim Positionieren und der Roboter steigt schnell mit Fehlermeldungen aus.
    Optimierungen sind denkbar wenn man deutlich unter Nennlast fährt oder wenn man Wert auf Bahnfahren legt, dafür beim PTP immer immer mit kleiner Beschleunigung fährt.


    Gruss DiDi

    Hello,


    I think there is still a missunderstand of the modes. #EX does not mean controlled by PLC. It's more like #AUT: Automatic controlled by KCP, #EX means Automatic controlled by IO's. That can be IO's from PLC or push buttons.


    The most simple way are 3 push buttons:
    in /$machine.dat
    SIGNAL $CONF_MESS $IN[1]; the acknowledge push button
    SIGNAL $DRIVES_ON $IN[2]; the drives on push buttom
    SIGNAL $EXT_START $IN[3]; the program start button


    if not used you can jumper:
    SIGNAL $DRIVES_OFF $IN[1025]
    SIGNAL $MOVE_ENABLE $IN[1025]
    BOOL $CHCK_MOVENA=FALSE; $option.dat


    You do not need any submit program. Just have a robot program with home position and a loop for the work.
    May be you take precaution of the start position, because the robot will start fullspeed wherever it is.
    To start automatic you select your program, you select external mode, press push button acknowledge, press push button drives on, press push button start and the robot starts working.


    To recover from Estop you press the same sequence of push buttons.


    The solution can not be called comfortable, but simple. The code posted here earlier shows more comfortable solutions.


    Good luck
    DiDi

    Hallo,


    die Referenzliste wird bei jedem öffnen in der Directory C:\KRC\Roboter\Init neu gespeichert. Beim Speichern irgendwohin ist ein Softwarefehler drin. Da verirrt sich die BOF.


    Gruss DiDi

    Hallo,


    der Interpreter stoppt eigentlich nur wenn es eine Stoppmeldung wie z.B. Getriebemomentenüberwachung gibt. Evtl. mal ins Logbook schauen. Eigentlich sollte auch der BRAKE F ohne Fehlermeldung stoppen, das hat sich aber über die Softwarestände geändert.
    Um möglichst schnell stehen zu bleiben, bietet sich auch ein schneller Eingang an.
    Die ultimative Möglichkeit für eine möglichst schnelle Reaktion bietet die TouchSense Funktion im Funktionsgenerator an. Die Funktion schaltet bei Interrupt auf Gegenschub. Allerdings muss man bis auf die Startposition zurück.


    Gruss DiDi

    Hallo,


    es handelt sich nicht um einen Fehler. Soweit ich mich erinnere, gibt es beim PowerDown die Möglichkeit mit einer Routine SYNC() noch zu reagieren und Ausgänge zu bearbeiten oder z.B. Peripherie abzuschalten. Die Steuerung teilt lediglich mit das so eine Routine nicht programmiert wurde. Die Meldung ist wohl überflüssig.


    Gruss DiDi

    Hallo,


    VW_User Funktionalität besteht aus zwei Teilen.


    Zum einen gibt es den VW_USR_S. Der hat einen Init Teil und einen Loop Teil und wird im SPS-SUB aufgerufen.


    VW_USR_R wird im R_INT aufgerufen und hat wie typische KRC Pakete einen INIT, Advance, Main und Triggerteil. Der Triggerteil wird im Kontext der PSPS ausgeführt.
    Bzgl. KRL gibt es keine Einschränkungen gegenüber KRC. Man muss allerdings etwas aufpassen, das man den VKRC Funktionalitäten nicht in die Quere kommt.


    Einschränkungen gibt es bei dem Aussehen der Befehle. Bis zur V3.3.x gibt es max. 7 Parameter, die jeweils Name und Einheit haben können, 6 x integer, 1 x bool. Bei der V5.4 ist das erweitert. Parameterlisten gibt es nicht.


    Ausserdem gibt es keine Belegung der Tasten links mit Bildern. Das muss man über Zangennummern und den VW_USR_S realisieren.


    Prinzipiell lassen sich die meisten KRC - Pakete auf VKRC umsetzen. Der Aufwand bei der Programmierung ist ähnlich. Zur VW_User Programmierung gibt es auch Dokumentation insbesondere wie man die Befehle im VW_User.ini konfiguriert.


    Gruss DiDi

    Hello,


    may calling the UserProg with a command code (integer or enum) would be a solution. In the main routine of the UserProg branch according command code to local subroutines that contain the movement instructions. For example take a look to the standard bas.src routine.


    Good luck
    Dieter

    Hello,


    there is no easy way to solve your problem. Import statement works only with constant names.
    Only way I see is setting both a local and global variable in the userprogram. In the beginning of the userprogram you assign your local counter to the global counter, whenever you assign your local counter assign also your global counter.
    e.g.
    DEF UserPrg()
    TheGlobalCount=MyLocalCount
    ....
    SetCount(5)
    ...
    END
    DEF SetCount(nValue:IN)
    INT nValue
    MyLocalCount=nValue
    TheGlobalCount=MyLocalCount
    END


    Good luck
    Dieter

    Hallo,


    die Meldung sicherer Betrieb nicht möglich ist sicher irreführend. Immerhin sind doch hoffentlich auch Roboter ohne Safe Funktion sicher und die haben auch keinen Justagetest oder Bremsentest nach dem Warmstart gemacht.
    Unterschied vom SafeRobot zum Standardroboter ist die sichere Positionserfassung (zweikanalig, ein Fehler sicher). Die ermöglicht, das die Einlegebereiche nicht zusätzlich angesichert werden müssen und Werker dort arbeiten können wenn der Roboter sicher draussen ist.
    Wenn du auf der PSS sicherstellen kannst, das die Einlegebereiche der Werker leer sind, spricht wohl nichts dagegen das Bauteilprogramm nach dem Warmstart mit voller Geschwindigkeit zu Ende zu fahren und dann in den Justagetest und Bremsentest zu gehen.
    Bzgl. der sicheren Ausgänge solltest du von einem sicheren Zustand ausgehen.
    Bei den Automobilisten ist das auch nicht anders realisiert.


    Gruss DiDi

    Hallo,


    der erste Teil lässt sich mit $cycflag lösen. Einmal am Programmanfang die Zuweisung:
    $cycflag[1]=$Workspace[1].state OR .. $Workspace[n].State
    Die Zuweisung wird dann zyklisch ausgeführt.


    Zum Abbrechen gibt es nur den RESUME Befehl. Der bricht eine Bewegung ab und setzt de Satzzeiger in die Ebene mit der Interrupt Deklaration zurück, einen Satz weiter wie den letzen Absprung. Soweit ich mich erinnere kann der RESUME aber keine Interruptbewegungen unterbrechen, so das deine Ausweichstrategien in den normalen Hautlauf müssen. Dein Programm könnte könnte dann in etwa aussehen:


    Interrupt DECL 10 WHEN $CYCFLAG[1] DO ResumeUP()
    Interrupt ON 10


    NormaleBewegung()
    Ausweich()
    Ausweich()
    Ausweich()
    Ausweich()
    Ausweich()
    Ausweich()


    DEF ResumeUP()
    BRAKE
    RESUME
    END


    Unterwegs solltest du dir noch merken, in welcher Strategie du zuletzt warst, bzw. wenn eine Stratetegie zum Ende geführt hat.


    Gruss DiDi

    Hello,


    the error message means, that a parameter that describes how the circular motion is done is not allowed for this motion.
    Unfortunatly the developpers seam to be a sort of guys that think the user should find out on his own, which parameter it is. So they do not display the name of the parameter with the error message.
    Only possible parameter I rember is $CIRC_TYPE. Following settings possible:
    $CIRC_TYPE=#PATH
    $CIRC_TYPE=#BASE
    Usually the second is default. Try both.
    If it does not help, try an orientation of C 179.9 instead 180.0


    Good luck
    DiDi