Posts by Micky

    Hallo,
    zum Neuverbinden eines Single-Interrupts musst Du den folgenden Code am Ende der Trap Routine einfügen:

    Code
    TRAP trTastenPanel
      ...
      CONNECT inTastePanel WITH trTastenPanel;
      ISignalDO \single, doTaste, high, inTastePanel;
    ENDTRAP

    IWatch und ISleep helfen hier nicht

    Hallo,

    ich habe gesehen, dass Du den Interrupt als Single definiert hast.

    Da du den Interrupt am Ende der Routine nicht neu verbindest, wird der Interrupt nur ein einziges Mal ausgeführt.


    Da der Interrupt auch ausgelöst wird, wenn das Programm gestoppt ist, wird die Trap Routine nicht ausgeführt. Du solltest SingleSafe verwenden, so dass die Trap-Routine beim Start des Programm ausgeführt wird und der Interrupt wieder neu verbunden wird.

    Alternativ solltest Du auf das Argument Single verzichten, so dass der Interrupt immer aktiv. Du kannst ihn bei Bedarf mit IWatch und ISleep bei Bedarf aktivieren bzw. deaktivieren.

    Hallo,
    wird das Programm ausgeführt, wenn du den Greifer öffnen bzw. schließen willst oder ist es gestoppt?
    Eventuell solltest Du die manuelle Greifer-Ansteuerung in eine Hintergrundtask verlegen.

    Was passiert, wenn irgendjemand auf die P-Tasten drückt, während der Roboter mit dem Teil mit hoher Geschwindigkeit durch die Gegend fährt?

    Bei der Verwendung der Instruktion "Velset" muss man beachten, dass der neue Wert erst bei der Ausführung der nächsten Bewegungsinstruktion aktiv wird, d.h. die momentane Geschwindigkeit des Roboters wird nicht sofort geändert.

    Die Instruktion "SpeedRefresh" hingegen, ändert sofort die Geschwindigkeit des Roboters.

    Hallo,
    in dem Menüband "Steuerung" gibt es in der Gruppe "Steuerungstool" den Button "Neustart".
    Mit dem bist Du in der Lage Deinen Controller neu zu starten und Deine Poweron-Routine zu testen.

    Hallo,

    der Befehl ExitCycle setzt den Programmzeiger nur dann in die Routine main, wenn das Programm mit der Routine main gestartet wurde. Wird der Programmzeiger in eine andere Routine (z.B. Test1) gesetzt und das Programm gestartet, so setzt die Instruktion ExitCycle den Programmzeiger in die erste Zeile dieser Routine (z.B. Test1).

    Du kannst den Systemeingang "PP to Main" verwenden, um den Programmzeiger in die Routine Main zu versetzen. In diesem Fall kannst Du einen Ausgang über die ScreenMaker App pulsen und der PZ sollte in die Routine main versetzt werden.

    Den Ausgang musst Du aber direkt in der Datei EIO.CFG als Signalname bei den Systemeingängen definieren, da RobotStudio die Auswahl von Ausgängen bei der Auswahl nicht zulässt.

    Alternativ kannst Du auch den Systemeingan "Start Main", bei diesem wird der PZ auf Main gesetzt und das Programm gestartet. Das ganze sollte im Automatikbetrieb der Steuerung funktionieren. Im Handbetrieb funktionieren m.E nur die Systemeingänge Stop und MotorAus.

    Hallo,


    wenn Du Roboteware 5.x verwendest, musst Du mit dem SystemBuilder (RobotStudio) ein komplett neues Robotersystem mit dem neuen Key erstellen und dieses anschließend auf die Steuerung übertragen.


    In der Hilfe von RobotStudio findest Du eine Beschreibung, wie der Systembuilder verwendet werden muss.

    Hallo RobiMan,

    das Problem ist, das UiMsgWrite ein 1-dimensionales und nicht ein 2-dimensionales String-Array erwartet und das man aus Arrays nur Einzelelemente, in Deinem Falls Strings, auslesen kann.


    Der Zugriff auf das Array mit myMsgArray{nLanguage} erzeugt die folgende Fehlermeldung:

    Type error(36): Incorrect number of indices in index list for array myMsgArray with 2 dimension(s).


    Des Weiteren ist die Deklaration Deines 2-dimensionalen Arrays falsch.

    Anstelle von "VAR string myMsgArray{5,2}:=" müsste die Deklaration wie folgt lauten "VAR string myMsgArray{2,5}:=".


    Die beste Möglichkeit hier wäre den Meldungstext Sprachen abhängig in ein 1-dimensionales Array umzukopieren und dieses dann für die Ausgabe zu verwenden.


    Das ganze könnte dann wie folgt aussehen:



    Wenn es dir um die Anzeige einer Meldung mit dem Signalnamen beim Warten auf ein Signal geht, könntest du die die Warteinstruktion z.B. WaitDi mit dem optionalen Parameter "Visualize" erweitern:

    Code
    waitdi di1,high\Visualize;

    dann erscheint z,B. die folgende Meldung in der Sprache die am FlexPendant eingestellt ist:

    Hallo,


    der Parameter "ListNo" wird nur bei den beiden Instruktionen "ReadCfgData" und "WriteCfgData" verwendet, d.h. zum Auslesen und Beschreiben der Systemparameter.

    Tritt der Fehler auch auf, wenn Du das Programm von "main" startest, also beim Ausführen der Instruktion "MT_Execute"?

    Die Bewegungsinstruktionen lesen die Systemparameter nur aus, wenn dies im Programmabluaf noch nicht erfolgt ist, d.h. wenn der PZ in eine Routine gesetzt wird.


    Hast Du vielleicht ein Problem mit den Systemparametern von RWMT, bei den Typen "MT_HOMERUN","MT_PART_SETTINGS"," MT_API_POSITION" oder "MT_GUI_SETTINGS" in der Proc.cfg?


    Prüfe bitte ob die beschriebenen Systemparameter in der PROC.cfg vorhanden sind und ob diese gültige Werte enthalten.

    Vielliecht findest Du auch weiterführende Einträge in Fehlerlog.

    Hallo,
    Du musst den Installation Manger verwenden und dich mit Deinem Robotersystem verbinden. In der Reiter Lizenzen musst Du die neue Lizenz hinzufügen indem Du die rlf-Datei auswählst.

    Du solltest auf jeden Fall vorher ein Backup erstellen, da nach der Änderung des System ein I-Start ausgeführt wird und Du einen RESTORE erforderlich ist.

    Hallo,
    für die Übertragung mit mit dem Protokoll UDP/IP könnte wie folgt umgesetzt werden:


    VAR socketdev sUDP;


    PROC SendUDP(string message)

    SocketSendTo sUDP, "192.168.0.10", 1025\Str:=message;

    ERROR

    IF ERRNO = ERR_SOCK_CLOSED THEN

    SkipWarn;

    !* Try to establish a UDP connection

    SocketClose sUDP;

    SocketCreate sUDP\UDP;

    RETRY;

    ENDIF

    ENDPROC

    Hallo,
    ProfiNet unterstützt nur Signale.
    Das heißt du müsstest die ASCII-Codes der einzelnen Buchstaben über Gruppenausgänge mit jeweils 8 Bit an die SPS versenden.

    Wir verschicken Texte immer per UDP (Ethernet) an die SPS.
    Vielleicht wäre das auch eine Lösung für Deine Anwendung

    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?