OSP スパイラル−ヘリカル補間プログラムの解説

($SPLHELN.SSB%)
(CUTING FOR SPIRAL-HELICAL)
(03/09/10 [O5020M])
(y.nakashima)
(Copyright (C) 2001 by aho
(***************************)
(OSPHL) (SPIRAL-HELICAL)
O8079
IF[#24 EQ #0]GOTO999 (NO X)
IF[#25 EQ #0]GOTO999 (NO Y)
IF[#26 EQ #0]GOTO999 (NO Z)
IF[#2 EQ #0]GOTO999 (NO B)
IF[#4 EQ #0]GOTO999 (NO I)
IF[#3 EQ #0]GOTO999 (NO C)
IF[#3 LT 0]GOTO999 (DATA NG C-)
#32=#2/360*#5
#31=#2/360*#6         PBから全ストロークを求める。#32が半径方向・#31がZ方向
#30=#3
IF[#2 GE 0]GOTO010
#32=-#32
#31=-#31
#30=-#30
N010
#29=#2
#28=0                     #28が初期値。#33が加工範囲。#2で直接見てもよい。
#33=ABS[#29]
#28=#28+#30
WHILE[ABS[#28] LT #33]DO1     ここからループの始まり。#28が#3分加算されているので、スタート位置は出力されない。
#27=ABS[#28/#29]     #28をストロークで割っているので#27は結局ループの何%の位置かが判る
#14=#32*#27
#15=#31*#27             全ストロークに#27を掛ければ現在のストロークが求まる
#16=#4+#14
#12=#28+#1               半径と角度にスタート寸法を加算し現在の値を求める
G1 X[#24+#16*COS[#12]] Y[#25+#16*SIN[#12]] Z[#26+#15] F#9     XYはSIN・COSで現在値を、Zは加算でスタート位置から現ストロークを加算する
#28=#28+#30             一回りしたのでピック量を加算
END1                       ループの終わり。WHILEの条件が成立している間このループを繰り返す。WHILEの条件設定ががおかしいと、ここで矛盾を生じ、いきなり終点を出力して直ぐに終わるか、逆回転になって何時まで経っても終了条件が成立しなくなる。
G1 X[#24+[#4+#32]*COS[#1+#2]] Y[#25+[#4+#32]*SIN[#1+#2]] Z[#26+#31] F#9     現在値がストロークを超えたので終点を出力して終わり
M99
%
%

STRR #32
STRZ #31
PPP #30
ANGL #29 ABS[ANGL](ワーク変数) #33
ANG #28
RAT #27
STRL #14
STRK #15
RADX #16
ANGX #12
PP ->PC #3

NERR N999