Beiträge von Micky

    Hallo Stingray,

    ein Addin ist nicht erforderlich.

    • Du legst das Verzeichnis "Language" direkt im Home-Verzeichnis an.
    • In diesem Verzeichnis erzeugst Du für jede Sprache ein Unterverzeichnis an (z.B. "de", "en", "fr", etc.).
    • In jedes dieser Verzeichnisse kopierst Du die beiden XML-Dateien "My_elogtext.xml" und "My_elogTitles.xml" in denen sich Deine Meldungstexte befinden.
    • Da Englisch die Fallback-Sprache ist, muss diese unbedingt vorhanden sein
    • Damit die XML Dateien geladen werden, musst Du sie beim I-Start des Roboters über die Datei "ext_install.cmd" registrieren.
    • Die Datei "ext_install.cmd" muss in der obersten Ebene des Home-Verzeichnis liegen.


    Registrierung der XML_Dateien

    Code
    echo -text "Register elog messages ..."
    register -type elogmes -domain_no 11 -min 9900 -max 9940 -prepath $HOME/language/ -postpath /My_elogtext.xml
    
    register -type elogtitle -prepath $HOME/language/ -postpath /My_elogtitles.xml
    echo -text "end register elog messages ..."
    #


    XML-Dateien aktualsieren


    Da die XML-Dateien nur beim „Zurücksetzen des Systems“ (I-Start) in das System geladen werden, muss nach der Anpassung der XML-Dateien wie folgt vorgegangen werden:

    • Alle geänderten XML-Dateien müssen im Verzeichnis „HOME:Language“ enthalten sein.
    • Der aktuelle Wertebereich der Elognummern (>5000) muss über die Atrribute "-min" und "max" in der Datei „ext_install.cmd“ im Verzeichnis „HOME:“ eingetragen sein.
    • Backup erstellen, so dass die neuen XML-Dateien im Backup enthalten sind.
    • System-Reset (I-Start) ausführen, um die neuen XML-Dateien zu laden.
    • Restore mit dem zuvor erstellten Backup ausführen.

    Hallo,
    Du könntest die Instruktion "TriggCheckIO" in Vebindung mit "TriggL" verwenden, die eine Bedingung testet. Sollte diese nicht erfüllt sein, so wird eine Trap Routine aufgerufen in der auf die Bedingung gewartet werden kann.

    Die Instruktion erlaubt einen "StopMove" als Parameter anzugeben, so dass die Bewegung sofort gestoppt wird falls die Bedingung nicht erfüllt ist und bevor die Trap-Routine aufgerufen wird.

    Aber auch hier wird mit StopMove und StartMove gearbeitet, wenn die Bedingung nicht erfüllt ist, aber man spart sich den generellen Aufruf der Trap-Routine.


    Beispiel aus der Doku

    Hallo,

    ich habe mal auf der Bahn einen Trigger mit simuliertem DO gesetzt. Über das SimBoard eine Crossconnection wieder
    auf einen Eingang und diesen mit waitdi in der Zukunft nur für den Programmzeiger abgefragt.



    Martin

    die Crossconnection auf einen digitalen Eingang ist nicht notwendig, da man mit der Instruktion "WaitDO" den zuvor gesetzten Ausgang direkt abfragen kann.

    Hallo,

    für den Homerun wird intern die aktuelle Position beim Programm-Stopp gespeichert und mit der momentane Position beim Start des Homeruns verglichen. Offsets in den Bewegungsinstruktionen spielen dabei keine Rolle.


    Solltest Du den Homerun direkt aus dem laufenden Programm starten, muss vor dem Homerun die Instruktion "MT_HomeRunSavePos" aufgerufen werden, so dass die aktuelle Position gespeichert wird und der Positionsvergleich nicht mehr fehlschlägt.

    Die Homerun-Funktionalität von "MachineTending" basiert auf "Homepos-Running V6.2"

    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