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')
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
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