Библиотека макросов

English

O9016.NC

%
O9016(THREAD CYCLE)

#101=#24( -X- THREAD DIAMETER)
#102=#26( -Z- STOP THREAD)
#103=#9( -F- THREAD PITCH)
#104=#7( -D- THREAD DEPTH)
#105=#1( *-A- THREAD ANGLE)
#106=#21( *-U- DEPTH IN ONE OPERATION)
#107=#11( *-H- ALLOWANCE FOR X AXIS)
#108=#3( *-C- CONE HEIGHT)
#109=#6( *-K- NUMBER OF FINISHING CYCLES)
#110=#23( *-W- WIDTH HARD CYCLES)
#111=#22( *-V- WIDTH FINISHING CYCLES)
#112=#4( *-I- NUMBER OF THREADS)
#113=#5( *-J- MINIMUM NUMBER OF REVOLUTIONS PER ONE THREAD)
#114=#13( *-M- MODE)
#115=#19( *-S- START STOP MODE)


(===== STATIC VARIABLES =====)
#121=1.(MAX WIDTH HARD CYCLES)
#122=0.1(MAX WIDTH FINISHING CYCLES)
#123=25.(MIN THREAD ANGLE)
#124=65.(MAX THREAD ANGLE)
#125=1.(MAX ALLOWANCE FOR X AXIS)
#126=1.(MAX CONE HEIGHT)
#127=20.(MAX NUMBER OF FINISHING CYCLES)
#128=5.(MAX NUMBER OF THREADS)
#129=360000.(FULL TURN IN G32)

#130=99(TYPE STARTUP -M99- FOR MACRO)
IF[#4000EQ9016]THEN#130=30(-M30- FOR MAIN PROGRAM)
(MACRO NAMES MUST BE EQUIVALENT)
(===== END =====)

 
(===== DEFAULT =====)
#131=#5002(START THREAD =ABS Z AXIS=)
#132=#5001(START THREAD DIAMETER =ABS X AXIS=)

#133=1(DEFAULT ROTATION DIAMETR)
#134=1(DEFAULT ROTATION LENGTH)
IF[#101GT#132]THEN#133=-1(DEFAULT ROTATION DIAMETR)
IF[#102GT#131]THEN#134=-1(DEFAULT ROTATION LENGTH)
IF[#105EQ#0]THEN#105=60.(DEFAULT THREAD ANGLE)
IF[#106EQ#0]THEN#106=#104*2(DEFAULT DEPTH IN ONE OPERATION)
IF[#107EQ#0]THEN#107=0(DEFAULT ALLOWANCE FOR X AXIS)
IF[#108EQ#0]THEN#108=0(DEFAULT CONE HEIGHT)
IF[#109EQ#0]THEN#109=0(DEFAULT NUMBER OF FINISHING CYCLES)
#136=-1(DEFAULT ROTATION ON Z AXIS)
IF[#110EQ#0]THEN#136=1(DEFAULT ROTATION ON Z AXIS)
IF[#110EQ#0]THEN#110=0(DEFAULT WIDTH HARD CYCLES)
IF[[#111NE0]AND[#109EQ1]]THEN#109=2(DEFAULT NUMBER OF FINISHING CYCLES)
IF[#112EQ#0]THEN#112=1(DEFAULT NUMBER OF THREADS)
IF[#113EQ#0]THEN#113=500(DEFAULT MINIMUM NUMBER OF REVOLUTIONS PER ONE THREAD)
#116=TAN[#105/2+#105/4]*[#104]*#134(SHIFT)
IF[#110NE0]THEN#116=TAN[#105/2]*[#104]*#134+#110/2
IF[#115EQ1]THEN#131=#131-#116(START STOP MODE 1 - ABS START)
IF[#115EQ2]THEN#102=#102+TAN[#105/2]*[#104]*#134(START STOP MODE 2 - ABS STOP)
IF[#115EQ3]THEN#131=#131-#116(START STOP MODE 3 - ABS START STOP)
IF[#115EQ3]THEN#102=#102+TAN[#105/2]*[#104]*#134(START STOP MODE 3 - ABS START STOP)
(===== END =====)


(===== CHECK VARIABLES =====) 
IF[#101EQ#0]GOTO1201(MISSING THREAD DIAMETER)
IF[#102EQ#0]GOTO1202(MISSING STOP THREAD)
IF[#103EQ#0]GOTO1203(MISSING THREAD PITCH)
IF[#103LE0]GOTO1204(THREAD PITCH MUST BE POSITIVE)
IF[#105EQ#0]GOTO1205(MISSING THREAD ANGLE)
IF[[#105LT#123]OR[#105GT#124]]GOTO1206(THREAD ANGLE OUT OF RANGE)
IF[#104EQ#0]GOTO1207(MISSING THREAD DEPTH)
IF[#104EQ0]GOTO1208(WRONH THREAD DEPTH)
IF[#104LT0]GOTO1209(THREAD DEPTH MUST BE POSITIVE)
IF[#106EQ#0]GOTO1210(MISSING DEPTH IN ONE OPERATION)
IF[#106LE0]GOTO1211(DEPTH IN ONE OPERATION MUST BE POSITIVE)
IF[[#107LT0]OR[#107GT#125]]GOTO1212(ALLOWANCE OUT OF RANGE)
IF[[ABS[#108]LT0]OR[ABS[#108]GT#126]]GOTO1213(CONE HEIGHT OUT OF RANGE)
IF[[#109LT0]OR[#109GT#127]]GOTO1214(NUMBER OF FINISHING CYCLES OUT OF RANGE)
IF[[FIX[#109]]NE[FUP[#109]]]GOTO1215(NUMBER OF FINISHING CYCLES MUST BE INTEGER)
IF[[#110LT0]OR[#110GT#121]]GOTO1216(WIDTH HARD CYCLES OUT OF RANGE)
IF[[#111LT0]OR[#111GT#122]]GOTO1217(WIDTH FINISHING CYCLES OUT OF RANGE)
IF[[[#101+#104*2]GT#132]AND[#133EQ1]]GOTO1218(WRONG START DIAMETR)
IF[[[#101-#104*2]LT#132]AND[#133EQ-1]]GOTO1218(WRONG START DIAMETR)
IF[[#112LE0]OR[#112GT#128]OR[#112NE[ROUND[#112]]]]GOTO1219(WRONG NUMBER OF THREADS)
IF[[#113LE0]OR[#113NE[ROUND[#113]]]]GOTO1220(WRONG MINIMUM NUMBER OF REVOLUTIONS PER ONE THREAD)
IF[[#114NE#0]AND[#114NE1]]GOTO1221(WRONG MODE)
IF[[#115NE#0]AND[#115NE0]AND[#115NE1]AND[#115NE2]AND[#115NE3]]GOTO1222(WRONG START STOP MODE)
(===== END =====)


#137=0(THREAD LENGTH)
IF[[#102LE0]AND[#131LE0]]THEN#137=ABS[ABS[#102]-ABS[#131]](START- END-)
IF[[#102GE0]AND[#131GE0]]THEN#137=ABS[#102-#131](START+ END+)
IF[[#102LE0]AND[#131GE0]]THEN#137=ABS[ABS[#102]+ABS[#131]](START- END+)
IF[[#102GE0]AND[#131LE0]]THEN#137=ABS[ABS[#102]+ABS[#131]](START+ END-)


(===== START HARD CYCLE =====)
IF[[#104EQ0]AND[#109NE0]]GOTO1402

#141=#129(FULL TURN IN G32) 
#142=1(COUNTER NUMBER OF THREADS)
WHILE[#142LE#112]DO1(CYCLE NUMBER OF THREADS)


#151=1(Z ROTATION SHIFT)
#152=1(Z ROTATION STARTING POSITION)
IF[#102GT#131]THEN#152=-1
#153=#104*2-#106*2 (COUNTER)
WHILE[#153GE0]DO2(DEPTH OFFSET X AXIS)

#156=TAN[#105/2+#105/4]*[#153/2](SHIFT +) 
#157=TAN[#105/2+#105/4*[-1]]*[#153/2](SHIFT -) 
#154=TAN[#105/2+#105/4*#151]*[#153/2](SHIFT) 
IF[[[#156-#157]GE[#110]]AND[#110NE0]]THEN#154=TAN[#105/2]*[#153/2]+#110/2*#151(MAX SHIFT) 

#155=TAN[#105/2]*[#104-#153/2] (END SHIFT)


(POSITIONS)
#161=[[#131+#154*#152]+TAN[#105/2]*[#104*2-#153]/2*#134](-Z- BEFORE START)
#162=[#101+#107+[#104*2]*#133](-X- BEFORE START)
#163=[#131+#154*#152](-Z- END THREAD 1)
#164=[#101+[#153+#107]*#133](-X- END THREAD 1)
#165=#102(-Z- END THREAD 2)
#166=[#101+[#153+#107]*#133](-X- END THREAD 2)
#167=[#102-#155*#134](-Z- END THREAD 3)
#168=[#101+#107+[#104*2]*#133](-X- END THREAD 3)

#171=#113*#103(STEP AS THE MINIMUM LENGTH OF ONE PASS)
#172=#171(COUNTER)
IF[#172GT#137]THEN#172=#137(LAST PASS LENGTH)
#173=0(COUNTER RADIAL ENTRY)
WHILE[#172LE#137]DO3(CYCLE RADIAL ENTRY Z AXIS)

#180=#131(-Z- DEFAULT)
#181=#132(-X- DEFAULT)
#182=[#161-#171*#173*#152](-Z- BEFORE START)
#183=#162(-X- BEFORE START)
#184=[#163-#171*#173*#152](-Z- END THREAD 1)
#185=#164(-X- END THREAD 1)
#186=[#165+#137*#152-#172*#152](-Z- END THREAD 2)
#187=#166(-X- END THREAD 2)
#188=[#167+#137*#152-#172*#152](-Z- END THREAD 3)
#189=#168(-X- END THREAD 3)

IF[[#172LT#137]AND[[#172+#171]GT#137]]THEN#186=#165
IF[[#172LT#137]AND[[#172+#171]GT#137]]THEN#188=#167

#190=#108/#137(CONE HEIGHT PER 1 MM)
#191=ABS[#131*#134-#182*#134]*#190(START CONE)
#192=ABS[#131*#134-#184*#134]*#190(START CONE)
#193=ABS[#131*#134-#186*#134]*#190(END CONE)

IF[#173EQ0]THEN#191=#191*[-1]
IF[#173EQ0]THEN#192=#192*[-1]

G0Z#182
G0X[#183+#191]
G32Z#184X[#185+#192]Q[#141/#142]F[#103*#112]
G32Z#186X[#187+#193]Q[#141/#142]F[#103*#112]
G32Z#188X[#189+#193]Q[#141/#142]F[#103*#112]
G0X#181

#173=#173+1*2
#172=#172+#171*2
END3


IF[[#113*#103*2]GE#137]GOTO99
#171=#113*#103(STEP AS THE MINIMUM LENGTH OF ONE PASS)
#172=#171*2(COUNTER)
IF[#172GT#137]THEN#172=#137(LAST PASS LENGTH)
#173=1(COUNTER RADIAL ENTRY)
WHILE[#172LE#137]DO3(CYCLE RADIAL ENTRY Z AXIS)


#180=#131(-Z- DEFAULT)
#181=#132(-X- DEFAULT)
#182=[#161-#171*#173*#152](-Z- BEFORE START)
#183=#162(-X- BEFORE START)
#184=[#163-#171*#173*#152](-Z- END THREAD 1)
#185=#164(-X- END THREAD 1)
#186=[#165+#137*#152-#172*#152](-Z- END THREAD 2)
#187=#166(-X- END THREAD 2)
#188=[#167+#137*#152-#172*#152](-Z- END THREAD 3)
#189=#168(-X- END THREAD 3)

IF[[#172LT#137]AND[[#172+#171]GT#137]]THEN#186=#165
IF[[#172LT#137]AND[[#172+#171]GT#137]]THEN#188=#167

#190=#108/#137(CONE HEIGHT PER 1 MM)
#191=ABS[#131*#134-#182*#134]*#190(START CONE)
#192=ABS[#131*#134-#184*#134]*#190(START CONE)
#193=ABS[#131*#134-#186*#134]*#190(END CONE)

IF[#114NE1]GOTO98
#182=#161(-Z- BEFORE START)
#184=#163(-Z- END THREAD 1)
#186=#165(-Z- END THREAD 2)
#188=#167(-Z- END THREAD 3)
#191=0(START CONE)
#192=0(START CONE)
#193=#108(END CONE)
#172=#137(RESET COUNTER)
N98

G0Z#182
G0X[#183+#191]
G32Z#184X[#185+#192]Q[#141/#142]F[#103*#112]
G32Z#186X[#187+#193]Q[#141/#142]F[#103*#112]
G32Z#188X[#189+#193]Q[#141/#142]F[#103*#112]
G0X#181
G0U[0.1*#133]

#173=#173+1*2
#172=#172+#171*2
END3
N99


#153=#153-#106*2
IF[[#153LT0]AND[#153GT[-#106*2]]] THEN #153=0 (LAST RUN)
#151=#151*#136 (CHANGE ROTATION)
END2
N1402


#142=#142+1
END1
(===== END HARD CYCLE =====)


(===== START CLEAN CYCLE =====)
#141=#129(FULL TURN IN G32)
#142=1(COUNTER NUMBER OF THREADS)
WHILE[#142LE#112]DO1(CYCLE NUMBER OF THREADS)


#151=1 (Z ROTATION)
#194=1 (COUNTER)
#155=TAN[#105/2]*[#104] (END SHIFT)
WHILE[#194LE#109]DO2(CYCLE CHISTOVYE PROHODY)

(POSITIONS)
#161=[[#131]+TAN[#105/2]*[#104]*#134+#111*#151](-Z- BEFORE START)
#162=[#101+[#104*2]*#133](-X- BEFORE START)
#163=[#131+#111*#151](-Z- END THREAD 1)
#164=#101(-X- END THREAD 1)
#165=[#102+#111*#151](-Z- END THREAD 2)
#166=[#101+#108](-X- END THREAD 2)
#167=[#102+#111*#151-#155*#134](-Z- END THREAD 3)
#168=[#101+#108+[#104*2]*#133](-X- END THREAD 3)

G0Z#131
G0Z#161
G0X#162
G32Z#163X#164Q[#141/#142]F[#103*#112]
G32Z#165X#166Q[#141/#142]F[#103*#112]
G32Z#167X#168Q[#141/#142]F[#103*#112]
G0X#132
G0Z#131

#194=#194+1
#151=#151*[-1](CHANGE ROTATION)
END2


#142=#142+1
END1
(===== END CLEAN CYCLE =====)


M#130(END PROGRAM) 
 
(ERRORS) 
N1201#3000=1(-X- MISSING THREAD DIAMETR)
N1202#3000=2(-Z- MISSING STOP THREAD)
N1203#3000=3(-F- MISSING THREAD PITCH)
N1204#3000=4(-F- PITCH MUST BE POSITIVE) 
N1205#3000=5(-A- MISSING THREAD ANGLE)
N1206#3000=6(-A- ANGLE OUT OF RANGE)
N1207#3000=7(-D- MISSING THREAD DEPTH)
N1208#3000=8(-D- WRONH THREAD DEPTH)
N1209#3000=9(-D- DEPTH MUST BE POSITIVE)
N1210#3000=10(-U- MISSING DEPTH)
N1211#3000=11(-U- DEPTH MUST BE POSITIVE)
N1212#3000=12(-H- ALLOWANCE OUT OF RANGE)
N1213#3000=13(-C- CONE OUT OF RANGE)
N1214#3000=14(-K- CYCLES OUT OF RANGE)
N1215#3000=15(-K- CYCLES MUST BE INTEGER)
N1216#3000=16(-W- WIDTH OUT OF RANGE)
N1217#3000=17(-V- WIDTH OUT OF RANGE)
N1218#3000=18(WRONG START DIAMETR)
N1219#3000=19(-I- WRONG NUMBER OF THRDS)
N1220#3000=20(-J- WRONG NUMBER)
N1221#3000=21(-M- WRONG MODE)
N1222#3000=22(-S- WRONG START STOP MODE)
(the length of the emergency message is no more than 26 characters)

M99
%