Syntax %RoutineName% ??

  • Hallo Experten,


    wir haben einen Roboter mit einer IRC5 Steuerung in Betrieb seit kurzem.


    Bei der Programmdurchsicht bin ich auf folgende Programmzeile gestossen:


    %RoutineName%;


    Diese Syntax ist mir bis dato unbekannt, ist dies doch unsere 1. IRC5 Steuerung.


    In der Dokumentation steht, daß mit diesem Befehl eine Routine oder Modul geladen werden kann, allerdings in Verbindung mit einem Ladebefehl.


    Einen Ladebefehl habe ich nirgends gefunden.


    Der Name macht mir auch zu schaffen.....
    "RoutineName" taucht weder als Variable, Routine oder Modul im gesamten Backup auf.


    Habt ihr eine Idee was hier geschieht ?? :huh: :denk:


    Bin mal gespannt ;)


    Gruß Maddin

  • ANZEIGE
  • Hi,
    dies ist ein dynamischer Aufruf von Routinen. Ist völlig normal und nicht erst seit der IRC5 nutzbar. Kann es sein das "RoutineName" als Variable exsistiert?
    Irgendwo wird in Deinem Programm in Abhängigkeit von etwas diese Variable beschrieben und später als Routine aufgerufen.


    Sven

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Hi,


    wie Sven schon sagte, ruft diese Anweisung die Prozedur auf, deren Name in der
    Zeichenketten-Variablen/Konstanten RoutineName steht.
    Das nennt ABB "späte Bindung" oder auch "Late Binding", weil damit erst zur Laufzeit des
    Programms (also "spät") die aufzurufende Routine berechnet werden kann


    Hat mit dem Ladebefehl aber nichts zu tun.


    Schau mal im Handbuch unter "Prozeduraufruf", da steht alles drin.......


    Vielleicht ist in eurem Programm RoutineName auch ein lokaler Parameter in einer
    Prozedur ?


    Gruß
    rmac

  • Hallo


    Also die % sind dazu da damit die Steuerung keinen Syntaxfehler Ausgibt wenn die Routine nicht vorhanden ist.


    wenn also kein LOAD verwendet wird und die Routine sonst nicht exisitiert glaube ich das du gar nicht durch den Programm aufruf kommst.

  • Hi,
    also wenn die Routine nicht exsistieren sollte beim Aufruf gibt es unweigerlich einen Stopp und eine Fehlermeldung. Das ist sicher. Und mit einem LOAD-Befehl hat dies garnichts zu tun. Mit einem LOAD werden Module geladen und keine Routinen. Und das, nach Infos von maddin ist ein Routinenaufruf!


    Sven

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!


  • Also die % sind dazu da damit die Steuerung keinen Syntaxfehler Ausgibt wenn die Routine nicht vorhanden ist.


    Das mag für die Anweisung (%RoutineName%;) selbst auch stimmen, aber dennoch muß die Variable/Konstante/Pers RoutineName
    irgendwo deklariert sein und vom Datentyp "Zeichenkette" (= string) sein, sonst gibts einen Fehler wenn nicht existend.
    Beim Aufruf gibts spätestens dann einen Laufzeitfehler wenn der Name, der beim Aufruf in RoutineName gespeichert ist,
    nicht existiert.


    rmac

    Einmal editiert, zuletzt von rmac ()

  • Hallo zusammen,


    vielen Dank für eure Antworten.


    Ihr habt sicher recht mit dem Routinenaufruf
    (es sollte ein Unterprogramm-Aufruf geschehen anhand einer Teilenummer).


    Leider finde ich weder die Deklaration (String) noch eine Zuweisung im gesamten Backup.
    Es gibt allerdings ein verschlüsseltes Systemmodul, das für mich nicht einsehbar ist.


    Mit Sicherheit steht das Zeug da drin .......


    Bis denne


    Gruß Maddin

  • Maddin,


    wer hat denn das Module geschrieben in dem der Late-Binding-Aufruf gemacht wird ?
    Für eine globale Variable/Konstante, die es nach Deinen Aussagen ja dann sein müsste, ist die
    Namensgebung ("RoutineName") nicht wirklich prickelnd......


    Kannst Du denn die Variable nicht über das TP lokalisieren ?


    Ansonsten schau mal in der Doku unter Instruktion "SetDataSearch" bzw. Funktion "GetNextSym".
    Damit kannst Du zur Laufzeit Informationen über Datenobjekte abrufen/suchen.


    Vielleicht hilfts......


    rmac

  • Hallo maddin,


    ich liebe Rapid,
    diese art des Programmierens (late binding) ist eine ganz tolle Sache.


    Zum Zeitpunkt des ladens muß die benötigte Prozedur oder Funktion nicht vorhanden sein"
    Außserdem lassen sich schöne Dinge machen, wie locale Prozeduren in Modulen aufrufen, sie global nicht zu finden sind.
    Beispiel:
    var string cModul := "cMeinModul";
    var string cRoutinenname := "cProzedur1";
    Diese Variablen ewrden irgendwo gebildet (index files ...)



    Der aufruf im Programm kann dann folgendermaßen aussehen


    %cModul +":"+cRoutinenname %;
    Das bedeutet, rufe aus dem Modul cMeinmodul die Prozedur cProzedur1 auf.


    Wichtog bei dieser Schreibweise ist nur, das zwischen den %% Zeichen ein String steht.


    m.f.G.
    Ralph

    Lieber einen Roboter, als gar keinen Freund

  • Hallo Maddin


    Von wem ist denn dieses Programm?
    Hatte schon mit etlichen von ABB selbst geschriebenen Programmen zu tun, da war das auch so.
    Die sammeln sich ihre Routinen über Positionsnummern und Teileindexe zusammen.
    Eigendlich schlau gemacht! :supi:
    So ein Programm funktioniert für fast alle Anwendungen!!!


    Allerdings war da immer die Funktion "FahreZu" irgendwo zu finden.
    Meistens im System Ordner.
    Mit Sicherheit existiert irgendwo die Variable "RoutineName"


    Wenn das aber in dem verschlüsselten Kram stattfindet ?????


    Da wollte sich wohl jemand eine Geldquelle erschließen. :eviltongue:


    Dann mußt du wohl bei Programmänderungen drumherum programmieren! :wallbash:


    Mein Motto:
    Make it Simple!!!! :D


    Sonst kotzt das arme Schwein das mit den intelektuellen Selbstbefriedigungsversuchen klarkommen muß! :motz:


    Gruß Högi

    Zwei Dinge sind unendlich,das Universum und die menschliche Dummheit. Aber bei dem Universum bin ich mir noch nicht ganz sicher, !!!!<br />Albert Einstein

  • Hallo zusammen,


    ABB selber hat das Programm zusammengeschustert.


    Der Roboter ist einem Pickmaster untergeordnet, der ihn mit Positionsdaten versorgt.


    Vom Pickmaster gibt es für den Roboter fertige Programmodule. In denen ist die Syntax zu finden, wegen der ich gepostet habe.
    Die eigentliche Programmschleife findet in einem Unterprogramm statt, daß mit der Teilenummer benannt ist.
    Der Roboter durchläuft aber vorher noch andere Routinen (Homepositionscheck, Initialisierung usw.), was auch wunderbar funktioniert. Diese Routinen sind in verschiedene Systemmodule verteilt. Und mir fehlt eben diese Bindung. Ich weiß im Endeffekt nicht welche Routine durch diese Sytnax aufgerufen wird.


    Ich versuche mal in aller Ruhe über das Teachpanel was rauszufinden.


    Bis denne


    P.S. Der ABB Techniker, welcher den Roboter inbetriebgenommen hat, war über das verschlüsselte Systemmodul auch sehr begeistert... :aufsmaul:


    Gruß Maddin

  • Hi,



    [...]Und mir fehlt eben diese Bindung. Ich weiß im Endeffekt nicht welche Routine durch diese Sytnax aufgerufen wird.[...]


    Das herauszufinden ist ja das geringste Problem: Du kannst ja einfach den Inhalt von RoutineName auf dem
    TP ausgeben, kurz bevor der eigentliche Aufruf gemacht wird (%RoutineName%;).
    Nur wenn diese Routine in einem verschlüsselten SysModule steckt, dann bringt Dich das auch nicht weiter,
    da Du ja nicht sehen kannst was innerhalb der Routine passiert...


    Meines Wissens nach kannst Du da auch nicht viel machen :down:


    Gruß
    rmac

  • Hallo Maddin,


    wenn ich auf der Suche nach gebildeten Variablen für Routinenaufrufe bin, dann utze ich immer einen guten Editor, und durchsuche alle Systemverzeichnisse nach der Variable, danach bin ich dann auch meistens wesendlich schlauer.
    Ich könnte mir vorstellen, dass in einer loaddynamic dieser Routinenname mit gebildet wird.
    Da ich leider jedoch im wesendlichen mit anderen robotern arbeite kann ich dieses nicht wirklich sicher sagen.
    ABER


    Wenn Ihr den Roboter noch nicht lange habt, warum ruftst du nicht einfach bei ABB an und stellst gezielt deine Fragen?


    m.f.G

    Lieber einen Roboter, als gar keinen Freund

  • Hallo Maddin,


    solltest Du da nicht weiter kommen, dann erstelle ein komplettes Backup in eine Zip Datei und schicke mir diese zu.
    Für dass zuschicken werde ich Dir einen FTP Zugang auf meinem Server erstellen. Mache bitte dafür deine mail Adresse sichtbar, so dass ich Dir die Zugangsdaten User und PW senden kann.
    Die Zugangsdaten werde ich dann bis am Samstag an dich senden können.
    Ich bin mir zwar nicht sicher, ob ich an diesem Wochenende dazu komme, da ich arbeiten muss, aber ich kann ja mal drüber schauen.


    m.f.G.


    Ralph

    Lieber einen Roboter, als gar keinen Freund

  • Hallo ,


    @ ErikPa:


    Es besteht ja kein Problem mit dem Roboter, mich hat nur die Syntax interessiert. Die Gelegenheit zur Aufklärung bietet sich mit Sicherheit in nächster Zeit.
    Der ABB Techniker hat noch diverse Arbeiten zu erledigen und kommt mit Sicherheit bald ins Haus.
    Dann spreche ich ihn darauf an.



    In diesem Sinne... Vielen Dank an alle für all die Infos.


    Gruß Maddin

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden