Merken von Positionen

  • Moinsen,
    hoffe mir kann jemand weiterhelfen....
    ich wollte gerne durch setzen eines Flags bewirken, das der Roboter die gerade abgefahrene Bahn sich merkt und mir im User noch mal ne ganze Reihe an Positionen zu verfügung stehen, die ich dann und wann anfahren kann. Schwierigkeiten habe ich beim Positionen merken.....
    VKRC2 Version 3.3.4SP05 HF2


    config.dat:
    decl int n=0
    decl FRAME BEWEGDICH={ zuweisung der Position}



    User S. SRC:


    IF $FLAG[900]==TRUE THEN
    LOOP
    n=1
    n=n+1
    BEWEGDICH[n]=$POS_ACT
    wait sec0.1
    IF $FLAG[900]==FALSE THEN
    EXIT
    ENDIF
    ENDLOOP
    ENDIF


    schwierigkeiten hat er mit " BEWEGDICH[n]=$POS_ACT "
    Name nicht als Feld vereinbart, außerdem läuft n nicht hoch, bleibt bei dem Wert 2 stehen.....
    Danke im vorraus
    mfg Frank

  • Schritt für Schritt zum Roboterprofi!
  • n=1
    LOOP



    umgekehrt setzt Du im Loop ja immer zuerst die N wieder auf 1


    und
    decl FRAME BEWEGDICH={ zuweisung der Position}


    Hier weist Du nur einen Frame zu, also kann er nicht BEWEGDICH[n]= denn er kennt nur bewegdich, nicht beregdich[n]


    Eine längere Bewegung killt so ganz schnell Deinen Speicher.


    So gehts nicht.


    Ein Mensch hats mal so gelöst:
    Beim Beginn der Bewegung läßt er nen Timer starten und im Fehlerfall fährt er weiter , hält aber den Timer an und merkt sich den Timerwert. Nun kann er die Bahn nochmal starten, weiß aber wenn er die Bahn neu startet, wo der Fehler war


    Geht aber nur, wenn die Geschwindigkeit bei beiden Durchgängen gleich ist

    Wolfram (Cat) Henkel

    never forget Asimov's Laws at the programming of robots...

    "Safety is an integral part of function. No safety, no production. I don't buy a car without brakes."


    Messages und Mails mit Anfragen wie "Wie geht das..." werden nicht beantwortet.

    Diese Fragen und die Antworten interessieren jeden hier im Forum.


    Messages and Mails with questions like "how to do..." will not be answered.

    These questions and the answers are interesting for everyone here in the forum.

    Einmal editiert, zuletzt von WolfHenk ()


  • [...]
    schwierigkeiten hat er mit " BEWEGDICH[n]=$POS_ACT "
    Name nicht als Feld vereinbart, außerdem läuft n nicht hoch, bleibt bei dem Wert 2 stehen.....


    WolfHenk hats ja schon geschrieben: Bei jedem Durchlaufen der Schleife wird n auf 1 zurückgesetzt. Deshalb muss das einmal vor dem Einsprung in die Schleife geschehen. Innerhalb darfst du nur noch zählen.
    Damit du BEWEGDICH als Feld nutzen kannst, musst du sie auch als solche deklarieren:

    Code
    DECL FRAME BEWEGDICH[600]
    [...]
    n = n+1
    IF n <= 600 THEN
      BEWEGDICH[n]=$POS_ACT
      WAIT SEC 0.1
    ENDIF
    [...]


    Das lässt eine Aufzeichnung von etwa einer Minute zu und schützt dein Feld vor dem Überlauf. Zusätzlich solltest du vor der Aufzeichnung das gesamte Feld ablöschen und vor der Wiedergabe jeden Punkt auf Gültigkeit abfragen, sonst kann es zu ziemlich unschönen Bewegungen kommen.
    Du solltest also vor der Aufzeichnung das gesamte Feld mit {X 0, Y 0, Z 0, A 0, B 0, C 0}, oder noch besser einer Position, die gefahrlos von der gesamten Bahn aus angefahren werden kann, vorbelegen. Bei der Wiedergabe solltest du dann so Abfragen:

    Code
    WHILE BEWEGDICH[n] <> {X 0, Y 0, Z 0, A 0, B 0, C 0} AND n <= 600;{Oder sichere Position}
      PTP BEWEGDICH[n]
      n = n+1
    ENDWHILE


    Gruß ... gooselk

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