Znaleziono 1 wynik

autor: conor87
06 sie 2013, 17:33
Forum: Software
Temat: Prosty skrypt na przeliczanie parametrów + inne
Odpowiedzi: 3
Odsłony: 6135

Wstawiam kod na postprocesor. Program wczytuje clfile i tworzy nc. Testowany na PROE i fanuc control. Jeszcze sporo do zrobienia - cykle. Nie mam teraz na to czasu (małe dziecko ma wielką moc pożytkowania tacie czasu).

Kod: Zaznacz cały

#-*- coding: utf-8 -*-

import time

print '''
**********************
Postprocesor dzialajacy na podstawie
pliku CL FILE
**********************
'''

#pliki
zrodlo="seq0005.ncl.1"   #skad pobrac clfile
cel="o0005.nc"			 #plik docelowy



#*****************************************
#zmienne globalne

X_zapis=0.0000001
Y_zapis=0.0000001
Z_zapis=0.0000001
I_zapis=0.0000001
J_zapis=0.0000001
K_zapis=0.0000001
blok=''



czas=time.time() 
nazwa=cel.replace('.nc','') 



#*******************************************************************
#otworzenie pliku w celu sprawdzenia jego dlugosci
linie=open(zrodlo).readlines() 
docel=open(cel,'w') 

naglowek='''(PROGRAM TESTOWY) 
(POSTPROCESOR PYTHON 2.7.0) 
(AUTOR KD) 
(VER1 1.03.2013) 
(FUNKCJE PRZYGOTOWAWCZE) 
G54 G90 G40
(CAM) 
'''


docel.write(nazwa+'\n') 
docel.write(naglowek) 
docel.close() 

#ilosc linii
dlug=len(linie) 
print 'Ilosc linii w pliku CL = %s\n' %dlug

#*******************************************************************

#otworzenie pliku w celu analizy
plik=open(zrodlo).read() 

#Wyswietlenie zawartosci pliku CL
print '''Zawartosc pliku CL: 

 %s
Koniec pliku CL FILE''' %plik

print 'Poczatek analizy oraz generowania nc'
print nazwa
print naglowek
#Funkcja analizujaca pojedyncza linie pliku CL
def analizuj(linie,a): 
	
	global X_zapis
	global Y_zapis
	global Z_zapis
	global I_zapis
	global J_zapis
	global K_zapis
	global blok
	#analiza pliku 
#**************************************************************
	
	#poszukiwanie ruchu szybkiego lub posuwu F (okreslenie G00 lub G01 F) 
	test=linie[a].find('RAPID') 
	global GR
	if test != -1: 
		GR='G00'
		#print 'ruch %s' %GR
	test=linie[a].find('FEDRAT') 
	if test != -1: 
		GR='G01'
		tool=linie[a].split() 			#podzial linii na slowa
		fedrat=tool[2].replace(',','') 		#kasowanie przecinka
		fedrat=float(fedrat) 
		blok='F%.0f\n'%fedrat
		print blok
		
		zapis = open(cel,'a') 
		zapis.write(blok) 
		zapis.close() 
		
		
		return
#*************************************************************
	
	#poszukiwanie interpolacji liniowej
	test=linie[a].find('GOTO') 
	if test != -1: 
		if GR !='G00' and GR !='G01': 
			exit() 
		#wyswietl X
		tool=linie[a].split() 			#podzial linii na slowa
		X=tool[2].replace(',','') 		#kasowanie przecinka
		X=float(X)						#zaokraglanie
		#print 'X%.3f' %X
				
		#wyswietl Y
		Y=tool[3].replace(',','') 
		Y=(float(Y)) 
		#print 'Y%.3f' %Y
		
		#wyswietl Z
		Z=tool[4].replace(',','') 
		Z=(float(Z)) 
		#print 'Z%.3f' %Z
		
		if X_zapis == X: 
			blokX=''
			
		else: 
			X_zapis=X
			blokX = 'X%.3f' %X_zapis
			
		
		if Y_zapis == Y: 
			blokY=''
		else: 
			Y_zapis=Y
			blokY = 'Y%.3f' %Y_zapis
			
		if Z_zapis == Z: 
			blokZ=''
		else: 
			Z_zapis=Z
			blokZ = 'Z%.3f' %Z_zapis
		
		blok = '%s'%GR+blokX+blokY+blokZ+'\n'
		
		#print blok
		
		if blok!='G01\n': 
			print blok
			zapis = open(cel,'a') 
			zapis.write(blok) 
			zapis.close() 
		
			
			
		
		
		return
