Posts by spamkiller

    Hallo,

    ich versuche gerade ein Tool mit der XYZ 4-Punkt Methode zu vermessen und bekomme bei Richtung 2 den Fehler

    Code
    Punkt zu nahe an anderem Punkt
    
    
    Aktueller Abstand [mm]: 0
    Minimaler Abstand (TOOL) [mm]: 8

    Ich dachte, beim Anfahren des Referenzpunktes aus verschiedenen Richtungen muss man möglichst "nahe am Referenzpunkt" liegen? :denk:

    Vielleicht ist es wichtig:
    Ich versuche eigentlich nicht ein "echtes" Werkzeug zu vermessen, sondern einfach nur den Flansch, erwarte als Ergebnis also X = 0, Y = 0 und Z = 0. Ich fahre einfach irgendwo hin, und bestätige Richtung 1. Dann drehe ich ca. 45° in B und C um das "$NULLFRAME Tool" und bestätige Richtung 2. Dann kommt der Fehler. :denk:

    Warum ich das tue? Ich will mir die 4 Meßpunkte anschliessend ansehen, um dann herauszufinden, wo diese auf der Festplatte gespeichert werden (z.B. durch suche nach einem Wert in allen DAT Dateien).

    Grüße ins Forum
    sk

    Ahhh, danke. Ich vermute, dass P1 einfach zufällig ungefähr derselbe Punkt war, den ich beim ersten Vermessungsversuch angefahren habe. Anschliessend habe ich dann erst die Idee mit dem Teachen von P1-P4 gehabt.

    Zumindest erschließt sich mir jetzt der "Pkt. anf" Button. :)

    Vielleicht gibt es ja eine Methode, P1-P4 manuell irgendwo einzugeben und dann die Berechnung des Tools zu starten. Ansehen kann ich mir die Werte ja glaube ich unter "Inbetriebnahme...Vermessen...Messpunkte...Werkzeugtyp".

    Hallo,

    ich habe hier einen Linienlaserscanner an unserem Roboter und würde den gerne vermessen. Da der TCP des Lasers praktisch "in der Luft" liegt, gestaltet sich das Anfahren des Referenzpunktes aus 4 verschiedenen Richtungen als ziemlich schwierig. Da wir die Vermessung bei einem zu großen Fehler wiederholen möchten, aber nicht immer wieder die Punkte komplett neu anfahren wollen (nur leicht korrigieren wollen, bis der Fehler kleiner wird), habe ich kurzerhand ein neues Modul erzeugt und darin die 4 Positionen (P1-P4) geteacht. 8)

    Jetzt starte ich den Wizard für die XYZ 4-Punkt Methode und werde gebeten, den Referenzpunkt aus der ersten Richtung anzufahren. Wie kann ich jetzt den vorher geteachten Punkt P1 anfahren? :denk:

    In der Leiste unten steht etwas von "Pkt. anf.", wenn ich den Button betätige, fährt der Roboter tatsächlich den Punkt P1 an. Aber wie kommt er auf meinen Punkt P1? :denk:

    Für die folgende "Richtung 2" kann ich den Button ebenfalls betätigen, allerdings verändert der Roboter seine Position nicht (bleibt sozusagen auf P1). :denk:

    Ich habe schon überlegt, die XYZ Werte des Tools aus P1-P4 selbst zu berechnen, meine auch mal etwas dazu gelesen zu haben, finde das aber nicht wieder. :kopfkratz:

    Viele Grüße ins Forum
    sk

    PS: KR C 5.4.14

    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 ;)

    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. :-|

    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

    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.

    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

    Hallo,

    ich programmiere gerade eine Ethernet KRL XML Kopplung und versuche dabei insbesondere Frames zu übertragen. Inzwischen hat das mit den Frames und EKX_GetFrameElement geklappt, zumindest wenn ich "komplett belegte" Frames einlese (siehe auch hier)

    Jetzt möchte ich allerdings nur die XYZ Anteile übertragen, also ohne die Rotationswinkel ABC. Aber sobald ich das mit nur einem Frame tue, bekomme ich folgende Meldungen:

    Code
    INFO 1574 "KRC Systemfehler 14 tCCExMan"
    STOP 1205 "Quitt Interpolationstakt Zeitüberwachung &%"


    " &%" soll für ein chinesisches Zeichen stehen, für das mir gerade das Malzeug fehlt... :laugh:

    Hat das jemand schon mal gelöst? Ich könnte mein eigenes EKX_GetFrameElement() schreiben, dass die Werte einzeln einliest und "leere" Werte ignoriert. Aber das wäre IMHO unschön und zeitaufwendig.

    Gruß
    sk

    Erst mal vielen Dank für die Antwort :)

    Ich habe das noch einmal probiert. Gesendet habe ich:

    Code
    <root>
      <data>
        <rr_frames>
          <rr_frame index="1" cid="1">
            <f XPos="1.0" YPos="2.0" ZPos="3.0" ARot="4.0" BRot="5.0" CRot="6.0" />
          </rr_frame>
        </rr_frames>
      </data>
    </root>

    Der Fehler war dieses mal:

    Code
    Error: EKX: Error While extract FRAME information. Send:CRot="6.0" BRot="5.0" ARot="4.0" ZPos="3.0" YPos="2.0" XPos="1.0"/>    <rr_frame>  </rr_frames>   </data>   </root> , Expect:XPos
    Error: EKX: Error while extract attributes in FRAME:f CRot="6.0" BRot="5.0" ARot="4.0" ZPos="3.0" YPos="2.0" XPos="1.0"/>    <rr_frame>  </rr_frames>   </data>   </root>
    Error: EKX: Execute Filters, Channel EKXChannel_rr_frames

    Interessanterweise ist die Reihenfolge der Attribute umgedreht. In der XML Spezifikation macht das angeblich keinen Unterschied, vielleicht kommt aber KRL XML damit nicht zurecht? Die Verdrehung kommt scheinbar durch mein PC-seitig verwendeten XML Parser zustande (Qt: QDomDocument etc.), ich versuche ihm das mal abzugewöhnen...

    Hallo,

    ich versuche gerade eine Liste von Frames per Ethernet KRL XML 1.2 zu übertragen. Aber irgendwie scheitert es bereits bei der Interpretation des roboterseitig empfangenen XML Strings. Ich komme nicht dahinter, was der Roboter da wo anders erwartet.

    Ich habe einen Channel definiert und die XML Empfangsstruktur wie folgt definiert:

    Code
    <Elements>
      <Element Tag="root" Type="STRUCTTAG" Stacksize="100/">
        <Element Tag="root.data" Type="STRUCTTAG" Stacksize="100/">
          <Element Tag="root.data.rr_frames" Type="STRUCTTAG" Stacksize="100/">
            <Element Tag="root.data.rr_frames.rr_frame" Type="STRUCTTAG" Stacksize="100/">
              <Element Tag="root.data.rr_frames.rr_frame.index" Type="INTEGER" Stacksize="100/">
              <Element Tag="root.data.rr_frames.rr_frame.cid" Type="INTEGER" Stacksize="100/">
              <Element Tag="root.data.rr_frames.rr_frame.f" Type="FRAME" Stacksize="100/">
    </Elements>

    Die gesendeten Daten enthalten erst mal nur einen Frame:

    Code
    <root>
      <data>
        <rr_frames>
          <rr_frame index="1" cid="1">
            <f X="1.0" Y="2.0" Z="3.0" A="4.0" B="5.0" C="6.0" />
          </rr_frame>
        </rr_frames>
      </data>
    </root>

    EKX_WaitForSensorData() gibt false zurück, ist auch klar, denn bereits vor dem Aufruf sieht man in der telnet Konsole:

    Code
    Error: EKX: Error While extract FRAME information. Send:X="1.0" Y="2.0" Z="3.0" A="4.0" B="5.0" C="6.0"/>    <rr_frame>  </rr_frames>   </data>   </root>, Expect:XPos
    Error: EKX: Error while extract attributes in FRAME:f X="1.0" Y="2.0" Z="3.0" A="4.0" B="5.0" C="6.0"/>    <rr_frame>  </rr_frames>   </data>   </root>
    Error: EKX: Execute Filters, Channel EKXChannel_rr_frames

    Danach kommt noch mal der "XML Chunk of interest", in dem aber genau das steht, was ich gesendet habe.

    Ich habe schon mal probiert, statt

    Code
    X="1.0" Y="2.0"...


    das hier zu schicken:

    Code
    XPos="1.0" YPos="2.0"...


    Aber auch ohne Erfolg.

    Zu "EKX_GetFrameElement" bekomme ich *ein* einziges Ergebnis bei google... (gab's da nicht mal ein Wettbewerb oder so?).
    Ich hoffe, einer von den Roboter Gurus kann mir helfen, denn ich bin so ziemlich am Ende. :denk:

    Gruß ins Forum :zwink:
    sk

    PS: Softwareversion KR C 5.4.14