cimatron后处理
后处理
一套GPP的POST运行,至少有几个文件支撑,请具体说明。
GPP需要至少两个文件,分别是demo.def, demo.dex,一般安装之后还有一个demo.exf文件,这个文件不起实际作用,是编译成DEF之前的过程文件。目录在\\\\var\\post目录下。
题2:
一套IMS的POST运行,至少有几个文件支撑,请具体说明。
IMS需要一个文件,如\\\\var\\ims\\imspost\\prjfiles\\fanuc0.prj,
另外还有一个相关的文件很重要,如三轴立式的机床是
\\\\var\\ims\\imspost\\mchfiles\\vertical.mch,当然还有
\\var\\ims\\imspost\\deffiles\\cimatron.def,它指定了APT的特殊格式
希望可以多交流,将这个问题谈得深一点,如:
1.在GPP中程序头加入刀具信息等;
2.在GPP中指定代码文件的放置目录;
3.在GPP中指定不使用圆弧插补;
4.在IMS中检验APT程序;
5.在IMS中指定使用刀尖作为对刀点;
matthews兄和sirhc兄都说到点子上了,看来大伙儿对POST还是很有基础的。我把这两个问题的答案综合一下,讲解就从这个突破口开始。
题1:
一套GPP的POST运行,至少有2个文件支撑,分别为*.DEX和*.DEF,IT版在\\var\\post目录下,E版在CIM_E\\IT\\var\\post目录下。请注意我说的“至少”,因为还有一个*.CMD文件起着关键作用,比如指定G代码的存放目录,连接外挂程序,删除多余的伴随文件等。*.CMD文件是否要起作用,由*.DEF文件中的一个控制项来决定。如何设置,以后会讲。而*.EXF文件虽然在POST运行时不需要,但POST设置全靠它,因此不能抛在一边。
*.EXF文件是GPP型POST的源代码,能手工编辑,有可读性。
*.DEX文件是GPP型POST的执行代码,类似二进制文件,很难手工编辑,没可读性。它由*.EXF文件通过编译产生。
*.DEF文件是GPP型POST的数据输出格式控制文件。
题2:
一套IMS的POST运行,至少有4个文件支撑,在\\dat下的3个APT.*文件和\\var\\ims\\IMSPOST\\PRJFILES
下的1个*.prj文件,这里的APT.CMD文件就起到了连接作用。而搞IMS,一般搞*.prj文件就行了,通常设置数据输出格式。没有GPP型POST支撑,IMS是不行的。
先到这里,下贴继续。有不对处请兄弟们指正。
我首先向大家说声:I AM SORRY,因我前段时间有事,发贴没心思,请兄弟们原谅~现继续我的瞎掰。
(1)
介绍几个跟POST有关的编译器。
cimitX\\BIN\\下的DFEXF.EXE是把*.EXF编译成*.DEX的程序。激活该程序后,会出现一个DOS窗,输入EXF型文件名(不要含扩展名EXF),即可生成DEX型文件。同C语
言编译器一样,若EXF型文件有问题,编译器会显出错误的语句。你可按提示修改EXF型文件直到编译成功。DFEXF.EXE的快捷方式在IT的MAIN MENU下NC栏的第6个,即附图中第6个菜单。
生成DEF文件的程序CIM一般是不提供的,但CIM提供了DEF文件样本,即DEMO.DEF,我们可利用样本搞出不同的DEF文件来。cimitX\\BIN\\下的DFSTRD.EXE是配置*.DEF文件的程序。激活该程序后,会出现一个DOS窗,选择样本后就能进行配置,完成后另取一个文件名保存退出。配置DEF文件时DFSTRD。EXE要加参数:“P” DFSTRD.EXE的快捷方式在IT的MAIN MENU下NC栏的第5个,即附图中第5个菜单。
DFEXF.EXE和DFSTRD.EXE的默认目录是cimitX\\var\\post。
编译器具体使用在以后会提到。IMS的编译器明天讲。
错误处请兄弟们指正,不胜感谢~~~
不好意思,让兄弟们久等,我这人向来虎头蛇尾,兄弟们多担待。
(2)
IMS的编译器是cimitX\\VAR\\IMS\\IMSPOST下的IMSPOSTW.EXE,它的默认目录为cimitX\\VAR\\IMS\\IMSPOST\\PRJFILES,它能生成*.LIB文件。而LIB型文件也是类似二进制文件,只有通过IMSPOSTW.EXE才能看懂。搞IMS就是用熟IMSPOSTW.EXE。
IMS的执行器为PEXEC95.EXE。LIB型文件其实是PEXEC95.EXE运行时的配置文件。 下面讲一点IMS的运行过程。
CIM的默认POST为GPP,要使用IMS,必须加一个启动参数: “-IPOST”。
cimitX\\BIN下有一个POSTPR.DLL的扩展。当在CIM的环境中按下POST选项后,POSTPR.DLL被激活了,若它查到有参数: “IPOST“,便会到cimitX\\DAT下去执行APT(一个GPP型的),而APT活完,APT.CMD文件就活了,这个文件没有什么,只有一个意思,调用APT新生成的print0.txt文件,而print0.txt文件的内容就是去执行PEXEC95.EXE,即IMS。这就是有人所谓的CIM和IMS:”无缝集成“。兄弟们想想这缝隙有多大,APT的3个文件若有一个稍不行,IMS就不能活了。比如我将APT.CMD移到别的目录,IMS会翘辫子。因此,对CIM来说,IMS是外挂,不是集成。
(3)
先讲GPP,在讲之前,发一张GPP的系统变量表,以后会用到,这很重要。具体的解释我后面会举例,对英文感冒的兄弟不要怕。
变量名 变量说明 数据类型 所应用的模块位子
ABS_ANG Start angle + Delta angle 2 CIRCULAR MOTION:
ARC_ANG Arc angle 2 CIRCULAR MOTION:
AXIS_ANGLE Tool axis angle 2 TOOL CHANGE:
AXIS_NUM Number of axes being used 6 AXIS CHANGE:BEGINNING OF TAPE: BLOCK_NUM Current block number as appears in the TP_LIST 6 All Blocks
CIR_INTERP Circular interpolation mode 7 ORIGIN CHANGE CIRC_MOV Circular movement code 0 CIRCULAR MOTION: CLEAR_LENG Distance between holder & tool tip 1 TOOL CHANGE: COMP_3X 3-D cutter compensation 7 LINEAR MOTION: CURR_NAME Current tool holder name 0 TOOL CHANGE: CURR_ORIG Controller/Cimatron origin no. 7 ORIGIN CHANGE: BEGINNING OF TAPE:
CURR_START Number of current start 7 START THREAD: CURR_TOOL Current tool holder number 7 TOOL CHANGE: CUT_LENGTH Length of cutting edge of tool 1 TOOL CHANGE: CUT_SPEED Velocity of cutting (Vc) 1 CONSTANT SPEED: CUT_WIDTH Width of the tool 1 TOOL CHANGE:
CUTCOM_OFF Cutter Compensation off code 0 CUTTER COMPENSATION: CUTCOM_ON Cutter Compensation on code 0 CUTTER COMPENSATION: CYC_2PLN Not in use. 1 CYCLE:
CYC_CLEAR Cycle clear height 1 CYCLE:
CYC_CODE Cycle code 0 CYCLE:
CYC_DEPTH Cycle depth increment 1 CYCLE: GROOVE CYCLE: CYC_DWELL Cycle dwell time 5 CYCLE:
CYC_DZINIT The DRILL procedure DEL INIT value 1 CYCLE: CYC_PECK Cycle PECK value 1 CYCLE: GROOVE CYCLE: CYC_REDUC Cycle DECREASE value 1 CYCLE: GROOVE CYCLE: CYC_RETR Cycle retract code 0 CYCLE:
CYC_TIMES Number of pecks/cycle 7 CYCLE:
CYC_XSHFT Cycle shift along the X axis 1 CYCLE: CYC_YSHFT Cycle shift along the Y axis 1 CYCLE: CYCLE_1 Spot Drill 7 CYCLE:
CYCLE_2 High Speed Peck 7 CYCLE:
CYCLE_3 Left Hand Tapping 7 CYCLE:
CYCLE_4 Fine Boring 7 CYCLE:
CYCLE_5 Counter Boring 7 CYCLE:
CYCLE_6 Deep Hole Peck 7 CYCLE:
CYCLE_7 Tapping 7 CYCLE:
CYCLE_8 Boring 7 CYCLE:
CYCLE_9 Bore + Spindle Stop 7 CYCLE:
CYCLE_10 Back Boring 7 CYCLE:
CYCLE_11 Bore + Dwell + Manual 7 CYCLE:
CYCLE_12 Bore + Dwell + Feed 7 CYCLE:
DATE_SDD The current day 6 BEGINNING OF TAPE: DATE_SMM The current month 6 BEGINNING OF TAPE: DATE_SYY The current year 6 BEGINNING OF TAPE:
DEL_Z_UP Procedure DEL Z UP 1 BEGINNING OF PROC:
DIA_COMP Diameter compensation index 1 TOOL CHANGE:
DIAMETER_ Tool diameter 1 TOOL CHANGE:
DOWN_STEP The procedure DOWN STEP value 1 BEGINNING OF PROC: END_ANG End angle 2 CIRCULAR MOTION: THREAD CYCLE: THREAD CANNED CYCLE: FACE_ANGLE Tool face angle 2 TOOL CHANGE:
FACE_GROV Face groove 7 GROOVE CYCLE:
FACE_THRD Face thread 7 THREAD CYCLE: THREAD CANNED CYCLE: FIN_BYAREA Downstep by area - fine 7 THREAD CYCLE: THREAD CANNED CYCLE: FIN_BYSTEP Downstep by distance - fine 7 THREAD CYCLE: THREAD CANNED CYCLE: FIN_DEPTH Depth for fine machining 1 THREAD CYCLE: THREAD CANNED CYCLE: FIN_DSTEP Downstep for fine machining 1 THREAD CYCLE: THREAD CANNED CYCLE: FIN_MNSTEP Minimumdownstep-roughmachining 1 THREAD CYCLE: THREAD CANNED CYCLE: FIN_NORMAL Perpendicular entrance - fine 7 THREAD CYCLE: THREAD CANNED CYCLE: FIN_ZIGZAG Zigzag entrance for fine machining 7 THREAD CYCLE: THREAD CANNED CYCLE: FIXT_COMP Fixture compensation index 1 TOOL CHANGE:
GAUGE_LEN Gauge length of tool 1 TOOL CHANGE:
GROV_CNTRL Control point of groove tool 1=center, 2=left, 3=right 6 TOOL CHANGE: GROV_DEL Slow down distance in approach 1 GROOVE CYCLE:
GROV_STEP Width of each groove pass 1 GROOVE CYCLE:
GROV_WIDTH Total width of machined area 1 GROOVE CYCLE:
HOLD_LENG Holder length 1 TOOL CHANGE:
HOLD_WIDTH Holder width 1 TOOL CHANGE:
I_COORD I component of tool axis/wire vector 1 LINEAR MOTION: I_ORIGIN Origin, I vector component 1 BEGINNING OF TAPE: ORIGIN CHANGE: I_START Initial direction, I vector component 1 BEGINNING OF PROC: INNER_GROV Inside groove 7 GROOVE CYCLE:
INNER_THRD Inside thread 7 THREAD CYCLE: THREAD CANNED CYCLE: INS_STR Insert string 0 INSERT WITH: INSERT WITHOUT:
IX_ORIG I vector component of the X direction 1 ORIGIN CHANGE J_COORD J component of tool axis/wire vector 1 LINEAR MOTION: J_ORIGIN Origin, J vector component 1 BEGINNING OF TAPE: ORIGIN CHANGE: J_START Initial direction, J vector component 1 BEGINNING OF PROC: JX_ORIG J vector component of the X direction 1 ORIGIN CHANGE K_COORD K component of tool axis/wire vector 1 LINEAR MOTION: K_ORIGIN Origin, K vector component 1 BEGINNING OF TAPE: ORIGIN CHANGE: K_START Initial direction, K vector component 1 BEGINNING OF PROC: KX_ORIG Kvector component of the X direction 1 ORIGIN CHANGE LAYER_NUM Number of layers in the proc 1 BEGINNING OF PROC: LAYER_Z Z value of current layer 1 SUBROUTINE CALL:
LENG_COMP Length compensation index 1 TOOL CHANGE:
LIN_MOV Linear movement code 0 LINEAR MOTION:
LINE_ANG Angle of the line with the X axis 2 LINEAR MOTION: THREAD CYCLE: THREAD CANNED CYCLE:
LINE_LENG Length of the linear motion 1 LINEAR MOTION: THREAD CYCLE: THREAD CANNED
CYCLE:
MACSYS_NAM MACSYS name 0 BEGINNING OF TAPE:
MCH_COOL Coolant code 0 COOLANT:
MCH_DWELL Dwell time 5 DWELL:
MCH_FEED Feed rate 3 FEED:
MESS_STR Message string 0 MESSAGE:
MOVMNT_NUM Number of movement blocks in the current procedure 6 BEGINNING OF PROC:
NEXT_NAME Next tool holder name 0 TOOL CHANGE:
NEXT_TOOL Next tool holder number 7 TOOL CHANGE: NIB_PITCH Nibbling
pitch 1 NIBBLE:
NO_SUBROUT Subroutine mode 7 ORIGIN CHANGE
NODE_ID The node_ID number. 0 BEGINNING OF TAPE: NUM_LAYERS Number of layers in procedure 6 SUBROUTINE CALL: NUM_ORIGS Total number of origins used 7 BEGINNING OF TAPE: NUM_SPRING Number of spring passes 6 BEGINNING OF PROC: OUTER_GROV Outside groove 7 GROOVE CYCLE:
OUTER_THRD Outside thread 7 THREAD CYCLE: THREAD CANNED CYCLE: Overlap_ between tool strokes 1 TOOL CHANGE:
PART_NAME The name of the part 0 BEGINNING OF TAPE: PFM_UNITS PFM units 0 BEGINNING OF TAPE
PLATFORM_ The platform in use. 0 BEGINNING OF TAPE: PROC_CMNT Procedure comment 0 BEGINNING OF PROC: PROC_NAME The name of the current procedure 0 BEGINNING OF PROC: PROC_NUM Procedure sequence number 6 BEGINNING OF PROC: RADIUS_ Radius of the arc 1 CIRCULAR MOTION:
REGSTR_1 AGIE T or Makino E 6 TOOL CHANGE:
REGSTR_2 AGIE P 6 TOOL CHANGE:
REGSTR_3 AGIE D or Makino D 6 TOOL CHANGE:
REGSTR_4 AGIE S 6 TOOL CHANGE:
ROT_MAT1. . .9 Rotation matrix elements 1 ORIGIN CHANGE: RUF_BYAREA Downstep by area - rough 7 THREAD CYCLE: RUF_BYSTEP Downstep by distance - rough 7 THREAD CYCLE: RUF_DEPTH Depth for rough machining 1 THREAD CYCLE: RUF_DSTEP Downstep for rough machining 1 THREAD CYCLE: RUF_MNSTEP Minimum downstep for rough machining 1 THREAD CYCLE: RUF_NORMAL Perpendicular entrance - rough 7 THREAD CYCLE: RUF_ZIGZAG Zigzag entrance - rough machining 7 THREAD CYCLE: SCALLOP_ Hgt of material left between strokes 1 TOOL CHANGE: SEGMT_NUM Number of line segments in string 1 START STRING: SIDE_STEP The procedure SIDE STEP value 1 BEGINNING OF PROC: SPIN_DIR Spindle direction 0 SPIN:
SPIN_SPEED Spindle speed 4 SPIN:
SRF_NORX X component of the surfaces' normal 1 LINEAR MOTION:
SRF_NORY Y component of the surfaces' normal 1 LINEAR MOTION: SRF_NORZ Z component of the surfaces' normal 1 LINEAR MOTION: ST_ANG Start angle 2 CIRCULAR MOTION:
STARTS_NUM Total number of lathe/thread starts 7 BEGINNING OF PROC:
STEP_INCR Step increment 1 THREAD STEP:
STEP_TYPE Thread step code (1 to 6) 7 THREAD STEP: STEP_VALUE Pitch or lead size 1 THREAD STEP:
SUB_NUMBER Number of current subroutine 6 SUBROUTINE CALL: TEETH_NUM Number of teeth in tool 7 TOOL CHANGE: THRD_DEPTH Total thread machining depth 1 THREAD CYCLE: TIME_SHH The current hour of starting postpr. 6 BEGINNING OF TAPE: TIME_SMM The current min. of starting postpr. 6 BEGINNING OF TAPE: TIME_SSS The current sec. of starting postpr. 6 BEGINNING OF TAPE: TOOL_ANGLE Angle of the tool 2 TOOL CHANGE:
TOOL_RAD Tool radius 1 TOOL CHANGE:
TOOL_TYPE Punch tool type code 7 TOOL CHANGE:
TP_NAME Toolpath name 0 BEGINNING OF TOOLPATH:
TRANS_MATXTRANS_MATYTRANS_MATZ Translation from current UCS to the original MACSYS 6 BEGINNING OF PROC: /TOOL CHANGE: /ORIGIN CHANGE: / BEGINNING OF TAPE:
TRANSF_NUM Number of transformations 6 BEGINNING OF PROC: TRF_MAT1...9 Transformation rotation matrix 1 TRANSFORMATION: TRF_VECX
Transformation matrix 1 TRANSFORMATION: TRF_VECY Transformation matrix 1 TRANSFORMATION: TRF_VECZ Transformation matrix 1 TRANSFORMATION: USER_NAME Give the user name as an output 0 BEGINNING OF TAPE: WINT_1 Charmilles G27 6 TOOL CHANGE:
WINT_2 Charmilles G28 6 TOOL CHANGE:
WINT_3 Charmilles G29 6 TOOL CHANGE:
WINT_4 Charmilles G30 6 TOOL CHANGE:
WINT_5 Charmilles G28G29 6 TOOL CHANGE:
WINT_6 Charmilles G29G30 6 TOOL CHANGE:
WINT_7 Charmilles G32 6 TOOL CHANGE:
WINT_8 Charmilles G38 6 TOOL CHANGE:
WINT_9 Charmilles G39 6 TOOL CHANGE:
WINT_10 Charmilles G45 6 TOOL CHANGE:
WINT_11 Charmilles G46 6 TOOL CHANGE:
WINT_12 Charmilles G60 6 TOOL CHANGE:
WINT_13 Charmilles G61 6 TOOL CHANGE:
WINT_14 Charmilles G62 6 TOOL CHANGE:
WINT_15 Charmilles G63 6 TOOL CHANGE:
WREAL_1 Charmilles C for G32 1 TOOL CHANGE:
WREAL_2 Charmilles K for G32 1 TOOL CHANGE:
WREAL_3 Charmilles X for G32 1 TOOL CHANGE:
WREAL_4 Charmilles Y for G32 1 TOOL CHANGE:
WREAL_5 Charmilles R for G32 1 TOOL CHANGE:
WREAL_6 Charmilles A for G38 & G39 1 TOOL CHANGE:
X_CENTER X coordinate of center 1 CIRCULAR MOTION:
X_CURPOS X coordinate of current position 1 BEGINNING OF TAPE: LINEAR MOTION:CIRCULAR MOTION: CYCLE:
X_ENDPT X coordinate of endpoint 1 CIRCULAR MOTION:THREAD CYCLE:THREAD CANNED CYCLE: GROOVE CYCLE:
X_HOME X coordinate of home 1 BEGINNING OF TAPE:
X_INTER X intermediate point 1 BEGINNING OF PROC:
X_MACH X coordinate of machine zero 1 BEGINNING OF TAPE:
X_ORIGIN Origin, X coordinate 1 BEGINNING OF TAPE:
X_START X coordinate of start position 1 BEGINNING OF PROC: THREAD CYCLE: THREAD CANNED CYCLE: GROOVE CYCLE:
Y_CENTER Y coordinate of center 1 CIRCULAR MOTION:
Y_CURPOS Y coordinate of current position 1 BEGINNING OF TAPE: LINEAR MOTION: CIRCULAR MOTION: CYCLE:
Y_ENDPT Y coordinate of endpoint 1 CIRCULAR MOTION: THREAD CYCLE: THREAD CANNED CYCLE: GROOVE CYCLE:
Y_HOME Y coordinate of home 1 BEGINNING OF TAPE:
Y_INTER Y intermediate point 1 BEGINNING OF PROC:
Y_MACH Y coordinate of machine zero 1 BEGINNING OF TAPE:
Y_ORIGIN Origin, Y coordinate 1 BEGINNING OF TAPE: ORIGIN CHANGE: Y_START Y coordinate of start position 1 BEGINNING OF PROC: THREAD CYCLE: THREAD CANNED CYCLE: GROOVE CYCLE:
Z_CENTER Z coordinate of circle center 1 CIRCULAR MOTION:
Z_CURPOS Z coordinate of current position 1 BEGINNING OF TAPE: LINEAR MOTION: CIRCULAR MOTION: CYCLE: Z SURFACE:
Z_DOWN The procedure Z DOWN value 1 BEGINNING OF PROC:
Z_ENDPT Z of circle endpoint 1 CIRCULAR MOTION:
Z_HOME Z coordinate of home 1 BEGINNING OF TAPE:
Z_INTER Z intermediate point 1 BEGINNING OF PROC:
Z_MACH Z coordinate of machine zero 1 BEGINNING OF TAPE:
Z_ORIGIN Origin, Z coordinate 1 BEGINNING OF TAPE:ORIGIN CHANGE:
Z_START Z coordinate of start position 1 BEGINNING OF PROC:
Z_UP The procedure Z UP value 1 BEGINNING OF PROC:
贺山中岁月兄新任版主,特将DEMO.EXF这个POST作一个讲解。
* DEMO 3 axes Post Processor for FANUC
* CIMATRON90 VER 9.0
* Last update : 23-FEB-1998
程序行前面起头字符为*表示此行为注释行。
******************************************************** variables:
* define private
FORMAT (SEQUENCING) Seq SubSeq CNTRL_NUM NURBS_DEG count first deg ;
FORMAT (TOOL) CutterComp FirstTool LastTool ; FORMAT (COORDINATES) Xold Yold Zold DXcenter DYcenter DZcenter ; FORMAT (COORDINATES) Zinit Clear Depth CNTRL_X CNTRL_Y CNTRL_Z KNOT_ ;
FORMAT (COORDINATES) Xhome Yhome Zhome ;
FORMAT (COORDINATES) XfirstOrigin YfirstOrigin ZfirstOrigin ; FORMAT (USER_1) CurrSubNum ;
FORMAT (coordinates) ORIGOLDI ORIGOLDJ ORIGOLDK ;
* define private flags:
FORMAT (USER_2) FlagSub FlagSeq FlagSpin;
FORMAT (USER_2) FirstOriginChange FlagError Flagrotmac ;
* define private constants:
FORMAT (USER_2) YES NO ;
* change the format of existing variables:
FORMAT (USER_1) SUB_NUMBER ;
FORMAT里面定义了后处理中需要用到的变量的类型,这些当然都不是我们需要修改的内容,但是你如果
新定义了一个变量如圆弧插补的半径radius,这个变量当然需要可以是小数,它就需要被定义为REAL或
COORDINATES这种类型。添加一行程序:
FORMAT (COORDINATES) radius;
INTERACTION指的是执行后处理时的一些交互的内容:
INTERACTION (USER_1) \"MAIN-PROGRAM-NUMBER\" MainNum = 100 ; 主程序号
INTERACTION (TOOL) \"DIACOMP=TOOL+ INTERACTION (USER_1) \"TOOL-CHANGE-PROGRAM\" ChangeTool = 8000 ; 换刀子程序号 INTERACTION (CHARACTER) \"SEQUENCING INTERACTION (SEQUENCING) \"SEQUENC-START\" SeqStart = 10 ; 起始行号 INTERACTION (SEQUENCING) \"SEQUENC-INCR.\" SeqIncr = 10 ; 行号增量 INTERACTION (CHARACTER) \"SUBROUTINES 序的,但是POCKET和PROFILE会产生子程序 INTERACTION (USER_1) \"SUB-PROGRAM-NUMBER\" StartSubNum = 1000 ; 第一个子程序号 如果需要添加新的交互内容,只需要添加一个交互行就可以了,当然需要注意被交互的内容是整型还是实 型,否则不能输入数字和小数 NON_MODAL ALL_VAR; MODAL X_CURPOS Y_CURPOS Z_CURPOS ; MODAL LIN_MOV CIRC_MOV MCH_FEED SPIN_SPEED SPIN_DIR MCH_COOL MCH_DWELL; MODAL CUTCOM_ON CUTCOM_OFF ; MODAL CYC_DEPTH CYC_PECK CYC_DWELL CYC_RETR CYC_CLEAR Depth Clear NURBS_MOV; MODAL 定义变量是否为模态,象X_CURPOS这种坐标位置当然是随时都在变化的。另外我们可以认为指的是在同一行程序内变量的值能否重复输入多次。 IDENTICAL X_CURPOS X_ENDPT ; IDENTICAL Y_CURPOS Y_ENDPT ; 每输出一行程序之前,调用一个新的值,即保持侦测状态。 前面都是准备工作,下面的内容才是和输出加工程序有关的。 NEW_LINE_IS $ ; $为换行指令,这一段内容制定程序是如何换行的 IF_SET (FlagSeq _EQ_ NO) 如果制定不输出行号 OUTPUT \\J ; \\J表示换行但不输出行号 ELSE IF_SET (FlagSub _EQ_ NO) OUTPUT \\J \"N\" Seq ; Seq = Seq + SeqIncr ; ELSE OUTPUT \\J \"N\" SubSeq ; SubSeq = SubSeq + SeqIncr ; 这一段指定子程序号如何递增 END_IF ; END_IF ; BEGINNING OF TAPE: 程序头的指定 YES = 1 ; NO = 0 ; Seq = SeqStart ; FlagSeq = NO ; FlagSub = NO ; IF_SET (NumYN _EQ_ \"y\") FlagSeq = YES ; END_IF ; IF_SET (NumYN _EQ_ \"Y\") FlagSeq = YES ; END_IF ; 连交互里的大小写都想到了,防呆。 IF_SET (Sub _EQ_ \"y\") Sub = \"Y\" ; END_IF ; IF_SET (Sub _EQ_ \"Y\") SET_OFF NO_SUBROUT ; ELSE SET_ON NO_SUBROUT ; END_IF ; *-----Unit matrix (MUST be input in this order ) 指定XYZ轴的方向,千万不要改啊~ ROT_MAT1 = 1.0 ; ROT_MAT2 = 0.0 ; ROT_MAT3 = 0.0 ; ROT_MAT4 = 0.0 ; ROT_MAT5 = 1.0 ; ROT_MAT6 = 0.0 ; ROT_MAT7 = 0.0 ; ROT_MAT8 = 0.0 ; ROT_MAT9 = 1.0 ; *-----shift all data according to the MCHINE ZERO indicated by the * user in the POSTPR interaction 如果在后处理时指定了对刀点相对于编程原点的偏移量,指定坐标值如何 转换。 TRANS_MATX = 0 - X_MACH ; TRANS_MATY = 0 - Y_MACH ; TRANS_MATZ = 0 - Z_MACH ; *-----shift the HOME according to the MCHINE ZERO indicated by the * user in the POSTPR interaction 如果在后处理时指定了对刀点相对于编程原点的偏移量,机床原点位置如 何转换。 Xhome = X_HOME - X_MACH ; Yhome = Y_HOME - Y_MACH ; Zhome = Z_HOME - Z_MACH ; *-----tool location is HOME 刀具原点 Xold = X_HOME ; Yold = Y_HOME ; Zold = Z_HOME ; *-----For 1st ORIGIN CHANGE FirstOriginChange = YES ; MCH_FEED = 9999 ; *-----output IF_SET (FlagSeq _EQ_ YES ) OUTPUT \"%\" \\J \"O\" MainNum ; 换行后输出子程序号,这里有ELSE只是为了修改者方便。 ELSE OUTPUT \" %\" \\J \" O\" MainNum ; END_IF ; *--For the first origin change ORIGOLDI=0 ; ORIGOLDJ=0 ; ORIGOLDK=1 ; flagrotmac = no ; FILE指一个输出的加工代码文件 TAPE指使用同一把刀具的一段加工程序 PROCEDURE 指的是一个WCUT等 BEGINNING OF PROC: KEEP PROC_NAME ; SET_ON MCH_COOL ; FlagSub = NO ; SubSeq = SeqStart ; END OF TAPE: 使用完一把刀具之后 IF_SET (FirstTool _NE_ LastTool) OUTPUT $ \" T\" NEXT_TOOL \" M98 P\" ChangeTool; END_IF ; OUTPUT $ \" M30 \" ; END OF FILE: 代码文件的结束符 IF_SET (FlagSeq _EQ_ YES ) OUTPUT \\J \"%\" ; ELSE OUTPUT \\J \" %\" ; END_IF ; FEED: KEEP MCH_FEED ; 如果F值没有改变,则此行程序不输出F SPIN: KEEP SPIN_SPEED ; COOLANT: KEEP MCH_COOL ; DWELL: KEEP MCH_DWELL ; CUTTER COMPENSATION: KEEP CUTCOM_ON ; CUTTER COMPENSATION: COFF: KEEP CUTCOM_OFF ; TOOL CHANGE: FIRST:第一次换刀,实际上就是程序头 TOOL CHANGE: 加工过程中的换刀 TOOL CHANGE: LAST: 最后一次换刀 SET_ON SPIN_SPEED SPIN_DIR ; *-----save first tool number FirstTool = CURR_TOOL ; LastTool = CURR_TOOL ; *-----tool cutter compensation register number CutterComp = CURR_TOOL + DiaComp ; *-----assuming 1st tool is in the spindle, there is no need * for tool change) OUTPUT $ \" T\" CURR_TOOL ; *-----more then one tool in this run of the Post Processor IF_SET (NEXT_TOOL _NE_ CURR_TOOL) OUTPUT $ \" T\" NEXT_TOOL ; END_IF ; *-----standard tool change commands. (assuming 1st tool is in OUTPUT $ \" G90 G80 G00 G17 G40 M23\" ; OUTPUT $ \" G43 H\" CURR_TOOL \" Z\" Zhome \" S\" SPIN_SPEED \" \" SPIN_DIR ; 如果是一把刀出一个程序实际上只需要修改TOOL CHANGE: FIRST就可以了,比如改成这样: TOOL CHANGE: FIRST: SET_ON SPIN_SPEED SPIN_DIR ; *-----save first tool number FirstTool = CURR_TOOL ; LastTool = CURR_TOOL ; *-----tool cutter compensation register number CutterComp = CURR_TOOL + DiaComp ; OUTPUT $ \"G17G40G49G80\" ; OUTPUT $ \"G90G54G00X0Y0\" ; OUTPUT $ \"G43H01\"\"Z\" Zhome ; LINEAR MOTION: FAST: G00程序的输出格式 FlagSpin = NO ; IF_SET (SPIN_SPEED) FlagSpin = YES ; END_IF ; IF_SET (SPIN_DIR) FlagSpin = YES ; END_IF ; IF_SET (FlagSpin _EQ_ YES) SET_ON SPIN_SPEED SPIN_DIR ; OUTPUT $ \"S\" SPIN_SPEED SPIN_DIR ; END_IF ; OUTPUT $ ; IF_SET (LIN_MOV) OUTPUT LIN_MOV ; END_IF ; IF_SET (X_CURPOS) OUTPUT \"X\" X_CURPOS ; END_IF ; IF_SET (Y_CURPOS) OUTPUT \"Y\" Y_CURPOS ; END_IF ; IF_SET (Z_CURPOS) OUTPUT \"Z\" Z_CURPOS ; END_IF ; IF_SET (MCH_COOL) OUTPUT MCH_COOL ; END_IF ; SET_ON CIRC_MOV ; Xold = X_CURPOS ; Yold = Y_CURPOS ; Zold = Z_CURPOS ; LINEAR MOTION: G01的输出格式 FlagSpin = NO ; IF_SET (SPIN_SPEED) FlagSpin = YES ; END_IF ; IF_SET (SPIN_DIR) FlagSpin = YES ; END_IF ; IF_SET (FlagSpin _EQ_ YES) SET_ON SPIN_SPEED SPIN_DIR ; OUTPUT $ \"S\" SPIN_SPEED SPIN_DIR ; END_IF ; OUTPUT $ ; 换行 IF_SET (LIN_MOV) OUTPUT LIN_MOV ; END_IF ; IF_SET (CUTCOM_ON) OUTPUT CUTCOM_ON \"D\" CutterComp ; END_IF ; IF_SET (CUTCOM_OFF) OUTPUT CUTCOM_OFF ; END_IF ; IF_SET (X_CURPOS) OUTPUT \"X\" X_CURPOS ; END_IF ; IF_SET (Y_CURPOS) OUTPUT \"Y\" Y_CURPOS ; END_IF ; IF_SET (Z_CURPOS) OUTPUT \"Z\" Z_CURPOS ; END_IF ; IF_SET (MCH_FEED) OUTPUT \"F\" MCH_FEED ; END_IF ; IF_SET (MCH_COOL) OUTPUT MCH_COOL ; END_IF ; SET_ON CIRC_MOV ; Xold = X_CURPOS ; Yold = Y_CURPOS ; Zold = Z_CURPOS ; CIRCULAR MOTION: 圆弧运动的输出格式 FlagSpin = NO ; IF_SET (SPIN_SPEED) FlagSpin = YES ; END_IF ; IF_SET (SPIN_DIR) FlagSpin = YES ; END_IF ; IF_SET (FlagSpin _EQ_ YES) SET_ON SPIN_SPEED SPIN_DIR ; OUTPUT $ \"S\" SPIN_SPEED SPIN_DIR ; END_IF ; DXcenter = X_CENTER - Xold ; I值为相对于圆心相对于起点的X方向距离,有的机床不是这样的啊~~如果弄错了,那么(很想在这里加入几个哭脸,可是不知道怎么弄,郁闷ing) DYcenter = Y_CENTER - Yold ; DZcenter = Z_CENTER - Zold ; OUTPUT $ ; IF_SET (CIRC_MOV) OUTPUT CIRC_MOV ; END_IF ; IF_SET (X_CURPOS) OUTPUT \"X\" X_ENDPT ; END_IF ; IF_SET (Y_CURPOS) OUTPUT \"Y\" Y_ENDPT ; END_IF ; IF_SET (Z_CURPOS) OUTPUT \"Z\" Z_ENDPT ; END_IF ;这行应该删掉 IF_SET (DXcenter _NE_ 0.0) OUTPUT \"I\" DXcenter ; END_IF ; IF_SET (DYcenter _NE_ 0.0) OUTPUT \"J\" DYcenter ; END_IF ; IF_SET (DZcenter _NE_ 0.0) OUTPUT \"K\" DZcenter ; END_IF ;这行也应该删掉 IF_SET (MCH_FEED) OUTPUT \"F\" MCH_FEED ; END_IF ; IF_SET (MCH_COOL) OUTPUT MCH_COOL ; END_IF ; SET_ON LIN_MOV ; Xold = X_CURPOS ; Yold = Y_CURPOS ; Zold = Z_CURPOS ; 我是这样指定输出R的,不知道各位还有什么好办法: radius=sqrt(DXcenter*DXcenter+DYcenter*DYcenter) ; OUTPUT \"R \" radius ; CYCLE: ON: 钻孔指令的输出方式 FlagSpin = NO ; IF_SET (SPIN_SPEED) FlagSpin = YES ; END_IF ; IF_SET (SPIN_DIR) FlagSpin = YES ; END_IF ; IF_SET (FlagSpin _EQ_ YES) SET_ON SPIN_SPEED SPIN_DIR ; OUTPUT $ \"S\" SPIN_SPEED SPIN_DIR ; END_IF ; SET_ON X_CURPOS Y_CURPOS Z_CURPOS ; SET_ON CYC_DEPTH CYC_RETR CYC_CLEAR MCH_FEED MCH_COOL ; SET_ON Zinit Depth Clear ; Zinit = Z_CURPOS + CYC_DZINIT ; Depth = Z_CURPOS - CYC_DEPTH ; Clear = Z_CURPOS + CYC_CLEAR ; IF_SET (Zold _LT_ Zinit) OUTPUT $ \"Z\" Zinit ; END_IF ; OUTPUT $ ; OUTPUT CYC_RETR ; OUTPUT CYC_CODE ; OUTPUT \"X\" X_CURPOS ; OUTPUT \"Y\" Y_CURPOS ; OUTPUT \"Z\" Depth ; OUTPUT \"R\" Clear ; IF_SET (CYC_PECK) OUTPUT \"Q\" CYC_PECK ; END_IF ; IF_SET (CYC_DWELL) OUTPUT \"P\" CYC_DWELL ; END_IF ; IF_SET (CYC_XSHFT) OUTPUT \"I\" CYC_XSHFT ; END_IF ; IF_SET (CYC_YSHFT) OUTPUT \"J\" CYC_YSHFT ; END_IF ; OUTPUT \"F\" MCH_FEED ; OUTPUT MCH_COOL ; SET_ON LIN_MOV CIRC_MOV ; SET_OFF CYC_DEPTH CYC_CLEAR; Xold = X_CURPOS ; Yold = Y_CURPOS ; Zold = Z_CURPOS ; CYCLE: 同一步里面要钻好多孔的吗 Depth = Z_CURPOS - CYC_DEPTH ; Clear = Z_CURPOS + CYC_CLEAR ; OUTPUT $ ; IF_SET (CYC_RETR) OUTPUT CYC_RETR ; END_IF ; IF_SET (X_CURPOS) OUTPUT \"X\" X_CURPOS ; END_IF ; IF_SET (Y_CURPOS) OUTPUT \"Y\" Y_CURPOS ; END_IF ; IF_SET (Depth) OUTPUT \"Z\" Depth ; END_IF ; IF_SET (Clear) OUTPUT \"R\" Clear ; END_IF ; IF_SET (CYC_PECK) OUTPUT \"Q\" CYC_PECK ; END_IF ; IF_SET (CYC_DWELL) OUTPUT \"P\" CYC_DWELL ; END_IF ; IF_SET (CYC_XSHFT) OUTPUT \"I\" CYC_XSHFT ; END_IF ; IF_SET (CYC_YSHFT) OUTPUT \"J\" CYC_YSHFT ; END_IF ; IF_SET (SPIN_SPEED) OUTPUT \"S\" SPIN_SPEED ; END_IF ; IF_SET (SPIN_DIR) OUTPUT SPIN_DIR ; END_IF ; IF_SET (MCH_FEED) OUTPUT \"F\" MCH_FEED ; END_IF ; IF_SET (MCH_COOL) OUTPUT MCH_COOL ; END_IF ; SET_ON LIN_MOV CIRC_MOV ; SET_OFF CYC_DEPTH CYC_CLEAR; Xold = X_CURPOS ; Yold = Y_CURPOS ; Zold = Z_CURPOS ; CYCLE: OFF: 结束钻孔 OUTPUT $ \"G80 Z\" Zinit ; SET_ON LIN_MOV CIRC_MOV ; Zold = Zinit ; 有一些机床的钻孔循环很特殊,搞起来很费劲啊。。。。。。 ORIGIN CHANGE: 如果有多个编程原点,坐标位置的转换 *-----Save the first origin data for later use IF_SET (FirstOriginChange _EQ_ YES ) XfirstOrigin = X_ORIGIN ; YfirstOrigin = Y_ORIGIN ; ZfirstOrigin = Z_ORIGIN ; FirstOriginChange = NO ; END_IF ; *.....distance between the rotation center and the ORIGIN TRANS_MATX = X_ORIGIN - XfirstOrigin - X_MACH ; TRANS_MATY = Y_ORIGIN - YfirstOrigin - Y_MACH ; TRANS_MATZ = Z_ORIGIN - ZfirstOrigin - Z_MACH ; 在这里加一行 SET_OFF CIR_INTERP ; 可以关闭圆弧插补,逼近成直线运动,精度好像默认是0.001吧,要在DFPOST里设置。五轴加工里面都要这样做的。 AXISCHANGE: 坐标轴方向的转换,不过我们这里可是三轴后处理哦,因此主要是为了防止有人乱设加工坐标系,输出一些报错信息 FlagError = NO ; IF_SET (AXIS_NUM _GT_ 3) FlagError = YES ; END_IF ; IF_SET (FlagError _EQ_ YES) PRINT \\J \"Error: 4/5 axes motion was found in:\" ; PRINT \\J \" TP=\" TP_NAME \" PROC=\" PROC_NUM \" (\" PROC_NAME \")\" ; PRINT \\J \"Error: Cannot post 5 axes toolpaths\" ; OUTPUT \\J \" M00 (Error: 4/5 axes motion was found)\" ;为了防呆,这里可以改成几句骂人的话,哈哈。 OUTPUT \\J \" M00 (TP=\" TP_NAME \" PROC=\" PROC_NUM \" - \" PROC_NAME \")\" ; END_IF ; SUBROUTINE CALL: CurrSubNum = SUB_NUMBER + StartSubNum ; OUTPUT $ \"M98 P\" CurrSubNum ; BEGINNING OF SUB: SET_ON MCH_FEED MCH_COOL LIN_MOV CIRC_MOV ; FlagSub = YES ; OUTPUT \\J \" \" ; IF_SET (FlagSeq _EQ_ YES) OUTPUT \\J \"O\" CurrSubNum ; ELSE OUTPUT \\J \"O\" CurrSubNum ; END_IF ; END OF SUB: OUTPUT $ \"M99\" ; FlagSub = NO ; SUBROUTINE RETURN: SET_ON LIN_MOV CIRC_MOV X_CURPOS Y_CURPOS Z_CURPOS; 最后是和子程序有关的一些设置,我就带过了 1、在cimatron的post中定义日期的变量为 DATE_SDD :日 DATE_SMM :月 DATE_SYY :年 你可以在BEGINNING OF TAPE: 中加入以下一行来显示时间: OUTPUT \"The date is (day-month-year):\" DATE_SDD \"-\" DATE_SMM \"-\" DATE_SYY \\J ; 2、在cimatron的post中定义刀径及刀长的变量为 CUT_LENGTH :刀具长度 DIAMETER_:刀具直径 你可以在TOOL CHANGE: 中加入下面两行来显示刀径及刀长: OUTPUT $ \"The tool's length is \" CUT_LENGTH ; OUTPUT $ diameter is \" DIAMETER_ ; tool's \"The
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务