Frage zu dem : Operant mit Turn und Status

  • Hallo zusammen,


    das Ergebnis des : Operators hat immer den Typ der rechten Seite, d.h.


    <E6POS> : <POS> = <POS>


    Als Beispiel einfach mal unter Anzeige->Variable->Einzeln z.B.
    ={E6POS: X -1293.20398,Y 785.216187,Z 491.908112,A 89.2432938,B -0.0642487183,C -0.0885750279,S 6,T 19,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} : {POS: X 0,Y 0,Z 200,A 0, B 0, C 0}
    eingeben. Als Ergebnis erhält man dann
    {POS: X -1293.516, Y 784.9960, Z 691.9078, A 89.24329, B -6.424872E-02, C -8.857503E-02}



    Damit sind insbesondere nach Ausführung des : die Komponenten S und T im Ergebnis nicht gültig. Zur Ausführungszeit deiner Bewegung bedeutet das es kommt die normale Lückenfüllung zum Einsatz, d.h. fehlende Komponenten werden mit den Werten am Zielpunkt der Vorgängerbewegung aufgefüllt.


    Gruß
    Fubini

    Einmal editiert, zuletzt von fubini ()

  • Schritt für Schritt zum Roboterprofi!
  • Hi,


    merkwürdig finde ich das ganze schon, ich habe mit dem : Operator noch nie Probleme dieser Art gehabt und auch keine mit S und T, hat bisher immer gefunzt!

  • Hi Zusammen,
    danke für die Info. Das mit der rechten Seite habe ich schon mal irgendwo gelesen aber wie es halt so ist auch wieder vergessen. Auf jeden Fall bringt mich das ein wenig weiter.
    @titan72:
    Eigentlich habe ich auch noch keine Probleme damit gehabt. Bei der letzten Anlage sind öfters Fehler aufgetaucht. Der Robi hat ab und an seltsame Bewegungen gemacht die dann zu einer Kollision führten. Alle ein paar Wochen 1 Crash :denk: Nach dem alles wieder in Grundstellung war lief der Robi wieder ganz normal.
    Und dabei wurde festgestellt das bei der Grundinstallation vom System auch VW-Dateien installiert wurden. $machine.dat und $robcor.dat im Mada Ordner!
    Jetzt wird es sich zeigen ob diese Dateien auch die Ursache waren.


    Gruß Paulen

    Für seine Arbeit muß man Zustimmung suchen, aber niemals Beifall.<br />Zitat: Charles-Louis Baron de Montesquieu

  • ..vielleicht a bissi spät die Antwort aber wie wäre es denn wenn du angenommen deine T und S kennst
    und dann einfach auch so festschreibst wie etwa so


    ....



    IF VARSTATE("Offset.t")<>#INITIALIZED THEN
    Offset.t=29 ; was auch immer deine Position an T hat ...
    ENDIF


    .....


    und alle als E6POS deklarierst ...in der Funktion


    und oder einfach dann oben zuvor in deine Bewegung reinsetzen


    $APO.CPTP=50
    BAS(#VEL_PTP,100)
    BAS(#TOOL,2)
    BAS(#BASE,0)
    ;--------------------
    XPufferLinks.t=29
    ;--------------------
    PTP PosOffs(XPufferLinks,{Z 50},#BASE) C_PTP


    ...vielleicht dilettantisch und wird evtl bei zu grossen Offs nicht passend ...
    man könnte ja immer noch eine User MSG rausschicken und klären wenn ein Turn verlassen ( t>29, ect ...) wird
    ob man das auch zulässt und eben KEINEN Crash riskiert ...


    Grüße


    Patch

  • Der optimale Turn (=der mit der geringsten Achswinkeländerung) ist aber nicht unmittelbar bekannt, das ist ja gerade das Problem.


    Es gibt dazu eine universale Lösung mit INVERSE(), kann ich bei Bedarf posten.




  • Damit ist gewährleistet (Auszug DOKU "INVERSE()"):
    1)(b) $TARGET_STATUS = #BEST, d.h. der Zielpunkt erhält, denjenigen Status, so daß die Bewegung von Startpunkt zu Zielpunkt im Achsraum einen möglichst kurzen Weg zurücklegen muß.
    In diesem Fall wird für alle 8 möglichen Status-Werte eine Rücktransformation durchgerechnet, und dann unter allen zulässigen Lösungen diejenige ausgewählt, die im Achsraum am „nächsten“ zum Startpunkt liegt.
    (Gegenwärtig wir als Abstandsmaß im Achsraum die euklidische Norm verwendet. Denkbar wäre z.B. auch die Maximumsnorm).


    2)Der Zielpunkt besitzt keinen TURN-Wert:
    In diesem Fall wird für jede Achse der zulässige TURN-Wert berechnet, mit dem der Zielpunkt den kürzesten Weg zum Startpunkt besitzt. („Zulässig“ heißt in diesem Fall, daß falls bei der Wahl des näher gelegenen Achswinkel ein Softwareendschalter verletzt würde, wird der weiter entfernte gewählt.)




    PS:
    Falls sich jemand fragt was das:
    calc_position.x = position.x
    soll.
    Damit das ganze auch mit externen Achsen klappt kann man keinen FRAME verwenden und muss Status und Turn aus der E6POS loswerden. Dazu füll ich einfach eine neue E6POS mit allem aus der alten bis auf S&T.


    PPS:
    Damit das klappt sollte man bei der Ausführung der Funktion schon auf dem Punkt, von dem aus man den verschobenen Anfahren will, stehen, wegen $axis_act.
    Wenn mans woanders berechnen will, kann man startaxes auch übergeben.

    Einmal editiert, zuletzt von atw12az5 ()

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