Frage zu RAPID-Syntax

  • Hallo!


    (Absatz enthält Vorgeplänkel und kann übersprungen werden ;) )
    Kurz zu mir: Ich habe schon mehrere Jahre Erfahrung damit, Bewegungsabläufe Offline mit Robotstudio zu simulieren und den Code entsprechend in RAPID-Quelltext auszugeben und auf den IRB2400ern (S4,S4C,S4C+) einzusetzen. Außerdem programmiere ich ziemlich viel in ObjectPascal und Visual Basic. Was mir aber neu ist, ist die Programmierung in RAPID. Durch meinen Background und Recherche in der mir vorliegenden Roboter-Programmstruktur komme ich ziemlich gut rein, allerdings hakt es noch an der ein oder anderen Ecke und dann was tun, wenn RAPID-Handbuch und google keine Hilfe bringt. Daher wollte ich mich mal gern im Forum nach einer Lösung erkundigen.


    3Punkte:


    1. Ich habe ein ziemlich langes Array hier und ich würde es gern der Übersichtlichkeit halber auf unterschiedliche Zeilen schreiben. Dazu kann man ja im VisualBasic einen Zeilenumbruch erzwingen indem man einfach " _" an ein Zeilenende schreibt und kann dann auf der nächsten Zeile weitermachen. Gibt es dazu ein Pendant im RAPID-Quelltext? Handbuch ist sehr mau wenn es um Arrays geht.


    2. Ich möchte ein Programm schreiben, welches
    - ein System-Modul von einer Floppy-Diskette öffnet
    - eine fest definierte Konstante ausliest
    - und das Systemmodul dann wieder entläd


    3. weiterhin soll es auch ein modul von einer diskette laden, den inhalt verändern und die veränderte Version auf die diskette zurückspeichern. allgemein gibt es ja dazu etwas im RAPID-handbuch mit startload, waitload und unload, allerdings ist nirgendwo aufgeführt, wie man auf das Diskettenlaufwerk verweist. daher meine frage und ich poste hier einfach mal den quelltext zu 2.:


    VAR BOOL bOK;
    VAR NUM nI;
    VAR NUM nActpart;
    VAR NUM nDiff;
    VAR NUM nTrgpart;
    VAR loadsession load1;
    StartLoad "HOME:" \File:="PICK.SYS", load1; !home muss ersetzt werden mit floppy
    WaitLoad load1;
    %"rIDENT"%;
    nActpart:=nThispart;
    UnLoad "HOME:" \File:="PICK.SYS"; !home muss ersetzt werden mit floppy
    bOK:=StrToVal(stProd{nI,6},nTrgpart);
    IF bOK=TRUE THEN
    nDiff:=nTrgpart-nActpart;
    IF (nDiff>0 AND Abs(nDiff)<50) OR (nDiff<0 AND Abs(nDiff)>50) THEN
    FOR nI FROM 1 TO Abs(nDiff) DO
    !PulseDO\PLength:=1,doUP;
    ENDFOR
    ELSE
    FOR nI FROM 1 TO Abs(nDiff) DO
    !PulseDO\PLength:=1,doDOWN;
    ENDFOR
    ENDIF
    ENDIF


    das ist der quelltext für 2.
    bei 3. würde mich nur interessieren, wie die syntax aussieht für "geändertes programm auf floppy zurückspeichern (überschreiben)"


    ist mein erster post, hoffe ist nich zuviel auf einmal. der rest funktioniert schon ganz gut. riesen :danke: :blumen: im voraus und ein schönes wochenende!


    gruss, lutz

    IRB 2400: S4, S4C, S4C+

  • ANZEIGE
  • Hallo,


    Arrays kann man "einfach so" ohne Sonderzeichen umbrechen. Die Zeilenwechsel werden nicht ausgewertet. (Ich glaub, generell nicht.)


    "HOME:" ist ein Alias für den richtigen Pfad. Die Pfade sind im System verankert, ich habe gerade vergessen, wo. Jedenfalls ist die Diskette als "flp1:" (Alias-Bezeichner) ansprechbar oder als "bd0" usw. Unix-Style.
    Man sollte vielleicht wissen, dass es ein paar Versionen gab, wo die Strings "HOME:" im System falsch verlinkt waren. Es gab da Versionen, wo der Slash schon drin war und welche, wo nicht. Das Beispiel wie im Handbuch muss also nicht unbedingt funktionieren....
    Nachschauen kannst Du die Bezeichner unter Datentypen "String", sie werden dort als normale Konstanten angezeigt.


    Bei "UnLoad" gibts den optionalen Parameter "\save", es funktioniert wie im Handbuch beschrieben. Nur den Pfad zu finden ist u. U. ein bissl ungewohnt für Windows-Spezis :)
    Prinzipiell ist es bei Dir aber dann wohl derselbe wie bei "load".


    Grüße,
    Michael

  • wow! superschnelle antwort! bin guter dinge, dass ich damit ans ziel komme. in jedem fall meld ich mich nochmal obs geklappt hat. :danke: und gruss!


    EDIT: stimmt, auf die Floppy-Notation hätte ich kommen können, ist ja in unserer BASE.SYS auch als
    CONST string flp1:="flp1:";
    definiert. ich mach mal weiter... schauen, dass der quelltext funktioniert

    IRB 2400: S4, S4C, S4C+

    Einmal editiert, zuletzt von lutz ()

  • ich muss hier nochmal eine frage zum aktuellen quelltext stellen, es geht um folgende zeile:


    VAR loadsession load1;


    - wie es aussieht funktioniert das soweit bei dem Roboter mit S4C-Steuerung
    - bei dem Roboter mit S4-Steuerung kennt er angeblich den Datentyp "loadsession" nicht. Ich bin daraufhin in das Menü der Datentypen gegangen. Dort war neben den üblichen num, bool, usw. ein Eintrag "loadsession". Als ich diesen Datentyp anwählte, zeigte er zunächst eine leere Übersicht aller loadsession-Variablen um dann folgenden fehler anzuzeigen, dem man nur durch roboterneustart entgehen konnte: siehe Anhang


    also meine fragen:
    - kann es sein, dass loadsession gemäss rapid-handbuch seite 383/384 (Befehl StartLoad) erst ab S4C-Steuerung funktioniert?
    - hat jemand einen vorschlag für einen workaround?
    - ich will ja im prinzip nur eine integer-zahl von dem datenträger "flp1:" auslesen. ich hatte mir überlegt dazu das modul PICK.SYS einzuladen, die routine rIDENT darin auszuführen wodurch die variable nThispart mit der entsprechenden variable belegt wird. dann soll die variable in eine lokale variable überführt werden mit nActpart:=nThispart; um PICK.SYS (auf der floppy) dann wieder zu entladen. aber wenn es einen einfacheren weg gibt um eine integer-zahl von einer floppy auszulesen dann wäre ich für einen entsprechenden vorschlag nicht undankbar ;)



    EDIT: Habe erfahren, dass es den Datentyp loadsession tatsächlich erst ab S4C-Steuerung gibt. Man kann sich auf S4 mit Load und Unload behelfen.

  • Könnte man nicht auch einfach eine Textdatei lesend öffnen, den gelesenen String umwandeln und in die Variable schreiben?


    edit: Befehle
    open ... \read
    ReadStr
    close
    StrToVal oder StrToByte (?)
    ...
    ...


    Open ... \write
    write
    close



    Grüße,
    Michael

  • EDIT: So, die Routine tut jetzt das was sie soll nach einigen Hürden und ein paar Bugs (Gewöhnung an RAPID noch nicht ganz abgeschlossen ;-)). Hab es jetzt mit nem einfachen Load,<Auslesen>,Unload implementiert, damit es auch auf der S4-Steuerung läuft.


    Das String-auslesen probier ich demnächst als Alternative.


    Danke nochmal an alle, klasse Forum!

    IRB 2400: S4, S4C, S4C+

    Einmal editiert, zuletzt von lutz ()

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