Beiträge von Micky

    Hallo Sebastian,


    Du hast recht, Konstanten können nicht beschrieben werden.


    Aber mit der Instruktion "Test_Move2Pos" wird nicht der Wert der geteachten robtarget geändert, sondern es wird nur deren Inhalt (Positionswert) zum Anfahren der Position verwendet. Aus diesem Grund ist es überhaupt erst möglich die Funktionen "Offs" und "RelTool" direkt in dem Aufruf von "MoveL" zu verwenden.


    Mfg
    Micky

    Hallo,


    als Persistent müssen nur Tool und Wobj übergeben.


    Robtargets benötigen keinen Festlegung des Datentyps, da ansonsten nur Robtargets, die als PERSISTENT deklariert sind, verwendet werden können, d.h. Du kannst weder das Ergebnis einer Funktion noch eine Konstante übergeben.


    WObj ist normalerweise ein optionaler Parameter und muss in Deinem Fall immer übergeben werden.
    Optionale Parameter könnnen durch die Verwendung eines "?" anstelle von ":=" weitergeben werden, falls der Parameter verwendet wird.


    Siehe nachfolgendes Beispiel:


    Code
    PROC Test_Move2Pos(robtarget pTarget,PERS tooldata tTool\PERS wobjdata wWobj,...)
     MoveJ Offs(pTarget,offset{1},offset{2},offset{3}),TravelSpeed,z5,tTool,\WObj?wWobj;


    Da deine Zone kein optionaler Parameter ist, macht die Abfrage "IF Present(Zone)" keinen Sinn, da dieser Parameter immer vorhanden ist.


    Mfg
    Micky

    Hi,
    Du solltest einen digitalen Ausgang in den Systemparameter anlegen, der vorzugsweise über eine E/A-Einheit elektrisch mit Deinem Ventil verbunden ist.


    Mfg
    Micky

    Hi,


    hier ist ein Beispiel wir man die Palettierposition bezogen auf ein Werkobjekt, das zuvor für die Palette eingerichtet wurde berechnen kann.


    Beim Teachen und beim Palettenwechsel muss der Zähler "nPalette_PartCounter" auf 0 gesetzt werden bevor die Berechnungsroutine ausgeführt wird.



    Mfg
    Micky

    Hallo,
    in der neuen Version von RWMT 6.08 befinden sich 14 neue Stationssymbole, unter anderem auch 3 Paletten icons.
    Alle 14 Symbole sind in den Release Notes abgebildet.


    Mfg
    Micky

    Hallo,


    wie wäre es mit folgendendem Lösungsansatz:


    - Alle Parameter für einen Datensatz werden in einem Record gespeichert
    - Der Datensatz (Record) wird mit WriteAnyBin in eine Datei im Homeverzeichnis geschrieben (jeder Datensatz ist als separate Datei gespeichert)
    - Der Dateiname muss eindeutig dem Datensatz zuzuordnen sein (z.B. durch Nutzung einer Programmnummer)
    - Die erforderlichen Daten werden mit ReadAnyBin in die Recordvariable ausgelesen.


    Mfg
    Micky

    Hallo,
    wenn Du die Daten hinterher auch wieder Lesen können willst, solltest Du eine Textdatei und keine Binärdatei schreiben. ;)


    Zum Schreiben solltest Du an die Datei nur Strings übergeben, die Du bei der Übergabe an die Routine mit der Funktion "ValToStr" umwandeln kannst.


    Das Problem hierbei ist lediglich die max. Stringlänge von 80 Zeichen, da ein Robtarget oder andere records mehr als 80 Zeichen lang sind.


    D.h. in das Logfile sollten nur ausgewählte wichtige Daten geschrieben werden, da zum Einen das Schreiben die Abarbeitungszeit beinflusst und zum Anderen die Speicherkarte irgendwann voll ist.


    Deswegen solltest Du auch unbedingt den verbleibenden Speicher vor dem Schreiben prüfen.


    Mfg
    Micky

    Hallo,
    leider ist es ist nicht möglich die einzelnenen Elemente eines Record über einen String zusammen zu bauen.


    Du solltest für die Berechnung eine Hilfsfunktion verwenden, die wie folgt aussehen könnte:



    Mfg
    Micky

    Hallo,


    anbei das funktionierende Beispiel mit AliasIO: ;)



    Mfg
    Micky

    Hallo,


    GetSysData wird verwendet um das aktuelle Tool, Werkobjekt oder die Lastdaten auszulesen.


    Zum Verbinden von Signalen kann die Instruktion 'AliasIO' oder alternativ auch die Instruktion 'GetDataVal' verwendet werden.


    mfg
    Micky

    Hi,
    ich glaube die folgende Funktion "RecalcRobT" hilft dir weiter:



    Gruß
    Micky

    Hallo,
    meines Erachtes gibt es seit RobotWare 6.04 eine Fehlerbehandlung für die Kollision.
    Die Fehlernummer lautet: ERR_COLL_STOP


    Die Verwendung der Fehlerbehandlung muss in den Systemparametern (SYS) über "Controller/General Rapid/CollisionErrhandling" explizit eingeschaltet werden.


    Wichtig ist das eine Fehlerbehandlung in die erforderliche Routine eingebaut wird.


    Alternativ gibt es von ABB das Produkt "HomeposRunning", das für Deinen Anwendungsfall evtl. verwendet werden kann. Das Thema wurde hier im Forum bereits schon mehrfach behandelt. Vielleicht suchst Du mal danach.


    Gruß
    Micky

    Hallo,
    wenn eine Task semistatisch bzw. statisch angemeldet ist, läuft sie immer.
    eine normale Task wird mit dem Roboterprogramm gestartet bzw. gestoppt.
    Du könntest evtl. auch das Stop-bzw. QStop-Event verwenden, um die Daten rauszuschreiben
    Mfg
    Micky

    Hallo,
    wenn Du die Datenänderung der Pesistenten per SingleSafe-Interrupt überwachst kannst Du sogar eine Änderung bei gestoppten Programm erkennen.
    Der Ablauf bei Deiner Datenzuweisung sieht wie folgt aus:
    1. Interrupts ablöschen
    2. Daten zuweisen
    3. Überwachungsflag "bDataChanged" auf False setzen
    4. Interrupts aktivieren.
    In deinem Programm musst Du dann nur noch prüfen, ob das Überwachungsflag "bDataChanged" immer noch den Wert FALSE hat. Sollte es TRUE sein, haben sich die Daten geändert.
    Hier ein Beispiel:

    Hallo,
    du könnntest Dir in der Routine für die Zuweisung der Daten ein boolesches Flag setzen, dass später für die eine Änderung abgefragt wird.
    Oder Du erzeugst für eine oder alle Persistenten einen Interrupt, der bei Änderung der Daten aufgerufen wird,
    Z.B.


    Code
    CONNECT intno1 WITH T_DatenGeandert;[/font][/size]
    IPERS nLagerdurchmesserm,  intno1;[/font][/size]

    Hallo,
    bei den Systemeingängen kannst Du auch Ausgänge verwenden, leider funktioniert die Zuordnung nicht in RobotStudio.
    Am besten Du erzeugst den Systemeingang in RobotStudio und verwendest einen beliebigen Eingang. Dann speicherst Du die EIO.CFG und öffnest sie mit einem TextEditor. Anschließend ersetzt du den Eingang mit dem Ausgang den Du verwenden möchtest. Nach dem Laden der EIO.CFG kann Du jetzt den Ausgang zum Schalten des Systeneingangs verwenden.
    Gruß
    Micky

    Hallo,
    hast Du eventuell in Deinem Programm die Achskonfiguration mit "ConfL\Off" bzw. "ConfJ\Off" abgeschaltet?
    Wenn ja, könnte hier der Fehler liegen!
    Der Roboter versucht dann die Position auf dem kürzesten Weg anzufahren und achtet dabei nicht auf die Konfiguration der Achsen, so dass die 6. Achse die Position auch um 180 Grad gedreht erreichen kann.
    Du solltest die Achskonfiguration nur dann ausschalten, wenn es unbedingt erforderlich ist und sie bei nächster Gelegeheit sofort wieder einschalten. Denn ansonsten kann der Fehler immer wieder auftreten.
    Mfg
    Micky