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

($SPLHEL.SSB%)
(CUTING FOR CAM)
(03/09/10 [O5020M])
(y.nakashima)
(Copyright (C) 2001 by aho
(***************************)
OSPHL (HELICAL-SPIRAL FOR CCW)
IF[PX NE EMPTY]NERR (NO PX)
IF[PY NE EMPTY]NERR (NO PY)
IF[PB EQ EMPTY]NERR (NO PB)
IF[PI EQ EMPTY]NERR (NO PI)
IF[PP EQ EMPTY]NERR (NO PP)
STRR=PB/360*PJ STRZ=PB/360*PK     PBから全ストロークを求める。STRRが半径方向・STRZがZ方向
ANGL=PB ANG=0                                ANGが初期値。ANGLが加工範囲。PBで直接見てもよい。
NLOOP ANG=ANG+PP                          ここからループの始まり。ANGがPP分加算されているので、スタート位置は出力されない
RAT=ANG/ANGL                                 ANGをストロークで割っているのでRATは結局ループの何%の位置かが判る
IF[ANG GE ANGL]NEXT                        ANGがストロークを超えたらループから抜けて終点出力へ。OCAM0と異なりABSが無いのは進行方向を決めているので終わりの判定は、ANGとANGLの大小関係だけ見ればよい。逆回りの時は当然大小関係が逆になる。PBとPPの符号がおかしいと、ここで矛盾を生じ、いきなり終点を出力して直ぐに終わるか、逆回転になって何時まで経っても終了条件が成立しなくなる。
STRL=STRR*RAT STRK=STRZ*RAT       全ストロークにRATを掛ければ現在のストロークが求まる
RADX=PI+STRL ANGX=ANG+PA             半径と角度にスタート寸法を加算し現在の値を求める
G1 X=PX+RADX*COS[ANGX] Y=PY+RADX*SIN[ANGX] Z=PZ+STRK     XYはSIN・COSで現在値を、Zは加算でスタート位置から現ストロークを加算する
GOTO NLOOP                                     1廻りしたのでループ先頭へ。IF文でNEXTへ脱出する条件が成立するまで、このループを繰り返す。
NEXT G1 X=PX+[PI+STRR]*COS[PA+PB] Y=PY+[PI+STRR]*SIN[PA+PB] Z=PZ+STRZ     現在値がストロークを超えたので終点を出力して終わり
NRTS RTS
%
%