#****************************************************************
	
	#poszukiwanie interpolacji kolowej
	test=linie[a].find('CIRCLE') 
	if test != -1: 
		tool2=linie[a].split() 
		tool3=linie[a+1].split() 
		tool4=linie[a+2].split() 
		#print tool2, tool3, tool4
		
		X=tool4[2].replace(',','') 
		X=(float(X)) 
		Y=tool4[3].replace(',','') 
		Y=(float(Y)) 
		Z=tool4[4].replace(',','') 
		Z=(float(Z)) 
		I=tool2[2].replace(',','') 
		I=(float(I)) 
		J=tool2[3].replace(',','') 
		J=(float(J)) 
		K=tool2[4].replace(',','') 
		K=(float(K)) 
		if float(tool3[2].replace(',',''))<0: 
			G='G02'
			#print tool3[2] 
		if float(tool3[2].replace(',',''))>0: 
			#print tool3[2] 
			G='G03'		
			
			#*****************
		if X_zapis == X: 
			blokX=''
		else: 
			X_zapis=X
			blokX = 'X%.3f' %X_zapis
		
		if Y_zapis == Y: 
			blokY=''
		else: 
			Y_zapis=Y
			blokY = 'Y%.3f' %Y_zapis
			
		if Z_zapis == Z: 
			blokZ=''
		else: 
			Z_zapis=Z
			blokZ = 'Z%.3f' %Z_zapis
		
		if I_zapis == I: 
			blokI=''
		else: 
			I_zapis=I
			blokI = 'I%.3f' %I_zapis
			
		if J_zapis == J: 
			blokJ=''
		else: 
			J_zapis=J
			blokJ = 'J%.3f' %J_zapis
		
		if K_zapis == K: 
			blokK=''
		else: 
			K_zapis=K
			blokK = 'K%.3f' %K_zapis

			#*****************
			
		blok = '%s'%G+blokX+blokY+blokZ+blokI+blokJ+blokK+'\n'
		print blok
		
		zapis = open(cel,'a') 
		zapis.write(blok) 
		zapis.close() 
		
		
		return
		
#****************************************************************
	#poszukiwanie narzedzia
	test=linie[a].find('LOADTL') 
	if test != -1: 
		#print 'narzedzie w linii %s' %(str(a)) 
		tool=linie[a].split() 			#podzial linii na slowa
		T=tool[2].replace(',','') 		#kasowanie przecinka
		T=float(T)						#zaokraglanie
		tool=linie[a] 
		blok='T%0.f M06\nH%0.f\n' %(T,T) 
		print blok
		
		zapis = open(cel,'a') 
		zapis.write(blok) 
		zapis.close() 
		
		
		return
		
#****************************************************************
	#poszukiwanie obrotow
	test=linie[a].find('SPINDL') 
	if test != -1: 
		tool=linie[a].split() 			#podzial linii na slowa
		if tool[2].replace(',','')=='RPM': 
			S=tool[3].replace(',','') 		#kasowanie przecinka
			S=float(S)						#zaokraglanie
			blok='S%0.f M03\n' %S
		if tool[2].replace(',','')=='OFF': 
			blok='M05\n'
		print blok
		
		zapis = open(cel,'a') 
		zapis.write(blok) 
		zapis.close() 
		
		
		return
		
#*********************************************************************
	#poszukiwanie konca
	test=linie[a].find('FINI') 
	if test != -1: 
		blok='M30\n'
		print blok
		
		zapis = open(cel,'a') 
		zapis.write(blok) 
		zapis.close() 
		
		
		return

		blok=''
for i in range(dlug): 
	analizuj(linie,i) 
	


print 'Czas dzialania programu %f %s' %(time.time()-czas, 'sekund') 

Plik clfile:

Kod: Zaznacz cały

$$*          Pro/CLfile  Version Wildfire 5.0 - M050
$$-> MFGNO / POST
PARTNO / POST
$$-> FEATNO / 97
MACHIN / UNCX01, 1
$$-> CUTCOM_GEOMETRY_TYPE / OUTPUT_ON_CENTER
UNITS / MM
LOADTL / 1
$$-> CUTTER / 20.000000
$$-> CSYS / 1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000,  $
            0.0000000000, 1.0000000000, 0.0000000000, 0.0000000000,  $
            0.0000000000, 0.0000000000, 1.0000000000, 0.0000000000
SPINDL / RPM, 8000.000000,  CLW
RAPID 
GOTO / 0.0000000000, 0.0000000000, 200.0000000000
RAPID 
GOTO / 0.0000000000, 0.0000000000, 2.0000000000
FEDRAT / 1000.000000,  MMPM
GOTO / 0.0000000000, 0.0000000000, -200.0000000000
GOTO / -45.0000000000, -60.0000000000, -200.0000000000
CIRCLE / -45.0000000000, -30.0000000000, -200.0000000000,  $
0.0000000000, 0.0000000000, -1.0000000000,  30.0000000000
GOTO / -75.0000000000, -30.0000000000, -200.0000000000
GOTO / 0.0000000000, 0.0000000000, -200.0000000000
GOTO / 0.0000000000, 0.0000000000, 200.0000000000
SPINDL / OFF
$$-> END / 
FINI 
Gotowy plik NC:

Kod: Zaznacz cały

o0005
(PROGRAM TESTOWY) 
(POSTPROCESOR PYTHON 2.7.0) 
(AUTOR KD) 
(VER1 1.03.2013) 
(FUNKCJE PRZYGOTOWAWCZE) 
G54 G90 G40
(CAM) 
T1 M06
H1
S8000 M03
G00X0.000Y0.000Z200.000
G00Z2.000
F1000
G01Z-200.000
G01X-45.000Y-60.000
G02X-75.000Y-30.000I-45.000J-30.000K-200.000
G01X0.000Y0.000
G01Z200.000
M05
M30

Wróć do „Prosty skrypt na przeliczanie parametrów + inne”