Signal nach Wegstrecke

  • Folgendes Problem.


    LIN Fahrt von A nach B
    Strecke wird geteilt in 10 Stücke.
    Nun würde ich gerne am Ende jeder Teilstrecke automatisch einen Analogwert einlesen.


    Könnte ja einfach jeweils nur die Teilstrecke als LIN Fahrt machen.
    Möchte ich aber nicht da es nicht unbedingt sehr elegant aussieht.


    Gibt es sonst noch ne Möglichkeit - mit Trigger PATH o.ä.
    Hab auch schon gesucht, aber noch nichts relevantes gefunden.


    Wenn jemand noch nen Tipp hätte wäre ich dankbar.

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

  • Schritt für Schritt zum Roboterprofi!
  • Es gibt z.B. die Systemvariable $DIST_NEXT. Diese gibt den (Rest)Weg zum nächsten Punkt an.


    Da du deine Wegstücke ja hast, kannst du ja dann für jeden der 10 Abschnitte den Restweg ermitteln und den dann mit dieser Variable überwachen.


    Wenn dieser Weg unterschritten ist, einfach einlesen und auf nächsten Abschnitt warten.


    "Trigger / path" geht natürlich auch, weiss aber gerade nicht, wieviele Trigger gleichzeitig aktiv sein dürfen. Aber 10 sollten es schon sein. Dann vor der Lin-Bewegung die 10 Trigger Befehle starten und warten....

  • Ja Trigger mit der Option Path ist hier die Lösung, da kannst du in mm sagen wo auf der Bahn welches Programm aufgerufen werden soll.


    Oder aber du machst 10 überschliffene LIN-Bewegungen und rufst bei jedem Zielpunkt mit der Trigger END funktion das entsprechende Programm auf um den Analogwert einzulesen. Dann hast du sicher kein Problem mit der maximal zulässigen Anzahl von Triggerbefehlen.


    Trigger findest du in der Systemintegratorendokumentation (auf der Parts & Docs DVD) im Kapitel "10.11 Bahnbezogene Schaltaktionen (=Trigger)"


    lg Drudge

  • Danke für die Bemühungen für das Finden einer Lösung.
    Das mit den 10 Teilstrecken war nur so als Bsp. gedacht, es könnten auch 30 oder 40 sein.
    Also scheidet Trigger Path aus.


    Hab es jetzt mit einzeln nacheinander verfahrenen LIN Strecken gemacht.
    Sieht wirklich nicht schön aus - ziemlich ruckelig - aber es funktioniert.


    Schöner wäre natürlich schon eine durchgehende flüssige Bewegung wo man sagen könnte alle z.Bsp. 10 mm (oder auch alle 0,01 sec) wird der Wert gemessen.


    Nochmals Danke
    Servus Roland

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


  • Schöner wäre natürlich schon eine durchgehende flüssige Bewegung wo man sagen könnte alle z.Bsp. 10 mm (oder auch alle 0,01 sec) wird der Wert gemessen.



    Es gibt z.B. die Systemvariable $DIST_NEXT. Diese gibt den (Rest)Weg zum nächsten Punkt an.


    Da du deine Wegstücke ja hast, kannst du ja dann für jeden der 10 Abschnitte den Restweg ermitteln und den dann mit dieser Variable überwachen.


    Wenn dieser Weg unterschritten ist, einfach einlesen und auf nächsten Abschnitt warten.


    Am Anfang des Weges dist_next_start = $dist_next merken und dann bei $dist_next <= 39/40 * dist_next_start , $dist_next <= 38/40 * dist_next_start usw... schalten.

  • Drudge
    Im Moment funzt das so


    A = 10
    For I = 1 to xyz
    LIN A c_dis
    LiesAnalog ()
    Endfor


    Da braucht es keinen Interrupt.


    atw12az5
    Vermisse ich da was - oder bin ich zu blöd.
    $dist_next - OK
    Und wie bitte soll ich nun diese Variable überwachen ??


    z.B.
    A = 100
    LIN A c_dis ; und da sollte nun alle 10 der Wert eingelesen werden
    ;wo und wie binde ich nun $dist_next ein ??


    Kann mir vorstellen das über den Submit zu lösen - dann brauchts aber kein $dist_next


    Troztdem Danke für die Tipps

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

  • Code
    Kann mir vorstellen das über den Submit zu lösen - dann brauchts aber kein $dist_next


    Ja, das mit dem Submit hatte ich mir auch so gedacht. Nur wie willst du das dann ohne diese Variable lösen?


    Wenns nur darum geht, in zeitlichen Abständen die Werte einzulesen - OK.
    Da du die Werte ja aber in räumlichen Abständen haben willst, musst du doch wissen, welchen weg dein TCP zurückgelegt hat. Natürlich könnte man den auch selber ausrechnen, aber dafür gibts ja die Variable.


    Ansonsten würde mich dann andernfalls dein Lösungsansatz interessieren, der ohne die Wegberechnung oder ohne $Dist_Next funktioniert :denk:

  • hmm es scheint mir, als ob du meinen Post nicht richtig liest ;) hier ein kleines pseudo-Code Beispiel, was ich meine:


    Habe es aber nicht ausprobiert, ob das überhaupt funktioniert und es gibt auch ein zwei konzeptionelle Unschönheiten in meinem Beispiel ... das Prinzip sollte aber ersichtlich sein. :roll:


    lg Drudge

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