Beiträge von Ralph

    Vielleicht noch ein kleiner Tip,


    die Profibus Karte arbeitet mit 2 Adressen :huh:, damit die Kommunikation zwischen der S7 und dem Roboter funktioniert.


    Profibus Adresse als Teilnehmer der SPS (Schnittstelle zur SPS) und DeviceNet (Canbus) Adresse intern im Roboter.


    Bei der Einrichtung der Profibus Karte kann es vorkommen, dass man den Roboter einmal aus und wieder einschalten muss, damit sich die Karte initialisieren kann. Alternativ kannst du dich auch mit einem Nullmodem Kabel über die RS232 direkt auf die Karte hängen und einen reset durchführen. Ohne gute Kenntnisse über Serielle Protokolle solltest Du dann den Roboter lieber nach dem einstellen einfach noch einmal neu starten.


    Kleiner zusätzlicher Tipp, du kannst die Karte auch über das Handbediengerät anmelden.
    Hierfür gehst du am Handbediengerät auf der linken Seite auf andere Fenster.
    Hier gehst du auf System (ganz oben), schau dann mal ein wenig durch die Menüs, dann findest du auch den Bereich, wo du neue Units anmelden kannst.
    Wenn Du dabei probleme haben solltest, kannst du dich ja noch einmal melden.
    Nach dem Neustart des Roboters sollte dieser ohne Fehler hochfahren. Auch sollte nach dem Neustart die Möglichkeit bestehen Signale über das Handbediengerät einzustellen.


    Hierfür bietet sich jedoch wie von titan72 beschrieben das editieren der eio.cfg an.


    :!:!Achtung, nachdem du die eio.cfg geändert hast, solltest du am Handbediengerät folgendes ausführen.
    Andere Fenster (linke Seite), dann Systemmenü (ganz oben) dann Menüpunkt oben links Datei, zuladen neuer parameter (oder so ähnlich), weil erst nach dem initialisieren der eio.cfg sind die Signale oder auch Units aktiv.



    Mit freundlichem Gruß


    ErikPa

    Hallo,


    der Lösungsansatz


    Zitat

    Hi,


    nimm doch einfach 10 Gruppenein- ausgänge a 1 Byte, auf ganz einfach!!!


    scheint im ersten Moment ja recht nett, was wir jedoch noch nicht wissen, ob er den Wert einfach nur gleich wieder zurück spiegeln muss, oder hier Anpassungen durchgeführt werden müssen wie z.B. ein BitHandling.


    Wenn der Wert nicht bearbeitet oder ausgewertet werden muss, dann ist es sicherlich sinnvoll, den Wert in z.B. 10 Gruppen zusammen zu fassen.


    Bei einer Bearbeitung würde ich mir jedoch überlegen, wie ich die Werte splitte.


    Mit freundlichem Gruß


    ErikPa

    Hallo Högi,


    leider kenne ich mich nicht ausreichend mit irc5 aus, hatte jedoch schon ähnliche Probleme,
    kann es sein, dass du dynamisch Programme lädst und diese nicht aus dem Speicher entfernst?
    Casch Probleme?


    Auch kann es helfen, die Anzahl der Pers Variablen nicht zu hoch zu halten, ich habe schon Roboter gesehen, die mit hunderten von array's als globalen variablen gelaufen sind.
    Hier kann es helfen, die Pers arrays einfach immer neu zuzuweisen und damit zu überschreiben.



    Ich für meinen teil verwende wenn möglich locals, da diese immer nach einem Aufruf aus dem Speicher gelöscht werden.


    Mit besten Wünschen und viel Erfolg :zwink:


    Erikpa

    Hallo Betze,


    schönes Problem, dass du hast, nur leider verstehe ich das nicht so richtig.
    in deinem code steht z.B. folgendes:


    frame1:=DefFrame(p1,p2,Reltool(p1,0, 50,0)\Origin:=1);


    Du hast hier 2 Punkte, und möchtest dein neues Frame über den 3. Punkt (linear tool y) verschoben berechnen ????
    :huh:
    Wie steht Dein Werkzeug, kannst Du dieses dafür überhaupt verwenden?
    :denk:
    Ich nehme an, dass Du am schweißen bist, und verschiedene Kehlnähte automatisiert übereinander legen willst, mit einer definierten Verschiebung zu deiner 1. Naht???
    :huh:
    Beschreibe bitte mit ein paar Worten dein Problem, damit ich mir ein paar Gedanken machen kann. Vielleicht kannst Du ja auch dein Wobj. verschieben, oder aber Deine Punkte neu über Winkelfunktionen berechnen.
    :meld:
    Mit freundlichem Gruß


    ErikPa

    Hallo Maddin,


    solltest Du da nicht weiter kommen, dann erstelle ein komplettes Backup in eine Zip Datei und schicke mir diese zu.
    Für dass zuschicken werde ich Dir einen FTP Zugang auf meinem Server erstellen. Mache bitte dafür deine mail Adresse sichtbar, so dass ich Dir die Zugangsdaten User und PW senden kann.
    Die Zugangsdaten werde ich dann bis am Samstag an dich senden können.
    Ich bin mir zwar nicht sicher, ob ich an diesem Wochenende dazu komme, da ich arbeiten muss, aber ich kann ja mal drüber schauen.


    m.f.G.


    Ralph

    Hallo Maddin,


    wenn ich auf der Suche nach gebildeten Variablen für Routinenaufrufe bin, dann utze ich immer einen guten Editor, und durchsuche alle Systemverzeichnisse nach der Variable, danach bin ich dann auch meistens wesendlich schlauer.
    Ich könnte mir vorstellen, dass in einer loaddynamic dieser Routinenname mit gebildet wird.
    Da ich leider jedoch im wesendlichen mit anderen robotern arbeite kann ich dieses nicht wirklich sicher sagen.
    ABER


    Wenn Ihr den Roboter noch nicht lange habt, warum ruftst du nicht einfach bei ABB an und stellst gezielt deine Fragen?


    m.f.G

    Hallo maddin,


    ich liebe Rapid,
    diese art des Programmierens (late binding) ist eine ganz tolle Sache.


    Zum Zeitpunkt des ladens muß die benötigte Prozedur oder Funktion nicht vorhanden sein"
    Außserdem lassen sich schöne Dinge machen, wie locale Prozeduren in Modulen aufrufen, sie global nicht zu finden sind.
    Beispiel:
    var string cModul := "cMeinModul";
    var string cRoutinenname := "cProzedur1";
    Diese Variablen ewrden irgendwo gebildet (index files ...)



    Der aufruf im Programm kann dann folgendermaßen aussehen


    %cModul +":"+cRoutinenname %;
    Das bedeutet, rufe aus dem Modul cMeinmodul die Prozedur cProzedur1 auf.


    Wichtog bei dieser Schreibweise ist nur, das zwischen den %% Zeichen ein String steht.


    m.f.G.
    Ralph

    Hallo Ganz,


    acu würde ich wie auch schon durch Sven erwähnt für deine Variable, die dur für deine For Next Schleife verwendest eine Per variable verwenden, das diese speichernd ist. Ansonsten hast du ein Problem, wenn deine Kiste halb gefüllt ist und der Roboter neu gestartet oder ... werden muss.


    Hallo Hölgi,
    ich bin mir schon im Klaren, dass ein einsortieren eine teilweise sehr komplizierte Sache ist, ich habe mir dass nur so vorgestellt, wie der Roboter in die Kiste fährt und stopft :uglyhammer_2:. Man hat ja immer fein Reden, wenn man nicht selber an der Anlage steht und der Kunde im Rücken steht und fragt, wann geht es den endlich wieder los :biggrins:, oder das kriegen wir nie im Griff :hilfe:.



    m.f.G.
    Ralph

    Wie Sven eigendlich auch schon durch seine Variablen angedeutet hat geht dieses:



    Also, ich wollte Dir ja kein komplettes Programm schreiben,


    hier jedoch noch eine Frage, warum nutzt du nicht den selben Weg rein in den Karton wie raus?
    Du hast dort jedesmal eine J Positon angegeben, ich würde in einer so engen Kiste wenn möglich immer L fahren.


    Auch ohne Test Case ist dieses wie folgt zu realisieren:


    PROC GesamtAblauf()
    VAR num nZustellz := 20;
    FOR GesAblauf FROM 1 TO 10 DO
    Product_Auf;
    !Ab hier steht dein Code ohne Test Case
    MoveL Offs(pProductAb,0,0,-nZustellz*GesAblauf + nZustellz ), v500, fine, tVakuum\WObj:=wPlatzAb;
    Vakuum_Aus;
    MoveL Offs(pProductAb,0,0,-10??? ), v500, fine, tVakuum\WObj:=wPlatzAb;
    ENDFOR
    ENDPROC


    Ich weis zwar nicht warum du hier in z Zustellen willst, da wie von Sven und Högli bereits erwähnt dein z von oben nach unten durch dein Werkobjekt schauen sollte.
    Aber mit allen anderen Richtungen funktioniert dieses genau so.


    m.f.G.
    Ralph

    Hallo Ganz,


    und hier kommt wieder dein Freund das Werkojekt und hilft dir, wenn du dein Programm fertig und lauffähig hast, jedoch Probleme durch umfallende Tüten hast, dann stelle die Kisten anders hin, vermesse dein Werkobjekt neu und dein Programm läuft immer noch.


    Aber trotzdem, verzeiht es mir, ich habe mir gerade beim lesen des Beitrages von Högli (was jedoch absolut richtig ist) mir so vorgestellt dann stopf ich mal die Käsetüten in den Karton lol.


    Gruß
    Ralph

    Hallo,


    erst einnmal ein paar grundsätzliche Dinge.
    Der Roboter selber arbeitet mit dem Basiskoordinaten System, dieses ist notwendig, damit der Roboter sich von seiner Position aus immer genau im Raum bewegen kann.
    Am Roboter ist in der Regel ein Werkzeug befestigt. Das Tool wird so beschrieben, dass der TCP Tool center point / Arbeitspunkt entsprechend eingemessen wird, dass der Roboter sich bei einer anzufahrenden Position auf den Arbeitspunkt des Werkzeuges bezieht.
    Nun kommt das Werkobjekt ins Spiel.
    Das Werkobjekt beschreibt ein zusätzliches Koordinatensystem im Raum, dass sich in einer bestimmten Position Abstand und Drehung vom Roboter befindet.
    Wenn du also ein Werkobjekt einmisst, dann sollte die Positon, die du als Basis angenommen hast z.B. untere linke Kannte 0,0,0 (x,y,z) entsprechen würde.
    Das Werkobjekt sollte immer genau eingemessen sein und nicht einfach schräg oder sonst wie gestellt werden.


    Wenn Du das Werkobjekt richtig eingemessen hast, dann kannst Du z.B. mit unterschiedlichen Werkzeugen immer wieder die selben Positionen an deinem Werkobjekt anfahren.


    Nun schreibst Du ein Programm, dass das Werkobjekt deiner Kiste nutzt, und deine Tüten entsprechend einsortiert.
    Aber was ist, wenn nicht nur eine Kiste dort steht und nicht durch einen neustart neu initialisiert wird.


    In dieesm Fall ( 4 Kisten stehen neben und hintereinander) kannst Du das Programm einer Kiste verwenden und verschiebst einfach nur das Werkobjekt oder nutzt 4 verschiedene Werkobjekte mit ein und demselben Programm.


    Die Standarddokumentation ist hjierbei wirklich hilfreich.


    m.f.G.


    Ralph

    Hallo @mischwarz,


    ich kenne deine Anwendung zwar nicht, stelle mir jedoch folgendes vor,


    Der Roboter hält das Werkzeug (Fräser...).


    Das Werkzeug bewegt sich an einem Durchmesser entlang evtl mit MoveC... und dem Tool WerkezeugFräser.


    Nun kannst Du dir in eine Variable einen Zähler schreiben, und immer wenn dein Zähler einen Wert erreicht hat dein Toll entsprechend nachstellen.
    Verwende hierfür RelTool (Point Dx Dy Dz [\Rx] [\Ry] [\Rz])


    pers num nVorschub := 0.05;
    pers num nAbs := 0;
    pers num nZaehler;
    pers


    Beispiel:
    if zaehler = 10 then
    nAbs := nAbs + nVorschub;
    else
    nZaehler := nZaehler +1;
    endif


    nun kommt dein normaler ablauf, wie jetzt auch
    vorher MoveC P1,P2,...


    neu:
    MoveC RelTool(P1,0,0,nAbs),RelTool(P2,0,0,nAbs), v..., z..., ...


    und schon sollte es funktionieren.


    m.f.G
    Ralph

    Hallo echo,


    hier sind ja schon einige nützliche Tips drin, hier jedoch noch einpaar kleine Infos und ein Tip.


    1. Der Roboter sollte nie bei einem Notaus seine Umdrehungszähler verlieren, auch bei einem Kaltstart / Schwedischer reset... (lol) sollte diese nicht passieren. Könnte jedoch bei absolut lehren accus schon mal vorkommen.


    2. Was mich viel mehr stört, ist dass der Roboter während des betriebes seine Positionen verschiebt ohne dieses zu merken.


    Bei einem Kaltstart (Wenn du Aus/Einschalten meinst) des Roboters schreibt der Roboter seine kompletten Daten in eine Datei namens image.bin und hält diese im Speicher. Die in der Konfigurationsdatei gespeicherten Werte der Achsen werden nur geladen, wenn du explizit diese auch über andere Fenster -> System -> Datei -> Laden gespeicherte Parameter gehst.


    Hier noch eine Frage:
    Wurde der Notaus vor 2 Monaten betätigt, oder hat der Roboter in seinen Logs nur dieses mitgeteilt?


    Tip:
    Deine Verschiebung (Roboter steht schon wieder ganz schief) deutet tatsächlich auf ein mechanisches Problem hin.
    Teache doch einfach eine Prüfposition in der Kabine / Zelle, die deine Kollegen / Mitarbeiter einfach einmal am Tag anfahren sollen, damit erfährst du immerhin, ob du einen kontinuierlichen drift hast, den der Roboter nicht merkt, dieses ist immer mechanisch.
    Ansonsten würde ich die Accus (melden sich eigendlich von selbst) prüfen,
    SMB Board prüfen.


    m.f.G.
    Ralph

    Markus,


    ja Markus das stimmt,
    wenn dein Werkobjekt die Drehung um z hat, dann fährt der Roboter dem Werkobjekt entsprechend an die neue Position und dass auch genau.


    Das war aber nicht dass, was ich gemeint habe.


    Wenn du in einem Lintracking dein Werkobjekt entlang deiner Fördereachse um 500mm bewegst, dann sind die Koordinaten bezogen auf das Werkobjekt immer noch gleich.


    Beispiel:
    Der Förderer hat die Position 1000, du teachst deinen Punkt an der Spitze sagen wir x,y,z = 0,0,0. Wenn du nun den Förderer um 500mm bewegst, also auf 1500mm und werkobjekt verbunden bist, dann hat der Roboter an der spitze wieder die Position 0,0,0 (wenn der Roboter richtig eingemessen ist.
    Bei meiner Skizze würden in diesem Fall folgende Koordinaten zu lesen sein: 0,13,0


    :zwink:
    Gruß
    Ralph

    Hallo Markus,


    das liegt daran, dass eigendlich ein Roboter ja nie wirklich genau steht, er wird ja schließlich irgend wie so genau wie möglich installiert, auch ist ein Förderer nie wirklich genau in der Kabine.
    Nun muß man dem Roboter ja irgend wie beibringen, dass er im Bezug auf seine Welt in der Kabine richtig steht. Hierfür gibt es wie immer verschiedene Möglichkeiten.


    Das Problem tritt eh nur dann auf, wenn sich das Werkobjekt in der Kabine bewegt und die gleichen Positionen zu unterschiedlichen Zeiten angefahren werden müssen.


    1.Ausrichten des Roboters, einmessen des Förderers und eintragen der entsprechendeen Frames in die Konfigurationsdateien.


    oder aber, man geht davon aus, dass sich die relative Position des Roboters zum Förderer nicht ändert und trägt dann beides in das Basissystem des Roboters ein.


    Dieses halte ich persönlich für sehr wichtig, da nur so wirklich gewährleistet ist, dass Programme wirklich an alle Roboter übertragbar sind. Dann ist das einzige Problem nur noch die Erreichbarkeit.


    m.f.g
    Ralph

    @ Markus,
    ach ich komme mit solchen Sachen wie Foren nicht zurecht,
    hier die weiterführung.
    Wie Du an dem Bild oben sehen kannst, ist das Werkobjekt parallel zum Roboter, wird jedoch schräg durch die Zelle geschoben.
    :zwink:


    m.f.G. Ralph