Look at the Bright side of things

Anderson's Blog - since 2005

NC旋盤のマクロ

今の勤務先、小さな金属加工工場に採用されて7年になる。前職まではいわゆるIT関連職に従事しており、とあるシステム開発会社からキャリアをスタートさせて、転職を二回ほどおこなって小さな企業のシステム管理職に収まっていた。ところがリーマンショックのアオリを受けて事業規模が縮小され、あえなくリストラになったのが2012年の春。 そのころ、ライトセーバーを自作する趣味にハマっていたこともあり、ものづくりの面白さに惹かれ、システム開発に飽きていたこともあって、就職活動の結果、金属加工関連の職に就くことに。

anderson-s.hatenablog.com
今はオークマ製CNC旋盤のオペレーターをそつなくこなしている。コンピューターのプログラム開発なんか懲り懲りだと思っていたのだが、結局はコンピューターを使う仕事からは離れられていない。
NCのプログラムは上長である工場長が作成したものがほとんどで、刃物座標を直打ちしている。なので切削でよくある繰り返し工程なんかだと以下のように冗長なものになりがち。

(サンプル)
長さ60mm、直径80mmの品物の外形を深さ30mm、直径50mmまで、5mmずつ削る場合(z原点座標を0としている)

G00 X75 Z62 (G00 は早送り。切削開始位置まで刃物を送っている)
G96 G01 Z30 F0.2 S120 (G01は切削送り。Fは一回転あたり0.2mm刃物を動かす。G96指定があるのでS120は周速。)
G00 X77 Z62 (30mmまで切削したので刃物を一旦退避。)
    X70 (次の切削位置まで刃物を移動)
G01 Z30 (以下、繰り返しになる)
G00 X72 Z62
    X65
G01 Z30
G00 X67	Z62
    X60
G01 Z30
G00 X62	Z62
    X55
G01 Z30
G00 X57	Z62
    X50
G01 Z30
G00 X52	Z62 (繰り返し完了)

…てな感じ。いかにも面倒くさい。マニュアルを読むと他社製のNCと同じように、オークマの独自拡張でマクロが組めるので書き換えてみるとこんな感じに。*1

RID=75 (変数定義)
NLOOP (ループ先アドレス)
	G00 X=RID Z62 
	G96 G01 Z30 F0.2 S120
	G00 X=RID+2 Z62
	RID=RID-5
IF[RID GE 50]NLOOP (RID が 50になるまでNLOOPに飛ぶ)

超簡単。さらにはこのルーチンをサブプログラムとして切り出せて、必要に応じてパラメーターを与えてCallすることもできる。こんな感じ。

(呼び出し元)
CALL OS01 SRD=80 SID=50 SLNG=60 SDP=30 SRP=120 SFS=0.2 SCT=5
サブプログラム
OS01(プログラム名)
RID=SRD-SCT
NLOOP
    G00 X=RID Z=SLNG+2 
    G96 G01 Z=SDP F=SFS S=SRP
    G00 X=RID+2 Z=SLNG+2
    RID=RID-SCT
IF[RID GE SID]NLOOP
RTS(終了)

これを書けるようになってからは、工場長謹製のプログラムを全部この方式に書き換えて、プログラムの本数を圧倒的に減らしてやった。それまでは同一品で一部の径が異なるものについて、径ごとにプログラムを用意していたのだけれど、変数で定義してやると一本のプログラムで済む。
さらには関数電卓叩いて三角関数使っていちいち座標を求めて、プログラム内に埋め込んでいたような数値も、パラメーターから自動で計算するように書き換えてやった。

そもそも世間ではNC旋盤と呼ばれるものは本来、CNC旋盤なのであり、Computerized Numerical Controlなわけで、座標なんか自動計算できて当たり前。それを使わないのであれば、ただのNCとしてしか使えていない。宝の持ち腐れである。
マクロの利点は大きく、プログラムを新規に作成する場合でも圧倒的にスピードが早い。上記のような冗長なコマンドを書かなくてよいのだ。類似品ならコピペでパラメータ打ち替えるとほぼ終わり。間違えることが少ないためデバッグの必要も大きく減る。

さらには切削量を状況に合わせて調整するのも楽。上記の例で言えば、5mmを4mmに変えるのも座標直打ちだとかなり面倒だけど、変数使えば2箇所ほど変えてやればいいだけ。時間に追われる中、切削条件を色々変えて試行できるようになり、品質も大きくあがるし、知見を得ることもできた。
また、処理に意味が付与されるから、いちいちプログラムの座標値を追っかけて、これは何しているのか、というのを把握しようとしなくても良くなる。ここは外径粗挽き、ここはC面取り、など、ひと目で分かる。
いいことづく目なのだが、デメリットしては、このプログラムを理解できるのが工場内では俺だけ。工場長は興味も示さないし、仮に新人が入ってきたとして、プログラミングの適性がなければ教えても理解することができないかもしれない。

*1:オークマのコマンドでこういった繰り返し作業などをできるものがあるのだけれど、いまいち使い勝手が悪いのでマクロのほうが楽