Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

SINUMERIK 840d mathematische Funktion, negativen Wertebereich einfügen

Beitrag 11.09.2020, 18:51 Uhr
SD231
SD231
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 11.09.2020
Beiträge: 9
Hallo liebe Gemeinschaft,

ich habe folgendes Problem: ich arbeite an einer CNC-Drehmaschine, welche nicht in Y-Richtung verfährt. Deshalb muss ich in meinen Code eine mathemtische Funktion eingeben, die mir immer einen Wert ausrechnet für jede Stelle. Dafür habe ich eine Formel aufgestellt. Der Wertebereich, wo diese Formel gültig ist beginnt im negativen und endet im positiven (ähnelt einer Kurve). Ich hab den Poly-Interpolationsbefehl in einem Buch gefunden mit der ich nur im positiven Wertebereich arbeiten kann.

Gibt es einen Befehl mit der ich auch im negativen Wertebereich arbeiten kann?

Danke für eure Hilfe
   
Beitrag 11.09.2020, 20:29 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Was hindert dich denn daran, im negativen Bereich zu arbeiten?
Geht es um negative Argumente oder um negative Funktionswerte?

Der Beitrag wurde von CNCFr bearbeitet: 11.09.2020, 20:32 Uhr
   
Beitrag 12.09.2020, 20:12 Uhr
SD231
SD231
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 11.09.2020
Beiträge: 9
QUOTE (CNCFr @ 11.09.2020, 20:29 Uhr) *
Was hindert dich denn daran, im negativen Bereich zu arbeiten?
Geht es um negative Argumente oder um negative Funktionswerte?

Es geht um negative Argumente. Ich habe mal in den Unterlagen geschaut und da steht das nur positive Argumente verwendet werden können von 0 bis zu dem Wert. Ich brauche aber einen Definitionsbereich von -20 bis 50.
   
Beitrag 12.09.2020, 21:04 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Bei der Polynominterpolation ist das Argument der Bahnparameter, der von 0 bis 1 läuft (der Startpunkt der Kurve ist bei 0, der Endpunkt bei 1).
Das heißt aber ja nicht, dass du keine negativen Positionen erreichen kannst. Und auf diesen Parameter greift man ja normalerweise auch nicht zu.
Oder verwendest du einfach Polynome, und berechnest dann einzelne Punkte? Dann gibt es keine derartige Einschränkung.
Kannst du vielleicht mal genauer beschreiben was für eine Kurve du abfahren willst und wie dein jetziger Ansatz aussieht?
Da du speziell darauf hinweist, dass du keine Y-Achse hast, könnte die Lösung deines Problems ja auch darin bestehen, TRANSMIT zu aktivieren.
Auf welche Unterlagen genau beziehst du dich?

Der Beitrag wurde von CNCFr bearbeitet: 12.09.2020, 21:05 Uhr
   
Beitrag 13.09.2020, 15:29 Uhr
SD231
SD231
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 11.09.2020
Beiträge: 9
QUOTE (CNCFr @ 12.09.2020, 21:04 Uhr) *
Bei der Polynominterpolation ist das Argument der Bahnparameter, der von 0 bis 1 läuft (der Startpunkt der Kurve ist bei 0, der Endpunkt bei 1).
Das heißt aber ja nicht, dass du keine negativen Positionen erreichen kannst. Und auf diesen Parameter greift man ja normalerweise auch nicht zu.
Oder verwendest du einfach Polynome, und berechnest dann einzelne Punkte? Dann gibt es keine derartige Einschränkung.
Kannst du vielleicht mal genauer beschreiben was für eine Kurve du abfahren willst und wie dein jetziger Ansatz aussieht?
Da du speziell darauf hinweist, dass du keine Y-Achse hast, könnte die Lösung deines Problems ja auch darin bestehen, TRANSMIT zu aktivieren.
Auf welche Unterlagen genau beziehst du dich?

Grundsätzlich muss ich eine Nut in ein Drehteil fräsen, die um einen Winkel geneigt ist, also einfach gesagt von rechts unten nach links oben verläuft. Bei einer "normalen" CNC-Maschine würde die Maschine in Y- und Z-Richtung verfahren während des Prozesses (X-Richtung wäre die Zustellung). Somit wäre die Nutbodenebene parallel zur Mittelebene des Bauteils. Bei mir ist es so, dass die Maschine nur in Z-Richtung verfährt während der Bearbeitung und sich das Bauteil währenddessen mit einer bestimmten Drehzahl dreht um den Winkel zu gewährleisten. Nur so verläuft die Nut nicht mehr parallel zur Mittelebene sondern verläuft um die Mittelachse des Bauteils.

Meine Idee ist, dass die Maschine mir den Abstand ausrechnet für jeden einzelnen Punkt (x=R*(1-cos(a), a=der aktuelle Drehwinkel), ein Bogen fährt und somit den Abstand kompensiert, sodass die Nutbodenebene wieder parallel zur Mittelebene verläuft. Mit dem G2 und G3 Befehl kann es nicht funktionieren, weil es aus der Perspektive kein Kreis ist.

Meine Unterlage ist die PDF-Datei SINUMERIK 840D sl / 828D Arbeitsvorbereitung Programmierhandbuch

Was ist der TRANSMIT-Befehl?
   
Beitrag 13.09.2020, 15:46 Uhr
SD231
SD231
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 11.09.2020
Beiträge: 9
QUOTE (SD231 @ 13.09.2020, 15:29 Uhr) *
Grundsätzlich muss ich eine Nut in ein Drehteil fräsen, die um einen Winkel geneigt ist, also einfach gesagt von rechts unten nach links oben verläuft. Bei einer "normalen" CNC-Maschine würde die Maschine in Y- und Z-Richtung verfahren während des Prozesses (X-Richtung wäre die Zustellung). Somit wäre die Nutbodenebene parallel zur Mittelebene des Bauteils. Bei mir ist es so, dass die Maschine nur in Z-Richtung verfährt während der Bearbeitung und sich das Bauteil währenddessen mit einer bestimmten Drehzahl dreht um den Winkel zu gewährleisten. Nur so verläuft die Nut nicht mehr parallel zur Mittelebene sondern verläuft um die Mittelachse des Bauteils.

Meine Idee ist, dass die Maschine mir den Abstand ausrechnet für jeden einzelnen Punkt (x=R*(1-cos(a), a=der aktuelle Drehwinkel), ein Bogen fährt und somit den Abstand kompensiert, sodass die Nutbodenebene wieder parallel zur Mittelebene verläuft. Mit dem G2 und G3 Befehl kann es nicht funktionieren, weil es aus der Perspektive kein Kreis ist.

Meine Unterlage ist die PDF-Datei SINUMERIK 840D sl / 828D Arbeitsvorbereitung Programmierhandbuch

Was ist der TRANSMIT-Befehl?

Achso die Nut verläuft auf der Mantelfläche entlang
   
Beitrag 13.09.2020, 18:13 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Zunächst einmal:
Du kannst natürlich mit deiner Formel x=R*(1-cos(a)) deine x-Positionen berechnen. Dabei kann a selbstverständlich auch negativ sein. Woher die Information kommt, a müsse positv sein, verstehe ich nicht.

Du könntest damit Stützpunkte berechnen und durch diese Punkte einen Spline legen. Du musst dann dann an Stelle von G1 nur ASPLINE oder CSPLINE schreiben.
Oder du berechnet dir selbst ein Polynom. Das ist aber ein relativ mühsamer Weg.
Sehe ich das richtig, dass die Mittellinie des Bodens der gesamten Nut in einer Ebene liegen soll? Falls ja, sehe ich auch nur die Möglichkeit, die Kontur durch Berechnung von Stützpunkten zu approximieren.
Ist das eine Bearbeitung mit einem Drehwerkzeug oder mit einem Fräser?

Zu TRANSMIT:
Das ist eine kinematische Transformation, die man z.B. verwendet um an der Stirnfläche eines Drehteils Konturen mit einem angetriebenen Werkzeug zu bearbeiten, wobei man in X-Y-Koordinaten programmiert, und die Steuerung rechnet das dann in X- und C-Positionen um. Der Fräser ist dabei parallel zur Z-Achse. Einen Vierkant kann man dann beispielsweise einfach mit vier Geraden programmieren.
Ich denke, das hilft dir bei deiner Aufgabenstellung nicht. Das hätte anders ausgesehen, wenn du eine Nut an der Strinfläche fertigen müsstest.
   
Beitrag 13.09.2020, 22:02 Uhr
SD231
SD231
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 11.09.2020
Beiträge: 9
QUOTE (CNCFr @ 13.09.2020, 18:13 Uhr) *
Zunächst einmal:
Du kannst natürlich mit deiner Formel x=R*(1-cos(a)) deine x-Positionen berechnen. Dabei kann a selbstverständlich auch negativ sein. Woher die Information kommt, a müsse positv sein, verstehe ich nicht.

Du könntest damit Stützpunkte berechnen und durch diese Punkte einen Spline legen. Du musst dann dann an Stelle von G1 nur ASPLINE oder CSPLINE schreiben.
Oder du berechnet dir selbst ein Polynom. Das ist aber ein relativ mühsamer Weg.
Sehe ich das richtig, dass die Mittellinie des Bodens der gesamten Nut in einer Ebene liegen soll? Falls ja, sehe ich auch nur die Möglichkeit, die Kontur durch Berechnung von Stützpunkten zu approximieren.
Ist das eine Bearbeitung mit einem Drehwerkzeug oder mit einem Fräser?

Zu TRANSMIT:
Das ist eine kinematische Transformation, die man z.B. verwendet um an der Stirnfläche eines Drehteils Konturen mit einem angetriebenen Werkzeug zu bearbeiten, wobei man in X-Y-Koordinaten programmiert, und die Steuerung rechnet das dann in X- und C-Positionen um. Der Fräser ist dabei parallel zur Z-Achse. Einen Vierkant kann man dann beispielsweise einfach mit vier Geraden programmieren.
Ich denke, das hilft dir bei deiner Aufgabenstellung nicht. Das hätte anders ausgesehen, wenn du eine Nut an der Strinfläche fertigen müsstest.


Die Mittelebene des Bodens soll in einer Ebene liegen, die Bearbeitung soll mit einem Fräser erfolgen.

Wie kann ich dann sagen, dass die Maschine mir die Werte für X ausrechnet und auch so verfährt für jeden einzelnen Punkt a von -20 bis 50? Und was meinst mir ein Polynom selbst berechnen, ginge das mit der Formel etwa nicht?

Der Beitrag wurde von SD231 bearbeitet: 13.09.2020, 22:10 Uhr
   
Beitrag 14.09.2020, 08:18 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Du kannst natürlich Stützpunkte berechnen und dann Polynome berechnen, die durch diese Stützpunkte verlaufen. Das ist aber (meiner Ansicht nach) ein relativ mühsames Geschäft. Es sei denn du hast den Algorithmus bereits.
Die Splineinterpolation tut ja letztlich auch nichts anderes: Die Steuerung erzeugt "glatte" Polynome durch die Stützpunkte.

Zu der Korrektur der X-Achs-Position:
Ich verstehe nicht, wie du auf die Formel
x=R*(1-cos(a))
kommst.
Wenn ich dein Problem richtig verstehe, komme ich auf die Korrekturformel
x = ABS(R * tan(a))
Wenn der Winkel a gleich 0 ist, liegt die Stirnfläche des Fräsers parallel zum Nutboden. Bei jedem anderen Winkel berührt der Fräser den Nutboden nur noch in einem Punkt unten (bei negativem Winkel) bzw. einen Punkt oben (bei positivem Winkel). In beiden Fällen muss man durch die Schrägstellung der Fläche das Werkzeug zurückziehen, d.h. X-Achs-Positon wird größer.
Ich habe mal das folgende Testprogramm geschrieben:
CODE
DEF REAL _X_START = 50 ; Position der X-Achse bei C0
DEF REAL _X_POS        ; Aktuelle Position der X-Achse

DEF REAL _C_START = -20.; Startposition der C-Achse
DEF REAL _C_END = 50.  ; Endposition der C-Achse
DEF REAL _C_POS        ; Aktuelle Position der C-Achse
DEF REAL _FAKTOR_C_Z = 1.0

DEF REAL _Z_START = 0  ; Startposition der Z-Achse
DEF REAL _Z_POS        ; Aktuelle Position der Z-Achse

DEF INT _N_STEPS = 14  ; Zahl der Intervalle (= Stuetzpunktzahl-1)
DEF INT _STEP          ; Schrittzaehler

F500
SPOS = 0
BAUTO EAUTO CSPLINE
FOR  _STEP = 0 TO _N_STEPS
_C_POS = _C_START + _STEP * (_C_END / _N_STEPS)
_X_POS = _X_START + ABS($P_TOOLR * TAN(_C_POS))
_Z_POS = _Z_START * _C_POS * _FAKTOR_C_Z
X=_X_POS Z=_Z_POS C=_C_POS
ENDFOR

M30

Dazu noch ein paar Anmerkungen:
Es gibt noch keine (sinnvolle) An- und Abfahrstrategie.
Die Position der X-Achse beim Winkel 0 steht in _X_START. Den Wert habe ich zum Test auf 50 gesetzt.
Ich bin davon ausgegangen, dass C- und Z-Achsposition ohne Korrektur proportional zueinander sind. Der Proportionalitätsfaktor steht in der Variablen _FAKTOR_C_Z = 1.0 und ist aktuell 1, d.h. C und Z ändern sich um gleiche Inkremente.
In der Schleife werden zunächst alle drei Achspositionen berechnet und in der letzten Zeile (X=_X_POS Z=_Z_POS C=_C_POS) wird daraus dann der Verfahrsatz gebildet.
   
Beitrag 14.09.2020, 17:00 Uhr
SD231
SD231
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 11.09.2020
Beiträge: 9
QUOTE (CNCFr @ 14.09.2020, 08:18 Uhr) *
Du kannst natürlich Stützpunkte berechnen und dann Polynome berechnen, die durch diese Stützpunkte verlaufen. Das ist aber (meiner Ansicht nach) ein relativ mühsames Geschäft. Es sei denn du hast den Algorithmus bereits.
Die Splineinterpolation tut ja letztlich auch nichts anderes: Die Steuerung erzeugt "glatte" Polynome durch die Stützpunkte.

Zu der Korrektur der X-Achs-Position:
Ich verstehe nicht, wie du auf die Formel
x=R*(1-cos(a))
kommst.
Wenn ich dein Problem richtig verstehe, komme ich auf die Korrekturformel
x = ABS(R * tan(a))
Wenn der Winkel a gleich 0 ist, liegt die Stirnfläche des Fräsers parallel zum Nutboden. Bei jedem anderen Winkel berührt der Fräser den Nutboden nur noch in einem Punkt unten (bei negativem Winkel) bzw. einen Punkt oben (bei positivem Winkel). In beiden Fällen muss man durch die Schrägstellung der Fläche das Werkzeug zurückziehen, d.h. X-Achs-Positon wird größer.
Ich habe mal das folgende Testprogramm geschrieben:
CODE
DEF REAL _X_START = 50; Position der X-Achse bei C0
DEF REAL _X_POS    ; Aktuelle Position der X-Achse

DEF REAL _C_START = -20.; Startposition der C-Achse
DEF REAL _C_END = 50. ; Endposition der C-Achse
DEF REAL _C_POS    ; Aktuelle Position der C-Achse
DEF REAL _FAKTOR_C_Z = 1.0

DEF REAL _Z_START = 0 ; Startposition der Z-Achse
DEF REAL _Z_POS    ; Aktuelle Position der Z-Achse

DEF INT _N_STEPS = 14 ; Zahl der Intervalle (= Stuetzpunktzahl-1)
DEF INT _STEP         ; Schrittzaehler

F500
SPOS = 0
BAUTO EAUTO CSPLINE
FOR  _STEP = 0 TO _N_STEPS
_C_POS = _C_START + _STEP * (_C_END / _N_STEPS)
_X_POS = _X_START + ABS($P_TOOLR * TAN(_C_POS))
_Z_POS = _Z_START * _C_POS * _FAKTOR_C_Z
X=_X_POS Z=_Z_POS C=_C_POS
ENDFOR

M30

Dazu noch ein paar Anmerkungen:
Es gibt noch keine (sinnvolle) An- und Abfahrstrategie.
Die Position der X-Achse beim Winkel 0 steht in _X_START. Den Wert habe ich zum Test auf 50 gesetzt.
Ich bin davon ausgegangen, dass C- und Z-Achsposition ohne Korrektur proportional zueinander sind. Der Proportionalitätsfaktor steht in der Variablen _FAKTOR_C_Z = 1.0 und ist aktuell 1, d.h. C und Z ändern sich um gleiche Inkremente.
In der Schleife werden zunächst alle drei Achspositionen berechnet und in der letzten Zeile (X=_X_POS Z=_Z_POS C=_C_POS) wird daraus dann der Verfahrsatz gebildet.

Nein es muss auf jeden Fall der Kosinus sein, da somit der Abstand der Kreisbewegung zur geraden Bewegung berechnet wird.
Kann ich dein Programm einfach so einfügen und was geb ich danach an G1 X=X_POS?
   
Beitrag 14.09.2020, 17:40 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Du kannst die Formel ja so umbauen, wie es für dich passt (cos statt tan).
Mich wunder aber eines beim cos: Wenn ich mir vorstelle, dass die Ebene um 90 Grad gedreht wird, wandert der Berührpunkt des Werkzeugs ins Unendliche. Das gibt der cos aber nicht her, da ist die maximale Änderung ja gleich dem Werkzeugradius ist (bzw. dem doppelten Werkzeugradius, wenn man den gesamten Argumentbereich durchläuft).

Wenn du wieder normal mit G1 verfahren willst, kannst du ganz normal z.B.
G1 X60
schreiben.
Damit ist die Splineinterpolation ausgeschaltet (CSPLINE, G1, G2, G3 usw. stehen in der selben modalen G-Code-Gruppe. Wenn ein G-Code aus dieser Gruppe geschrieben wird, wird der bisher wirksame G-Code zwangsläufig deaktiviert).
Es gibt keine Notwendigkeit über die Variable _X_POS zu gehen.
Die 3 Hilfsvariablen _X_POS, _C_POS und _Z_POS machen die Berechnung der einzelnen Achspositionen nur übersichtlicher. Wenn es nichts zu berechnen gibt, sehe ich keinen Grund, die Hilfsvariablen zu verwenden.
   
Beitrag 15.09.2020, 14:39 Uhr
SD231
SD231
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 11.09.2020
Beiträge: 9
Erst einmal: Vielen Dank für deine Hilfe

Das ist glaube ich etwas schwierig zu verstehen, wenn man es nicht genau gesehen. Aber ich habe es nochmal überprüft und es ist definitiv der COS.

Heißt es wenn ich erstmal nur den Bogen mit dem CSPLINE fahren will, muss ich einfach nur dein Testprogramm eingeben? (Naürlich vorher den Programmkopf schreiben) Weil das hatt ich probiert und es hatte nicht geklappt
   
Beitrag 15.09.2020, 15:28 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Was hat denn nicht geklappt?
Alarm? Alarmnummer?

Der Beitrag wurde von CNCFr bearbeitet: 15.09.2020, 15:31 Uhr
   
Beitrag 17.09.2020, 12:26 Uhr
SD231
SD231
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 11.09.2020
Beiträge: 9
Die Maschine kennt den CSPLINE-Befehl gar nicht, auch wenn ich nur SPLINE eingebe passiert nichts
er zeigt dann $AC_TIMER[7]=0.1 an, dass macht er immer wenn was im Programm nicht stimmt oder er den Befehl nicht kennt, das restliche Programm stimmt .
   
Beitrag 18.09.2020, 08:28 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Man müsste wissen, was genau du tust.
Zum einen schreibst du, dass die Maschine den Befehl CSPLINE nicht kennt, dann schreibst du, dass mit SPLINE nichts passiert. Das scheint mir alles nicht sehr realistisch.Wenn die Steuerung einen Sprachbefehl nicht kennt, gibt sie einen Alarm aus, Das würde ich nicht als "nichts passieren" bezeichnen.
Eine 840D, die CSPLINE nicht kennt gibt es nicht.
Einen Zusammenhang mit $AC_TIMER[7]=0.1 kann ich nicht erkennen. Machst du irgendwas mit Bewegungssynchronaktionen?
   
Beitrag 21.09.2020, 11:19 Uhr
SD231
SD231
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 11.09.2020
Beiträge: 9
Also wenn ich den CSPLINE eingebe zeigt die Maschine halt diesen Fehler an, sie arbeitet bis zu einem bestimmten Satz alles ab und zeigt mir dann diesen Fehler und es geht nicht weiter

Eine Bewegungssynchronaktion führe ich nicht aus
   
Beitrag 21.09.2020, 16:12 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
$AC_TIMER[7]=0.1 ist keine Fehlermeldung, zumindest keine, die von der Steuerung abgesetzt wird.
Möglicherweise sind in deinem NC-Programm irgendwelche Bedingen erfüllt, die dafür sorgen, dass ein entsprechender Text ausgeben wird. Ohne weiter Hinweise wäre das aber eine höchst ungewöhnliche Art, Fehlerzustände anzuzeigen.
Wenn die Steuerung einen Sprachbefehl wie z.B. CSPLINE einlesen und nicht verstehen würde, käme der Alarm 12550" .... CSPLINE ist nicht bekannt oder nicht definiert".
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: