Der Ursprung von Base_Data[1] liegt bei 0° Schwenkwinkel in der linken unteren Ecke des Blockes.
Base berechnen
- Bastico
- Erledigt
-
-
Okay. Müsste heute abend Zeit finden das mal auszuprobieren.
-
das wäre große Klasse. Ich versuche es derweil weiter
-
Hallo Bastico,
ich habe das ganze mal versucht aufgrund des Archivs und deiner Zeichnung nachzustellen. Allerdings kann ich kaum eine Position anfahren, ohne in Achslimits zu kommen. Aber erstmal egal.
Mir ist unter anderem aufgefallen, dass du einen Fehler bei der Übernahme der Daten machst.Auch wenn base_versch.c ein Real ist wird dieser als in Integer geschrieben, da du einen Real-Wert durch einen Integer teilst.
Richtig wäre:
Aber das nur am Rande.Externer Inhalt youtu.beInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Ich habe das ganze etwas anders (für mich übersichtlicher strukturiert). Beschreibung im Anhang.Code
Alles anzeigenDEF PolterersTest ( ) ;Variablen der Geometrie: REAL Offset_Axis_1, Offset_Axis_2 ;Variablen von SPS: REAL Block_Thickness, Block_Level, Block_Angel ;Init ;Tool- und Base-Daten auf Default (oder in $Config.dat) TOOL_DATA[1]={X -1244.0000 ,Y 2.0000 ,Z 290.0000 ,A 90.0000 ,B 0.0000 ,C 0.0000} BASE_DATA[1]={X 2169.0000 ,Y 1307.0000 ,Z 991.0000 ,A 90.0000 ,B 0.0000 ,C -90.0000} ;Geometriedaten setzen Offset_Axis_1=1000 Offset_Axis_2=250 ;Variablen von der SPS (später von SPS lesen) Block_Thickness=100 Block_Level=300 Block_Angel=15 ;im folgenden wird Base-Data[16] für die anzufahrenden Punkte benutzt ;1. Block_Thickness und BlockLevel einbeziehen (Funktion Calcframe siehe unten) BASE_DATA[16]=CALCFRAME(BASE_DATA[1],0 ,-Block_Level ,Block_Thickness ,0 , 0 ,0) ;2. Drehung einbeziehen: Base in Drehachse verschieben BASE_DATA[16]=CALCFRAME(BASE_DATA[16],0 ,-Offset_Axis_1 ,-OffsetAxis_2-Block_Thickness ,0 ,0 ,0) ;3. Drehung einbeziehen: Winkel BASE_DATA[16]=CALCFRAME(BASE_DATA[16],0 ,0 ,0 ,0 ,0 ,C Block_Angel) ;4. Base wieder von Drehachse zurueckrechnen BASE_DATA[16]=CALCFRAME(BASE_DATA[16],0 ,Offset_Axis_1 ,OffsetAxis_2+Block_Thickness ,0 ,0 ,0) ;Bewegungsparameter fuer nachfolgende Bewegungen setzen BAS(#Tool,1) BAS(#BASE,16) BAS(#VEL_CP,1.0) BAS(#ACC_CP,100) LIN {X 0,Y 0,Z 200,A 0,B 0,C -90} ;Vorpos LIN {X 0,Y 0,Z 0,A 0,B 0,C -90} ;Startpos (links unten, Base Ursprung) LIN {X -1225,Y -1000,Z 0,A 0,B 0,C -90} ;Zielpos (Beispiel, Blockmitte) LIN {X -1225,Y -1000,Z 200,A 0,B 0,C -90} ;Nachpos (Beispiel) END DEFFCT FRAME CALCFRAME(SourceFrame,move_x,move_y,move_z,move_a,move_b,move_c) FRAME SourceFrame REAL move_x,move_y,move_z,move_a,move_b,move_c FRAME fTemp fTemp.x=move_x fTemp.y=move_y fTemp.z=move_z fTemp.a=move_a fTemp.b=move_b fTemp.c=move_c RETURN SourceFrame:fTemp ENDFCT
Ich hoffe das hilft dir weiter. -
Jetzt hab ichs ins Office-Lite 8.3 eingetragen und merke, dass 'n paar Fehler drin sind.
War wohl zu spät gestern abend.
Merkwürdig ist auch, dass nun die Base un die Tools nicht mehr mit Simu übereinstimmen. Sehr spannend...Ich bleib dran. -
Erstmal vielen Dank dafür! Auf dem Roboter selbst sieht es gar nicht so schlecht aus. Die Positionen werden richtig angefahren (inkl. Winkel!). Bis auf ein paar Vorzeichen und Syntaxfehler musste ich nicht viel korrigieren.
-
Kommando zurück, bei 0° passt die Position, je höher der Winkel wird um so größer wird die Abweichung (im Bereich von ca. 300mm je 10°) ich überprüfe die Rechenschritte nochmal
-
je größer der Winkel desto höher der Fehler.
Eventuell stimmen die Abstände von der Ursprungsbase zum Drehwinkel nicht, die du brauchst um die Base in den Drehpunkt zu schieben. Da machen wenige mm schon was aus. Es gilt das genau zu vermessen.
Im Zweifel gibt der SPS-Mann dir die falschen Daten. Die sind immer Schuld. -
jetzt hab ich es:
Block_Thickness=blockthickness/10.0
Block_Level=1200-blocklevel/10.0
Block_Angle=blockangle/10.0
BASE_DATA[16]=CALCFRAME(BASE_DATA[1],0 , Block_Level ,Block_Thickness ,0 ,0 ,0)
BASE_DATA[16]=CALCFRAME(BASE_DATA[16],0 ,-Offset_Axis_1 ,-Offset_Axis_2-Block_Thickness ,0 ,0 ,0)
BASE_DATA[16]=CALCFRAME(BASE_DATA[16],0 ,0 ,0 ,0 ,0 , Block_Angle)
BASE_DATA[16]=CALCFRAME(BASE_DATA[16],0 ,Offset_Axis_1 , Offset_Axis_2+Block_Thickness ,0 ,0 ,0)
BAS(#Tool,1)
BAS(#Base,16)
BAS(#VEL_CP,0.5)
BAS(#ACC_CP,50)PUNKT.X=-DistanceX/10.0
PUNKT.Y=-DistanceY/10.0
punkt.c=-90LIN PUNKT
-
Und? Getestet?
-
Test läuft, muss die Anfangskoordinaten noch ein bisschen ändern, da die Positionen bei verschiedenen Winkeln in y-Achse weglaufen.
-
Ich hatte auch ein identisches Problem mit Koordinaten von einer Kamera, die ich in eine Base eingetragen habe, um Verschiebungen durchzuführen.
Beim hinzufügen eines Winkels ist mir der Roboter auch "entglitten". Ich habe die Winkel in die Tool Daten und die Base X/Y Koordinaten in Base eingetragen. So hab ich es bei mir gelöst.
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