여기서 다루는 포스트파일은 mpfan.pst 와 mpfan.txt 를 사용합니다.
=============== 시작 =================
--------------------------------------
포스트 파일은?
--------------------------------------
마캠은 자신의 가공정보를 nci 파일에 저정한다. 여기까진 마캠 자체포멧으로
같은 스타일로 저장된다
그런데 최종 결과물인 .nc 파일은 사용자마다 원하는 결과물이 틀리고
기계마다또한 사용코드가 틀리므로 변경해줘야 할 필료가 있다.
그래서 이 중간에 끼어드는 파일이 포스트 파일이며 이 파일의 내용에따라
결과물이 틀려지게 되는 것이다.
사실상 모든가공정보는 .nci 파일에 들어있고 포스트파일을 이용해서 변경 출력할 뿐이다.
--------------------------------------
mpfan.pst 과 mpfan.txt 의 관계.
--------------------------------------
mpfan.pst : 사용자에 따라 출력파일의 결과물이 달라진다 즉 포스트파일이다.
mpfan.txt : 사용자에 따라 가공관리자의 일부 메뉴를 달리할수있다. 드릴싸이클이 적합하다.
1. 위의 두파일은 항상 쌍으로 붙어다니며 만약 mpfan.txt 이 없다면 일부 메뉴는
영문으로 나온다.
2. mpfan.txt 파일에 저장된메뉴가 한글이냐 영문이냐에따라
드릴싸이클 메뉴에 영향을 미치게 된다.
3. mpfan.txt 의 내용은 사용자의 입맛에 맞게 고칠수있다 (주로 드릴싸이클이 들어있다)
--------------------------------------
포스트파일 의 특성
--------------------------------------
1. 포스트파일의 언어는 비쥬얼베이직 인터프리터 형식이다.
2. # 문자 다음에 오는 문자는 주석으로 처리된다 즉 무시된다.
3. 서브루틴인 함수명은 첫글자가 반드시 p 로 시작한다
ex) pheader
4. 함수는 사용자가 만들수있느것과 마캠에서 제공하는 일종의 시스템함수로 나뉜다.
5. 각종변수에는 타입이 있다 문자,실수,정수, 등 ...
6. 포스트파일은 .nci 파일을 토대로 프로세싱한다.
--------------------------------------
포스트파일 의 구성
--------------------------------------
1. 시스템 및 옵션변수 선언부.
2. 각종 싸이클 변수 선언부.
3. 사용자 변수 선언부.
4. 루틴 구현부.
5. 기타 설정부.
--------------------------------------
mpfan.pst 의 흐름
--------------------------------------
1. 변수초기화.
2. 헤더부 실행.
3. 툴정보 추출.
4. 본격적인 가공루틴 처음실행부
5. 툴교환정보가 있을시 툴첸지 루틴
6. 가공루틴
7. 가공루틴 끝 실행부
2부
# Post Name : MPHEID
# Product : MILL
# Machine Name : HEIDENHAIN
# Control Name : HEIDENHAIN
# Description : GENERIC HEIDENHAIN 3 AXIS POST
# Associated Post : NONE
# Mill/Turn : NO
# 4-axis/Axis subs. : NO
# 5-axis : NO
# Subprograms : NO
# Executable : MP 9.0
#
# WARNING: THIS POST IS GENERIC AND IS INTENDED FOR MODIFICATION TO
# THE MACHINE TOOL REQUIREMENTS AND PERSONAL PREFERENCE.
#
# ---------------
#| REVISION LOG |
# ------------------------------------------------------------------------
윗부분은 주석문들인데 뭐 만든사람 버전 적용머신 수정사항 등등 이 있습니다?
필요하다면 여러분의 이름도 슬쩍 끼워넣어도 됩니다.
이곳부터는 상수 선언부 입니다 앞으로 포스트내에서
다음과 같은 단어가 있고 내용을 모른다면 이곳을 찾아보면 됩니다.
하지만 즉설적인 단어들이라 걍 봥도 척...
즉 아레의 m_one 는 즉 -1 이라고 생각하면 됩니다.
m_one : -1 # -1 값을 선언합니다
zero : 0 # 0 값을 선언합니다
one : 1 # 1 값을 선언합니다
two : 2 # 2 값을 선언합니다
three : 3 # 3 값을 선언합니다
four : 4 # 4 값을 선언합니다
five : 5 # 5 값을 선언합니다
c9k : 9999 # 9999 값을 선언합니다
이부분은 포스트파일을 디버깅할때 쓰입니다.
주로 고급유저가 사용하는 부분으로 포스트의 실행순서를 알아내고
버그를 잡아낼수있읍니다
fastmode : yes #Enable Quick Post Processing, (set to no for debug)
bug1 : 2 #0=No display, 1=Generic list box, 2=Editor
bug2 : 40 #Append postline labels, non-zero is column position?
bug3 : 0 #Append whatline number to each NC line?
bug4 : 1 #Append NCI line number to each NC line?
whatno : yes #Do not perform whatline branches? (leave as yes)
코드 형식과 툴테이블 형식을 정합니다
저두 자세한건몰라서 설명또한 아리송 하네요.
get_1004 : 1 #Find gcode 1004 with getnextop?
rpd_typ_v7 : 0 #Use Version 7 style contour flags/processing?
strtool_v7 : 2 #Use Version 7+ toolname?
tlchng_aft : 2 #Delay call to toolchange until move line
cant_tlchng : 1 #Ignore cantext entry on move with tlchng_aft
newglobal : 1 #Error checking for global variables
getnextop : 0 #Build the next variable table
전역적인 세팅부분입니다 포스트파일 전체에 영향을 미칩니다
# --------------------------------------------------------------------------
# General Output Settings
# --------------------------------------------------------------------------
sub_level : 1 #Enable automatic subprogram support
자동으로 보조프로그램을 작성할것인가
breakarcs : 2 #Break arcs, 0 = no, 1 = quadrants, 2 = 180deg. max arcs
완전한 원호일경우의 출력스타일
0=풀원호 (1개로 생성), 1= 90도로 끊어서 2=180도로 끊어서
arcoutput : 1 #0 = IJK, 1 = R no sign, 2 = R signed neg. over 180
원호 출력형식
0=ijk 1= R 로 2=모름
arctype : 2 #Arc center 1=abs, 2=St-Ctr, 3=Ctr-St, 4=unsigned inc.
원호 중심점 출력형태 절대치,증분치
do_full_arc : 0 #Allow full circle output? 0=no, 1=yes
풀원호 출력을 하는가 마는가
helix_arc : 2 #Support helix arc output, 0=no, 1=all planes, 2=XY plane only
헬릭스 원호출력은 어느평면에서 할것인가 0=안한다 1=모든평면 2=xy 평면
ccheck : 3 #Check for small arcs, convert to linear
atol : .01 #Angularity tolerance for arccheck = 2
ltol : .002 #Length tolerance for arccheck = 1
vtol : .0001 #System tolerance
여긴 공차관련사항 입니다
maxfeedpm : 500 #Limit for feed in inch/min
최대 이송송도 제한 (인치의 경우)
ltol_m : .05 #Length tolerance for arccheck = 1, metric
vtol_m : .0025 #System tolerance, metric
마캠 시스템 공차설정
maxfeedpm_m : 10000 #Limit for feed in mm/min
최대 이송송도 제한 (미터계의 경우)
force_wcs : yes #Force WCS output at every toolchange?
spaces : 0 #Number of spaces to add between fields
워드사이의 간격. 단위는 문자. (1로설정하는것이 보기좋음)
omitseq : no #Omit sequence numbers?
시퀀스번호 최적화 출력여부 no=출력 yes=출력안함
seqmax : 9999 #Max. sequence number
시퀀스번호 최대치 (9999가 넘으면 어떻게 될까? 궁굼)
stagetool : 0 #0 = Do not pre-stage tools, 1 = Stage tools
프로그램 끝나는 부분에서 처음에사용되는 툴을 불러놓을 것인가
0=안한다 1= 툴첸지 해 놓는다
use_gear : 0 #Output gear selection code, 0=no, 1=no
모름 (아마도 어떤기계에서 현제회전수에맞는 최적의 기어비를 찾는게 있는거 같음)
max_speed : 10000 #Maximum spindle speed
최대 회전수
min_speed : 50 #Minimum spindle speed
최소 회전수
nobrk : no #Omit breakup of x, y & z rapid moves
progname : 1 #Use uppercase for program name (sprogname)
프로그램이름 변수 (소문자를 대문자변환)
tooltable : 3 # Read for tool table and pwrtt
이건 mpfan 에는 빠진 항목입니다.
이 옵션을 사용함으로서 프로그램 선두에 툴정보를 표시할수 있읍니다
그리고 이옵션이 정상적으로 작동되려면 뒤에 pwrtt 루틴이 추가되야 합니다
로타리 테이블 관련. 관심있게 안봐서 본인도 모름.
# --------------------------------------------------------------------------
# Rotary Axis Settings
# --------------------------------------------------------------------------
vmc : 1 #0 = Horizontal Machine, 1 = Vertical Mill
rot_on_x : 1 #Default Rotary Axis Orientation, See ques. 164.
#0 = Off, 1 = About X, 2 = About Y, 3 = About Z
rot_ccw_pos : 1 #Axis signed dir, 0 = CW positive, 1 = CCW positive
index : 0 #Use index positioning, 0 = Full Rotary, 1 = Index only
ctable : 5 #Degrees for each index step with indexing spindle
use_frinv : 0 #Use Inverse Time Feedrates in 4 Axis, (0 = no, 1 = yes )
maxfrdeg : 2000 #Limit for feed in deg/min
maxfrinv : 999.99#Limit for feed inverse time
frc_cinit : 1 #Force C axis reset at toolchange
ctol : 225 #Tolerance in deg. before rev flag changes
ixtol : .01 #Tolerance in deg. for index error
frdegstp : 10 #Step limit for rotary feed in deg/min
아레의 가공싸이클을 쓸것인가에 대해서.
# --------------------------------------------------------------------------
# Enable Canned Drill Cycle Switches
# --------------------------------------------------------------------------
usecandrill : yes #Use canned cycle for drill
usecanpeck : yes #Use canned cycle for Peck
usecanchip : yes #Use canned cycle for Chip Break
usecantap : yes #Use canned cycle for Tap
usecanbore1 : yes #Use canned cycle for Bore1
usecanbore2 : yes #Use canned cycle for Bore2
usecanmisc1 : yes #Use canned cycle for Misc1
usecanmisc2 : yes #Use canned cycle for Misc2
사용자 변수선언 그리고 초기화
mpfan에서 사용하고있는 변수들입니다 당연히 다른포스트에선 없을수도 있읍니다
# --------------------------------------------------------------------------
# Common User-defined Variable Initializations (not switches!)
# --------------------------------------------------------------------------
xia : 0 #Formated absolute value for X incremental calculations
yia : 0 #Formated absolute value for Y incremental calculations
zia : 0 #Formated absolute value for Z incremental calculations
cia : 0 #Formated absolute value for C incremental calculations
cuttype : 0 #Cut type flag
#0 = Tool Plane, 1 = Axis Subs, 2 = Polar, 3 = 4/5 axis
bld : 0 #Block delete active
result : 0 #Return value for functions
sav_spc : 0 #Save spaces
sav_gcode : 0 #Gcode saved
sav_absinc : 0 #Absolute/Incremental Saved Value
sav_coolant : 0 #Coolant saved
sav_frc_wcs : 0 #Force work offset flag saved
toolchng : 1 #On a toolchange flag
spdir2 : 1 #Copy for safe spindle direction calculation
#Drill variables
drlgsel : -1 #Drill Select Initialize
drillref : 0 #Select drill reference
peckacel : 0 #Fractional percent to reduce peck2 when usecan.. : no
drlgcode : 0 #Save Gcode in drill
sav_dgcode : 0 #Drill gcode saved
#Subprogram variables
mr_rt_actv : 0 #Flag to indicate if G51/G68 is active
#0=Off, 1=Toolchange, 2=Subprogram call/start, G68
#3=Absolute start, both
rt_csav : 0 #C saved value
end_sub_mny : 0 #Many tool setting captured at transform sub end
#Rotary/Index variables
csav : 0 #C saved value
prvcabs : 0 #Saved cabs from pe_inc_calc,
#Used for rotary feed and direction calculations
cdelta : 0 #Calculation for angle change
rev : 0 #Calculation for deg/min
sav_rev : 0 #Saved revolution counter
indx_out : c9k #Rotation direction calculation
fmt 16 indx_mc #Rotation direction calculation
#Vector Constants for Rotatary Calculations
aaxisx : 1 #A axis rotation vector constant
aaxisy : 0 #A axis rotation vector constant
aaxisz : 0 #A axis rotation vector constant
baxisx : 0 #B axis rotation vector constant
baxisy : 1 #B axis rotation vector constant
baxisz : 0 #B axis rotation vector constant
caxisx : 0 #C axis rotation vector constant
caxisy : 0 #C axis rotation vector constant
caxisz : 1 #C axis rotation vector constant
#Feedrate calculation variables
frdelta : 0 #Calculation for deg/min
frinv : 0 #Feedrate inverse time
frdeg : 0 #Feedrate deg/min actual
prvfrdeg : 0 #Feedrate deg/min actual
ldelta : 0 #Calculation for deg/min, linear
cldelta : 0 #Calculation for deg/min, linear and rotary
circum : 0 #Calculation for deg/min
ipr_type : 0 #Feedrate for Rotary, 0 = UPM, 1 = DPM, 2 = Inverse
변수형(타입)을 선언합니다 (아래에 다시설명)
# --------------------------------------------------------------------------
# Format statements - n=nonmodal, l=leading, t=trailing, i=inc, d=delta
# --------------------------------------------------------------------------
#Default english/metric position format statements
fs2 1 0.7 0.6 #Decimal, absolute, 7 place, default for initialize (:)
fs2 2 0.4 0.3 #Decimal, absolute, 4/3 place
fs2 3 0.4 0.3d #Decimal, delta, 4/3 place
#Common format statements
fs2 4 1 0 1 0 #Integer, not leading
fs2 5 2 0 2 0l #Integer, force two leading
fs2 6 3 0 3 0l #Integer, force three leading
fs2 7 4 0 4 0l #Integer, force four leading
fs2 9 0.1 0.1 #Decimal, absolute, 1 place
fs2 10 0.2 0.2 #Decimal, absolute, 2 place
fs2 11 0.3 0.3 #Decimal, absolute, 3 place
fs2 12 0.4 0.4 #Decimal, absolute, 4 place
fs2 13 0.5 0.5 #Decimal, absolute, 5 place
fs2 14 0.3 0.3d #Decimal, delta, 3 place
fs2 15 0.2 0.1 #Decimal, absolute, 2/1 place
fs2 16 1 0 1 0n #Integer, forced output
여기는 포스트파일에서 출력할 문자코드를 정의합니다
보기) sg00 G0 #Rapid
sg00 => 이것은 마캠 고유의 변수입니다. 마켐에서는 급속이송을 sg00 이라고 명명하고
G0 => 이것은 마켐에서의 급속이송을 어떻케 출력할건지의 상수입니다.
즉 이포스트에서의 급속이송은 G0 으로 출력됩니다.
또다른예를 들자면 하이덴하인의 경우는 L 코드로 나갑니다
그럼 하이덴하인에서의 급속이송을 출력한다면
sg00 L 이라라고 하면 됩니다.
화낙에서의 원호가공은 G2 G3 인 반면 하이덴하인에서는 DR- , DR+ 입니다.
화낙
sg02 G2 #Circular interpolation CW
sg03 G3 #Circular interpolation CCW
하이덴하인
sg02 DR-
sg03 DR+ 입니다.
자 이해가 가죠? 안가면 할수없고요!!!
하여간 이부분에선 기계특성에 맞게 코드를 부여할수있습니다
카페 질답란에 어떤분이 비젼380에서의 G76 과 G83 을 문의하신걸
본기억이 있는데 아레의 드릴싸이클에서 바꾸어주면 무난히 해결될수 있읍니다.
# --------------------------------------------------------------------------
#String and string selector definitions for NC output
# --------------------------------------------------------------------------
#Numbered question 164. string to detect Rotary axis y/n
sq164
#Address string definitions
strm "M"
strn "N"
stro "O"
strp "P"
srad "R"
srminus "R-"
sblank
옵션널 스톱정의
#Cantext string definitions (spaces must be padded here)
sm00 "M00"
sm01 "M01"
strtextno
strcantext
미러 및 회전정의
#Transform mirror and rotate codes
strns_mir_on "G51.1" #Programmable mirror image code
strns_mir_off "G50.1" #Programmable mirror image cancel code
strns_rot_on "G68" #Coordinate System Rotation
strns_rot_off "G69" #Coordinate System Rotation Cancel
이건 왜있는지 모르겠읍니다 물론 필요하니깐 있겠지만서두..
아마 에러메세지 정의인듯합니다..
# --------------------------------------------------------------------------
# Error messages
# --------------------------------------------------------------------------
saxiswarn "WARNING-POST ROTARY AXIS ASSIGNMENT ('rot_on_x') OVERWRITTEN BY OPERATION"
saxisoff "ERROR-POST ROTARY AXIS ASSIGNMENT ('rot_on_x') IS DISABLED"
saxiserror "ERROR-INVALID ROTARY AXIS ASSIGNMENT ('rot_on_x') FOR CURRENT OPERATION"
sindxerror "WARNING-INDEX ANGLE DOES NOT MATCH POST SETTING ('ctable')"
stlorgerr "ERROR-TOOL ORIGIN DOES NOT MATCH CENTER OF ROTATION IN POLAR MILLING"
shomeserror "ERROR-G92 WORK OFFSET ('mi1') DOES NOT SUPPORT TRANSFORM SUBPROGRAM"
sprgnerror "ERROR-SUBPROGRAM NUMBER MATCHES THE MAIN PROGRAM NUMBER"
이송관련 정의
# --------------------------------------------------------------------------
# General G and M Code String select tables
# --------------------------------------------------------------------------
# Motion G code selection
sg00 G0 #Rapid
sg01 G1 #Linear feed
sg02 G2 #Circular interpolation CW
sg03 G3 #Circular interpolation CCW
sg04 G4 #Dwell
sgcode #Target for string
명면 정의
fstrsel sg00 gcode sgcode
# --------------------------------------------------------------------------
# Select work plane G code
sg17 G17 #XY plane code
sg19 G19 #YZ plane code
sg18 G18 #XZ plane code
sgplane #Target string
fstrsel sg17 plane sgplane
그리고 위의 녹색라인은여 초기는 무조건 G17 평면으로 설정하겠단예기입니다
필요하다면 포스트 필요부분에서 변경해주면 됩니다.
변경예 plane=sg18
# --------------------------------------------------------------------------
#Select english/metric code
sg20 G20 #Inch code
sg21 G21 #Metric code
smetric #Target string
fstrsel sg20 met_tool smetric
원점복귀 정의
# --------------------------------------------------------------------------
#Select reference return code
sg28 G28 #First reference point return
sg30 G30 #Second reference point return
sg28ref #Target string
fstrsel sg28 mi3 sg28ref
공구경보정 설정부
# --------------------------------------------------------------------------
# Cutter compensation G code selection
scc0 G40 #Cancel cutter compensation
scc1 G41 #Cutter compensation left
scc2 G42 #Cutter compensation right
sccomp #Target for string
fstrsel scc0 cc_pos sccomp
드릴 설정부
# --------------------------------------------------------------------------
# Canned drill cycle string select
sg81 G81 #drill - no dwell
sg81d G82 #drill - with dwell
sg83 G83 #peck drill - no dwell
sg83d G83 #peck drill - with dwell
sg73 G73 #chip break - no dwell
sg73d G73 #chip break - with dwell
sg73 은 마켐에서 칩브레이크 싸이클인데 G73 으로 설정되있는것을 볼수있읍니다.
만약 칩브레이크 싸이클에 비젼380에서는 G83 로 써야한다면
sg73 G83 #chip break - no dwell
sg73d G83 #chip break - with dwell
이라고 하면 되겠죠
그리고 sg73d 라는것은 드웰이 적용되었을경우의 경우의 출력코드 입니다,휴지타임 아시죠?
sg84 G84 #tap - right hand
sg84d G74 #tap - left hand
sg85 G85 #bore #1 - no dwell
sg85d G89 #bore #1 - with dwell
sg86 G86 #bore #2 - no dwell
sg86d G86 #bore #2 - with dwell
sgm1 G76 #misc #1 - no dwell
sgm1d G76 #misc #1 - with dwell
sgm2 G81 #misc #2 - no dwell
sgm2d G82 #misc #2 - with dwell
sgdrill #Target for string
fstrsel sg81 drlgsel sgdrill
이곳은 절대좌표, 증분좌표 코드설정
# --------------------------------------------------------------------------
# Select incremental or absolute G code
sg90 G90 #Absolute code
sg91 G91 #Incremental code
sgabsinc #Target string
fstrsel sg90 absinc sgabsinc
피드이송 도 여러가지 방식이 있겠죠?
# --------------------------------------------------------------------------
# Feed mode G code selection
sg94 G94 #UPM
sg94d G94 #DPM, See pfcalc_deg if you use another gcode
sg93 G93 #Inverse
sgfeed #Target for string
fstrsel sg94 ipr_type sgfeed
드릴싸이클 이송시 코드정의
# --------------------------------------------------------------------------
#Canned drill cycle reference height
sg98 G98 #Reference at initht
sg99 G99 #Reference at refht
sgdrlref #Target for string
fstrsel sg98 drillref sgdrlref # Drill cycle G string select
스핀들 회전관련
# --------------------------------------------------------------------------
# Generate string for spindle
sm04 M4 #Spindle reverse
sm05 M5 #Spindle off
sm03 M3 #Spindle forward
spindle #Target for string
fstrsel sm04 spdir2 spindle
절삭유 관련
# --------------------------------------------------------------------------
# Coolant M code selection
sm09 M9 #Coolant Off
sm08 M8 #Coolant Flood
sm08_1 M8 #Coolant Mist
sm08_2 M8 #Coolant Tool
scoolant #Target for string
fstrsel sm09 coolant scoolant
로타리 테이블 관련
# --------------------------------------------------------------------------
# Table rotation direction
# Table rotation direction, index
sindx_cw M22 #Rotate CW code
sindx_ccw M21 #Rotate CCW code
sindx_mc #Target for string
fstrsel sindx_cw indx_mc sindx_mc
# --------------------------------------------------------------------------
# Define the gear selection code
flktbl 1 3 #Lookup table definition - table no. - no. entries
40 0 #Low gear range
41 400 #Med gear range
42 2250 #Hi gear range
이곳은 변수 절정부입니다
보기) fmt T 4 t #Tool Number
fmt => 이건 t 라는 변수를
어떤식으로 정의해서 쓸거다 라는 명령문이라고 보면 됩니다(format)
여기에선 t 라는 변수에 T 코드를 부여해서 쓸거이라는것과 숫자타입은 4번 점이없는 타입이라는 것입니다
타입 정의는 앞부분에 있었는데 다시한번 보자면 아레와같습니다.
# --------------------------------------------------------------------------
# Format statements - n=nonmodal, l=leading, t=trailing, i=inc, d=delta
# --------------------------------------------------------------------------
#Default english/metric position format statements
fs2 1 0.7 0.6 #Decimal, absolute, 7 place, default for initialize (:)
fs2 2 0.4 0.3 #Decimal, absolute, 4/3 place
fs2 3 0.4 0.3d #Decimal, delta, 4/3 place
fs2 4 1 0 1 0 #Integer, not leading 정수타입이고 뒤로 .이하 삭제
fs2 5 2 0 2 0l #Integer, force two leading 정수타입이고 소수점 2개
fs2 6 3 0 3 0l #Integer, force three leading 정수타입이고 소수점 3개
fs2 7 4 0 4 0l #Integer, force four leading 정수타입이고 소수점 4개
fs2 9 0.1 0.1 #Decimal, absolute, 1 place 실수타입이고 그리고 잘모르겠음
fs2 10 0.2 0.2 #Decimal, absolute, 2 place
fs2 11 0.3 0.3 #Decimal, absolute, 3 place
fs2 12 0.4 0.4 #Decimal, absolute, 4 place
fs2 13 0.5 0.5 #Decimal, absolute, 5 place
fs2 14 0.3 0.3d #Decimal, delta, 3 place
fs2 15 0.2 0.1 #Decimal, absolute, 2/1 place
fs2 16 1 0 1 0n #Integer, forced output
하여간 이렇게 생겼고요 여러가지 타입을 바꿔가며 테스트해보면 알수있습니다
# --------------------------------------------------------------------------
# Toolchange / NC output Variable Formats
# --------------------------------------------------------------------------
fmt T 4 t #Tool Number
fmt T 4 first_tool #First Tool Used
fmt T 4 next_tool #Next Tool Used
fmt D 4 tloffno #Diameter Offset Number
fmt H 4 tlngno #Length Offset Number
fmt G 4 g_wcs #WCS G address
fmt P 4 p_wcs #WCS P address
fmt S 4 speed #Spindle Speed
fmt M 4 gear #Gear range
# --------------------------------------------------------------------------
fmt N 4 n #Sequence number
fmt X 2 xabs #X position output
fmt Y 2 yabs #Y position output
fmt Z 2 zabs #Z position output
fmt X 3 xinc #X position output
fmt Y 3 yinc #Y position output
fmt Z 3 zinc #Z position output
fmt A 11 cabs #C axis position
fmt A 14 cinc #C axis position
fmt A 4 indx_out #Index position
fmt R 14 rt_cinc #C axis position, G68
fmt I 3 i #Arc center description in X
fmt J 3 j #Arc center description in Y
fmt K 3 k #Arc center description in Z
fmt R 2 arcrad #Arc Radius
fmt F 15 feed #Feedrate
fmt P 11 dwell #Dwell
fmt M 5 cantext #Canned text
# --------------------------------------------------------------------------
#Move comment (pound) to output colon with program numbers
fmt O 7 progno #Program number
#fmt ":" 7 progno #Program number
fmt O 7 main_prg_no #Program number
#fmt ":" 7 main_prg_no #Program number
fmt O 7 sub_prg_no #Program number
#fmt ":" 7 sub_prg_no #Program number
fmt X 2 sub_trnsx #Rotation point
fmt Y 2 sub_trnsy #Rotation point
fmt Z 2 sub_trnsz #Rotation point
# --------------------------------------------------------------------------
fmt Q 2 peck1 #First peck increment (positive)
fmt Q 2 shftdrl #Fine bore tool shift
fmt R 2 refht_a #Reference height
fmt R 2 refht_i #Reference height
# --------------------------------------------------------------------------
fmt "TOOL - " 4 tnote # Note format
fmt " DIA. OFF. - " 4 toffnote # Note format
fmt " LEN. - " 4 tlngnote # Note format
fmt " DIA. - " 1 tldia # Note format
이제 선언부가 끝나고 구현부가 시작됩니다.
# --------------------------------------------------------------------------
# Tool Comment / Manual Entry Section
# --------------------------------------------------------------------------
ptoolcomment #Comment for tool
tnote = t
toffnote = tloffno
tlngnote = tlngno
"(", pstrtool, *tnote, *toffnote, *tlngnote, *tldia, ")", e
pstrtool #Comment for tool
if strtool <> sblank,
[
strtool = ucase(strtool)
*strtool, " "
]
pcomment #Comment from manual entry (must call pcomment2 if booleans)
pcomment2
pcomment2 #Comment from manual entry
scomm = ucase (scomm)
if gcode = 1007, "(", scomm, ")"
else, "(", scomm, ")", e
# --------------------------------------------------------------------------
# Start of File and Toolchange Setup
# --------------------------------------------------------------------------
3부
시작하기 앞서 프로그램 호출관계에 대해서 잠시 이야기를 하겠읍니다.
포스트 마캠 주석함수를 보면은 아래와 같습니다.
pcomment (함수명)
pcomment2 (본문)
그리고 그밑에 또다른 함수가 선언되어있읍니다.
pcomment2 (함수명)
scomm = ucase (scomm) (본문)
if gcode = 1007, "(", scomm, ")" |
else, "(", scomm, ")", e |
마캠은 주석문을 출력할려면 마캠은 주석함수인 pcomment 를 호출합니다.
그런데 pcomment 함수의 본문에서는 pcomment2 를 호출하고 있고 호출당한 pcomment2 에서
본격적인 출력이 이루어지고 있는것을 알수있읍니다.
이러한 호출관계는 지금 현존하는 모든 프로그램언어의 기본구조입니다
포스트파일을 다루려면 가장 기본적인 것이니 꼭 이해하시기 바랍니다.
베이직 프로그래밍을 설명한다는 것은 작은책 한권을 쓸만큼의 방대한 분량입니다
그러므로 이 강좌에서는 구현부의 흐름만 이야기하고
강좌를 추가하여 포스트에서 꼭 필요한 베이직 문법을 이야기 하도록 하겠읍니다
편의상 포스트파일을 여과없이 이용한다면 공부하려는 이 로하여금 헤깔리는부분이있겠다싶어
함수명만 나두고 나머지 문구는 삭제하였으니 참고하시기 바랍니다.
--------------------------- 시작 --------------------------------------
# --------------------------------------------------------------------------
# Tool Comment / Manual Entry Section
# --------------------------------------------------------------------------
툴 정보를 출력하는 부분입니다.
이분분은 툴첸지루틴인 ptlchg 로부터 호출됩니다.
ptoolcomment #Comment for tool
tnote = t tnote변수에 t(공구번호) 에 입력하고
toffnote = tloffno toffnote변수에 tloffno(공구옵셋번호) 에 입력하고
tlngnote = tlngno tlngnote변수에 tlngno(장보정번호) 에 입력하고
"(", pstrtool, *tnote, *toffnote, *tlngnote, *tldia, ")", e (출력)
pstrtool이라는 함수명을 호출하는것을 눈여겨 보십시요.
pstrtool (위의 ptoolcomment 함수에서 호출당하네요)
if strtool <> sblank,
[
strtool = ucase(strtool)
*strtool, " "
]
주석처리 하는 부분입니다
pcomment
pcomment2 (pcomment2함수를 호출하고 있군요)
pcomment2 (pcomment함수로부터 호출당하는군요)
scomm = ucase (scomm) (scomm 의 내용을 무조건 대문자로바꿔서 다시 scomm 변수에 입력하라는군요)
if gcode = 1007, "(", scomm, ")" NCI파일의 G코드가 1007 이라면 ( 과 scomm 과 ) 를 출력하라네요
else, "(", scomm, ")", e 만약 NCI파일의 G코드가 1007 이 아니라면 ( 과 scomm 과 ) 를 출력하라네요
즉 scomm 변수 안에는 주석문이 들어있을것이고 위의 코드에서는 무조건 출력하라는말과 같습니다.
위의 코드들을 눈여겨 보시고 이해하려고 노력하십시요
위의 코드들을 이해하셨다면 포스트를 추적할수있는 능력을 가진것입니다.
자 이제부터는 코드들의 전반적인것들을 살펴보겠읍니다.
구현부 실행순서
1] pheader 무조건 젤 처음실행 됩니다 주로 % 나 프로그램 젤 선두에 와야할 문구를 출력합니다
2] pwrtt 툴 리스트출력 옵션변수인 tooltable 에따라 실행되거나 말거나 결정됩니다.
3] psof 본격적인 출력 시작부분입니다.
프로그램명,프로그램주석, 날짜 등 프로그램의 전반적인 정보와
초기 툴첸지 부분을 수행합니다.
처음 실행시는 마캠에서 ptlchg 를 호출하지 않으므로
이곳에서 툴첸지하고 초기점으로 이동을 시켜야 합니다.
또는 ptlchg를 이루틴에 써넣어 강제로 호출해도 되겠죠?
4] ptlchg 툴첸지 시에 실행되는 부분으로써
G91 G28 Z0. 와 같은 툴첸지에 필요한 G 코드나
툴첸지후 출력되어야할 기본적인것들을 다룹니다
본 포스트에서는 초기위치좌표와 장보정 그리고 절삭유부분까지 다루고 있군요.
4] ptlchg0 만약 가공관리자에서 같은툴로 연속해서 2개의 윤곽가공이 이루어졌다면
2번째 윤곽가공에서는 툴첸지가 필요없을것입니다.
이처럼 툴첸지가 필요없지만 가공관리자에 루틴이 존재할때
이 부분이 수행됩니다.
본 포스트에선 다음 가공루틴의 초기 X,Y, 점 까지의 이동을 담당하는 군요.
5] prapid X,Y 급속이송을 수행합니다.
6] pzrapid Z 축의 급속이송만을 처리합니다.
7] plin 피드 절삭이송 처리부분 입니다.
8] pcir 피드 원호 절삭이송 처리부분 입니다.
9] pdrill 드릴 싸이클. 여기선 드릴G81 만 예를 들었지만 ppeck(팩드릴), pchpbrk(칩브레이크)
등 드릴싸이클루틴들이 있겠죠.
10] pcanceldc 여긴 드릴싸이클이 끝날시점의 수행부분입니다
주로 G80 이나 M9 같은 취소코드가 출력되겠죠.
11] pretract 가공싸이클이 끝나고 ptlchg(툴첸지) 이전이에 수행됩니다
M9 나 Z 원점복귀 또는 제2원점복귀 같은 또는 장보정취소 같은코드들이 출력되겠죠.
12] peof 모든 가공루틴과 출력할 모든것들을 출력하고 NC 파일의 끝자락 부분에 필요한
문구들을 출력합니다
%, 또는 자기만의 싸인이 들어갈수도 있게죠.
예) (THANK YOU) 같은 뭐 그런것들....
여기서는 크게 뼈대만 설명드렸고 실제론 좀더 복잡합니다
그리고 위의 4] ~ 10] 까지는 계속 반복하면서 NC 코드를 출력하게 됩니다.
이상으로 3부 강좌를 마칩니다.
벌써 끝나냐고요? ㅎㅎ 여러분도 짐작하시겠지만 프로그래밍을 설명한다는것은
너무나도 광범위 합니다 그래서 강좌계획을 조금 수정하겠읍니다.
일단 기본강좌는 여기까지 마치고
포스트에서 꼭 필요한 베이직 루틴을 설명한후
함수하나하나를 주제로 분석해 나가는 형태가 될것입니다.
그러므로 한회 강좌는 함수몇개가 되리라 생각됩니다.
그럼 부족한글 읽어주셔서 감사합니다.
# --------------------------------------------------------------------------
# Start of File and Toolchange Setup
# --------------------------------------------------------------------------
psof0 #Start of file for tool zero
psof #Start of file for non-zero tool number
ptlchg0 #Call from NCI null tool change (tool number repeats)
ptlchg #Tool change
pretract #End of tool path, toolchange
peof0 #End of file for tool zero
peof
peof #End of file for non-zero tool
pwcs #G54+ coordinate setting at toolchange
pgear #Find spindle gear from lookup table
pspindchng #Spindle speed change
pspindle #Spindle speed calculations for RPM
pheader #Call before start of file
ptoolend #End of tool path, before reading new tool data
ptlchg1002 #Call at actual toolchange, end last path here
prapidout #Output to NC of linear movement - rapid
plinout #Output to NC of linear movement - feed
pcirout #Output to NC of circular interpolation
pcom_moveb #Common motion preparation routines, before
pncoutput #Movement output
prapid #Output to NC of linear movement - rapid
pzrapid #Output to NC of linear movement - rapid Z only
plin #Output to NC of linear movement - feed
pz #Output to NC of linear movement - feed Z only
pmx #Output to NC of vector NCI
pcir #Output to NC of circular interpolation
# --------------------------------------------------------------------------
# Drilling
# --------------------------------------------------------------------------
pdrill0 #Pre-process before drill call
pdrlcommonb #Canned Drill Cycle common call, before
prdrlout #R drill position
pdrill #Canned Drill Cycle
ppeck #Canned Peck Drill Cycle
pchpbrk #Canned Chip Break Cycle
ptap #Canned Tap Cycle
pbore1 #Canned Bore #1 Cycle
pbore2 #Canned Bore #2 Cycle
pmisc1 #Canned Misc #1 Cycle
pmisc2 #Canned Misc #2 Cycle (User Option)
pdrill_2 #Canned Drill Cycle, additional points
ppeck_2 #Canned Peck Drill Cycle
pdrill_2
pchpbrk_2 #Canned Chip Break Cycle
pdrill_2
ptap_2 #Canned Tap Cycle
pdrill_2
pbore1_2 #Canned Bore #1 Cycle
pdrill_2
pbore2_2 #Canned Bore #2 Cycle
pdrill_2
pmisc1_2 #Canned Misc #1 Cycle
pdrill_2
pmisc2_2 #Canned Misc #2 Cycle
pdrill_2
자료출처- 하늘달님
'마스타캠&머시닝센터' 카테고리의 다른 글
[스크랩] 포스트 수정 팁 (0) | 2014.06.28 |
---|---|
[스크랩] mastercamX 단축키입니다. (0) | 2014.06.28 |
도면 과 프로그램작성 (0) | 2006.11.28 |
G코드 G02,G03 (0) | 2006.11.21 |
사용예제 (0) | 2006.10.18 |