Beiträge von addi

    Thomas,


    ja, du kannst die Namen direkt verwenden.


    Bei der Abfrage von gesetzten dig. Signalen würde ich dir die Funktion "TestDI()"
    empfehlen, also z.B.:


    IF TestDI(diEingang) THEN ...


    hth
    addi

    Hallo Thomas,



    Wie ich auch der Doku gelesen habe werden diese in den Systemparametern auf Namen gemappt?!


    Ja, genau.
    Die Namen der EAs müssen nicht mit "di","do","dg", etc. anfangen, sondern sind (fast) beliebig.
    Sie müssen nur den Konventionen für Bezeichner in RAPID entsprechen, d.h. max. 16 Zeichen lang sein,
    mit einem Buchstaben anfangen, eindeutig sein usw. Steht in der Doku...


    Die Signale sind nach der Deklaration in den Systemparametern (und Neustart) global verfügbar
    und können wie Datenobjekte mit dem enstprechenden Datentypen (signaldi, signaldo, ...)
    im Programm verwendet werden.


    Hoffe das hilft erstmal weiter. Ansonsten: Doku lesen, ist da ganz gut erklärt
    addi

    Paulino,


    ja, TriggIO (und dann TriggL/J/C) ist genau für dein Problem gemacht,
    wie der Titel im Handbuch auch schon vermuten läßt:
    "TriggIO - Definieren eines E/A-Ereignisses mit fester Position"


    Alternativ gäbs noch
    - MoveL/J/C mit Set/Reset (wie hier schon beschrieben), oder
    - WZDOSet (Aktivieren einer Weltzone zum Setzen eines digitalen Ausgangs; aber Achtung, hier wird das Signal
    beim Verlassen der Zone wieder automatisch invertiert, ist also für dich nur bedingt geeignet)


    Möchte mich aber ansonsten Sven anschließen und dem noch hinzufügen:
    Mal eben das Handbuch zu überfliegen/querlesen geht in der Regel auch schneller
    als hier zu posten und auf die Antwort zu warten (zumindest bei einfachen Fragen)


    Gruß
    addi

    Hallo,


    also in der Syntax-Beschreibung steht:


    <expr> ::= [ NOT ] <logical term> { ( OR|XOR ) <logical term> }
    <logical term> ::= <relation> { AND <relation> }


    Das bedeutet, dass AND stärker bindet, also Vorrang vor OR/XOR hat.
    (Weil es Bestandteil des "tiefer-liegenden" bzw. "inneren" <logical term> ist ;))


    Kannst Du auch leicht anhand eines einfachen Tests überprüfen:

    Code
    if true or false and false then     ! 1 or (0 and 0) = 1
          TPWrite "AND - Bindung";
        else                                            ! (1 or 0) and 0 = 0
          TPWrite "OR - Bindung";
        endif


    hth
    addi

    Hi,


    kenne mich nur ein wenig mit S4C+ und aufwärts aus und nicht mit S4, aber gibts in S4 denn die
    Offs-Funktion noch nicht ?


    Ansonsten wäre fBerechnung() ja eine reine Re-Implementierung von Offs() ?! :kopfkratz:


    Wenn ich mich da täusche, bitte Post ignorieren :oops:


    addi

    Hi,


    normalerweise würde man soetwas von vorne herein mit einem Array lösen, also
    irgendwie so:

    Code
    const robtarget rtPositionen{n} := ....
    ...
    MoveL rtPositionen{nPos},...


    Sollte aber auch so gehen wie Du es vorhast: (in RW4 nur mit Developer Option!)

    Code
    ! pos100, pos101, pos102, ... pos200 sind vorhanden
    var robtarget rtTarget;
    var num nPos;
    ...
    nPos := 105;
    GetDataVal "pos" + ValToStr(nPos), rtTarget;
    MoveL rtTarget,...


    Ansonsten Doku lesen zu "GetDataVal"


    hth
    addi

    Hallo Asmodeus,


    falls Du die gesamte Datei löschen willst, schau mal in der Doku unter "RemoveFile".
    Soweit ich weiß, brauchst Du unter RW4 die Option "Developer Functions" dafür (?)
    Unter RW5 ist das glaub ich schon mit drin....


    Falls Du nur die geöffnete Datei auf Anfang setzen willst, könnte dir "Rewind" weiter helfen.


    hth
    addi

    Hallo,


    hab zwar keine Ahnung von KUKA aber würde vermuten, dass die Leerzeichen bei "Vel= 80 %" nicht korrekt sind :roll:


    Versuch doch mal:

    Code
    PTP {A4 0, A5 0, A6 0} Vel=80% PDAT1 Tool[1]:Schweisspistole Base[0]


    ...ist aber nur Vermutung


    addi

    Hallo,


    falls tatsächlich hier eine Programmieranleitung für KRC32 als PDF kursiert,
    wäre ich sehr glücklich wenn mir das einer per Privater Nachricht schicken könnte. :blumen:
    Bin speziell interessiert an Programmierung, nicht unbedingt Bedienung...


    Vielen, vielen Dank schonmals
    addi

    Shuihua,


    OK, so what about not reading the position from the robot but calculate it yourself. :huh:


    Idea: I think the robot will have the ability to move at constant speed with good accuracy (regarding the speed)
    This is important for example in glueing applications.
    So if you take the start- and stop-point of one straight scan movement (taking into account the acceleration/deceleration
    ramps), you can calculate the scanner position at any point in time.
    If the scanner is then triggered/read with an accurate time rate you will have a relatively accurate position without
    the need of reading the robots position. All calculations can be done on the PC.


    What do you think ?


    regards
    addi

    Hi Shuihua,


    first of all I have to say that I have absolutely no experience with KUKA robots :pfeif:
    so I can't answer a single of your technical questions.


    But maybe I can suggest some ideas if you give a little more information:
    - what precision/resolution do you want to achieve ?
    - how fast do you want to move ? (mm/s)
    - what is your method of measuring:
    do you want to scan in straight lines over the object and take the distance/height from the laser
    or do you want to keep the laser on constant distance to the object an take the height from
    the robots position ?
    - what objects do you want to scan ? (concave/convex) Do you need all 6-axis ?


    addi

    Hello Joan,


    unfortunately it is not possible to initialize optional parameters in RAPID on declaration level.
    Anyway I think this would be useless because (in contrast to some other laguages) from inside the routine
    the parameter is simply NOT present when called without passing an appropriate argument.
    So you can't use it at all if not present (Runtime error when accessing the param)


    You can work around this with a second variable:


    hth
    addi

    Hello Joan,


    as far as I know theres no way in RAPID to allocate or free or access or manipulate memory directly. This is similar to
    other programming languages like for instance JAVA.
    Maybe there are hidden instructions that can do this job but I doubt that.


    However it is possible to convert variable data into raw byte data back and forth (search docs for data type "rawbytes")
    but I think this probably not what you are looking for.
    Additionally you can call routines by name (see CallByVar) but beyond this instruction there is no way to control program flow
    by variable data (except direct control instructions like "IF", "WHILE" etc... of course).
    Its not possible to "hack" code in memory or something (afaik).


    I am sure you can accomplish a (minor kind of) OOP functionality with RAPID constructs but this would be very tedious and
    would result in quite complex code which is almost impossible to maintain.
    I've seen this in a standard C-program "emulating" a JAVA OOP class structure and this was far away from fun ;)


    good luck
    addi

    Hallo,


    - gibt's da Bilder von ? Link?
    - sind alle Unterlagen komplett (Handbücher, Programmierdoku.) ?
    - Preisvorstellung ? Offizielle Rechnung mit MwSt. ?
    - Einzeln oder nur alle vier zusammen ?


    Danke für Infos.
    addi

    Hallo,


    ich hatte das gleiche Problem bei meinem alten Adept und bin dabei auf die Programme "AnaDisk" bzw "Teledisk" (beide vom gleichen Hersteller) gestoßen. Das sind ältere DOS Programme die für CP/M-Formate o.ä. entwickelt wurden und fast(?) alle Disketten-Formate kopieren.
    Per AnaDisk (Diskeditor) kann man auch gezielt Daten lesen/ändern, allerdings nur byteweise und nicht in einem logischen Dateiformat, d.h. einzelne Dateien transferieren geht nicht. Aber für Backups sollte es reichen.


    Wegen der hardwarenahen Zugriffe auf den Disketten-Controller laufen die Programme NUR unter echtem DOS, möglicherweise auch unter Windows mit einem DOS-formatiertem VirtualPC (hab ich aber noch nicht probiert)


    Einfach mal nach "anadisk" googeln, da wird man schnell fündig....


    hth :beerchug:
    addi