
z tym że akurat nie mogłem zrobić testów na tokarce dlatego wgrałem go na frezarkę z sterowaniem Sinumerik 810D a podprogram na wyciąganie pręta przerobiłem na wiercenie.
W głównym programie zrobiłem też wiercenie w G54X0Y0Z100 zaś w programie PODAJNIK.SPF to samo wiercenie wykonuje się w G54X100Y0Z100.
Dlatego jak ktoś pracuje na tokarce i interesuje go ten temat to prosił bym o sprawdzenie tego podprogramu chodzi tu o część kodu zaczynającego się od N170 a kończącego na N245.
Poniżej dwa filmiki z wywołaniem podprogramu w ShopMill i w G-Code (ISO).
Poprawiony kod cyklu z komentarzami dla użytkowników forum:
Kod: Zaznacz cały
;%_N_PODAJNIK_SPF
;$PATH=/_N_CUS_DIR
N100 PROC PODAJNIK(INT _USRT,REAL RAPID_X,REAL RAPID_Z,REAL _PZ0,REAL _PZ1,STRING[8] ODJAZD,INT SZTUKI,INT N_POWROTU) DISPLOF SBLOF
;----------------------------------------------------
;Cykl automatycznego podajnika pręta
; Data: 01.06.2014
;Autor : Artur Paszek / http://www.cnc.info.pl/djronin,u,32129.htm
;Cykl napisany na potrzeby użytkowników forum www.cnc.info.pl
;----------------------------------------------------
; HISTORIA:
; 02.06.2014 Artur: Zamiana miejsc dwóch ostatnich argumentów, jeśli
; podamy ostatni argument (numer bloku) program
; będzie wracał do tego numeru jeśli go opuścimy
; powrót nastąpi do "N5" (ShopTurn)
; Poprawienie licznika powtórzeń (robił o 1 więcej)
; Dodanie licznika (systemowego) dla każdego przejścia
; 01.06.2014 Artur: Pierwsze wydanie.
N105 DEF REAL POSUW[3], PAUZA[2]
N110 DEF INT _RLN, S_N_RET
N115 DEF BOOL AC_SPART
;----------------------------------------------------
;USTAWIENIA STALE:
;
N120 POSUW[0] = 1000 ;mm/min - posuw chwytania
N125 POSUW[1] = 1000 ;mm/min - posuw wysuwania
N130 POSUW[2] = 1000 ;mm/min - posuw odczepiania
N135 PAUZA[0] = 0.8 ;czas otwarcia [sekunda]
N140 PAUZA[1] = 1 ;czas zamknięcia [sekunda]
N145 _RLN = 1 ;numer parametru r do danych licznika
N150 S_N_RET = 5 ;blok powrotu dla shopturn = 5
N155 AC_SPART = 1 ;0-1 licznik dla każdego przejścia
;----------------------------------------------------
N160 GOTOF _LST
_PODS:
N165 SBLON
N170 f_home ;Najazd na ptk wymiany narzędzia
N175 T=_USRT ;M6 ;Wybranie narzędzia w razie potrzeby dodać m6
N180 MSG("Pozostało "<<R[_RLN]<<" cykli programu") ;
N185 G90 G0 G94 G18 ;Wymiar abs, rapid feed, mm/min, g18
N190 M9 M5 ;Chłodziwo wył, obroty stop
N195 G0 X=RAPID_X Z=RAPID_Z ;Pozycja bezpieczna xz
N200 G1 Z=_PZ0 F=POSUW[0] ;Najazd na pozycje chwytania
N205 M67 ;<<dopasuj kod m dla swojej maszyny ;Otwarcie zacisku wrzeciona, ewentualnie m27, m10
N210 G4 F=PAUZA[0] ;Przerwa czasowa otwarcia
N215 G1 Z=_PZ1 F=POSUW[1] ;Wysuniecie pręta
N220 STOPRE ;Zatrzymanie przebiegu wyprzedzającego
N225 M68 ;<<dopasuj kod m dla swojej maszyny ;Zamkniecie zacisku wrzeciona, ewentualnie m28, m11
N230 G4 F=PAUZA[1] ;Przerwa czasowa zamknięcia
N235 EXECSTRING("G91G1"<<ODJAZD<<"F=POSUW[2]") ;Realizacja odczepiania
N240 G90 G00 ;
N245 f_home ;Najazd na ptk wymiany narzędzia
N250 SBLOF
_PODE:
;Sprawdza czy nasz licznik globalny (par. "r")
;nie wykracza poza dopuszczalny zakres
_LST:
N255 IF (R[_RLN] < 0) OR (R[_RLN] > SZTUKI) ;czy nasz licznik "r" jest ujemny, lub większy od podanej liczby szt.
N260 R[_RLN]=SZTUKI ;jeśli prawda inicjuje licznik na podaną liczbę do obróbki
N265 ENDIF
;czy podalismy x lub z
N270 IF(SUBSTR(ODJAZD,0,1)=="X")OR(SUBSTR(ODJAZD,0,1)=="Z") GOTOF _STROK
N610 _ERR1:MSG("POPRAW DANE ODJAZDU!!")
N275 G4F1.5
N280 MSG()
N285 G4F1.3
N290 GOTOB _ERR1
_STROK:
;sprawdza czy podaliśmy numer bloku powrotu
N295 IF N_POWROTU GOTOF _NNT
N300 N_POWROTU = S_N_RET
_NNT:
N305 IF (R[_RLN]-1) <> 0
N310 R[_RLN]=R[_RLN]-1
N315 IF AC_SPART
N320 $AC_ACTUAL_PARTS=$AC_ACTUAL_PARTS+1
N325 ENDIF
N330 REPEAT _PODS _PODE P=1
N335 RET("N"<<N_POWROTU,0)
N340 ELSE
N345 f_home
N350 R[_RLN]=SZTUKI
N355 RET
N360 ENDIF
Wersja do wgrania na maszynę:
Kod: Zaznacz cały
;%_N_PODAJNIK_SPF
;$PATH=/_N_CUS_DIR
N100 PROC PODAJNIK(INT _USRT,REAL RAPID_X,REAL RAPID_Z,REAL _PZ0,REAL _PZ1,STRING[8] ODJAZD,INT SZTUKI,INT N_POWROTU) DISPLOF SBLOF
;----------------------------------------------------
;Cykl automatycznego podajnika pręta
; Data: 01.06.2014
;Autor : Artur Paszek / http://www.cnc.info.pl/djronin,u,32129.htm
;Cykl napisany na potrzeby użytkowników forum www.cnc.info.pl
;----------------------------------------------------
; HISTORIA:
; 02.06.2014 Artur: Zamiana miejsc dwóch ostatnich argumentów, jeśli
; podamy ostatni argument (numer bloku) program
; będzie wracał do tego numeru jeśli go opuścimy
; powrót nastąpi do "N5" (ShopTurn)
; Poprawienie licznika powtórzeń (robił o 1 więcej)
; Dodanie licznika (systemowego) dla każdego przejścia
; 01.06.2014 Artur: Pierwsze wydanie.
N105 DEF REAL POSUW[3], PAUZA[2]
N110 DEF INT _RLN, S_N_RET
N115 DEF BOOL AC_SPART
;----------------------------------------------------
;USTAWIENIA STALE:
;
N120 POSUW[0] = 1000 ;mm/min - posuw chwytania
N125 POSUW[1] = 1000 ;mm/min - posuw wysuwania
N130 POSUW[2] = 1000 ;mm/min - posuw odczepiania
N135 PAUZA[0] = 0.8 ;czas otwarcia [sekunda]
N140 PAUZA[1] = 1 ;czas zamknięcia [sekunda]
N145 _RLN = 1 ;numer parametru r do danych licznika
N150 S_N_RET = 5 ;blok powrotu dla shopturn = 5
N155 AC_SPART = 1 ;0-1 licznik dla każdego przejścia
;----------------------------------------------------
N160 GOTOF _LST
_PODS:
N165 SBLON
N170 f_home
N175 T=_USRT ;M6
N180 MSG("Pozostało "<<R[_RLN]<<" cykli programu") ;
N185 G90 G0 G94 G18
N190 M9 M5
N195 G0 X=RAPID_X Z=RAPID_Z
N200 G1 Z=_PZ0 F=POSUW[0]
N205 M67
N210 G4 F=PAUZA[0]
N215 G1 Z=_PZ1 F=POSUW[1]
N220 STOPRE
N225 M68
N230 G4 F=PAUZA[1]
N235 EXECSTRING("G91G1"<<ODJAZD<<"F=POSUW[2]")
N240 G90 G00
N245 f_home
N250 SBLOF
_PODE:
;Sprawdza czy nasz licznik globalny (par. "r")
;nie wykracza poza dopuszczalny zakres
_LST:
N255 IF (R[_RLN] < 0) OR (R[_RLN] > SZTUKI)
N260 R[_RLN]=SZTUKI
N265 ENDIF
;czy podalismy x lub z
N270 IF(SUBSTR(ODJAZD,0,1)=="X")OR(SUBSTR(ODJAZD,0,1)=="Z") GOTOF _STROK
N610 _ERR1:MSG("POPRAW DANE ODJAZDU!!")
N275 G4F1.5
N280 MSG()
N285 G4F1.3
N290 GOTOB _ERR1
_STROK:
;sprawdza czy podaliśmy numer bloku powrotu
N295 IF N_POWROTU GOTOF _NNT
N300 N_POWROTU = S_N_RET
_NNT:
N305 IF (R[_RLN]-1) <> 0
N310 R[_RLN]=R[_RLN]-1
N315 IF AC_SPART
N320 $AC_ACTUAL_PARTS=$AC_ACTUAL_PARTS+1
N325 ENDIF
N330 REPEAT _PODS _PODE P=1
N335 RET("N"<<N_POWROTU,0)
N340 ELSE
N345 f_home
N350 R[_RLN]=SZTUKI
N355 RET
N360 ENDIF