마스타캠&머시닝센터

[스크랩] 마스터캠 포스트

전설비 2017. 8. 15. 21:52

1부

 
여기서 다루는 포스트파일은 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

 

 

자료출처- 하늘달님

출처 : CNCKING
글쓴이 : KAZUYA MISHIMA 원글보기
메모 :