1. Dashboard
    1. Dashboard
    2. Suche
  2. Forum
    1. Unresolved Threads
  3. Members
    1. Recent Activities
    2. Users Online
    3. Team
    4. Search Members
  4. Jobs
  5. Articles
  6. Calendar
    1. Upcoming Events
    2. Map
  7. Shop
    1. Orders
    2. Shipping Costs
  • Login or register
  • Search
Roboterprogrammierer finden
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Blog Articles
  • Events
  • Files
  • Products
  • More Options
  1. Roboterforum.de - die Industrieroboter und Cobot Community
  2. Forum
  3. Industrieroboter Support
  4. KUKA Roboter
Your browser does not support videos Handwerk automatisieren - ich schaffs mit KUKA
besuche unseren Partner
Roboterprogrammierer
Online Roboterschulung
Werbung schalten Roboter
Advertise in Robotics
Der Roboterkanal
Deutscher Robotikverband
Werben in Robotik
Werben für Robotik

VARSTATE setzen

  • spamkiller
  • July 30, 2010 at 9:47 AM
  • Thread is Resolved
  • spamkiller
    Points
    115
    Posts
    18
    • July 30, 2010 at 9:47 AM
    • #1

    Hallo,

    VARSTATE() liefert ja den Zustand einer Variablen. Gibt es eigentlich auch eine Funktion zum Setzen eines VARSTATEs?

    In meinem speziellen Fall habe ich eine Funktion, die einen OUT Parameter hat. Dieser OUT Parameter ist eine Struct die einen Integer und einen Frame enthält. Die Funktion liest externe Daten ein und speichert sie in dem OUT Parameter.

    Es kommt vor, dass Teile des Frames fehlen (also X, Y, Z, A, B oder C). Das ist soweit kein Problem, ich deklariere einfach eine lokale Variable FRAME tmpFrame, beschreibe nur die vorhandenen Teile und weise dem OUT Parameter tmpFrame zu.

    Wenn jetzt aber alle Teile fehlen, dann weise ich nach meiner Methode niemals einen Wert (X, Y, Z, A, B und C niemals zugewiesen) tmpFrame zu und bei der Zuweisung zum OUT Parameter bekomme ich den Fehler, dass die Variable ungültig sei (also nicht initialisiert).

    Die OUT Variable in diesen Fällen gar nicht zuweisen geht auch nicht, da dann einfach der alte Wert des OUT Parameters erhalten bleibt.Wie komm ich denn da wieder raus? :bawling:

    Also wenn ich den OUT Parameter auf "nicht initialisiert" setzen könnte...

    Grüße in Forum
    sk

  • Schritt für Schritt zum Roboterprofi!
  • Drudge
    Reactions Received
    4
    Points
    2,004
    Posts
    391
    • July 30, 2010 at 11:07 AM
    • #2

    also um den VARSTATE #DECLARED zu kriegen muss an einem gültigen Ort folgende Zeile stehen:

    Code
    DECL myVar_Typ myVar_Name


    um dann noch den VARSTATE #INITIALIZED zu kriegen, musst du irgendwo einen Wert zu weisen:

    Code
    z.B.
    myInteger_Var = 0
    myReal_Var = 0.0
    myFrame_Var = $NULLFRAME
    myE6POS_Var = {X 0.0, Y 0.0, Z 0.0, A 0.0, B 0.0, C 0.0, S 0, T 0, E1 0.0, E2 0.0, E3 0.0, E4 0.0, E5 0.0, E6 0.0}
    ...
  • spamkiller
    Points
    115
    Posts
    18
    • July 30, 2010 at 11:13 AM
    • #3

    Ich mich bestimmt viel zu undeutlich ausgedrückt (oder ich habe deine Antwort nicht ganz verstanden :denk:).

    Abgekürzt wollte ich wissen:
    Wenn ich eine Variable habe, die im Zustand #INITIALIZED ist, wie kann ich diese Variable auf #DECLARED zurücksetzen?
    Bei einzelnen Komponenten eines FRAMEs geht das, es sei denn man will alle Komponenten zurücksetzen.

  • out84
    Points
    1,675
    Posts
    265
    Location
    Bayreisch Schwaben
    • July 30, 2010 at 12:14 PM
    • #4

    Wie simeonw schon geschrieben hat.
    Einfach vor der Wertezuweisung tmpframe = $Nullframe.

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • spamkiller
    Points
    115
    Posts
    18
    • July 30, 2010 at 12:17 PM
    • #5

    dann ist die Variable doch im #INITIALIZED Zustand, oder?
    $NULLFRAME bezeichnet doch {X0, Y 0, Z 0, A 0, B 0, C 0}.

  • Drudge
    Reactions Received
    4
    Points
    2,004
    Posts
    391
    • July 30, 2010 at 1:19 PM
    • #6

    soweit ich weiss kann eine Variable nicht von "initialisiert" auf "deklariert" zurückgesetzt werden. Das macht aus meiner Sicht Programmiertechnisch auch keinen Sinn. Ausser man wählt das Programm ab und startet es dann wieder.

    Was ich schon gemacht habe, ist eine CHAR Array das ich brauchte um ein Daten Array mit Varstate abzufragen und dann die Resultate darin zu speichern ("U" = undefined, "I" = initialized und "D" = deklariert) Später arbeitete ich dann mit diesem CHar array, um nur wo wirklich nötig nochmals eine VARSTATE Abfrage zu machen. Denn die VARSTATE Funktion braucht ziemlich viel Rechenzeit. (Was besonders im Submit lästig ist.)

    Vielleicht könnte dir dieser Workaround auch helfen...

  • spamkiller
    Points
    115
    Posts
    18
    • July 30, 2010 at 1:46 PM
    • #7

    Programmiertechnisch mach das sehr wohl Sinn. Sagen wir, es gibt eine Liste von Frames die du anfahren möchtest, allerdings ohne die Orientierung des Tools zu verändern. Die Lösung ist die ABC Werte der Frames auf #DECLARED zu setzen. Da das direkt nicht geht, deklarierst du wahrscheinlich einen tmpFrame und weist dem nur die Werte XYZ zu und fährst dann tmpFrame an.

    Ich verstehe nur nicht, warum es möglich ist, eine relative Bewegung in {X 10, Y 10} zu machen (Z, A, B, C sind dabei #DECLARED und werden von LIN_REL ignoriert), aber nicht LIN_REL {} (was meines Erachtens einfach zu keiner Bewegung führen sollte). Sicher kann man behaupten, dass es wenig Sinn macht, den Roboter anzuweisen, keine Bewegung zu machen (und das sagen wir... 3 mal oder so ;) ). Tatsächlich kann es aber dazu kommen, was dann allerdings einen STOP verursacht (also nicht "keine Bewegung").

    Aber das alles ist eigentlich nicht ganz genau mein Problem und ich denke, ich kann mit der "Markierung" leben.

    Vielen Dank nochmal, ich hoffe ich kann mich irgendwann mal revanchieren (bin ja noch Neuling ;) )
    sk

  • Drudge
    Reactions Received
    4
    Points
    2,004
    Posts
    391
    • July 30, 2010 at 1:53 PM
    • #8

    hmm ich sehe dein Problem nicht ganz.

    Code
    LIN_REL {X 10, Y 10}


    ist das selbe wie

    Code
    LIN_REL { X 10, Y 10, Z 0, A 0, B 0, C 0}


    wieso setzt du dann die nichtbenötigten Werte nich auf 0?

    Wenn das aber nicht geht, dann arbeite mit dem Geometrischen Operator. Das funktioniert bestimmt.

  • spamkiller
    Points
    115
    Posts
    18
    • July 30, 2010 at 2:05 PM
    • #9

    :denk: Schlechtes Beispiel... :denk:

    ...Ersetze LIN_REL durch LIN

  • Drudge
    Reactions Received
    4
    Points
    2,004
    Posts
    391
    • July 30, 2010 at 2:15 PM
    • #10

    dann ersetzte

    Code
    LIN_REL { X 10, Y 10, Z 0, A 0, B 0, C 0}


    durch

    Code
    DECL FRAME fTemp
    fTemp = $NULLFRAME
    fTemp = {X 10, Y 10}
    
    
    LIN P1
    
    
    LIN fTemp:P1


    oder ähnlich (Vorsicht mit dem Vorlaufzeiger und $POS_ACT)

  • spamkiller
    Points
    115
    Posts
    18
    • July 30, 2010 at 2:49 PM
    • #11

    Verstehe ich das richtig? Ist

    Code
    LIN fTemp:P1


    gleichbedeutend mit

    Code
    LIN_REL fTemp


    wenn der Roboter auf P1 steht? (dann habe ich wieder was gelernt ;) )

    --
    Wozu machst du

    Code
    fTemp = $NULLFRAME


    , wird doch wieder überschrieben durch

    Code
    fTemp = {X 10, Y 10}

    Letztlich sind Z, A, B und C (von fTemp) wieder #DECLARED

    --

    Das LIN {X 10, Y 10} funktioniert, war mir ja klar. Das was ich eigentlich nicht verstehe war, dass LIN {} nicht funktioniert. Man kann beliebige Komponenten eines Frames "löschen" und immer ist die Bewegung noch möglich, bis auf einen einzigen Fall: wenn alle Komponenten gelöscht worden sind.

    Ist halt so in der KRL definiert, ich weiss nur nicht warum. :-|

  • Loipe
    Reactions Received
    25
    Points
    2,820
    Posts
    539
    • July 31, 2010 at 3:03 AM
    • #12

    Hallo zusammen

    schöne grüße aus China.

    LIN fTemp:P1 ist net gleichbedeutend mit LIN_REL fTemp weil wenn du eine satzanwahl auf
    LIN fTemp:P1 machst eine absolute Position anfährst was auch beim fünften mal abfahren die selbe ist.
    wobei du wenn du das auf LIN_REL fTemp machst der roboter jedesmal relativ zu seiner aktuellen Position sich um das Frame fTmp verfährt.
    wenn dann kannst du sagen.
    das LIN_REL fTMP
    gleich ist mit
    LIN $POS_ACT:fTmp (aktuelle Position um fTmp im Toolkoordinatensystem verschoben)
    LIN fTmp:$POS_ACT (aktuelle Position um fTmp im Basekoordinatensystem verschoben)
    ist


    Frames sind übrigens die einzigen Variablen (meines Wissens) die net deklariert werden müssen.
    einfach einen Namen wie fTmp nen $NULLFRAME zuweisen und losgehts.

    wenn du ein Frame in LIN oder LIN_REL benutzt wo net alle Komponenten Initialisiert bekommst du einen fehler, da er nicht initialsierte werte halt keinen wert haben, deswegen empfehle ich vor beschreiben eines Frames das zur Bewegung dient immer ein $NULLFRAME drüber zu schreiben.


    Gruß Loipe

  • spamkiller
    Points
    115
    Posts
    18
    • July 31, 2010 at 10:40 AM
    • #13

    Jetzt bin ich verwirrt :huh:

    Quote from Loipe

    wenn du ein Frame in LIN oder LIN_REL benutzt wo net alle Komponenten Initialisiert bekommst du einen fehler, da er nicht initialsierte werte halt keinen wert haben, deswegen empfehle ich vor beschreiben eines Frames das zur Bewegung dient immer ein $NULLFRAME drüber zu schreiben.


    Ist es denn nicht möglich, z.B. LIN {X 10} zu benutzen, damit er 10 mm in X fährt?

    Und selbst wenn nach nach

    Code
    fTemp = $NULLFRAME
    fTemp = {X 10, Y 10}


    fTemp's Z, A, B und C Komponente aus $NULLFRAME erhalten bliebe (im Variablen Fenster sieht das nicht so aus), dann würde

    Code
    LIN fTemp


    doch dazu führen, dass er auch Z, A, B und C (wären dann alle 0) bei der Bewegung berücksichtigt.

    EDIT:
    Viele Grüße nach China ;)

  • IrrerPolterer
    Reactions Received
    18
    Points
    13,523
    Trophies
    65
    Posts
    2,384
    • August 2, 2010 at 12:13 PM
    • #14
    Quote from spamkiller


    Ist es denn nicht möglich, z.B. LIN {X 10} zu benutzen, damit er 10 mm in X fährt?

    Nein, die Bewegung geht zur Koordinate X=10mm und nicht 10mm in X-Richtung.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.

    Life is a beta version. Full of bugs and no Manual.

  • SpeedFreak
    Points
    1,680
    Posts
    290
    About Me

    überbrücke mal den NOT-Aus! ... aber langsam ...

    • August 2, 2010 at 2:07 PM
    • #15

    Zitat von: spamkiller am 31. Juli 2010, 10:40:12
    Ist es denn nicht möglich, z.B. LIN {X 10} zu benutzen, damit er 10 mm in X fährt?


    hier wäre dann wie oben beschrieben wieder lin_rel der richtige befehl

    200% Override ... irgendwas klingt hier komisch ... und irgendwie riecht es auch ...<br /><br />Abkühlzeit Bremsen Achse 2: 57 Sekunden :D

    Edited once, last by SpeedFreak (August 2, 2010 at 2:28 PM).

Tags

  • 1
  • 33
  • 2
  • ABB
  • ABB Roboter
  • ABS
  • base
  • constant
  • CP_PARAMS
  • Dialog
  • EX
  • fanuc
  • Fehler
  • FRAMES
  • INIT
  • INITIALIZED
  • INITMOV
  • IRC5
  • joint
  • KRC2
  • KRC4
  • kuka
  • new
  • NONE
  • notify
  • PATH
  • PGNO_GET
  • profinet
  • PTP_DAT
  • PTP_PARAMS
  • P_ACTIVE
  • P_FREE
  • P_RESET
  • P_STOP
  • Quit
  • Roboter
  • RobotStudio
  • Schweißen
  • Sps
  • Sync
  • T1
  • t2
  • tcp
  • Tool
  • VALUE
  • VAR
  • vel_cp
  • vel_ptp
  • Yaskawa
  • YRC1000
AD
Your browser does not support videos autonome mobile Roboter von KUKA
Einloggen für weniger Werbung

gesponserte Artikel

  • Gebrauchtroboter kaufen - Was ist zu beachten. Die Checkliste zum kauf von gebrauchten Robotern

    August 11, 2019 at 7:02 PM
  • Was macht ein Roboterprogrammierer genau und was verdient er?

    August 21, 2019 at 8:17 AM
  • Vernetzen, referenzieren, kollaborieren: Das B2B Portal für die Produktionsautomatisierung

    June 2, 2021 at 11:29 AM

Job Offer

  • Sie wollen Ihr Stellenangebot im Roboterforum schalten? Ab 149€

    Werner Hampel June 17, 2021 at 9:52 AM
  • Werde Roboterprogrammierer bei ROBTEC GmbH in Mainburg / Bayern

    Werner Hampel April 5, 2023 at 7:13 PM
Werbung auf Roboterseite
Roboter programmieren lernen
Banner Robotik

Tags

  • INITIALIZED
  • DECLARED

Wieviele Mitglieder waren heute eingeloggt?

Logge Dich ein, um hier zu lesen wer in den letzten 24h Online war und um weniger Werbung zu sehen.

  1. Privacy Policy
  2. Legal Notice
Powered by WoltLab Suite™ 6.0.22
Roboterforum.de - die Industrieroboter und Cobot Community in the WSC-Connect App on Google Play
Roboterforum.de - die Industrieroboter und Cobot Community in the WSC-Connect App on the App Store
Download