Beiträge von rdizzy

    Gefällt mir gut die Lösung.


    Geht es denn nicht auch etwa so?


    Code
    PERS wobjdata woRacks{n} := [.....];
    
    ...
    
    PROC MoveInWobj(num n)
    ...
    MoveJ pP,vmax,z200,toGreifer\Wobj:=woRacks{n};
    ...
    ENDPROC

    Hi nochmal,


    Wie genau soll ich für den Export der Maschinendaten vorgehen und welche sollte ich da vergleichen.

    Habe die $machine.dat in den Verzeichnissen R1/mada und Steu/mada nach einem Export der Steuerungsdateien vor und nach Häckchen vergleichen, jedoch keine Unterschiede gefunden.


    Muss ich nach der Änderung noch "Code erzeugen" klicken?

    Das halt leider nicht so recht funktioniert, wegen Unterschieden in OptionPacks...


    BG Reinhard

    Das hat weniger mit Echtzeitfähigkeit zu tun, sondern mehr mit purer Faulheit der SPS-Programmierer. Ich habe noch keinen SPS-Programmierer getroffen, der sich wirklich mal die 100 Seiten der ABB-Dokumentation zum Thema System-Ein-/Ausgänge durchgelesen hat und entsprechend der dort angeführten Rahmenbedingungen für das Senden eines Signals (wie zB. MotorsOn, Start, PZMain etc...) diese auch überprüft.


    Diese wollen halt einfach nur START schicken, wenn Roboter nicht läuft, dass hierfür aber auch das STOP Signal nicht anliegen darf, die Runchain OK sein muss, Motoren EIN etc... - das wird nicht überprüft.


    Ein Apell an alle SPS Programmierer: Bitte programmiert die Roboteransteuerung über Systemsignale einmal robust und mit zumindest den Checks die Offensichtlich sind.


    Ich habe mir hierfür die 100 PDF Seiten aus dem Manuel extrahiert, damit ich das dann den jeweiligen SPSlern direkt zeigen kann. Außerdem hab ich die wichtigsten Signale + Bedingungen nochmal auf einem Handout zusammengefasst.


    Tut mir Leid, falls mich das Thema etwas triggert, aber ich habe nicht erst einmal erlebt, dass das Log eines ABB-Roboters mit Meldungen "Start nicht zulässig" im Milisekunden-Takt zugespammt wurde, weil die SPS das signal einfach permanent schickt, solange der Roboter nicht läuft....

    Hi Fubini,


    Danke für die schnelle Antwort. Es entspricht ungefähr dem was ich mir so vorgestellt habe unter der Option. Ich bin nur an einer Taktzeitoptimierung von einigen KUKA Robotern dran und bin beim Überprüfen der Konfiguration der Roboter über diese Option gestolpert und dachte mir, das könnte vermutlich gut/schlecht sein für meine Bahnplanung und somit auch Einfluss auf die Taktzeit nehmen...


    Wenn es grundsätzlich besser ist, diese Option zu verwenden, dann würde ich das mal bei einem Roboter machen und beobachten wie sich sein Fahrverhalten verändert u ob/wie sich das auf die Taktzeit der Jobs auswirkt....


    Das Diff werde ich versuchen zu erstellen, kann ich noch nicht versprechen.


    merci

    Das ist ziemlich günstig für eine Lizenz und bietet dir echt hilfreiche Möglichkeiten zB auch die Signal-Analyse. Wobei ABB mit seiner freien Version echt viel bietet und man die meisten Sachen ohne Probleme machen kann. Kann man von anderen Herstellern nicht behaupten. Oft sogar eine komplett unnötige Software für viel Geld (FANUC) ;)


    Viel Erfolg!

    Hey,


    Hatte genau denselben Fehler. Ich hatte bei mir die Verwendung von AccSet im Verdacht. Als ich stattdessen PathAccLim verwendet hatte, war es wieder gut. Zumindest schien es so.


    Nun habe ich erneut dieses Phänomen. Hab auch einige Zohnenbahn-Fehler Warnungen immer wieder im Programm. Diese lassen sich aber kaum "beheben", da oft zu Beginn einer Fahrt-Routine eine Vorposition angefahren wird, die vielleicht schon angefahren wurde, bzw. der Roboter gerade am Weg dahin ist.


    Vielleicht ist \CONC eine Option für mich.

    TPWrites werde ich auch mal eleminieren.

    Hätte ein oder mehrere WaitDI vor jedem Zyklus (Job-handshake).


    Falls ich weiter Hilfe brauche, vielleicht könnt ihr mich da noch unterstützen? Vor allem mit diesem Trace... Kenn mich zwar bissl aus mit dem SignalAnalyzer, aber wie das mit Fehlermeldungen und Stoppunkten genau funktioniert könnt ich vermutlich Hilfe gebrauchen.


    BG Reinhard

    Hey,


    Hab das selbst noch nicht so ausprobiert, aber abgesehen von der angesprochenen Vertauschung der Indizes, könntest du ja vielleicht eine Struktur anlegen und diese in ein Array packen.


    Also sowas wie:


    RECORD langMsg

    string Msg{5};

    ENDRECORD


    VAR langMsg lMsg{2} := ...


    ....


    lMsg{n}.Msg


    vielleicht geht das.


    Ich selbst hab hier einen bisschen anderen Ansatz mal implementiert. Einfach ein Modul mit allen Meldungen etc... anlgen. Wenn die Sprache umgestellt werden soll, einfach Modul mit den Definitionen in anderer Sprache ersetzen.


    BG Reinhard

    Hi,


    Kann dir aus leidlicher Erfahrung zum ScreenMaker nur sagen: Pass auf, dass du keine Geister suchst. Sprich: Es kann gut sein, dass es einfach nicht so funktioniert wie es soll. Hängt einfach von der RW ab. Evtl auch von irgendeiner ScreenmakerVersion die dazu passen muss oder anderen SDKs etc...


    Zum Thema PP To Main: Bitte einfach den Systemeingang verwenden, wie vom Hersteller ja in weiser Vorrausicht als Option angeboten.


    Vorsicht bei ExitCycle: Dies ist nicht dasselbe wie PP to Main - abgesehen davon, dass - wie bereits geschrieben - der Programmzeiger auf die in diesem Zyklus ausgewählte Routine springt, die mit VAR angelegten globalen Variablen werden nicht neu initialisiert. Nur falls du da sowas drin hast und bei zB. einer Init-Abfrage darauf vertraust...


    BG Reinhard

    Danke, stimmt, bei den System-Ausgängen gibt es was... - hatte gehofft anders prüfen zu können. Aber ich werd das gleich mal über die IOs implementieren.


    edit:

    Im Programm wird diese Abfrage allerdings nicht mehr notwendig, wie ich das jetzt sehe. Denn der User wird ja durch den Path Return Region Error gezwungen den PP zu versetzen, falls dieser Fehler auftritt und er kann den Roboter eh nicht wieder starten, falls er ihn zu weit wegbewegt hat. Somit reicht es für mich, wenn ich nur auf PPMoved... abfrage. Korrigiert mich wenn ich falsch liege.

    Hallo,


    Ich würde gerne im Programm überprüfen ob der Roboter außerhalb des Programms im Handbetrieb bewegt wurde. Dachte es gibt dafür eine Abfrage oder eine Variable die gesetzt ist. Finde nur leider dazu nichts in den Handbüchern - bzw. hab ich es jetzt nicht entdecken können mit meiner Suche und auch kein Thema dafür hier im Forum. Möglicherweise hab ich es übersehen.

    Weiß jemand von euch das zufällig?

    Vielleicht kannst du dir mit fallweise beschriebenen PR weiter helfen.


    Also du schreibst für dir die PR einfach dynamisch zusammen.


    G1 sollte ja immer gleich sein (position und pose vom roboter)


    Dann musst du halt unterscheiden welcher Drehtisch in der Zelle ist und schreibst die Zielwinkel dann in die G2 oder eben G3.
    Für den Drehtisch der draußen steht nimmst du einfach JPOS und schreibst das in G2 bzw. G3.


    Aber ich glaub da kannst dann vermutlich auch gleich 2 Pfade anlegen :D

    Achso OK, dachte mir schon du meinst die Collision Detection. Das hat wenig mit Weltzonen zu tun ;) - aber ja, das Feature ist super! Freu mich schon darauf das das erste mal zu implementieren. Auf das hab ich in der Tat schon seit Anbeginn der Zeit gewartet :D - Das konnte ja nicht so schwer sein das umzusetzen :p - Ist klar, dass es nicht Sicherheitsgerichtet ist - muss es auch nicht sein. Da geht's ja eh primär um Maschinensicherheit.

    Im Prinzip ist schon alles erklärt. Imho brauchst du keinen Experten. Es reicht wenn du einfach einen Türschalter (EUCHNER zb wie erwähnt - jedenfalls einen sicherheitsgericteten 2-kanaligen) an den AS der Robotersteuerung anhängst. Das steht auch gut in der Roboterdoku erklärt und mit Schaltplänen gezeichnet welche Anschlussklemmen für den AS sind (X-irgendwas) weiß das jetzt leider nicht auswendig. Wenn du den Steuerschrank aufmachst auf der Platine auf der Rechten Wandseite sind die Klemmen.

    Hallo,


    Das ist prinzipiell ganz einfach. Du fügst deiner UserPage einen Button hinzu und wählst dort in einem Drop-Down Menu eine Funktion deiner Applikation in der die UserPage definiert ist unter OnClick aus. Dann wird bei Klick diese Funktion aufgerufen. Dort drinnen kannst du dann alles machen was das Programmierer Herz begehrt...


    BG
    Reini