FANUC
Ihr Spezialist für Fabrikautomation
IF und WHILE, stehe auf den Schlauch

Hallo zusammen
Habe mir ein Programm zum Nutenstossen geschrieben stehe aber im Moment ein weing auf dem Schlauch liegt wohl daran das ich schon 18h am Arbeiten bin :-)
Also folgendes Problem igrendwie stimmen mir die Verzweigung IF und WHILE nicht seht ihr den Fehler ?
N10( KEILNUT STOSSEN )
G49
G28U0W0
G98G17M245
M304
G28H0
G55G0G40
T0737(STOSSWERKZEUH)
G0Z-100.
X18.5Z-10.
(-------------------)
#26=-5.(Z=STARTPUNKT IN Z)
#23=45.(W=INKREMENTALER WER AB STARTPUNKT)
#9=5000(F=VORSCHB IN MM/MIN)
#7=19.62(D=STARTDURCHMESSER)
#2=20(B=BOHRUNGSDURCHMESSER)
#11=3.5(H=NUT HOEHE)
#19=0.06(S=SCHNITTTIEFE IM DURCHMESSER)
#105=#19
(#105= SCHNITTTIEFEN ZAEHLER)
(#100+#101 FUER ALARMBERECHNUNG)
(-------------------)
(- ALARMBERECHNUNG -)
#100=[[#2+2*#11-#7]/#19]
#101=#100
#100=FIX[#100]
IF[#1000EQ#101]GOTO30
#3000=1(SCHNITTIEFE NICHT TEILBAR)
(-------------------)
N30
WHILE[#105NE#2+2*#11-#7]DO1
#105=[#105+#19]
G0X[#7+#105]Z#26
G1G98W#23F5000
X#7
G0Z#26
END1
VIELEN DANK
Habe mir ein Programm zum Nutenstossen geschrieben stehe aber im Moment ein weing auf dem Schlauch liegt wohl daran das ich schon 18h am Arbeiten bin :-)
Also folgendes Problem igrendwie stimmen mir die Verzweigung IF und WHILE nicht seht ihr den Fehler ?
N10( KEILNUT STOSSEN )
G49
G28U0W0
G98G17M245
M304
G28H0
G55G0G40
T0737(STOSSWERKZEUH)
G0Z-100.
X18.5Z-10.
(-------------------)
#26=-5.(Z=STARTPUNKT IN Z)
#23=45.(W=INKREMENTALER WER AB STARTPUNKT)
#9=5000(F=VORSCHB IN MM/MIN)
#7=19.62(D=STARTDURCHMESSER)
#2=20(B=BOHRUNGSDURCHMESSER)
#11=3.5(H=NUT HOEHE)
#19=0.06(S=SCHNITTTIEFE IM DURCHMESSER)
#105=#19
(#105= SCHNITTTIEFEN ZAEHLER)
(#100+#101 FUER ALARMBERECHNUNG)
(-------------------)
(- ALARMBERECHNUNG -)
#100=[[#2+2*#11-#7]/#19]
#101=#100
#100=FIX[#100]
IF[#1000EQ#101]GOTO30
#3000=1(SCHNITTIEFE NICHT TEILBAR)
(-------------------)
N30
WHILE[#105NE#2+2*#11-#7]DO1
#105=[#105+#19]
G0X[#7+#105]Z#26
G1G98W#23F5000
X#7
G0Z#26
END1
VIELEN DANK

hallo
Ich würd mal ins blaue schiessen und behaupten dein fett gedrucktes #1000 durch ein #100 ersetzen?
Vielleicht reichts ja schon *g*
gruss geni
Ich würd mal ins blaue schiessen und behaupten dein fett gedrucktes #1000 durch ein #100 ersetzen?
Vielleicht reichts ja schon *g*
gruss geni
--------------------
Meine Beiträge enthalten nur rudimentäre Hilfe, eine detallierte Hilfe bezüglich meiner Beiträge kann man im CNC Arena Chat ersuchen. Detaillierte Hilfe bezüglich CAD, FEA, CFD und derivate wie Bewegungssimulationen auf die von mir unterstützten Systeme können allenfalls gegen ein geringer Obulus ersucht werden.



Level 2 = Community-Facharbeiter


Gruppe: Mitglied
Mitglied seit: 10.10.2006
Beiträge: 141
Mitglied seit: 10.10.2006
Beiträge: 141
Hallo,
ja der Schuß ins blaue ist berechtigt-oder ist die #1000 irgendwo anders bechrieben???
Gruß millingcutter
ja der Schuß ins blaue ist berechtigt-oder ist die #1000 irgendwo anders bechrieben???
Gruß millingcutter

ja Danke da habt Ihr recht das war ein Tippfehler
aber er geht immer noch nicht, die While Schleife will einfach nicht enden.
aber er geht immer noch nicht, die While Schleife will einfach nicht enden.

Gruess dich swatcher;
zum nutenstossen kannst du ganz bequem auch den G71 (laengsdrehzyklus) verwenden.
zum nutenstossen kannst du ganz bequem auch den G71 (laengsdrehzyklus) verwenden.
--------------------
Mfg MORI
“Armselig der Schüler, der seinen Meister nicht übertrifft“
“Armselig der Schüler, der seinen Meister nicht übertrifft“



Level 8 = Community-Ehrenmitglied








Gruppe: Mitglied
Mitglied seit: 20.04.2002
Beiträge: 5.008
Mitglied seit: 20.04.2002
Beiträge: 5.008
Dieses NE gefällt mir nicht. Seit seligen 8bit Basic Zeiten versuche ich den Test auf Gleichheit zu vermeiden. Prüfe lieber auf grösser bzw kleiner(gleich). Wenn da der Rechner irgendwo intern nen kleinen Fehler erzeugt, wirst du bis ans Ende aller Tage niemals einen Abbruch kriegen. Ist übrigens auch vollkommen unabhängig von der Steuerung.
Der Beitrag wurde von uli12us bearbeitet: 18.03.2010, 11:39 Uhr
Der Beitrag wurde von uli12us bearbeitet: 18.03.2010, 11:39 Uhr

Ja uli12us; da muss ich dir voellig recht geben.
Das NE bringt fast immer probleme!
Das NE bringt fast immer probleme!
--------------------
Mfg MORI
“Armselig der Schüler, der seinen Meister nicht übertrifft“
“Armselig der Schüler, der seinen Meister nicht übertrifft“

Halo zusammen
also habe mein Problem gelöst war vermutlich nur ein Schreibfehler habe den Fehler nicht gefunden aber es läuft jetzt.
In bezug auf NE wie äussern sich die Probleme Arbeite schon lange auf Fanuc und habe so etwas noch nie gehört würde mich echt interessieren !
In Bezug auf das nutenstussen mit G71 dachte auch das wäre eine einfache lösung jedoch geht es auf der Maschine nicht ohne das die Spindel Dreht soooo schade
gruss
also habe mein Problem gelöst war vermutlich nur ein Schreibfehler habe den Fehler nicht gefunden aber es läuft jetzt.
In bezug auf NE wie äussern sich die Probleme Arbeite schon lange auf Fanuc und habe so etwas noch nie gehört würde mich echt interessieren !
In Bezug auf das nutenstussen mit G71 dachte auch das wäre eine einfache lösung jedoch geht es auf der Maschine nicht ohne das die Spindel Dreht soooo schade
gruss

Halo zusammen
also habe mein Problem gelöst war vermutlich nur ein Schreibfehler habe den Fehler nicht gefunden aber es läuft jetzt.
In bezug auf NE wie äussern sich die Probleme Arbeite schon lange auf Fanuc und habe so etwas noch nie gehört würde mich echt interessieren !
In Bezug auf das nutenstussen mit G71 dachte auch das wäre eine einfache lösung jedoch geht es auf der Maschine nicht ohne das die Spindel Dreht soooo schade
gruss
also habe mein Problem gelöst war vermutlich nur ein Schreibfehler habe den Fehler nicht gefunden aber es läuft jetzt.
In bezug auf NE wie äussern sich die Probleme Arbeite schon lange auf Fanuc und habe so etwas noch nie gehört würde mich echt interessieren !
In Bezug auf das nutenstussen mit G71 dachte auch das wäre eine einfache lösung jedoch geht es auf der Maschine nicht ohne das die Spindel Dreht soooo schade
gruss
um deinen Fehler raus zufinden nimm doch ein Programm das vergleichen kann !
Was ist NE ???
Kannst du auch bitte das aktuelle Programm nochmal posten?
Gruß Boern
--------------------
Das dringendste Problem der Technologie von heute ist nicht mehr die Befriedigung von Grundbedürfnissen und uralten Wünschen der Menschen, sondern die Beseitigung von Übeln und Schäden, welche uns die Technologie von gestern hinterlassen hat.
Dennis Gabor (1900-79), ungar.-brit. Physiker, Entwickler der Holographie, 1971 Nobelpr.


In bezug auf NE wie äussern sich die Probleme Arbeite schon lange auf Fanuc und habe so etwas noch nie gehört würde mich echt interessieren !
Die Steuerung rechnet Binär. Sprich 1 ist 1 und 2 ist 2 und 16 Millionenirgendwas ist auch noch so aber sobald eine Kommazahl bei einer Berechnung herauskommt die im Dezimalsystem 1,0 ist könnte diese im Binärsystem 1,000000000001 sein und wenn nun 1 mit 1,000000000001 verglichen wird dann sind die beiden nunmal nicht gleich. Deshalb sollte man beim Vergleichen mit EQ, NE darauf achten das die zu vergleichenden Variablen keine Kommazahl enthalten bzw. enthalten werden.
Unter diesem Link habe ich noch eine wie ich finde gute Erklärung der Problematik Dezimal -> Binär und andersrum gefunden.
Der Beitrag wurde von Armageddon bearbeitet: 31.03.2010, 19:01 Uhr



Level 2 = Community-Facharbeiter


Gruppe: Mitglied
Mitglied seit: 10.10.2006
Beiträge: 141
Mitglied seit: 10.10.2006
Beiträge: 141
Hallo,
was die Probleme mit NE betreffen:
Wie schon erwähnt heist es "nicht gleich.
Wenn du beispielsweise einen Zähler gesetzt hast ,der immer 2 weiterzählt und die Abfrage ist
IF #600NE 11. GOTO ... so wird sich dein Zyklus ins unendliche bewegen da 2+2+2+2 u.s.w nie 11 ergeben kann.
Da ist es besser zu definieren IF #600GT11. GOTO ...
Jetzt werden natürlich alle Spezialisten sagen:wie erreiche ich dann die 11?
Indem man nach der Bedingung GT11 eine Bechreibung anfügt;GOTO 5 und dann N5 GOTO #601(#601=11.)
ich hoffe das Hilft etwas
grüßt=millingcutter
was die Probleme mit NE betreffen:
Wie schon erwähnt heist es "nicht gleich.
Wenn du beispielsweise einen Zähler gesetzt hast ,der immer 2 weiterzählt und die Abfrage ist
IF #600NE 11. GOTO ... so wird sich dein Zyklus ins unendliche bewegen da 2+2+2+2 u.s.w nie 11 ergeben kann.
Da ist es besser zu definieren IF #600GT11. GOTO ...
Jetzt werden natürlich alle Spezialisten sagen:wie erreiche ich dann die 11?
Indem man nach der Bedingung GT11 eine Bechreibung anfügt;GOTO 5 und dann N5 GOTO #601(#601=11.)
ich hoffe das Hilft etwas

grüßt=millingcutter

Hallo, würde das wie millincutter beschrieben hat lösen.
solltest dann aber vor dem setzen von dem maß für den letzten bearbeitungsgan noch
If #605GT1 GOTO >>> ende oder nächste Bearbeitung und in dieser aufgerufenen Zeile #605=0
#605=1
jetzt die das Fertigmas setzen und nochmal in die Bearbeitung springen.
Das mit den EQ Vergleich könnte man nur machen, wenn man die Schnitttiefe über die die Gesamttiefe durch die Anzahl der schnitte errechnet. Aber selbst hier kann man das Problem mit der xten Nachkommastelle bekommen.
Z.b. wenn man 2mm tief bearbeitet mit 3 schnitten, dann hat man 0.6periode mm schnittiefe wenn die maschine dieses dann 3 mal addiert, bekommt mann 1.999 heraus. je nach dem wieviel nachkommastellen die maschine rechnet. der nächste wäre dann 2.6666 welchen sie auch machen würde, da 1.99999999999999999999999999999999 nicht gleich 2 waren.
MfG Michael
Der Beitrag wurde von edm-dsc bearbeitet: 31.03.2010, 21:20 Uhr
solltest dann aber vor dem setzen von dem maß für den letzten bearbeitungsgan noch
If #605GT1 GOTO >>> ende oder nächste Bearbeitung und in dieser aufgerufenen Zeile #605=0
#605=1
jetzt die das Fertigmas setzen und nochmal in die Bearbeitung springen.
Das mit den EQ Vergleich könnte man nur machen, wenn man die Schnitttiefe über die die Gesamttiefe durch die Anzahl der schnitte errechnet. Aber selbst hier kann man das Problem mit der xten Nachkommastelle bekommen.
Z.b. wenn man 2mm tief bearbeitet mit 3 schnitten, dann hat man 0.6periode mm schnittiefe wenn die maschine dieses dann 3 mal addiert, bekommt mann 1.999 heraus. je nach dem wieviel nachkommastellen die maschine rechnet. der nächste wäre dann 2.6666 welchen sie auch machen würde, da 1.99999999999999999999999999999999 nicht gleich 2 waren.
MfG Michael
Der Beitrag wurde von edm-dsc bearbeitet: 31.03.2010, 21:20 Uhr

Da ich persönlich versuche so wenig wie möglich GOTO Sprünge einzusetzen könnte man das mit dem Zustellen auch so machen:
N10 #1=25.337(ENDTIEFE)
N20 #2=0.155(ZUSTELLTIEFE)
N30 #3=#5002(STARTPUNKT IN DER ZWEITEN ACHSE BEI DREHMASCHINEN OFT DIE Z-ACHSE)
N40 #4=0(ENDE ERREICHT 0=NEIN / 1=JA)
N50 WHILE[#4NE1]DO1
N60 #5=#3+#2(NAECHSTE TIEFE)
N70 IF[#5GE#1]THEN#5=#1
N80 G1 Z#5 F0.2
N90 G0 Z#3
N100 IF[#5EQ#1]THEN#4=1(TIEFE ERREICHT)
N110 END1
Nur mal so als schnelles Beispiel am Samstagnachmittag. Der Vergleich bei N100 auf Gleichheit funktioniert da durch den Vergleich bei N70 die #5 auf den gleichen Wert wie #1 gesetzt wird wenn die Endtiefe mit der letzten Zustellung erreicht oder überschritten wird. Selbst wenn dort der Binärfehler zum Tragen kommt enthalten beide Variablen dann den selben fehlerhaften Wert und können somit wieder auf Gleicheit verglichen werden.
Ausserdem empfehle ich so wenig wie möglich Globale Variablen einzusetzen. Für einfache Sachen innerhalb des Hauptprogrammes sollte man wenn der Variablenwert nicht noch in einem Unterprogramm verwendet wird immer die #1 bis #33 nehmen. Gerade bei Schleifen oder ähnlichem ist dies Empfehlenswert. Wird ein Macro z.B. durch Aufruf von G65 P.... A.. B.. C.. usw. aufgerufen und stellt einen Zyklus dar, z.B. Bohrzyklus, Gewindestrehlzyklus, usw., so empfiehlt es sich auch dort sofern ausreichend die Variablen #1 bis #33 zu verwenden. Denn die Werte werden ja nur gebraucht so lange der Zyklus ausgeführt wird.
N10 #1=25.337(ENDTIEFE)
N20 #2=0.155(ZUSTELLTIEFE)
N30 #3=#5002(STARTPUNKT IN DER ZWEITEN ACHSE BEI DREHMASCHINEN OFT DIE Z-ACHSE)
N40 #4=0(ENDE ERREICHT 0=NEIN / 1=JA)
N50 WHILE[#4NE1]DO1
N60 #5=#3+#2(NAECHSTE TIEFE)
N70 IF[#5GE#1]THEN#5=#1
N80 G1 Z#5 F0.2
N90 G0 Z#3
N100 IF[#5EQ#1]THEN#4=1(TIEFE ERREICHT)
N110 END1
Nur mal so als schnelles Beispiel am Samstagnachmittag. Der Vergleich bei N100 auf Gleichheit funktioniert da durch den Vergleich bei N70 die #5 auf den gleichen Wert wie #1 gesetzt wird wenn die Endtiefe mit der letzten Zustellung erreicht oder überschritten wird. Selbst wenn dort der Binärfehler zum Tragen kommt enthalten beide Variablen dann den selben fehlerhaften Wert und können somit wieder auf Gleicheit verglichen werden.
Ausserdem empfehle ich so wenig wie möglich Globale Variablen einzusetzen. Für einfache Sachen innerhalb des Hauptprogrammes sollte man wenn der Variablenwert nicht noch in einem Unterprogramm verwendet wird immer die #1 bis #33 nehmen. Gerade bei Schleifen oder ähnlichem ist dies Empfehlenswert. Wird ein Macro z.B. durch Aufruf von G65 P.... A.. B.. C.. usw. aufgerufen und stellt einen Zyklus dar, z.B. Bohrzyklus, Gewindestrehlzyklus, usw., so empfiehlt es sich auch dort sofern ausreichend die Variablen #1 bis #33 zu verwenden. Denn die Werte werden ja nur gebraucht so lange der Zyklus ausgeführt wird.
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: