Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

CNC Programm mit Schleife und Bedingung, CNC Programm mit Schleife und Bedingung

Beitrag 20.01.2006, 13:22 Uhr
prak05
prak05
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 17.11.2005
Beiträge: 8
Hallo allerseits,

als nicht allzu versierter CNC Programmierer stehe ich vor einem für mich unlösbaren Problem: coangry.gif

Ich habe ein Programm für eine Dichtungsmaschine, die einen bestimmten Weg abfährt. Ich habe das Programm nun um einen Programmaufruf erweitert und möchte erreichen, dass dieser Programmaufruf nur nach jedem 5.ten Zyklus des Programms aufgerufen wird.
Ich würde dies gerne mit einem Zähler realisieren, der nach jedem Zyklus +1 zählt. Wenn der Wert 5 erreicht ist, soll der Programmaufruf stattfinden.

Kann mir hierbei jemand helfen?? Wäre wirklich wichtig!

Vielen Dank und ein schönes Wochenende

Beste Grüße Prak
   
Beitrag 20.01.2006, 13:34 Uhr
Holger45
Holger45
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 25.04.2004
Beiträge: 1.105
Hallo Prak05,
darf man denn auch erfahren welche Steuerung an deinem Maschinchen ist??

Arbeitet sie in DIN / ISO oder in welcher Programiersprache ?


Gruß
Holger


--------------------
Wenn du heute nur das tust - was du gestern schon getan hast - dann bleibst du auch morgen nur da - wo du heute schon bist

Woran erkennen wir etwas, das noch Technik ist?
Ein guter Fingerzeig: Wenn ein Handbuch dabei ist.


(Douglas Adams 1952-2001)
   
Beitrag 20.01.2006, 14:26 Uhr
prak05
prak05
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 17.11.2005
Beiträge: 8
Also die Maschine: Siemens Sinumerik 810 M
   
Beitrag 20.01.2006, 16:47 Uhr
uli12us
uli12us
Level 8 = Community-Ehrenmitglied
********
Gruppe: Mitglied
Mitglied seit: 20.04.2002
Beiträge: 5.008
Ich weiss nicht wie die M das mit den Parameter macht. Drum beschreib ichs dir einfach so wie ich mir das vorstelle. Umsetzen müssteest dus dann selber.

erstmal den Zähler hochzählen

R1=R1+1
R3=Frac(R1/5);Frac ist Divisionsrest
IF R3=0 dann UPAufruf

Wenn die Steuerung Frac nicht kann dann musst du das so ersetzen
R2=Int(R1/5)
R3=R1/5 - R2
   
Beitrag 20.01.2006, 19:27 Uhr
FANUCER
FANUCER
Level 3 = Community-Techniker
***
Gruppe: Mitglied
Mitglied seit: 13.05.2005
Beiträge: 258
Warum rufst Du nicht das eigentlich Hauptprogramm als Unterprogramm 5x auf und anschl. das weiter Unterprogramm 1x?

Beispiel:

%....
L201 P5
L202 P1
M30
%

@uli12us
Glaube, die 810M kann nur die Grundrechenarten, weshalb Frac/Mod/Int wohl nicht funktionieren wird. Alternativ geht natürlich ein simpler Zähler, welcher im UP wieder auf 0 gesetzt wird ...


Horst


--------------------
Gruss, Horst
   
Beitrag 17.02.2006, 08:44 Uhr
prak05
prak05
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 17.11.2005
Beiträge: 8
Vielen Dank für Eure Hilfe. Ich hab hier mal den Code von meinem Hauptprogramm.
An der Stelle "Zähler" hab ich den Programmaufruf L 178, und dieser soll nun nach jedem 5.ten Mal des MPF´s aufgerufen werden.
Wie kann ich denn den Zähler im UP wieder auf NULL setzen??

Wäre Euch für jegliche Hilfe sehr dankbar .

Beste Grüße Prak wacko.gif

CODE
%MPF  11

N10 R60=26 ( R60 Dosiermenge in % )
N40 R99=66.6 ( R99 Abstreiferhöhe; VERFAHREN UEBER DEM Draht )
N45 R100=1770 ( )


N50 G53 G1 Z0 F15000      
N60 G53 X150 Y700      ( )
N65 @122 R9 K1 K190      
N70 L95    ( Komp. A+B autom. Fuellen )
N170 @121 R48 K0 K190      
N180 L998    ( Fuellprogramm )
N190 @714    ( )
N200 G1 G53 Z=- R99      
N215 @714    ( )
N220 G64 G90 G53    (   ?    )
N225 S= R60    ( Dosierdrehzahlfaktor in % )
N226 M81 M82    ( Dosierpumpen )
N227 M91    ( Dosieren: EIN )
N228 G4 F3    ( Verweilzeit )
N229 M90    ( Dosieren: AUS )
N231 G53 Y650
N232 G53 Z0
N233 @714    ( )
@121 R0 K1 K241      


N240 L= R100      ( )
                   
                                 (:: Zähler)

N250 L = 178      ( Bürsten Programm Aufruf)



R999= R999+0    ( Stückzahlzähler )
M1=51        
@714        ( )
N241 @121 R9 K1 K250      
L900        
N250 @714    ( )
N450 G53 G1 F15000
N460 G53 G90 G1 X271.9 Y502.95 F15000  ( Warteposition)
N465 G53 Z-120
N470 G58 X0 Y0 Z0      ( )
N480 @100 K-233      ( Sprung zurück auf N233 )
N550 M2    ( Hauptprogramm ENDE )
   
Beitrag 17.02.2006, 11:35 Uhr
Armageddon
Armageddon
Level 5 = Community-Ingenieur
*****
Gruppe: Mitglied
Mitglied seit: 09.01.2004
Beiträge: 762
Vielleicht in dem Du am Anfang des Hauptprogrammes einfach Abfragst ob R999=5 ist wenn ja setze R999=0 ?
   
Beitrag 17.02.2006, 15:00 Uhr
prak05
prak05
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 17.11.2005
Beiträge: 8
@ FANUCER:
Wie sähe denn ein einfacher Zähler aus??

Ich hab jetzt mal ein bisschen probiert und folgendes zustandegebracht:

CODE
%MPF  11

..
..

N46 R1000=0    (Bürstenzähler = 0 setzen)
N47 R1001=5    (Anzahl WT´s bis zur Reinigung:Sollzahl)

...
...


R1000 = R1000+1      (Bürstenzähler)
N244 @121 R1000 R1001 K248     (ABFRAGE:Bürstenzähler=Sollzahl WT´s)

N245 L = 178      ( Bürsten Programm Aufruf)


N248

N550 M2    ( Hauptprogramm ENDE )



Hab´s jetzt mal auf diese Weise versucht, bringt aber immer eine Fehlermeldung.
Hoffe Ihr könnt mir helfen? coangry.gif

Vielen Dank im Voraus.
   
Beitrag 17.02.2006, 15:41 Uhr
uli12us
uli12us
Level 8 = Community-Ehrenmitglied
********
Gruppe: Mitglied
Mitglied seit: 20.04.2002
Beiträge: 5.008
Es wär schön wenn du jedesmal wenn so ein Sauschwanzl auftaucht dahinterschreibst was das bewirkt. Mir sagt ein KlammeraffeXXX nämlich leider gar nichts. Aber bei nem auskommentierten Programm kann ich die Funktion nachvollziehen.
   
Beitrag 27.02.2006, 08:41 Uhr
prak05
prak05
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 17.11.2005
Beiträge: 8
Hallo, erstmal danke.

also hier hab ich die Erklärung für den @121:

@121 <Var> <Wert> <Const>
Ist (IF) der mit der Notation <Var> definierte Zahlenwert gleich dem mit <Wert> definierten Zahlenwert, so (THEN) wird das Programm mit dem nächsten Satz fortgesetzt.
Andererseits (ELSE) wird in den mit der Konstanten bestimmten Satz gesprungen.

Beispiel:
@121 R13 R27 K375 LF
Fortsetzung des Programmes, wenn R13=R27, sonst bedingter Sprung auf
Satz N375 in Richtung Programmende.


Deswegen dachte ich, dass ich mit einer einfachen Abfrage, ob mein Zähler (R1000) gleich der Sollzahl an Wt´s (R1001) ist, steuern kann, wann das Bürstenreinigungsprogramm aufgerufen werden soll.

Hoffe, mir kann jetzt jemand helfen. So langsam wird´s brenzlig. wacko.gif

Beste Grüße Prak
   
Beitrag 27.02.2006, 09:04 Uhr
prak05
prak05
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 17.11.2005
Beiträge: 8
Also so sieht mein Code derzeit aus.

Habe meinen nicht funktionierenden Zähler mal eingebaut.


CODE
%MPF  11

N10 R60=26    ( R60 Dosiermenge in % )
N40 R99=66.6    ( R99 Abstreiferhöhe; VERFAHREN UEBER DEM Draht )
N45 R100=1770    ( Diese Zeile je nach Teil angepasst )
N46 R1000=1      (Bürstenzähler = 1 setzen)
N47 R1001=5      (Anzahl WT´s bis zur Reinigung:Sollzahl)

N50 G53 G1 Z0 F15000      ( G53: Rücksprung auf ursprüngliches Koordinaten-System )
N60 G53 X150 Y700      ( G1:  Geradeninterpolation )
N65 @122 R9 K1 K190      ( Abfrage Warnzeit: Wenn R9 = 1 ist dann gehe auf Warteposition über Teil, wenn=0 dann )  

   ( Leerschuss )
N70 L95    ( Komp. A+B autom. Fuellen )
N170 @121 R48 K0 K190      ( Abfrage Mischrohr gefüllt: R48 = 0 ? )
N180 L998    ( Fuellprogramm )
N190 @714    ( Zwischenspeicher löschen )
N200 G1 G53 Z=- R99      ( Variable: R99 für die Abstreiferhöhe )
N215 @714    ( Zwischenspeicher löschen )
N220 G64 G90 G53    
N225 S= R60    ( Dosierdrehzahlfaktor in % )
N226 M81 M82    ( Freigeben der Dosierpumpen )
N227 M91    ( Dosieren: EIN )
N228 G4 F3    ( G4: Verweilzeit )
N229 M90    ( Dosieren: AUS )
N231 G53 Y650
N232 G53 Z0
N233 @714    ( Zwischenspeicher löschen )
@121 R0 K1 K249      ( Teileabfrage: Wenn R0 = 1 ist, dann ist Teil vorhanden -weiter Unterprogramm,wenn nicht -> springe auf Satz 249 )


N240 L= R100    ( Programmaufruf: Variable R100: z.B. 1770 )



R1000 = R1000+1      (Bürstenzähler)
N244 @121 R1000 R1001 K248    (ABFRAGE:Bürstenzähler=Sollzahl WT´s)
   ( Wenn R1000=R1001 dann gehe zu nächstem Satz, wenn R1000!=R1001 gehe zu N248)

N245 L = 178      ( Bürsten Programm Aufruf)
R1000 = 1      ( Rücksetzen des WT-Zählers auf 1 )



N248 @714      ( Zwischenspeicher löschen )
R999= R999+0    ( Stückzahlzähler )
M1=51        ( Teil fertig bearbeitet, Befehl: Band kann weiterlaufen )
@714        ( Zwischenspeicher löschen )
N249 @121 R9 K1 K250      ( Wenn R9 = 1 ist dann gehe auf Warteposition über Teil - Warnzeit;ansonsten gehe auf )  

   ( Becherposition )
L900        
N250 @714    ( Zwischenspeicher löschen )
N450 G53 G1 F15000
N460 G53 G90 G1 X271.9 Y502.95 F15000  ( Warteposition über dem Teil )
N465 G53 Z-120
N470 G58 X0 Y0 Z0      ( Rücksetzen der Nullpunktverschiebung )
N480 @100 K-233      ( Sprung zurück auf N233 )
N550 M2    ( ENDE )
   
Beitrag 28.02.2006, 08:18 Uhr
t4RZ4n
t4RZ4n
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 23.11.2005
Beiträge: 12
QUOTE (prak05 @ 17.02.06 - 15:00)
@ FANUCER:
Wie sähe denn ein einfacher Zähler aus??

Ich hab jetzt mal ein bisschen probiert und folgendes zustandegebracht:

CODE
%MPF  11
..
..
N46 R1000=0    (Bürstenzähler = 0 setzen)
N47 R1001=5    (Anzahl WT´s bis zur Reinigung:Sollzahl)
...
...
R1000 = R1000+1      (Bürstenzähler)
N244 @121 R1000 R1001 K248     (ABFRAGE:Bürstenzähler=Sollzahl WT´s)
N245 L = 178      ( Bürsten Programm Aufruf)

N248

N550 M2    ( Hauptprogramm ENDE )


Hab´s jetzt mal auf diese Weise versucht, bringt aber immer eine Fehlermeldung.
Hoffe Ihr könnt mir helfen? coangry.gif

Vielen Dank im Voraus.

Also... du setzt den Zähler im Moment bei jedem Hauptprogramm-Durchlauf auf Null.
Ausserdem denke ich, dass dein @121 nicht ganz korrekt parametriert ist.

Ich versuch dir mal das Zähler-Grundgerüst zusammen zu stöpseln (mach das aber mit @111, weil alle Variablenwerte abgefragt werden, was Fehler vermeidet) smile.gif

CODE
(------------------------ Abfrage auf Zählerwert und Rücksetzen auf NULL -------------------------)
@111 R1000 K1K1111 K2K1111 K3K1111 K4K1111 K5K1111 K6K1234 (Abfrage auf R1000=1, 2, 3, 4, 5 oder 6)
N11 M00 ( ---------- Zähler  FALSCH ---------- )
@100 K-11 (Rücksprung auf Satz N11)
N1234 R1000=0
(---------------------------------------------------------------------------------------------------)

N1111 ..... (normaler Programmablauf)

(------------------------ Abfrage auf Zählerwert und Aufruf SPF -------------------------)
@111 R1000 K1K2222 K2K2222 K3K2222 K4K2222 K5K2345 (Abfrage auf R1000=1, 2, 3, 4 oder 5)
N11 M00 ( ---------- Zähler  FALSCH ---------- )
@100 K-11 (Rücksprung auf Satz N11)
N2345  L=178      ( Bürsten Programm Aufruf)
@714 (Einlesestop)
N2222 R1000=R1000+1
(---------------------------------------------------------------------------------------------------)

N3333..... (weiterer Programmablauf)


Ist jetzt mal aus dem Kopf ohne Garantie auf Funktion...
Sollte was unklar sein --> einfach fragen!

Hoffe geholfen zu haben biggrin.gif

So long...
   
Beitrag 06.03.2006, 12:22 Uhr
prak05
prak05
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 17.11.2005
Beiträge: 8
Hallo t4RZ4n,

vielen Dank für Deine Hilfe. daumup.gif Hab das jetzt mal ausprobiert und das Programm ist auch gelaufen, aber ohne den erwarteten Bürstenprogramm-Aufruf, der ja nach jedem 5. Werkstückträger stattfinden soll. wacko.gif
Folgende Fehlermeldung wurde am Schluss angezeigt:

"Fehler Nr.: 3012
N0 Satz im Speicher nicht vorhanden."

Frage: Hat das was mit dem M00 zu tun??
Kann ich denn mitten im Programm N11 als Satznummer aufrufen?


Hoffentlich kannst du / könnt ihr mir helfen.


Vielen Dank im Voraus

Prak
   
Beitrag 06.03.2006, 12:45 Uhr
prak05
prak05
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 17.11.2005
Beiträge: 8
Mein Code sieht jetzt folgender maßen aus:

CODE
%MPF  11
( MainProgramFile; Hauptprogramm für Pretema, Preh, Mannesmann Sachs)
( Zugehöriges Spülprogramm ist %95 )

N10 R60=26    ( R60 Dosiermenge in % )
N40 R99=66.6    (  )
N45 R100=1770    ()


N50 G53 G1 Z0 F15000      ( G53: Rücksprung auf ursprüngliches Koordinaten-System )
N60 G53 X150 Y700      ( G1:  Geradeninterpolation )
N65 @122 R9 K1 K190      ( Abfrage Warnzeit: Wenn R9 = 1 ist dann gehe auf Warteposition über Teil, wenn=0 dann )
   ( Leerschuss )
N70 L95    ( Komp. A+B autom. Fuellen )
N170 @121 R48 K0 K190      ( Abfrage Mischrohr gefüllt: R48 = 0 ? )
N180 L998    ( Fuellprogramm )
N190 @714    ( Zwischenspeicher löschen )
N200 G1 G53 Z=- R99      ( Variable: R99 für die Abstreiferhöhe )
N215 @714    ( Zwischenspeicher löschen )
N220 G64 G90 G53    ( G64: Bahnsteuerbetrieb, Richtungswechsel einer Achse ?? )
N225 S= R60    ( Dosierdrehzahlfaktor in % )
N226 M81 M82    ( Freigeben der Dosierpumpen )
N227 M91    ( Dosieren: EIN )
N228 G4 F3    ( G4: Verweilzeit )
N229 M90    ( Dosieren: AUS )
N231 G53 Y650
N232 G53 Z0
N233 @714    ( Zwischenspeicher löschen )
@121 R0 K1 K249      ( Teileabfrage: Wenn R0 = 1 ist, dann ist Teil vorhanden -> weiter, wenn nicht -> N249 )




(------------------------ Abfrage auf Zählerwert und Rücksetzen auf NULL -------------------------)
@111 R1000 K0K240 K1K240 K2K240 K3K240 K4K240 K5K240 K6K235 (Abfrage auf R1000=1, 2, 3, 4, 5 oder 6)
N11 M00    ( ---------- Zähler  FALSCH ---------- )
@100 K-11    (Rücksprung auf Satz N11------von vorne)
N235 R1000=0
(---------------------------------------------------------------------------------------------------)




N240 L= R100    ( Programmaufruf: Variable R100: z.B. 1770 )



(------------------------ Abfrage auf Zählerwert und Aufruf SPF -------------------------)
@111 R1000 K1K243 K2K243 K3K243 K4K243 K5K242 (Abfrage auf R1000=1, 2, 3, 4 oder 5)
N11 M00    ( ---------- Zähler  FALSCH ---------- )
@100 K-11    (Rücksprung auf Satz N10)
N242  L=178      ( Bürsten Programm Aufruf)
@714        (Einlesestop)
N243 R1000=R1000+1
(---------------------------------------------------------------------------------------------------)



R999= R999+0    ( Stückzahlzähler )
M1=51        ( Teil fertig bearbeitet, Befehl: Band kann weiterlaufen )
@714        ( Zwischenspeicher löschen )
N249 @121 R9 K1 K250      ( Wenn R9 = 1 ist dann gehe auf Warteposition über Teil - Warnzeit;ansonsten gehe auf )    
   ( Becherposition und mache Leerschuss )
