Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

FOR SCHLEIFE / Label MIT INT VARIABLE

Beitrag 04.05.2017, 14:17 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
Guten Tag zusammen

Ich habe eine Frage bezüglich FOR SCHLEIFE und Label mit einer Integer Variable.
Ich möchte mit einem R-Parameter definieren, wie viele Teile ich bearbeite.
In den Label 1-4 definiere ich jeweils die Nullpunkte. Anschliessend möchte ich mit einer FOR SCHLEIFE und der Integer Variable ANZAHL jeweils zu den entsprechenden Labeln springen. Jedoch funktioniert der Befehl mit dem REPEAT LABELANZAHL nicht.
Hat jemand eine Idee, wie ich dieses Problem lösen kann?
Hier ein Teil des Programms:


N10 DEF INT ANZAHL ; Definition fuer Wiederholungen
N20 R100=4 ; Anzahl Teile fertigen


N80 LABEL1:
xxxNullpunkt 1xxx
N100 ENDLABEL:

N110 LABEL2:
xxxNullpunkt 2xxx
N130 ENDLABEL:

N140 LABEL3:
xxxNullpunkt 3xxx
N160 ENDLABEL:

N170 LABEL4:
xxxNullpunkt 4xxx
N190 ENDLABEL:


N710 LABEL100:

xxxBearbeitungxxx

N840 ENDLABEL:

N850 FOR ANZAHL=1 TO R100
/N860 REPEAT LABELANZAHL
/N870 REPEAT LABEL100
N880 ENDFOR


Vielen Dank.
Gruess Roman
   
Beitrag 04.05.2017, 14:20 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
"Funktioniert nicht" ist keine Fehlerbeschreibung.
   
Beitrag 04.05.2017, 14:43 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
QUOTE (CNCFr @ 04.05.2017, 13:20 Uhr) *
"Funktioniert nicht" ist keine Fehlerbeschreibung.


Die Maschine findet das Sprungziel nicht. Ich kriege einen Fehler "Sprungziel LABELANZAHL nicht gefunden".

Ich möchte den Label-Sprung ja auf den Variablen-Wert "ANZAHL" machen.
Muss ich beim REPEAT LABELANZAHL etwas anders definieren?
   
Beitrag 04.05.2017, 14:56 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Ich sehe auch kein Label dieses Namens in deinem Programmstück.
   
Beitrag 04.05.2017, 15:00 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
QUOTE (CNCFr @ 04.05.2017, 13:56 Uhr) *
Ich sehe auch kein Label dieses Namens in deinem Programmstück.


Ich möchte beim ersten Durchgang auf das Label1 (ANZAHL=1), beim zweiten Durchgang auf das Label2 (ANZAHL=2), beim dritten Durchgang auf das Label3 (ANZAHL=3), und so weiter springen.
   
Beitrag 04.05.2017, 22:14 Uhr
cgTNC
cgTNC
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 21.11.2010
Beiträge: 1.341
QUOTE (mbudget1992 @ 04.05.2017, 14:43 Uhr) *
Die Maschine findet das Sprungziel nicht. Ich kriege einen Fehler "Sprungziel LABELANZAHL nicht gefunden".

Ich möchte den Label-Sprung ja auf den Variablen-Wert "ANZAHL" machen.
Muss ich beim REPEAT LABELANZAHL etwas anders definieren?

Mit REPEAT LABELANZAHL sucht die Steuerung nach dem Label 'LABELANZAHL' das es nicht gibt.
'LABEL' und ANAHL müsste verkettet in einem Stringparameter abgelegt werden.
Dieser kann dann bei REPEAT angegeben werden.

Gruß
cgTNC
   
Beitrag 05.05.2017, 07:19 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
QUOTE (cgTNC @ 04.05.2017, 21:14 Uhr) *
Mit REPEAT LABELANZAHL sucht die Steuerung nach dem Label 'LABELANZAHL' das es nicht gibt.
'LABEL' und ANAHL müsste verkettet in einem Stringparameter abgelegt werden.
Dieser kann dann bei REPEAT angegeben werden.

Gruß
cgTNC


Vielen Dank für die Antwort.
Das LABELANZAHL nicht vorhanden ist war mir klar. Jedoch weiss ich nicht, wie ich diese Int-Variable mit dem LABEL verknüpfen kann.

Wie sieht das mit dem verketten genau aus?
Ich habe vorher ein paar Versuche gemacht, jedoch hat das nicht geklappt. Irgendwo stimmt etwas im Format nicht.
Zuerst definiere ich ja mal die Strings:

DEF INT ANZAHL ; Definition fuer Wiederholungen
DEF STRING[20] WIED
DEF STRING[20] LAB = "LABEL"
R100=10 ; Anzahl Teile fertigen

Anschliessend möchte ich diese in der FOR - Schleife aufrufen:

FOR ANZAHL=1 TO R100
WIED=LAB<<ANZAHL
REPEAT WIED <----- in dieser Zeile stimmt die Formatierung nicht. Wie muss ich das WIED genau aufrufen?
REPEAT LABEL100
ENDFOR

Vielen Dank.

Gruess Roman
   
Beitrag 05.05.2017, 08:08 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
REPEAT "LABEL"<<ANZAHL


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 05.05.2017, 10:26 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
QUOTE (Hexogen @ 05.05.2017, 07:08 Uhr) *
REPEAT "LABEL"<<ANZAHL


Vielen Dank für die Antwort. Ich habe es getestet. Leider funktioniert das auch nicht. Ich bekomme einen Syntaxfehler beim REPEAT "LABEL"<<ANZAHL.

Gruess Roman
   
Beitrag 05.05.2017, 10:51 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
REAPEAT geht damit auch nicht

musst es so machen

CODE
DEF INT ANZAHL


GOTOF TESTEN

LABEL_1:
MSG("TEST_"<<ANZAHL)
M0
GOTOF INFOR

LABEL_2:
MSG("TEST_"<<ANZAHL)
M0
GOTOF INFOR

LABEL_3:
MSG("TEST_"<<ANZAHL)
M0
GOTOF INFOR

LABEL_4:
MSG("TEST_"<<ANZAHL)
M0
GOTOF INFOR

LABEL_5:
MSG("TEST_"<<ANZAHL)
M0
GOTOF INFOR

LABEL_6:
MSG("TEST_"<<ANZAHL)
M0
GOTOF INFOR

LABEL_7:
MSG("TEST_"<<ANZAHL)
M0
GOTOF INFOR

TESTEN:
M0
STOPRE

FOR ANZAHL=1 TO 6
GOTOB "LABEL_"<<ANZAHL
INFOR:
ENDFOR

M0
M30


Der Beitrag wurde von Hexogen bearbeitet: 05.05.2017, 10:53 Uhr


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 05.05.2017, 13:03 Uhr
mbudget1992
mbudget1992
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 04.05.2017
Beiträge: 12
Vielen Dank für die Antwort.
Mit diesem Programmaufbau funktioniert es. Wunderbar smile.gif

Gruess Roman
   
Beitrag 06.05.2017, 13:49 Uhr
Guest_guest_*
Themenstarter
Gast


Wie wär's denn in diesem Fall mit "Unterprogrammtechnik"?
Ein geradezu klassischer Fall !!
CODE
def int anzahl,zaehler
anzahl=5
gotof "Teil"<<zaehler

Teil0:
G54
gotof Bearbeitung

Teil1:
G55
gotof Bearbeitung

Teil2:
G56
gotof Bearbeitung

...

Teil10:
G510
gotof Bearbeitung

Bearbeitung:
Teileprogramm;UP als eigentliches Teileprogramm
zaehler=zaehler+1
if zaehler<anzahl
  gotob "Teil"<<zaehler
endif
zaehler=0
M5
M30

Wird "zaehler" als GUD definiert, oder eine R-Variable verwendet, bliebe auch die Position des aktuellen Werkstücks nach PowerOn Reset erhalten.
   
Beitrag 06.05.2017, 15:03 Uhr
Andy742000
Andy742000
Level 7 = Community-Professor
*******
Gruppe: Banned
Mitglied seit: 15.09.2012
Beiträge: 3.725
Hi

So wie guest schon sagte das ist mehr als nur ein klassischer Fall für eine übersichtliche Unterprogrammtechnik wink.gif

Ich weiss zwar nicht warum man dieses LABEL getue, wie es bei Heidenhain üblich ist, nun auch bei Siemens versucht so konsequent umzusetzen. Es ist eigentlich nur hinderlich. Man erzeugt Ellen langen Code, der kaum noch überschaubar ist, noch ein editieren besonder komfortabel gestallten lässt.

Wenn du auch für die Unterbrechungssituation ein Programmeinstieg benötigst, dann steht es dir frei, auch den Zähler als R- Parameter, oder als GUD Variable zu verwenden.
CODE
%HAUPTPROGRAMM.MPF
R100 = 4; Anzahl der Spannstellen
IF R101 == 1 GOTOF SCHLEIFE:
R101 = R102
SCHLEIFE:
FOR R102 = R101 TO R100
G[08] = R102; NP aufrufen
UP_BEARBEITUNG
ENDFOR
R101 = 1; Startzähler wird wieder auf NP = 1 gesetzt
M30


Du kannst die Zeile G[08] auch durch folgenden Code ersetzen
CODE
EXECSTRING("G"<<53+R102)

Das klappt allerdings nur bis G57 wink.gif

Vor dem ersten Aufruf müsste im Menü Parameter - R- Parameter der Parameter R101 auf 1 gesetzt werden.
Damit kann bei einer Programmunterbrechung das Programm ab der Spannstelle fortgesetzt werden, an welchem diese Unterbrechung stattgefunden hat.
Die Bearbeitung selber steht nun um Unterprogramm "UP_BEARBEITUNG".


--------------------
MfG
Andy

-------------------------------------------------------------------------------------------------------------------------


4 BIT NC, Kugelschrittschaltwerk
Numerik 600 + Lochstreifen
und nun nicht weiter gekommen als bis zur Sinumerik ;-)

PS : Ich hasse R- Parameter ! Aus Rxxx wird unter Beachtung der Mond-Parabel und der "ERDschen" Glockenkurve nach der Division mit PI/8 + Werkhallenhöhe ein neuer sinnvoller Parameter Rxxx

Impressum: Wer Rechtschreib- oder Grammatikfehler findet darf sie behalten, sind kostenlose Beigaben des Autors
   
Beitrag 06.05.2017, 17:41 Uhr
Guest_guest_*
Themenstarter
Gast


QUOTE (Andy742000 @ 06.05.2017, 15:03 Uhr) *
....
Du kannst die Zeile G[08] auch durch folgenden Code ersetzen
QUELLTEXT
EXECSTRING("G"<<53+R102)

Das klappt allerdings nur bis G57 wink.gif
...

Das lässt sich natürlich auch auf die Spitze treiben... wink.gif

Die Variante mit execstring lässt sich aber auch einfach lösen:
R10=Nullpunktnummer:

CODE
if R10<5
  execstring("G"<<53+R10)
else
  execstring("G"<<500+R10)
endif


Der Beitrag wurde von guest bearbeitet: 06.05.2017, 17:43 Uhr
   
Beitrag 06.05.2017, 17:42 Uhr
Andy742000
Andy742000
Level 7 = Community-Professor
*******
Gruppe: Banned
Mitglied seit: 15.09.2012
Beiträge: 3.725
QUOTE (guest @ 06.05.2017, 18:41 Uhr) *
Das lässt sich natürlich auch auf die Spitze treiben... wink.gif

Die Variante mit execstring lässt sich aber auch einfach lösen:
R10=Nullpunktnummer:

CODE
if R10<5
  execstring("G"<<53+R10)
else
  execstring("G"<<500+R10)
endif

Wird bloss nicht bei DMG funktionieren wink.gif

Der Beitrag wurde von Andy742000 bearbeitet: 06.05.2017, 17:48 Uhr


--------------------
MfG
Andy

-------------------------------------------------------------------------------------------------------------------------


4 BIT NC, Kugelschrittschaltwerk
Numerik 600 + Lochstreifen
und nun nicht weiter gekommen als bis zur Sinumerik ;-)

PS : Ich hasse R- Parameter ! Aus Rxxx wird unter Beachtung der Mond-Parabel und der "ERDschen" Glockenkurve nach der Division mit PI/8 + Werkhallenhöhe ein neuer sinnvoller Parameter Rxxx

Impressum: Wer Rechtschreib- oder Grammatikfehler findet darf sie behalten, sind kostenlose Beigaben des Autors
   
Beitrag 06.05.2017, 19:42 Uhr
inaktiv_17
inaktiv_17
Level 3 = Community-Techniker
***
Gruppe: Banned
Mitglied seit: 05.02.2017
Beiträge: 179
Guten Abend,

-guest
Ich würde Dir jetzt einmal die Frage stellen wollen warum Du diesen Programm-Code hier so bereit stellst ?
Dir müsste auf Grund deiner Erfahrung bekannt sein, dass diese Auflösung G5xx nicht nach Handbuch fest- oder vorgeschrieben ist !

Damit kann ich auch für die Maschinenhersteller sprechen, für diese Maschinen die auch bei uns stehen, dass dieses CODE -Konzept nicht aufgeht ! Oder sehen Sie das anders ?
Zum Programm-Code für einen fragenden Forenteilnehmer sollte nicht eine unerkennbare / Unerkenntliche Mischform gewählt werden. Wo und Wie kommt Jetzt Ihr R10 in diese Verbindung mit einem Zähler ?

Schönen Abend

QUOTE (guest @ 06.05.2017, 17:41 Uhr) *
Das lässt sich natürlich auch auf die Spitze treiben... wink.gif

Die Variante mit execstring lässt sich aber auch einfach lösen:
R10=Nullpunktnummer:

CODE
if R10<5
  execstring("G"<<53+R10)
else
  execstring("G"<<500+R10)
endif
   
Beitrag 06.05.2017, 21:22 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
Man muss mal die Kirche im Dorf lassen wink.gif

Ich denk hier mit EXECSTRING was anzufangen wäre so wie mit Dynamit fischen zu gehen.

Allein schon die Variante mit "in die Forschleife zu springen" ist recht "abenteuerlich"

Und ohne genau Randbedienungen zu kennen kann man auch nicht viel zum aktuellen Programm sagen.


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 06.05.2017, 22:40 Uhr
cgTNC
cgTNC
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 21.11.2010
Beiträge: 1.341
An Anfang war das Programm ja gut strukturiert.
Man braucht eigentlich nur diese 2 Sätze einfügen:
N40 LABELANZAHL:
N41 GOTOF "LABEL"<<ANZAHL

Gruß
cgTNC
CODE
N10 DEF INT ANZAHL; Definition fuer Wiederholungen
N20 R100=4; Anzahl Teile fertigen

N40 LABELANZAHL:
N41 GOTOF "LABEL"<<ANZAHL

N80 LABEL1:
xxxNullpunkt 1xxx
N100 ENDLABEL:

N110 LABEL2:
xxxNullpunkt 2xxx
N130 ENDLABEL:

N140 LABEL3:
xxxNullpunkt 3xxx
N160 ENDLABEL:

N170 LABEL4:
xxxNullpunkt 4xxx
N190 ENDLABEL:


N710 LABEL100:

xxxBearbeitungxxx

N840 ENDLABEL:

N850 FOR ANZAHL=1 TO R100
/N860 REPEAT LABELANZAHL
/N870 REPEAT LABE100
N880 ENDFOR
   
Beitrag 07.05.2017, 09:34 Uhr
Guest_guest_*
Themenstarter
Gast


QUOTE (Simtra95 @ 06.05.2017, 19:42 Uhr) *
Guten Abend,

-guest
Ich würde Dir jetzt einmal die Frage stellen wollen warum Du diesen Programm-Code hier so bereit stellst ?
Dir müsste auf Grund deiner Erfahrung bekannt sein, dass diese Auflösung G5xx nicht nach Handbuch fest- oder vorgeschrieben ist !

