KUKASim Programm Funktion einbauen und abrufen

  • Schritt für Schritt zum Roboterprofi!
  • Wenn die Auslösebedingung komplexer ist würde ich in einem .sub soetwas schreiben wie:


    IF Kraft/ Tiefe gröfer/kleiner als Wert THEN

    bAuslösen=TRUE

    ENDIF


    ...und eben den Interrupt auf bAuslösen auswerten.


    Loipe hat da sicher eine elegantere Lösung ;)


    edith sagt: siehe oben

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • xy musst mit einer zahl zwischen 1 und 256 austauschen

    und schalt die interrupts aus und ein in collsubsearch

    und in dem collsubsearch schreib hinterm interrupt off noch wait sec 1

    danach kannst du eine fehlerbehandlung schreiben da er wenn er was findet ja da nie hin kommt

  • Woher weiß ich denn welche Zahl ich für xy einsetzen soll?

    Müsste dies nicht ausreichen wenn ich die Interrupts vor der funktion coilbreaksub() aktiviere und nachher wieder deaktiviere?

    Einmal editiert, zuletzt von popoff_1 ()

  • die zahl hängt davon ab welcher bei dir nicht benutzt wird.. das kann ich von hier nicht wissen. daher xy


    wenn der interrupt ausgelöst wird wenn er nicht in der suche ist dann gibt es einen unzulässige struktur für resume fehler.... dann bist du wieder hier ausserdem siehts schöner aus ;)

  • du weist dem cycflag eine logische bedingung zu. dann kannst das Cycflag als boolsche ergebnis dieser bedingung nutzen.


    dies passiert wie der name sagt zyklisch

    wenn du wissen willst welche benutzt werden must du wohl in deinem programm mal suchen.


    ich schreib gerne im kopf vom hauptprogramm nen kommentar welche prios von interrupts und welche cycflags ich für was verwende um es anderen leichter zu machen


    ich würde vorm einschalten des interrupts noch schauen ob die bedingung evtl schon gegeben ist dann musst du noch was machen weil der interrupt dann nicht mehr auslösen wird

  • ich würde vorm einschalten des interrupts noch schauen ob die bedingung evtl schon gegeben ist dann musst du noch was machen weil der interrupt dann nicht mehr auslösen wird


    Meinst du dass ich direkt auf der Anzeige am Bedienpanel nachschaue ob die bedingung bereits gegeben ist? Ich glaube unter Anzeige Diagnose müsste dies ja dann aufscheinen

  • In der Doku steht zu "$SEN_PREA" folgendes:


    "Austausch von Real-Werten über eine Sensorschnittstelle

    Die Variable wird verwendet, um Real-Werte über eine Schnittstelle an einen

    Sensor zu senden oder um Real-Werte von einem Sensor zu empfangen.

    Syntax $SEN_PREA[Index]=Wert"


    Es sieht ja da nach aus, dass dein Interrupt nicht ausgelöst wird.

    Edith saget: So sollte ein Sensor deine Tiefe messen und bei erreichen deine Marke "tiefe" sollte es dann ein "TRUE" Signal geben auf $SEN_PREA[1]. Schonmal überprüft ob das Signal auch so schaltet?

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • Ja wie es aussieht löst der interrupt nicht aus. Wenn ich die Variable tiefe mit 1mm initialisiere, ist es da egal ob die Zahl positiv oder negativ ist? Also wird da immer ein absoluter Betrag verwendet?


    Nein, ich habe dies nicht überprüft. Wie kann ich denn dies überprüfen?

  • Ob das egal ist oder nicht kann ich auf die schnelle nicht beurteilen. Ich denke dein Sensor erfasst irgendeinen Wert, der dein Z darstellt, ob, wenn du tiefer fährst in dem Loch, es dann Minus oder Plus ist, ist zu Prüfen...

    Ob "$SEN_PREA[1]" schaltet kannst du unter Variable->Einzeln prüfen. Hier dann den Namen im Namenfenster eintragen und auf der rechten Seite noch auf Aktualisieren drücken, dann kannst du sehen ob und wann der Wechsel von FALSE auf TRUE (oder umgekehrt) stattfindet.

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • Da ich aktuell nicht weiß was dieser Wert, siehe oben, darstellt wollte ich mal dies etwas anderes versuchen. $POS_INT erfasst ja die aktuelle Position. Kann ich da diesen Befehl nutzen um die Tiefe in Z zu überprüfen. Also die aktuelle Position wird Verglichen mit der aktuellen Position + tiefe.

    Variable tiefe wäre ja 0,5mm. Wenn dies der Fall ist soll der Interrupt auslösen. Kann dies funktionieren?


    Code
    $CYCFLAG[50]=($POS_INT.Z>$POS_INT.Z+tiefe)
  • Wird wohl eher nicht funktionieren.

    Die aktuelle Position wird nie größer als die aktuelle Position PLUS irgendwas.

    Man sollte eher die aktuelle Position mit der Ausgangsposition vergleichen.

    Also sowas wie:

    Code
    startpos=$pos_act
    $CYCFLAG[50]=($POS_ACT.Z > (Startpos.z - tiefe))
  • Hallo, der Interrupt funktioniert nun, dieser löst aus wenn das Teil sich 0,5mm unterhalb des Kontaktes sich befindet.


    Das Problem aktuell ist da dass der Roboter nicht sofort Stopp sondern ein wenig in xy nachfährt sodass das Bauteil nicht genau an dem Punkt stoppt wo der Interrupt ausgelöst wurde. Also er fährt ein bisschen nach.


    Das Teil befindet sich daher wieder ein bisschen ausserhalb der Bohrung. Hat jemand eine Idee wie man das Problem lösen kann?


    Und wie kann ich den CYCFLAG zurücksetzten wenn er einmal aktiviert wurde?

    Einmal editiert, zuletzt von popoff_1 ()

  • Wie stoppst du den Roboter genau? BRAKE, BRAKE F oder BRAKE FF? Haben alle unterschiedlich starke Bremsreaktionen. Das er erst abbremsen musy versteht sich von selbst. Brake ist am sanftesten aber auch am längsten vom Bremsweg her. Hab gerade die Doku nicht parat aber BRAKE F war glaube ich bahntreuer Nothalt und bremst sehr viel schneller bahntreu runter. Bei sehr langsamen Geschwindigkeiten ist BRAKE FF in der Regel am kürzesten vom Bremsweg her. Ist aber nicht mehr bahntreu. Wenn es eng hergeht könnte es also zu Kollisionen kommen.

    Eventuell sind aber F und FF genau anders herum. Wie gesagt Doku hab ich gerade nicht einsehbar hier.


    Fubini

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