Beiträge von Micky

    Hallo RobiMan,

    in RobotStudio kann man in dem Dialog "Add Controller" die IP-Adresse des Roboters hinzufügen, der sich in einem anderen SubNetz befindet.

    pasted-from-clipboard.png


    Nach dem Drücken des "Add" Buttons wird die neue IP-Adresse gespeichert und steht somit auch beim nächsten Start von RobotStudio zur Verfügung

    Hallo,
    zur Berechnung der Quaternion kannst Du den Befehl "OrientZYX" verwenden


    Code
    TASK PERS wobjdata wNew:=[FALSE, TRUE, "",[[0, 0, 0],[0.92388, 0, 0, 0.382683]],[[0,0,0],[1,0,0,0]]];
    
    
    wNew.uframe.rot:=OrientZYX(45,0,0);

    Hallo Hofd,

    die RAPID Befehle stoppen bei einem MultiMove System nur den aktuellen Robotertask .
    Wenn Du alle Roboter stoppen willst, musst Du den Befehl "Stop\AllMoveTasks" verwenden.

    Die Systemeingänge "Start" und "Stop" hingegen gelten für alle Roboter.

    Hallo,
    tritt der Fehler noch auf, wenn Du an der Position mit z50 an der Du den Greifer 1 verwendest die Zone "Fine" verwendest?


    Was passiert, wenn Du an der Stelle an der der Roboter hängen bleibst, die Zone "Fine" verwendest?

    Hallo,

    kann Ihr nicht die Bewegungsinstruktionen der einzelnen Layer in separate Unterroutinen verschieben (z.B. Layer1, Layer2, etc.), so dass man in der Routine "main" nur die gewünschte Layer Routine aufruft und dann den Programmzeiger auf die gewünschte Zeile setzt.

    In diesem Fall muss man weniger als 24025 Programmzeilen durchscrollen, um die gwünschte Position zu finden.

    Alternative könnte man auch die Layer Routinen in separate Module verschieben, so dass man nicht so große Module erhält.

    Hallo,

    laut Handbuch werden analoge Signale von den Cross-Connections nicht unterstützt.


    Zitat

    Eine Querverbindung (Cross Connection) ist eine logische Verbindung zwischen

    digitalen (DO, DI) oder Gruppen- (GO, GI)-E/A-Signalen, die einem oder mehreren

    Signal/en gestatten, den Status anderer E/A-Signale automatisch zu beeinflussen

    Hallo Michael,
    die Fehlernummern und die Überschriften der Meldungen erhältst Du mit der Instruktion IError und kannst sie z.B. via TCP/IP oder UDP an die SPS übertragen.

    Eventuell könntest Du auch OPC-UA verwenden, aber dafür benötigst Du eine weitere Roboter Option (siehe https://new.abb.com/products/r…ngen/irc5/optionen/opc-ua)


    Mittlerweile ist die RobotWare 6.12 verfügbar, so dass die Fehlerliste der RW6.04 ziemlich veraltet ist.
    Aus diesem Grund habe ich Dir die Fehlerliste der aktuellen Robotware angehängt.
    Fehlermeldungen Deutsch RW6.12.xlsx.zip

    Hallo Bodo,

    wenn Ihr eine FlexPendant APP oder eine PC-SDK APP verwendet, könnt Ihr doch die erforderlichen Module direkt von der APP laden lassen.


    In diesem Fall muss das Programm nicht unbedingt ausgeführt werden.


    Unter dem folgenden LInk, findest Du eine Beschreibung wie das Laden von Modulen mit der FlexPendant-SDK funktioniert.


    Laden und speichern von Modulen

    Hallo,


    die Lade-Instruktionen können nicht von anderen Tasks gestartet werden, da die Instruktion "Load" keinen Parameter für die Angabe eines Task-Namens hat.

    Es gibt in den Systemparametern unter Systemeingängen die Aktion "Interrupt" die ausgeführt wird,wenn das Programm steht und die Motoren eingeschaltet sind.


    Wenn dieser Systemeingang mit einem Ausgang verbunden wird (geht nur in einem Editor) könnte die Hintergrundtask den Namen des zu ladenden Moduls in eine Persistent schreiben und den Ausgang für den Systeninterrupt pulsen.

    Über die verbundene Routine könnte dann das Modul geladen werden.

    Hallo,


    bezüglich der Delimiter steht folgenden im Handbuch:


    Zitat

    Wenn das Argument \Delim verwendet wird, wird jedes Zeichen im angegebenen Zeichenfolge-Argument sowie standardmäßig auch Zeilenvorschubzeichen als signifikanter Teil der Zeile betrachtet.

    Das heißt, bei Angabe von \Delim:="],[" erfolgt die Trennung beim Auftreten des Zeichens '[', ',' , ']' bzw. beim Zeilenvorschubzeichen (\0A), da jedes der Zeichen einzeln betrachtet wird und nicht der komplette String gesucht wird.


    Zitat

    Um nicht alphanumerische Zeichen anzugeben, verwenden Sie \xx , wobei xx die hexadezimale Darstellung des ASCII-Codes für das Zeichen ist (Beispiel: TAB wird durch \09 angegeben).

    Die Hex-Codes müssen laut Handbuch nur dann verwendet werden, wenn es sich um nicht darstellbare Zeichen handelt (Steuerzeichen: HEX 00 - HEX 1F). Alle anderen Zeichen können ganz normal angegeben werden (z.B ";")

    Hallo,
    in den UI-Dialogen (z.B. UI-MessageBox, etc.) kann man Bilder mit der Größe 180x300 Pixel auf der rechten Seite anzeigen.
    Die Bilder müssen im Home-Verzeichnis oder im TPS-Verzeichnis eines AddIns abgelegt werden.

    Eventuell benötigt man aber die Option FlexPendant Interface, so dass diese auf das FlexPendant kopiert werden.

    Hallo,
    man könnte auch in der Schleife prüfen ob ein Signal nicht dem erwarteten Signalzustand entspricht.
    Sollte dies der Fall sein, so kann man die Funktion mit RETURN FALSE verlassen.
    Wird die Schleife bis zum Ende ausgeführt, haben alle Signale den erwarteten Zustand und die Funktion wird mit TRUE verlassen.


    Die Funktion sollte in der Abarbeitung schneller sein, da nicht alle Signale geprüft werden, wenn bereits die ersten Signale nicht den erwarteten Zustand aufweisen.


    Hallo,

    im Handbuch "Rapid Kernel" findest Du im Kaptel "Error recovery with long jumps" die entsprechende Beschreibung.


    Der Long-Jump ist hier erforderlich, da in der TRAP-Routine eine Fehlerbehandlung aufgerufen wird, die normalerweise in einer Fehlermeldung aber nicht in der Routine "main" endet.


    ERROR (ERR_RESTART) in der Routine "main" gibt das Sprungziel im "CallStack" an, zu der der Programmzeiger springt, wenn ein Fehler mit RAISE ERR_RESTART ausgelöst wird.


    Siehe auch folgende Posts:

    Re: Rücksprung nach Interrupt

    Re: interrupt verlassen

    Hallo,

    wenn Du die Task nur neustarten willst, könntest Du in dieser Task einen Interrupt mit dem Eingang zum neustarten verbinden und in der TRAP Routine entweder die Instruktion ExitCycle ausführen oder in die Fehlerbehandlung der Routine "main" springen um dann mit einem RETURN oder TRYNEXT fortzusetzen.


    Hallo,
    der Production Screen ist wie eine "Launcher"-App auf dem Handy und kann Widgets auf drei Seiten darstellen und über Buttons Screen-Maker oder C#-FPSDK-Apps starten.

    Die Apps werden beim Drücken auf die Produktion-Screen (HOME) -Taste nicht geschlossen, sondern nur unsichtbar gemacht. Beim nächsten Öffnen der App muss diese nicht neu geladen werden und wird dadurch schneller angezeigt.

    Zur Darstellung einer geöffneten App erhält deren Button einem Rahmen.
    Zum Schließen der App, muss der Button eine längere Zeit gedrückt werden, bis der Schließen Button erscheint.


    Die Widgets können mit Screen-Maker oder mit C# erstellt werden und stellen Information oder Aktionen auf dem Produktion Screen dar, also Dinge die immer angezeigt werden sollen. Der Widget-Screen ist in ein Raster von 60 Pixel eingeteilt, so dass sich die Größe eines Widgets aus dem Vielfachen der Rastergröße ergibt (60px, 120px,180px, etc.). Je nach Größe der Widgets können auf einer Seite mehrere Widgets dargestellt werden.


    Die Option "FlexPendant Interface" ist auf jeden Fall erforderlich.
    Der "Produktion Manager" liefert die Seiten seiner App bereits vorkonfiguriert für den "Production Screen" mit aus.
    Der "Production Screen" liefert keine eigenen Widgets oder Apps mit aus, so dass man eine leere Seite angezeigt bekommt.

    Wenn man nur eine einzige App an einem Roboter benötigt, ist der Production Screen nicht erforderlich.
    Erst wenn man mehre Apps und Funktionalitäten benötigt, oder am Roboter je nach Ausstattung wechselnde Apps eingesetzt werden, macht die Verwendung des "Production Screen" wirklich Sinn.

    Hallo,

    den Datentyp "anytype" steht für die Programmierung nicht zur Verfügung.
    Die RAPID-Befehle können diesen intern nutzen genauso wie einen alternativen Parameter (z.B. num bzw. dnum).


    Uns als User stehen diese Möglichkeiten aber leider nicht zur Verfügung.
    Du könntest eventuell mit alternativen optionalen Parameter arbeiten, die Du aber dann explizit angeben musst:


    Beispiel:
    PROC MyRoutine(\num nValue|dnum dnValue|string stValue)


    MyRoutine\dnValue:=33;



    Wichtig bei Verwendung der alternativen optionalen Parameter ist, dass man das Zeichen "|" ab dem zweiten Parameter anstelle des Zeichens "\" verwendet, so dass man nur einen der zur Auswahl stehenden Parameter verwenden kann und nicht alle optionalen Parameter.

    Übrigens, die gleiche Frage wurde bereits in dem ABB User Forum gestellt:
    https://forums.robotstudio.com…data-type-function#latest