L900        ( L 900 Programmaufruf 900.txt, "LeerSchuss" )
N250 @714    ( Zwischenspeicher löschen )
N450 G53 G1 F15000
N460 G53 G90 G1 X271.9 Y502.95 F15000  ( Warteposition über dem Teil )
N465 G53 Z-120
N470 G58 X0 Y0 Z0      ( Rücksetzen der Nullpunktverschiebung )
N480 @100 K-233      ( Sprung zurück auf N233 )
N550 M2    ( Hauptprogramm ENDE )
   
Beitrag 06.03.2006, 13:14 Uhr
t4RZ4n
t4RZ4n
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 23.11.2005
Beiträge: 12
QUOTE (prak05 @ 06.03.06 - 12:22)
Folgende Fehlermeldung wurde am Schluss angezeigt:

"Fehler Nr.: 3012
N0 Satz im Speicher nicht vorhanden."

..deutet darauf hin, dass der Satz, der den Fehler verursacht keine Satznummer hat. In dem Fall sollte man alle Sätze (oder nur die verdächtigen) durchnumerieren, um den fehlerhaften Satz zu lokalisieren.

QUOTE
Frage: Hat das was mit dem M00 zu tun??
          Kann ich denn mitten im Programm N11 als Satznummer aufrufen?

...hat nichts mit dem M00 (Programm Halt) zu tun und
...ja, man kann beliebige Satznummern definieren (müssen nicht mathematisch geordnet sein), es darf nur keine Satznummer doppelt vorkommen!!!

QUOTE
Hoffentlich kannst du / könnt ihr mir helfen.

..hoffe ich auch :-)

Übrigens... das Bürstenprogramm sollte eigentlich auch nur nach jedem fünften Durchlauf aufgerufen werden (wenn Parameter R1000 1, 2, 3 oder 4 überspringt er den UP-Aufruf und nur wenn R1000=5 führt er es aus)

Evtl. mal den Sätzen mit @100, @111 und @121 Satznummern verpassen...

So long...
   
Beitrag 07.03.2006, 03:43 Uhr
SipStefan
SipStefan
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 24.06.2002
Beiträge: 358
QUOTE (t4RZ4n @ Montag, 06.03.06 - 13:14 Uhr)
QUOTE (prak05 @ 06.03.06 - 12:22)

Folgende Fehlermeldung wurde am Schluss angezeigt:

"Fehler Nr.: 3012
N0 Satz im Speicher nicht vorhanden."

..deutet darauf hin, dass der Satz, der den Fehler verursacht keine Satznummer hat. In dem Fall sollte man alle Sätze (oder nur die verdächtigen) durchnumerieren, um den fehlerhaften Satz zu lokalisieren.


Ich würde eher davon ausgehen daß ein Satz bzw. eine Satznummer aufgerufen wurde die nicht existiert - oder über einen Fehler in einer Sprungfunktion, Stichwort Minuszeichen, angewählt wurde. Zumindest ist mir die Fehlermeldung unter diesen Symptomen wohlbekannt... tounge.gif

Gruß
Stefan
   
Beitrag 07.03.2006, 07:21 Uhr
t4RZ4n
t4RZ4n
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 23.11.2005
Beiträge: 12
QUOTE (SipStefan @ Dienstag, 07.03.06 - 03:43 Uhr)
Ich würde eher davon ausgehen daß ein Satz bzw. eine Satznummer aufgerufen wurde die nicht existiert - oder über einen Fehler in einer Sprungfunktion, Stichwort Minuszeichen, angewählt wurde. Zumindest ist mir die Fehlermeldung unter diesen Symptomen wohlbekannt...  tounge.gif

Gruß
Stefan

Hallo Stefan,

ja, ist sicher auch möglich... Ich hatte den anderen Fall (mit dem fehlerhaften Satz ohne Satznummer) aber auch schon ganz konkret smile.gif

So long...


edit: was manche Leute nachts um 3:43 Uhr so alles machen *grins* (habe gerade gesehen, wann du gepostest hast) tounge.gif
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: