Beiträge von micha_hensel

    Moin,

    da stimmt was nicht mit deiner HomeRun-Routine, anscheinend soll der Roboter eine nicht erreichbare Location anfahren. Oder soll er eine Linaer-Bewegung durchführen, die mechanisch nicht möglich ist, z.B. durch sich selbst fahren !

    Das HomeRun müsste mal gecheckt werden.

    Gruß

    Michael

    Hallo Alle Zusammen,



    ich muss ein Bauteil mit kleinen und größeren Radien an den Kanten mit einem runden Filz reinigen, 1 Roboter hält das Bauteil der andere hat den Filz in Verlängerung der Achse 6 in einem Greifer geklemmt.


    Der Kunde möchte den Verschleiß des Filzes ausgleichen und je nach Standzeit näher an der Kontur entlang fahren. Die Location habe ich alle an der Flächennormalen ausgerichtet, d.h. Y+ geht vom Bauteil weg u. X in Bewegungsrichtung des Filzes.


    Mein Problem ist nun das der Roboter, wegen den großen Orientierungsänderung, bei kleinen Radien sehr langsam wird. Die Orientierung der Location kann ich aber nicht anpassen weil dann die Verschleißkompensation nicht mehr vernünftig funktioniert. Es sind alles SLIN und SCIRC Befehle.


    Ich müsste quasi, die Achse 6 unabhängig machen. damit sie nicht ständig der geforderten Orientierung folgt.


    Zur Zeit fahre ich mit 8 TCP's die um 45 Grad um den Filz angeordnet sind, zur Verstellung verschiebe ich sie Richtung Filzmitte. Aber diese Lösung gefällt mir aber nicht, da es auch Radien mit anderen Winkeln gibt als 45 Grad.


    Gibt es noch eine andere Möglichkeit dieses Problem zu lösen ?


    VG


    Michael

    Hallo alle Zusammen,

    war heute morgen geschockt wo ich die neuen Preise 2023 für die Basis-Lizenz RobotStudio gesehen habe.

    Durch die neue Cloud-Funktionalität wurden die Preise 300% erhöht und liegen jetzt bei 2940 Mäusen.

    Das ist mal eine Erhöhung (Mogelpackung - Sieger RAMA oder ABB)

    Schöne Woche noch


    Gruß

    Michael

    Habe herausgefunden das die Kommunikation über die Ethernet_KRL-Schnittstelle laufen muss.

    Hier ist die KeyenceVision.xml anzupassen.

    Zur Zeit steht folgendes drin:


    <ETHERNETKRL>

    <CONFIGURATION>

    <EXTERNAL>

    <IP>192.168.1.31</IP>

    <PORT>8500</PORT>

    </EXTERNAL>

    </CONFIGURATION>

    <RECEIVE>

    <RAW>

    <ELEMENT Tag="Buffer" Type="STREAM" Set_Flag="1" Size="128" EOS="13"/>

    </RAW>

    </RECEIVE>

    <SEND/>

    </ETHERNETKRL>


    Wie kann ich jetzt die Korrekturwert (x,y,a) auslesen, welche Zeilen müssen hinzugefügt werden ?

    Hallo Alle Zusammen,

    habe hier eine Keyence 2D Kamera mit einer Profinet-Schnittstelle und 2 Unterroutinen zur Ansteuerung.

    - Keyence_2D.src

    - keyence_setup.src


    Hat jemand diese Schnittstelle schon mal in Betrieb genommen und kann mir sagen, wie ich die Korrekturwert (x,y,a) auslesen kann ?

    Das Referenzbauteil wurde angelernt !


    Bin gespannt auf die Antworten.


    Grüße aus dem Vogelsberg

    Michael

    Danke für die Infos,

    konnte den SPS-Programmierer überzeugen das es nicht funktioniert mit einem 2 seperaten Profinet, nur mit Erweiterung und Aufpreis, dann war die Diskussion beendet.

    Wollen jetzt einen speziellen Switch einsetzen, damit der Traffic reduziert wird.


    Gruß

    Michael

    Hallo alle Zusammen,

    haben Schwierigkeit das Profinet zum laufen zu bekommen, wir haben ein KEYENCE Vision System mit einer festen IP192.168.1.20, unser Roboter (Virtuel5) hat die IP192.168.1.30 und eine SPS mit IP192.168.1.40.

    Wir hatte jetzt nur das Vision-System direkt an den Virtual5 angestöbselt und einen Virtual6 für WorkVisual (dynamische IP) erstellt, das hat soweit funktioniert.

    Unser SPS-Programmierer will jetzt aber die Netzwerkbelastung durch das Visionsystem nicht auf dem seinem Profinet haben und seperates Profinet nur für die SPS u. restlichen Teilnehmer aufziehen.

    Na gut, wir haben dann einen zusätzlichen Virtual7 angelegt mit fester IP192.168.2.30, das funktioniert aber nicht, er bekommt keine Verbindung.

    Ich nehme an, das es nicht möglich ist ein 2 Profinet anzulegen, das Profinet des Roboters ist immer fest auf dem Virtual5 und das dies nur mit einem Switch funktionieren wird.

    Gibt es noch andere Alternativen / Lösungen ?


    VG Michael

    Hallo Alle Zusammen,

    bin gerade am Konfigurieren eines Murr 55529 am Kuka Profinet, Modul hat 8 Eingänge und 8 Ausgänge.

    Was wird in den Modulen/Segmenten unter Nutzdatenmodulen konfiguriert ? Habe im Segment 2 Ausgänge Buchse 0-3 und Segment 3 Eingänge Buchse 4-7.

    Die Eingänge funktionieren die Ausgänge aber nicht ? Zur Auswahl stehen noch Ausgänge Pin 2 oder Ausgänge Pin4, wenn es diese sind, wieviele Segmente belegen sie ?

    Schonmal Danke für die Unterstützung!


    Grüße aus dem Vogelsberg.

    Michael

    Danke für die Info.

    Habe in einer leeren SaveMove-Konfiguration alle Signale mit dem E/A Engineering Tool mühsam angelegt / einzeln kopiert und dann eine leere SaveMove-Konfiguration gespeichert und siehe da, es funktioniert :)

    Habe nochmal kurz bei anderen Virtuellen Robotern probiert und es geht.

    Gruß aus dem Vogelsberg

    Michael

    Moin, stehe jetzt auch vor dem Problem die sicheren EA's anzulegen. Im Visual SaveMove (RobotSudio Version 2921.1.2) geht es nicht über den Konfigurator sichere EA's, dort kann ich keine Signale einfügen ??

    Im E/A Engineering Tool kann ich die Signale nur einzeln mühsam im SDO_8_Byte u. SDI_8_Byte einfügen. Hier gibt es keine Funktion um eine Excel-Tabelle einzufügen. Wenn ich am Schluss die Konfiguartion schreibe, erscheinen dann die sicheren Signale im Visual SaveMove, können aber dort nicht geändert werden.

    Habe auch versucht die Signale über die sc_eio.cfg zu laden, hat aber auch nicht funktioniert, werden als sichere Signale nicht übernommen ?

    Gibt es eine andere Möglichkeit die Signale eleganter einzufügen ?

    Gruß

    Michael

    Moin, alles mit Case aufbauen ist aber sehr aufwendig.


    Ich würde mir einen eigenen Bewegungsbefehl programmieren.


    z.B. SMoveLGO


    der Befehl würden dann z.B. so aussehen:


    SMoveLGO p510,vSchnell,z10,tGreifer\WObj:=wSchublade,510;


    Ich würde so vergehen, das ich die gesuchte Positionnummer in den neuen Bewegungsbefehlen suche.

    d.h. bPosSearchRun=TRUE setzen und nPos_Search auf die gesuchte Positionsnummer vorbesetzen.

    Danach in der Bewegungsroutine mit den vielen SMoveJG die position suchen.

    Der Programmzeiger wird die Befehle durchgehen und die Position vergleichen, ist die nicht identisch wird einfach mit RETURN herausgesprungen, wenn er identisch ist wird an der Position eingerastet

    und die Variable bPosSearchRun auf FALSE gesetzt. Jetzt wird das Programm an der Stelle fortgesetzt.


    Beispiel:

    bPosSearchRun:=TRUE;

    nPos_Search:=530;


    SMoveLGO p510,vSchnell,z10,tGreifer\WObj:=wSchublade,510;

    SMoveLGO p520,vSchnell,z10,tGreifer\WObj:=wSchublade,520;

    SMoveLGO p530,vSchnell,z10,tGreifer\WObj:=wSchublade,530;

    SMoveLGO p540,vSchnell,z10,tGreifer\WObj:=wSchublade,540;

    SMoveLGO p550,vSchnell,z10,tGreifer\WObj:=wSchublade,550;


    Bei der Positions Nr. 530 würde das Programm fortgesetzt.


    Quelltext:

    MODULE ABB_LIB(SYSMODULE,NOVIEW)


    PROC SMoveLGO(

    robtarget ToPoint,

    speeddata speed,

    zonedata zone,

    INOUT tooldata tool

    \INOUT wobjdata WObJ,num ActPos)


    IF bPosSearchRun=TRUE AND nPos_Search=ActPos

    !Wenn IST-Positionen gleich Soll-Position dann Pos. anfahren

    MoveLGO ToPoint,speed,zone,tool\WObj?WObJ,goPosNr\Value:=ActPos

    ENDIF

    bPosSearchRun:=FALSE;

    ELSE

    !Wenn IST-Positionen ungleich Soll-Position zurück und dann zur nächsten Pos.

    RETURN ;

    ENDIF

    !

    ELSE

    ! Normale Bewegung ohne bPosSearchRun

    MoveLGO ToPoint,speed,zone,tool\WObj?WObJ,goPosNr\Value:=ActPos;

    !

    ENDIF

    BACKWARD

    ! Backward

    MoveLGO ToPoint,speed,zone,tool\WObj?WObJ,goPosNr\Value:=ActPos;

    ENDPROC


    ENDMODULE


    Gruß

    Michael

    Hallo Alles Zusammen,


    Z war ein guter Tipp den ITimer / Single zu nehmen, habe damit eine sehr hohe Auflösung erhalten.

    Bin auf 10 ms runter und funktioniert super.

    Warum der ITimer nur mit 0,1 sek. und der ITimer/Single mit 0,01 sek Abtastrate laufen ist mir zwar nicht verständlich, aber Hauptsache es funktioniert.


    Gruß Michael

    Hallo,

    vielen Dank für die hilfreichen Antworten.


    Lese jetzt das Motormoment mit einem TimerInterrupt (0,1s) mit GetMotorTorque aus.

    Das Timerintervall lässt sich nicht weiter unter 0,1 s senken, das Robotersystem lässt keine Wert unter 0,1 zu.


    Hat jemand eine Idee wie der Intervall für GetMotorTorque weiter angesenkt werden kann ?

    Vielleicht mit Multitasking, wie ist hier die Zykluszeit ?


    Hier nochmal eine Beschreibung des Gesamtablaufs:

    Ich suche mit der SearchL-Funktion mit einem motorischen Greifer (7Achse) das zu greifende Teil. Während der Greifer schließt überwache ich über den

    TimerInterrupt zyklisch die Kraft, wird ein bestimmter Level überschritten, beende ich den SearchL. Da ich nur alle 100ms die Kraft auslese, wird die Abschaltung ungenauer je schneller ich das Teil suche, ich würde gerne aber noch die Genauigkeit erhöhen.


    Gruß

    Michael

    Hallo Alle Zusammen,


    kann mir jemand sagen, ob die Kraft (Strom) einer 7. Achse gemessen werden kann um die Achse gezielt anzuhalten, bei einer IRC5 Version 6.10.01.

    Funktioniert MotionSup bei externen Achsen ? und kann bei Kollision mit MotionSup ein Errorhandler benutzt werden um ein Abschalten der Motoren zu verhindern.


    Schonmal vielen Dank für die Antworten.


    Bleibt Gesund

    Michael

    Hi, ist schon etwas aufwendiger bei der VKRC.

    Du müsstest bei jeder Position in der Punkt-SPS einen Binär-Ausgang (Art Positionsregister) mit einer Punktnummer beschreiben, damit du weist wo der Roboter steht.

    Vorher würde ich die Anlage mit Postionsnummern belegen, z.B.

    - 10 Teil Entnahme

    - 20 Teil entgraten

    - 30 Zeitstempel prägen

    - 40 Fertig Teil ablegen

    - 99 Homepos

    Wenn du jetzt eine Bewegung hast von 10 zu 20 ( Teil entnehmen zu Teil entgraten) zähltst du die Positionen durch 102001 dann nächste Position 102002 usw. am Schluss stehst du dann bei 20.

    So jetzt weißt du eigentlich immer was der Roboter gerade vor hatte.

    Wird das Programm jetzt unterbrochen, kannst du über eine Rückzugsstrategie den Roboter nach Home fahren.

    Hierfür eignet sich dann eine Case - Anweisung.

    Du musst natürlich beachten das du jetzt ein Teil im Greifer hast !!

    Gruß

    Michael