[MAIN PART OF THE CFF] [MACHINE PROPERTIES] name=Mini-cnc.ru model=No Subroutines subroutines=0 comment_indicator=// Machine Type=0 // Machine Types: 0 = plasma, 1 = oxyfuel, 2 = waterjet, 3 = laser, 4 = router [PROCESS NAMES] CUT1=Cut SCRIBE1=Scribe PUNCH1=Punch [REVISION NUMBER] $Revision: 1.1 $ [REVISION NOTES] 1.0 Original version from Generic 1.36 1.1 A bit of rephrasing and cleanups on the configuration comments [MAIN] // //////////////////////////////////////////////////////////////////////////////// // The following variables can be initialized in this section for NestMaster. // For TurboNest 2010 or ProNest 2010, they can be initialized here or set in // a process parameter file. In addition, particularily for NestMaster, each // of the parameters has a prompt line. If the // is removed from in front of // the specific prompt lines, NestMaster (or TurboNest or ProNest) will prompt // the user for that value when they output a cnc file. //////////////////////////////////////////////////////////////////////////////// // // The following section shows how the values are used in the Touch-n-Go sequence // // G28.1 Z($G28Z) // G92 Z0 // G00 Z($SWITCHOFFSET) // G92 Z0 // G00 Z($PIERCEHEIGHT) // G04 P($PREHEAT) Only shows up if $PREHEAT>0 // M03 // G04 P($PIERCEDELAY) Only shows up if $PIERCEDELAY>0 // cutting occurs here // M05 // G04 P($ENDDELAY) Only shows up if $ENDDELAY>0 // IF $UNITS=INCH // If not prompting, these are the default inch values $G28Z := 3.0/25.4 $SWITCHOFFSET:=0.054 $PIERCEHEIGHT:=0.125 $SAFEZ:=2.0 ELSE // If not prompting, these are the default metric values $G28Z := 3.0 $SWITCHOFFSET:=1.37 $PIERCEHEIGHT:=3.2 $SAFEZ:=50.0 END // These values are the same for inch or metric $PREHEAT:=0.0 $PIERCEDELAY:=0.0 $ENDDELAY:=0.0 // If non-zero, SCODE will come out at the top of the file after the F1 line $SCODE:=500 // $TOOL is used as the T value in the M06 line. If zero, the M06 line is omitted. $TOOL:=0 // CONFIGTOUCHNGO can have 3 possible values: // $CONFIGTOUCHNGO:=NONE Don't do Touch-N-Go // $CONFIGTOUCHNGO:=PART Do a Touch-N-Go only on the first profile of a part // $CONFIGTOUCHNGO:=ALL Do a Touch-N-Go for every profile start $CONFIGTOUCHNGO:=NONE // // For the next several lines, if you want to prompt the user for the individual // values, remove the // from in front of the line that you want prompting for. // If you don't want to prompt the user for a value, then leave the // in front // of the prompt for that value. // //$G28Z := 'NPROMPT(Enter G28.1 Z Value) //$SWITCHOFFSET := 'NPROMPT(Enter Switch Offset Z Value) //$PIERCEHEIGHT := 'NPROMPT(Enter Pierce Height) //$SAFEZ := 'NPROMPT(Enter Safe Z Value) //$PREHEAT := 'NPROMPT(Enter Preheat Time 0 for none) //$PIERCEDELAY := 'NPROMPT(Enter Pierce Delay 0 for none) //$ENDDELAY := 'NPROMPT(Enter End Delay 0 for none) //$SCODE := 'NPROMPT(Enter S Code 0 for none) //$TOOL := 'NPROMPT(Enter Tool number 0 for none) // 0 => Use G41/G42/G40 on lines by themselves // 1 => Use G41/G42 with leadin move, G40 with leadout // 2 => Don't use G41/G42 (perhaps the CUTON in the machine triggers cutter comp?) $CONFIGUSEKERFONMOVE:=2 // 0 => G40 on an arc move is acceptable // 1 => Delay G40 to the next rapid if still in CW/CCW mode $CONFIGNOG40ONARC:=0 // 0 => Use K value with kerf amount // 1 => Use D value with G41/G42 // 2 => Don't include anything with G41/G42 // 3 => Use Kerf value as D value (typically used with TurboNest $CONFIGUSEDVALUE:=2 // 0 => Use feedrate on a line by itself // 1 => Use feedrate on the leadin motion line // 2 => Use no feedrates $CONFIGFEEDRATEONMOVE:=2 // 0 => Output Feedrate with each process start // 1 => Suppress Feedrate if it hasn't changed $CONFIGSUPRESSFEEDRATE:=1 // 0 => No G61/G64 codes // 1 => Include G61/G64 exact stop codes based on angle change at end of motion // 2 => Use G09 for exact stop check on each occurance $CONFIGUSEEXACTSTOPCHECK:=1 // 0 => Start of Profile line numbers are on lines by themselves // 1 => Start of Profile line numbers are on the process on rapid motion line $CONFIGSOPLINENOLOCATION:=0 // 0 => Include G00/G01/G02/G03 on every motion line // 1 => Suppress repeated G00/G01/G02/G03 codes $CONFIGUSEMODALMOTIONCODES:=0 // 0 => Include X and Y on every motion line // 1 => Suppress duplicate X, Y codes // 2 => Include X and Y on all rapid motion, suppress on cutting motion <---- $CONFIGUSEMODALXY:=0 // CONFIGAHCISON can start out as 0, 1, 2, or 3 // 0 => implies that AHC defaults at start of program to off // 1 => implies that AHC defaults at start of program to on // 2 => implies that an AHC code should be used at the start in any case // 3 => No AHC codes // In most cases, 1 or 3 are the only usable choices. $CONFIGAHCISON:=1 // 0 => I, J are absolute if X, Y are absolute, otherwise incremental // 1 => I, J are always incremental <---- $CONFIGIJALWAYSINCREMENTAL:=0 // 0 => CUT OFF, CUT OFFUP are as normal // 1 => At end of exterior profiles, skeleton cuts, and Crop cuts, always use OFFUP $CONFIGFORCEEXTERIORTOOFFUP:=1 // Set a Zero point. By default, use $INITPTX, $INITPTY, which is where the // starting point is located. ZEROPT_ allows setting a zero point separate // from the initial point. To start the head out in the upper left of the // sheet, with all dimensions in absolute from the lower left, set the init // point in PN to the upper left, and use $ZEROPTX:=$SHEETMINX and // $ZEROPTY:=$SHEETMINY $ZEROPTX := $INITPTX $ZEROPTY := $INITPTY $AHCISON := $CONFIGAHCISON {START OF FILE} // Uncomment the next line to include a list of all parts, quantities on the list //{OUTPUT PLP LIST INFO} {PROGRAM INIT} {VALIDATE PLATE} {OUTPUT PROFILES} {END OF FILE} [SECTION PART OF THE CFF] [START OF FILE] [PLP INFO LINE] // The next line might need comment characters adjusted if you're using the part list {LINENO :M}(PART#:{ROOT PART NAME} QTY {PART QUANTITY ON NEST}) [ROOT PART NAME] // ROOT PART NAME is the part file name without path (used only in PLP INFO LINE) ARGUMENT=$ROOTPARTNAME FORMAT=%s [PART QUANTITY ON NEST] // Number of times this part occurs on this nest (used only in PLP INFO LINE) ARGUMENT=$PARTQUANTITYONNEST FORMAT=%d [PROGRAM INIT] // Next two lines are example of how to prompt for a program number //$PROGRAMNUMBER := 'NPROMPT(Enter Program Number) //P{PROGRAM NUMBER} //{LINENO :M}(Äàòà: {DATE}) //{LINENO :M}(Ôàéë: {ROOT FILE NAME}) //{LINENO :M}(Òîëùèíà: {MATERIAL THICKNESS}) {UNITS} {MODE} {LINENO :M} {INITIALIZE CUT PARAMETERS} IF $SCODE>0 {LINENO :M}{SCODE} END {RESET PARAMETERS} [SCODE] ARGUMENT=$SCODE FORMAT=S%d [UNITS] // Common G codes for units are G70 or G20 for inch and G71 or G21 for metric N1 (mini-cnc.ru v1.0) IF $UNITS=INCH {LINENO :M}G20 ELSE {LINENO :M}G21 END [MODE] IF $MODE=ABSOLUTE {LINENO :M}G53 G90 G40 //{LINENO :M}G92{INITPTX}{INITPTY} ELSE {LINENO :M}G91 G40 END [QUAD ARCS] 0 [ROOT FILE NAME] ARGUMENT=$ROOTFILENAME FORMAT=%s [PROGRAM NUMBER] ARGUMENT=$PROGRAMNUMBER FORMAT=%d [DATE] ARGUMENT=$DATE FORMAT=%s [TIME] ARGUMENT=$TIME FORMAT=%s [MATERIAL THICKNESS] ARGUMENT=$MATERIALTHICKNESS * $CONVERSION FORMAT=%s [MATERIAL NAME] ARGUMENT=$MATERIALNAME FORMAT=%s [PART CLASS] ARGUMENT=$PART_CLASS FORMAT=%s [CNC NAME] ARGUMENT=$FILENAME FORMAT=%s [NEST NUMBER] ARGUMENT=$NESTNUMBER+1 FORMAT=%d [NUMBER OF NESTS] ARGUMENT=$NUMBER_OF_NESTS FORMAT=%d [TIMES TO RUN] ARGUMENT=$CUTNUMBEROFTIMES FORMAT=%d [PRODUCTION TIME] ARGUMENT=$PRODUCTIONTIME FORMAT=%4.3f [SHEET X] ARGUMENT=$SHEETX * $CONVERSION FORMAT={DIMENSION DISPLAY FORMAT} [SHEET Y] ARGUMENT=$SHEETY * $CONVERSION FORMAT={DIMENSION DISPLAY FORMAT} [STEP AND REPEAT START] {LINENO :M}G97 [STEP AND REPEAT END] {LINENO :M}G98 [VALIDATE PLATE] IF $VALIDATEPLATE = TRUE // Note that X and Y both need to be set each at each step for incremental // output to work correctly. $X := $INITPTX $Y := $INITPTY IF $INITPTLOCATION = LOWERLEFT $X := $SHEETMAXX $Y := $SHEETMAXY ELSE IF $INITPTLOCATION = LOWERRIGHT $X := $SHEETMINX $Y := $SHEETMAXY ELSE IF $INITPTLOCATION = UPPERRIGHT $X := $SHEETMINX $Y := $SHEETMINY ELSE $X := $SHEETMAXX $Y := $SHEETMINY END END END {RAPID MOTION} IF $INITPTLOCATION = LOWERLEFT $X := $SHEETMINX $Y := $SHEETMINY ELSE IF $INITPTLOCATION = LOWERRIGHT $X := $SHEETMAXX $Y := $SHEETMINY ELSE IF $INITPTLOCATION = UPPERRIGHT $X := $SHEETMAXX $Y := $SHEETMAXY ELSE $X := $SHEETMINX $Y := $SHEETMAXY END END END {RAPID MOTION} END [END OF FILE] {CANCEL CURRENT OFFSET} {END OF PROGRAM} [END OF PROGRAM] IF $RETURNTOINIT=TRUE {LINEAR MOTION TO INIT} END {LINENO :M}M30 (Âñ¸, ïèçäåòñ, ïðèåõàëè!) [LINEAR MOTION TO INIT] $X:=$INITPTX $Y:=$INITPTY {RAPID MOTION} [OUTPUT START INTERIOR PROFILE] // $PREKERFED variable tracks to see if a KERF LEFT or KERF RIGHT CALL is // made so kerf off calls can be made only if needed {CANCEL CURRENT OFFSET} {SOP LINENO 0} {OUTPUT TORCH SPACING} {ACTIVATE NEXT OFFSET} {PROCESS ON MOTION} $DOTOUCHNGO:=0 IF $CONFIGTOUCHNGO=ALL $DOTOUCHNGO:=1 END {PART NAME COMMENT} $PREKERFED:=1 $FORCEOFFUP:=0 [OUTPUT START EXTERIOR PROFILE] {CANCEL CURRENT OFFSET} {SOP LINENO 0} {OUTPUT TORCH SPACING} {ACTIVATE NEXT OFFSET} {PROCESS ON MOTION} $DOTOUCHNGO:=0 IF $CONFIGTOUCHNGO=ALL $DOTOUCHNGO:=1 END {PART NAME COMMENT} $PREKERFED:=1 $FORCEOFFUP:=$CONFIGFORCEEXTERIORTOOFFUP [OUTPUT START OPEN PROFILE] {CANCEL CURRENT OFFSET} {SOP LINENO 0} {OUTPUT TORCH SPACING} {ACTIVATE NEXT OFFSET} {PROCESS ON MOTION} $DOTOUCHNGO:=0 IF $CONFIGTOUCHNGO=ALL $DOTOUCHNGO:=1 END {PART NAME COMMENT} $PREKERFED:=1 $FORCEOFFUP:=$CONFIGFORCEEXTERIORTOOFFUP [OUTPUT START CROP] {CANCEL CURRENT OFFSET} {SOP LINENO 0} {OUTPUT TORCH SPACING} {ACTIVATE NEXT OFFSET} {PROCESS ON MOTION} $DOTOUCHNGO:=0 IF $CONFIGTOUCHNGO=ALL $DOTOUCHNGO:=1 END {PART NAME COMMENT} $PREKERFED:=1 $FORCEOFFUP:=$CONFIGFORCEEXTERIORTOOFFUP [OUTPUT TORCH SPACING] IF {TORCH SPACING REQUIRED} IF $NUMTORCHES = 1 || $NUMTORCHES = 0 (Set 1 torch.) {OUTPUT STOP} ELSE IF $USEAUTOTORCHSPACING = TRUE // Auto torch spacing commands go here. END (Set {NUMTORCHES} torches at {TORCHSPACING}{TORCHUNITS}.) {OUTPUT STOP} END END [OUTPUT END INTERIOR PROFILE] IF {KERF STILL ON} && $CONFIGNOG40ONARC=0 {KERF OFF} END [OUTPUT END EXTERIOR PROFILE] IF {KERF STILL ON} && $CONFIGNOG40ONARC=0 {KERF OFF} END [OUTPUT END OPEN PROFILE] IF {KERF STILL ON} && $CONFIGNOG40ONARC=0 {KERF OFF} END [OUTPUT END CROP] IF {KERF STILL ON} && $CONFIGNOG40ONARC=0 {KERF OFF} END [LINENO] MODAL_ARGUMENT=$LINENUMBER IF $USELINENUMBERS = EVERYLINE {NWORD} END [SOP LINENO 0] IF $USELINENUMBERS = STARTOFPROFILE && $CONFIGSOPLINENOLOCATION=0 {NWORD} END [SOP LINENO 1] IF $USELINENUMBERS = STARTOFPROFILE && $CONFIGSOPLINENOLOCATION=1 {NWORD} END [PART NAME COMMENT] $SAVEPARTNAME := $PARTNAME $SAVENUM := $PARTSEQUENCENUMBER IF $SAVENUM != $LASTSAVENUM || $SAVEPARTNAME != $LASTSAVEPARTNAME IF $CONFIGTOUCHNGO=PART $DOTOUCHNGO:=1 END IF $PARTNAMEASCOMMENT = TRUE IF $PARTSEQUENCENUMBER > 0 (Äåòàëü¹ {PART SEQUENCE NUMBER} - {PARTNAME}) ELSE ({PARTNAME}) END END END [PART SEQUENCE NUMBER] ARGUMENT=$PARTSEQUENCENUMBER FORMAT=%d [PARTNAME] ARGUMENT=$PARTNAME FORMAT=%s [CHANGE OFFSETS] {CANCEL PREVIOUS OFFSET} {ACTIVATE CURRENT OFFSET} [CANCEL PREVIOUS OFFSET] IF $PROCESS != $LASTPROCESS IF $LASTPROCESS=SCRIBE1 //{LINENO :M}M70 END END [CANCEL CURRENT OFFSET] IF $PROCESS != $NEXTPROCESS IF $PROCESS=SCRIBE1 //{LINENO :M}M70 END END [ACTIVATE CURRENT OFFSET] IF $PROCESS != $LASTPROCESS IF ($PROCESS=PUNCH1 || $PROCESS=PUNCH2 || $PROCESS=PUNCH3 || $PROCESS=PUNCH4 || $PROCESS=PUNCH5 || $PROCESS=PUNCH6) && $STOPBEFOREPUNCH = TRUE {OUTPUT STOP} ELSE IF ($PROCESS=SCRIBE1 || $PROCESS=SCRIBE2) && $STOPBEFORESCRIBE = TRUE {OUTPUT STOP} ELSE IF ($PROCESS=CUT1 || $PROCESS=CUT2 || $PROCESS=CUT3) && $STOPBEFORECUT = TRUE {OUTPUT STOP} END END END IF ($PROCESS=CUT1 || $PROCESS=PUNCH1) && $TOOL>0 {LINENO :M}M06 T{TOOL} {SAFE Z} END END [ACTIVATE NEXT OFFSET] IF $PROCESS != $NEXTPROCESS IF ($NEXTPROCESS=PUNCH1 || $NEXTPROCESS=PUNCH2 || $NEXTPROCESS=PUNCH3 || $NEXTPROCESS=PUNCH4 || $NEXTPROCESS=PUNCH5 || $NEXTPROCESS=PUNCH6) && $STOPBEFOREPUNCH = TRUE {OUTPUT STOP} ELSE IF ($NEXTPROCESS=SCRIBE1 || $NEXTPROCESS=SCRIBE2) && $STOPBEFORESCRIBE = TRUE {OUTPUT STOP} ELSE IF ($NEXTPROCESS=CUT1 || $NEXTPROCESS=CUT2 || $NEXTPROCESS=CUT3) && $STOPBEFORECUT = TRUE {OUTPUT STOP} END END END IF ($NEXTPROCESS=CUT1 || $NEXTPROCESS=PUNCH1) && $TOOL>0 {LINENO :M}M06 T{TOOL} {SAFE Z} END END [PROCESS ON MOTION] {SOP LINENO 1 :M}{RAPID MOTION} [RAPID MOTION] $MOTIONTYPE:=0 IF $CONFIGUSEMODALXY=2 {LINENO :M}{KERF MOVE :M}{RAPID MOTION CODE :M}{C_X}{C_Y} ELSE {LINENO :M}{KERF MOVE :M}{RAPID MOTION CODE :M} {C_X :M} {C_Y :M} END [P_M] // Calls at the start of the MOTION lines // This keeps the MOTION sections not quite as wide {EXACT STOP :M}{KERF MOVE :M} [PS_M] // Calls at the end of the MOTION lines {DL} {ADD FEEDRATE :M} [LINEAR MOTION] $MOTIONTYPE:=1 {FEEDRATE LINE} IF $CONFIGUSEKERFONMOVE=0 {KERF DIRECTION :M} ELSE IF $INLEADOUT=TRUE && $NEXTPROFILEMOTION=NONE $KERFDIR:=OFF END END {LINENO :M}{P_M :M}{G1C :M} {C_X :M} {C_Y :M} {PS_M :M}(Äëèíà {DL}ìì) [CLOCKWISE MOTION] $MOTIONTYPE:=2 {CHECK FOR ARC TOO SMALL} IF $ARCTOOSMALL=1 {LINEAR MOTION} ELSE {FEEDRATE LINE} IF $CONFIGUSEKERFONMOVE=0 {KERF DIRECTION :M} ELSE IF $INLEADOUT=TRUE && $NEXTPROFILEMOTION=NONE && $CONFIGNOG40ONARC=0 $KERFDIR:=OFF END END {LINENO :M}{P_M :M}{G2C :M} {C_X :M} {C_Y :M} {C_I} {C_J} {PS_M :M}(Óãîë {UGOL}, Äëèíà {DL}ìì, Ðàäèóñ {R1}ìì) END // [COUNTERCLOCKWISE MOTION] $MOTIONTYPE:=3 {CHECK FOR ARC TOO SMALL} IF $ARCTOOSMALL=1 {LINEAR MOTION} ELSE {FEEDRATE LINE} IF $CONFIGUSEKERFONMOVE=0 {KERF DIRECTION :M} ELSE IF $INLEADOUT=TRUE && $NEXTPROFILEMOTION=NONE && $CONFIGNOG40ONARC=0 $KERFDIR:=OFF END END {LINENO :M}{P_M :M}{G3C :M} {C_X :M} {C_Y :M} {C_I} {C_J} {PS_M :M}(Óãîë {UGOL}, Äëèíà {DL}ìì, Ðàäèóñ {R1}ìì) END [SBFT] IF $NONSTOP1=1 IF $VSTAVIT=1 S ELSE B END ELSE IF $FLAGECHO11=1 F ELSE T END END [EXACT STOP] // This section decides if the machine should maintain feedrate at the end of the motion // or if it should come to a stop. The degree of angle change determines this IF $CONFIGUSEEXACTSTOPCHECK=0 $EXACTSTOPCHECK:=2 END IF $NEXTPROFILEMOTION=NONE $ANGLECHANGE:=100 ELSE $ANGLECHANGE:='ABS($ENDTANGENTANGLE-$NEXTSTARTTANGENTANGLE) END IF $ANGLECHANGE>180 $ANGLECHANGE:='ABS($ANGLECHANGE-360.0) END IF $ANGLECHANGE>=$EXACTSTOPANGLE //--------------------------------- NONSTOP1 = 0 Ò.Å. ÂÏÅÐÅÄÈ ÎÑÒÀÍÎÂÊÀ $NONSTOP1:=0 $VSTAVIT:=0 IF $FLAGBT=1 $FLAGECHO11:=1 $FLAGBT:=0 IF $MOTIONTYPE=1 $DLINABT:= ($DLINABT + (((($X - $LASTX)^2 + ($Y - $LASTY)^2)^0.5)*25.4)) END IF $MOTIONTYPE=2 $DLINABT:= ($DLINABT + (2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360)) END IF $MOTIONTYPE=3 $DLINABT:= ($DLINABT + (2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360)) END ELSE IF $MOTIONTYPE=1 $DLINABT:= ((($X - $LASTX)^2 + ($Y - $LASTY)^2)^0.5)*25.4 END IF $MOTIONTYPE=2 $DLINABT:= (2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360) END IF $MOTIONTYPE=3 $DLINABT:= (2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360) END $FLAGECHO11:=0 END ELSE //-------------------------------------------NONSTOP1 = 1 Ò.Å. ÂÏÅÐÅÄÈ ÁÅÇ ÎÑÒÀÍÎÂÊÈ $NONSTOP1:=1 $FLAGECHO11:=0 IF $FLAGBT=0 $VSTAVIT:=1 $FLAGBT:=1 IF $MOTIONTYPE=1 $DLINABT:= ((($X - $LASTX)^2 + ($Y - $LASTY)^2)^0.5)*25.4 END IF $MOTIONTYPE=2 $DLINABT:= (2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360) END IF $MOTIONTYPE=3 $DLINABT:= (2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360) END ELSE $VSTAVIT:=0 IF $MOTIONTYPE=1 $DLINABT:= ($DLINABT + (((($X - $LASTX)^2 + ($Y - $LASTY)^2)^0.5)*25.4)) END IF $MOTIONTYPE=2 $DLINABT:= ($DLINABT + (2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360)) END IF $MOTIONTYPE=3 $DLINABT:= ($DLINABT + (2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360)) END END END // [RAPID MOTION CODE] IF ($CONFIGUSEMODALMOTIONCODES=0) || ($CURRENTMOTION!=0) G00 $CURRENTMOTION:=0 END [G1C] IF ($CONFIGUSEMODALMOTIONCODES=0) || ($CURRENTMOTION!=1) G01 $CURRENTMOTION:=1 END [G2C] IF ($CONFIGUSEMODALMOTIONCODES=0) || ($CURRENTMOTION!=2) IF {NORMAL AXIS DIRECTION} G02 ELSE G03 END $CURRENTMOTION:=2 END [G3C] IF ($CONFIGUSEMODALMOTIONCODES=0) || ($CURRENTMOTION!=3) IF {NORMAL AXIS DIRECTION} G03 ELSE G02 END $CURRENTMOTION:=3 END [INIT PT MOTION CODE] {RAPID MOTION CODE} [ADD FEEDRATE] IF $FEEDRATE > 0.0 && $FEEDRATE != $LASTFEEDRATE && $CONFIGFEEDRATEONMOVE=1 {FEEDRATE :M} $FEEDRATE:=$FEEDRATE END [FEEDRATE LINE] IF $FEEDRATE > 0.0 && $FEEDRATE != $LASTFEEDRATE && $CONFIGFEEDRATEONMOVE=0 {LINENO :M}{FEEDRATE :M} $FEEDRATE:=$FEEDRATE END [ADD KERF VALUE] IF $KERF > 0.0 && $KERF != $LASTKERF {KERF VALUE} $KERF:=$KERF END [OUTPUT KERF LEFT] // Any call from Pronest to this or the next section says that this part was not // prekerfed. If not prekerfed, then we need to cancel the Kerf at the end of // the cut. $PREKERFED:=0 [OUTPUT KERF RIGHT] $PREKERFED:=0 [KERF LEFT] IF $CONFIGUSEKERFONMOVE<2 IF ($KERF <= 0 && $CONFIGUSEDVALUE=0) || $CONFIGUSEDVALUE=2 IF $CONFIGUSEKERFONMOVE=0 {LINENO :M}G41 ELSE G41 END ELSE IF $CONFIGUSEKERFONMOVE=0 {LINENO :M}G41{KERF VALUE :M} ELSE G41{KERF VALUE :M} END $KERF:=$KERF END END $KERFSTATUS:=41 [KERF RIGHT] IF $CONFIGUSEKERFONMOVE<2 IF ($KERF <= 0 && $CONFIGUSEDVALUE=0) || $CONFIGUSEDVALUE=2 IF $CONFIGUSEKERFONMOVE=0 {LINENO :M}G42 ELSE G42 END ELSE IF $CONFIGUSEKERFONMOVE=0 {LINENO :M}G42{KERF VALUE :M} ELSE G42{KERF VALUE :M} $KERF:=$KERF END END $KERFSTATUS:=42 [KERF OFF] IF $CONFIGUSEKERFONMOVE<2 IF $KERFSTATUS!=40 IF $CONFIGUSEKERFONMOVE=0 {LINENO :M}G40 ELSE G40 END END END $KERFSTATUS:=40 [KERF MOVE] {KERF DIRECTION} [KERF DIRECTION] IF ($PROCESS != SCRIBE1) && ($PROCESS != SCRIBE2) && ($PREKERFED=0) IF $KERFDIR = LEFT && $KERFSTATUS!=41 {KERF LEFT} END IF $KERFDIR = RIGHT && $KERFSTATUS!=42 {KERF RIGHT} END IF $KERFDIR = OFF && $KERFSTATUS!=40 {KERF OFF} END END [OUTPUT STOP] {LINENO :M}M00 [OUTPUT AHCON] {AHCON} [OUTPUT AHCOFF] {AHCOFF} [AHCON CODE] {LINENO :M}M51 [AHCOFF CODE] {LINENO :M}M50 [AHCON] IF ($AHCISON = 0 || $AHCISON = 2) && $DISABLEAHC=0 {AHCON CODE} $AHCISON:=1 END [FORCE AHCON] IF ($AHCISON = 0 || $AHCISON = 2) {AHCON CODE} $AHCISON:=1 END [AHCOFF] IF ($AHCISON = 1 || $AHCISON = 2) {AHCOFF CODE} $AHCISON:=0 END [CHECK AHC] // If Pronest thinks it's supposed to be on ($AHC=ON), and it's not, and we're // not disabling it through the Process Parameter file, turn it on IF $AHC=ON && $AHCISON=0 && $DISABLEAHC=0 {AHCON} END // If Pronest thinks it's supposed to be off ($AHC=OFF), and it's on, turn it off IF $AHC=OFF && $AHCISON!=0 || $DISABLEAHC=1 {AHCOFF} END [START LEADIN] // This section is here as a place holder and so the name is already in place [END LEADIN] // This section is here as a place holder and so the name is already in place [START LEADOUT] // This section is here as a place holder and so the name is already in place [END LEADOUT] // This section is here as a place holder and so the name is already in place [START TAB] $INTAB := 1 [END TAB] $INTAB := 0 {END LEADIN} [CUT SUB] // This section may be useful if an integer value is used to initiate cutting. // This is often an M98P___ call to a subroutine already stored in the machine ARGUMENT=$CUTSUB FORMAT=M98P%d [CUT CONDITION] // This section may be useful if a cutting condition needs to be applied // separately from the CUT SUB value. ARGUMENT=$CUTCONDITION FORMAT=E%d [TOUCH AND GO] IF $DOTOUCHNGO=1 {PIERCE HEIGHT} {G28 Z} {LINENO :M}G92 Z0.0 {SWITCH OFFSET} {LINENO :M}G92 Z0.0 END {PIERCE HEIGHT} //[PIERCE HEIGHT] //ARGUMENT=$PIERCEHEIGHT //FORMAT={LINENO :M}{RAPID MOTION CODE :M} Z{Z FORMAT} [G28 Z] ARGUMENT=$G28Z FORMAT={LINENO :M}G28.1 Z{Z FORMAT} [SWITCH OFFSET] ARGUMENT=$SWITCHOFFSET FORMAT={LINENO :M}{RAPID MOTION CODE :M} Z{Z FORMAT} [OUTPUT CUT1 ON] // CUT1 ON codes go in this section. {FEEDRATE LINE} {CHECK AHC} IF $CONFIGUSEKERFONMOVE=0 {KERF DIRECTION :M} END {OUTPUT PREHEAT} {LINENO :M}M03 (Âêëþ÷èòü ïëàçìó) {OUTPUT PIERCEDELAY} [OUTPUT CUT1 OFF] IF $FORCEOFFUP=0 // Turn off the cutting device, but leave the head at cutting height {CHECK AHC} {LINENO :M}M05 (Âûêëþ÷èòü ïëàçìó) {OUTPUT ENDDELAY} // Should we really call Safe Z here? //{SAFE Z} IF $PREKERFED=0 && $INTAB=0 && ($CONFIGNOG40ONARC=0 || $CURRENTMOTION<2) {KERF OFF} END $KERF:=0.0 {FORCE AHCON} IF $CONFIGSUPRESSFEEDRATE=0 $FEEDRATE:=0.0 END ELSE {OUTPUT CUT1 OFFUP} END [OUTPUT CUT1 OFFUP] // Turn off the cutting device, and raise the head to travel height {CHECK AHC} {LINENO :M}M05 (Âûêëþ÷èòü ïëàçìó) {OUTPUT ENDDELAY} //{SAFE Z} IF $PREKERFED=0 && $INTAB=0 && ($CONFIGNOG40ONARC=0 || $CURRENTMOTION<2) {KERF OFF} END $KERF:=0.0 {FORCE AHCON} IF $CONFIGSUPRESSFEEDRATE=0 $FEEDRATE:=0.0 END //[SAFE Z] //ARGUMENT=$SAFEZ //FORMAT={LINENO :M}{RAPID MOTION CODE :M} Z{Z FORMAT} [OUTPUT SCRIBE1 ON] // Scribing or Marking commands go in this section $PREKERFED:=1 {CANCEL PREVIOUS OFFSET} {SOP LINENO 0} IF $PARTNAMEASCOMMENT = TRUE {PART NAME COMMENT} END {ACTIVATE CURRENT OFFSET} {PROCESS ON MOTION} {LINENO :M}M08 (M08 M08) [OUTPUT SCRIBE1 OFF] {LINENO :M}M07 (M07 M07) $KERF:=0.0 IF $CONFIGSUPRESSFEEDRATE=0 $FEEDRATE:=0.0 END [OUTPUT PUNCH1 ON] // Depending on customer choice, this could be a piercing routine or a point // marking routine. Or duplicate the section and make both. $PREKERFED:=1 {CANCEL PREVIOUS OFFSET} {SOP LINENO 0} IF $PARTNAMEASCOMMENT = TRUE {PART NAME COMMENT} END {ACTIVATE CURRENT OFFSET} {PROCESS ON MOTION} {TOUCH AND GO} {OUTPUT PREHEAT} {LINENO :M}M03 {OUTPUT PIERCEDELAY} {LINENO :M}M05 {OUTPUT ENDDELAY} //{SAFE Z} $KERF:=0.0 IF $CONFIGSUPRESSFEEDRATE=0 $FEEDRATE:=0.0 END [COMMENT FORMAT] (%s) [FORMAT PART OF THE CFF] [INITPTX] ARGUMENT=($INITPTX - $ZEROPTX) * $CONVERSION FORMAT=X{XY FORMAT} [INITPTY] ARGUMENT=($INITPTY - $ZEROPTY) * $CONVERSION FORMAT=Y{XY FORMAT} [CONVERSION] IF $UNITS=INCH 1.00 ELSE 25.40 END [NWORD] // Use N%d for no leading zeros // Use N%03d for 3 digit N numbers // Use N%04d for 4 digit N numbers FORMAT=N%d{SP} ARGUMENT=$LINENUMBER [NUMTORCHES] ARGUMENT=$NUMTORCHES FORMAT=%d [TORCHSPACING] ARGUMENT=$TORCHSPACING * $CONVERSION FORMAT=%1.3lf [TORCHUNITS] IF $UNITS = INCH in ELSE mm END [XY FORMAT] IF $UNITS=INCH IF $PRECISION=NORMAL %1.3lf ELSE %1.4lf END ELSE IF $PRECISION=NORMAL %1.2lf ELSE %1.3lf END END [IJ FORMAT] IF $UNITS=INCH IF $PRECISION=NORMAL %1.3lf ELSE %1.4lf END ELSE IF $PRECISION=NORMAL %1.2lf ELSE %1.3lf END END [Z FORMAT] IF $UNITS=INCH IF $PRECISION=NORMAL %1.3lf ELSE %1.4lf END ELSE IF $PRECISION=NORMAL %1.2lf ELSE %1.3lf END END [DIMENSION DISPLAY FORMAT] IF $UNITS=INCH IF $PRECISION=NORMAL %1.3lf ELSE %1.4lf END ELSE IF $PRECISION=NORMAL %1.2lf ELSE %1.3lf END END [FEEDRATE FORMAT] IF $UNITS=INCH %1.1lf ELSE %1.0lf END [DWELL FORMAT] %1.2lf [XYIJ DECIMAL SHIFT] 1 [FEEDRATE DECIMAL SHIFT] 1 [KERF DECIMAL SHIFT] 1 [DWELL DECIMAL SHIFT] 1 [ANGLE DECIMAL SHIFT] 1 [TOOL] ARGUMENT=$TOOL FORMAT=%d [UGOL FORMAT] %1.3lf [C_X] IF $CONFIGUSEMODALXY>0 MODAL_ARGUMENT=$X END IF $MODE=ABSOLUTE ARGUMENT=($X - $ZEROPTX) * $CONVERSION * $XYIJDECIMALSHIFT ELSE ARGUMENT=($X - $LASTX) * $CONVERSION * $XYIJDECIMALSHIFT END FORMAT=X{XY FORMAT} [C_Y] IF $CONFIGUSEMODALXY>0 MODAL_ARGUMENT=$Y END IF $MODE=ABSOLUTE ARGUMENT=($Y - $ZEROPTY) * $CONVERSION * $XYIJDECIMALSHIFT ELSE ARGUMENT=($Y - $LASTY) * $CONVERSION * $XYIJDECIMALSHIFT END FORMAT=Y{XY FORMAT} [C_I] IF $MODE=ABSOLUTE && $CONFIGIJALWAYSINCREMENTAL=0 ARGUMENT=($I - $ZEROPTX) * $CONVERSION * $XYIJDECIMALSHIFT ELSE ARGUMENT=($I - $LASTX) * $CONVERSION * $XYIJDECIMALSHIFT END FORMAT=I{IJ FORMAT} [C_J] IF $MODE=ABSOLUTE && $CONFIGIJALWAYSINCREMENTAL=0 ARGUMENT=($J - $ZEROPTY) * $CONVERSION * $XYIJDECIMALSHIFT ELSE ARGUMENT=($J - $LASTY) * $CONVERSION * $XYIJDECIMALSHIFT END FORMAT=J{IJ FORMAT} [UGOL] ARGUMENT=$ARCANGLE FORMAT=A{UGOL FORMAT} [DBT] ARGUMENT=$DLINABT FORMAT={UGOL FORMAT} [DL] IF $MOTIONTYPE=1 ARGUMENT=((($X - $LASTX)^2 + ($Y - $LASTY)^2)^0.5)*25.4 END IF ($MOTIONTYPE=2 || $MOTIONTYPE=3) ARGUMENT=2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360 END FORMAT={UGOL FORMAT} [DLINAR] ARGUMENT=2 * 3.14159265 * $RADIUS * 25.4 * $ARCANGLE / 360 FORMAT={UGOL FORMAT} [R1] ARGUMENT=$RADIUS * 25.4 FORMAT={UGOL FORMAT} [FEEDRATE] MODAL_ARGUMENT=$FEEDRATE ARGUMENT=$FEEDRATE * $CONVERSION * $FEEDRATEDECIMALSHIFT FORMAT=F{FEEDRATE FORMAT} [KERF VALUE] IF $CONFIGUSEDVALUE=1 // D value as kerf ARGUMENT=$DVALUE FORMAT=D%02d ELSE IF $CONFIGUSEDVALUE=0 // Kerf as actual kerf (typically with a leading K) MODAL_ARGUMENT=$KERF ARGUMENT=$KERF * $CONVERSION * $KERFDECIMALSHIFT FORMAT=K{XY FORMAT} ELSE IF $CONFIGUSEDVALUE=3 // For TurboNest CFFs that want a D register but can't use a Process // Parameter column, use the Kerf column as the D register number ARGUMENT=$KERF * $CONVERSION FORMAT=D%02.0lf END END END [OUTPUT DWELL] ARGUMENT=$DWELL * $DWELLDECIMALSHIFT // Dwell times are usually specified with an F, X, or P value FORMAT={LINENO :M}G04F{DWELL FORMAT} [OUTPUT PREHEAT] IF $PREHEAT>0 ARGUMENT=$PREHEAT * $DWELLDECIMALSHIFT FORMAT={LINENO :M}G04 P{DWELL FORMAT} END [OUTPUT PIERCEDELAY] IF $PIERCEDELAY>0 ARGUMENT=$PIERCEDELAY * $DWELLDECIMALSHIFT FORMAT={LINENO :M}G04 P{DWELL FORMAT} END [OUTPUT ENDDELAY] IF $ENDDELAY>0 ARGUMENT=$ENDDELAY * $DWELLDECIMALSHIFT FORMAT={LINENO :M}G04 P{DWELL FORMAT} END [CONDITIONS PART OF THE CFF] [MAXLINENO] 9999 [TORCH SPACING REQUIRED] ($TORCHSPACING != $PREVTORCHSPACING || $NUMTORCHES != $PREVNUMTORCHES) [KERF STILL ON] $KERFDIR = LEFT || $KERFDIR = RIGHT [MOTION REQUIRED] (($X - $LASTX)^2 + ($Y - $LASTY)^2)^0.5 > 0.00001 [NORMAL AXIS DIRECTION] (($AXIS_SWAP_TYPE=NONE) || ($AXIS_SWAP_TYPE=SWAP90) || ($AXIS_SWAP_TYPE=SWAP180) || ($AXIS_SWAP_TYPE=SWAP270)) [INSIDE CW ARC TOO SMALL FOR KERF] ($CONFIGUSEDVALUE<3 && ($MOTIONTYPE=2 && $KERFDIR=RIGHT && $RADIUS<$KERF*0.5)) [INSIDE CCW ARC TOO SMALL FOR KERF] ($CONFIGUSEDVALUE<3 && ($MOTIONTYPE=3 && $KERFDIR=LEFT && $RADIUS<$KERF*0.5)) [ARC TOO LINEAR] ({CHORD LENGTH}<(($RADIUS^2-($RADIUS-0.002)^2)^0.5)*2 && $RADIUS>1 && $ARCANGLE<0.5) [ARC RADIUS TOO SMALL] ($RADIUS < 0.0040000 || $ARCANGLE < 0.5 || ({CHORD LENGTH} < 0.00200 && $ARCANGLE<0.5)) [CHECK FOR ARC TOO SMALL] $ARCTOOSMALL:=0 IF {INSIDE CW ARC TOO SMALL FOR KERF} $ARCTOOSMALL:=1 END IF {INSIDE CCW ARC TOO SMALL FOR KERF} $ARCTOOSMALL:=1 END IF {ARC TOO LINEAR} $ARCTOOSMALL:=1 END IF {ARC RADIUS TOO SMALL} $ARCTOOSMALL:=1 END [RAPID INIT MOTION ALLOWED] (($X - $INITPTX)^2 + ($Y - $INITPTY)^2)^0.5 > 0.0100 && $PROCESSONSTATE = FALSE [ARC RADIUS] (($I - $LASTX)^2 + ($J - $LASTY)^2)^0.5 [CHORD LENGTH] (($X - $LASTX)^2 + ($Y - $LASTY)^2)^0.5 [CNC TOKEN DEBUG] // See FogBugz #2923 for details 0 [SP] ARGUMENT=$SPACE FORMAT=%c [CHARACTER REPLACE TABLE] (|_ )|_ [CFFDIR] IF $CFFDIR=none $CFFDIR:='SUBSTRING($CFFNAME,'RANGE(0,'TEXTLEN($CFFNAME)-'TEXTLEN($ROOTCFFNAME)-6)) END ARGUMENT=$CFFDIR FORMAT=%s // As of the 8.3 release version, the CFFDIR variable is optional in the user // defined variables. In all prior release versions, it is required. [ROOT CFF NAME] ARGUMENT=$ROOTCFFNAME FORMAT=%s [POST PROCESSING] // Uncomment if an executable is needed "{CFFDIR}\{ROOT CFF NAME}.exe" "{CNC NAME}" //'EXECUTE "{CFFDIR}\Armatura-ural.bat" [USER DEFINED VARIABLES] VSTAVIT|INTEGER|0 FLAGBT|INTEGER|0 FLAGECHO11|INTEGER|0 DLINABT|DOUBLE|0.0 NONSTOP1|INTEGER|0 SAVEPARTNAME|STRING|0 SAVENUM|INTEGER|0 DX|DOUBLE|0.0 DY|DOUBLE|0.0 EXACTSTOPCHECK|INTEGER|0 ANGLECHANGE|DOUBLE|1.0 KERFSTATUS|INTEGER|0 PREKERFED|INTEGER|0 AHCISON|INTEGER|3 AHC|STRING|ON SPACE|INTEGER|32 CONFIGTOUCHNGO|STRING|ALL CONFIGUSEDVALUE|INTEGER|0 CONFIGUSEKERFONMOVE|INTEGER|0 CONFIGNOG40ONARC|INTEGER|0 CONFIGFEEDRATEONMOVE|INTEGER|0 CONFIGSUPRESSFEEDRATE|INTEGER|0 CONFIGUSEEXACTSTOPCHECK|INTEGER|0 CONFIGUSEMODALMOTIONCODES|INTEGER|0 CONFIGUSEMODALXY|INTEGER|0 CONFIGAHCISON|INTEGER|0 CONFIGIJALWAYSINCREMENTAL|INTEGER|1 CONFIGSOPLINENOLOCATION|INTEGER|0 CONFIGFORCEEXTERIORTOOFFUP|INTEGER|1 FORCEOFFUP|INTEGER|0 ZEROPTX|DOUBLE|0.0 ZEROPTY|DOUBLE|0.0 CFFDIR|STRING|none CURRENTMOTION|INTEGER|-1 MOTIONTYPE|INTEGER|-1 INTAB|INTEGER|0 ARCTOOSMALL|INTEGER|0 DOTOUCHNGO|INTEGER|1 PossibleProcParamsStartHere|INTEGER|0 CUTSUB|INTEGER|0 CUTCONDITION|INTEGER|0 ProcParamColsStartHere|INTEGER|0 EXACTSTOPANGLE|DOUBLE|30.0 FEEDRATE|DOUBLE|0.0 DVALUE|INTEGER|0 DISABLEAHC|INTEGER|0 KERF|DOUBLE|0.0 DWELL|DOUBLE|0.0 PIERCEHEIGHT|DOUBLE|0.0 SWITCHOFFSET|DOUBLE|0.054 G28Z|DOUBLE|0.0 SAFEZ|DOUBLE|2.0 PREHEAT|DOUBLE|0.0 PIERCEDELAY|DOUBLE|0.0 ENDDELAY|DOUBLE|0.0 TOOL|INTEGER|7 SCODE|INTEGER|500