Damit kann ich auch für die Maschinenhersteller sprechen, für diese Maschinen die auch bei uns stehen, dass dieses CODE -Konzept nicht aufgeht ! Oder sehen Sie das anders ?
Zum Programm-Code für einen fragenden Forenteilnehmer sollte nicht eine unerkennbare / Unerkenntliche Mischform gewählt werden. Wo und Wie kommt Jetzt Ihr R10 in diese Verbindung mit einem Zähler ?

Schönen Abend


Es war ein Vorschlag, der zugegeben nicht bedingungslos auf jeder Version funktionieren muß...

Hier also eine Version die sehr kurz und übersichtlich ist. wink.gif

CODE
def int anzahl,zaehler
anzahl=5
zaehler=2;Index von G54

Nullpunkt:
G[8]=zaehler

Bearbeitung:
Teileprogramm;UP als eigentliches Teileprogramm
zaehler=zaehler+1;Zaehler
if zaehler<=anzahl+2 gotob Nullpunkt  
zaehler=0
M5
M30


Hier wird der Nullpunkt mit seinem Index in der
G-Code-Gruppe 8 aufgerufen (PG-"Liste der G-Funktionen").
Der Syntax ist in PGA "Indirekte Programmierung" beschrieben.

Der Beitrag wurde von CNCFanatiker bearbeitet: 28.07.2017, 11:42 Uhr
   
Beitrag 07.05.2017, 22:50 Uhr
Hexogen
Hexogen
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 29.09.2004
Beiträge: 1.813
QUOTE (cgTNC @ 06.05.2017, 23:40 Uhr) *
An Anfang war das Programm ja gut strukturiert.
Man braucht eigentlich nur diese 2 Sätze einfügen:
N40 LABELANZAHL:
N41 GOTOF "LABEL"<<ANZAHL


man siehts wink.gif viele wege führen nach rom ...


--------------------
Schaut doch mal rein:
Mein Youtube Kanal


Anwendungen, Zyklen, CAD/CAM





-----------------------------------------------------------------------------------------------------------------------------
   
Beitrag 10.05.2017, 10:11 Uhr
Andy742000
Andy742000
Level 7 = Community-Professor
*******
Gruppe: Banned
Mitglied seit: 15.09.2012
Beiträge: 3.725
Hi
QUOTE (Hexogen @ 06.05.2017, 22:22 Uhr) *
Man muss mal die Kirche im Dorf lassen wink.gif

Ich denk hier mit EXECSTRING was anzufangen wäre so wie mit Dynamit fischen zu gehen.

Allein schon die Variante mit "in die Forschleife zu springen" ist recht "abenteuerlich"

Und ohne genau Randbedienungen zu kennen kann man auch nicht viel zum aktuellen Programm sagen.

Das mit dem EXECSTRING ist wirklich nur eine Lösung die schon weit weit weit wink.gif naja es Funktioniert auf jeden Fall wink.gif
Ich glaube nicht, dass ich mit einer Variable direkt "in" eine Schleife gesprungen bin.
Hier hat die FOR- Schleife gegenüber der Zähler und IF - GOTO Methode wirklich den Nachteil, dass man einen Programmeinstieg nach einer Abbruch- Situation nur sehr umständlich bewerkstelligen kann, wenn man nicht wieder bei der ersten Spannstelle beginnen möchte.

Aber auch die von guest aufgezeigte Methode bedarf eines manuellen Eingriffs, direkt in die Variablen / R-Parameter, wenn man nicht mit der ersten Spannstelle beginnen will.

Schöne Woche noch wink.gif


--------------------
MfG
Andy

-------------------------------------------------------------------------------------------------------------------------


4 BIT NC, Kugelschrittschaltwerk
Numerik 600 + Lochstreifen
und nun nicht weiter gekommen als bis zur Sinumerik ;-)

PS : Ich hasse R- Parameter ! Aus Rxxx wird unter Beachtung der Mond-Parabel und der "ERDschen" Glockenkurve nach der Division mit PI/8 + Werkhallenhöhe ein neuer sinnvoller Parameter Rxxx

Impressum: Wer Rechtschreib- oder Grammatikfehler findet darf sie behalten, sind kostenlose Beigaben des Autors
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: