$CYCFLAG[XY]=($SEN_PREA[1]>tiefe) OR (Kraft<=0)
KUKASim Programm Funktion einbauen und abrufen
- fubini
- Erledigt
-
-
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
-
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?
-
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
-
Code
Alles anzeigen$CYCFLAG[50]=($SEN_PREA[1]>tiefe) INTERRUPT DECL 11 WHEN $CYCFLAG[50] DO STOPFTSEARCH() coilbreaksub(); Start der Spiralbahn DEF coilbreaksub(MAXCOUNT: IN, RAD_MIN:IN, RotQuad:IN) REAL RAD,RAD_MIN INT COUNT,MAXCOUNT,SIGN,RotQuad,RotdirX,RotDirY FRAME PS,PH,PT ; Initialisierung PS=$POS_ACT INTERRUPT ON 11 FOR COUNT = 1 TO MAXCOUNT PH=$NULLFRAME PT=$NULLFRAME IF (MODOLO(COUNT, 2) == 0) THEN ;Richtung der Halbkreise festlegen SIGN=1 ELSE SIGN=-1 ENDIF SWITCH RotQuad CASE 1 RotdirX=1 RotDirY=1 CASE 2 RotdirX=1 RotDirY=-1 CASE 3 RotdirX=-1 RotDirY=-1 CASE 4 RotdirX=-1 RotDirY=1 ENDSWITCH RAD=(COUNT + 1) * 0.5 * RAD_MIN PH.X=RAD * SIGN * RotdirX PH.Y=PH.X * RotDirY PT.X=2 * RAD * SIGN * RotdirX PT.Y=0 CIRC PS : PH, PS : PT C_Vel PS=PS : PT ENDFOR INTERRUPT OFF 11 WAIT SEC 1 END
-
Vielen Dank, ich werde es probieren und später berichten.
-
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
-
vom programm aus
If $cycflag[50] then
Dastimmt was nicht
Endif
-
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?
-
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.
-
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?
-
$Pos_int ist die Position an derein Interrupt ausgelöst wurde. Aktuelle Position ist $pos_act bzw. $pos_act_mes. Ansonsten probiers aus.
Fubini
-
-
Vielen Dank. Ich werde es die kommende Woche mal ausprobieren.
-
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?
-
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
-
Ich bremse aktuell mit BRAKE. Ich versuche mal anderen Varianten.
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