最近マクロ組んでて「あれ?FANUCとOSP(オークマ)でループの書き方違うやん」って改めて気づいたんですよね。
正直、最初に両方触ったときは頭こんがらがってました。
というわけで、今回は「FANUCとオークマでどうループ処理を書くか」を、できるだけ噛み砕いて解説してみます。
メーカーごとのループの使い方
FANUCは素直に「WHILE文」でループ!
FANUCでループ書くなら、基本はWHILE文。
例えばこんな感じです。
O1111
WHILE[ #101 GE -6. ] DO1
G90 G00 X0 Y0
Z1.
G01 Z[#101] F2000.
X10. F1000.
G00 Z1.
#101 = #101 - 2.
END1
M99
この例だと、「#101が-6以上の間、加工動作を繰り返す」っていうループ処理です。
1回ループするごとにZが-2ずつ深くなっていきます。
WHILEの書き方、けっこう見たまんまでわかりやすいですよね。
条件を満たしてる間(GE = Greater or Equal = 以上)だけ、DO〜ENDの中をぐるぐる回すっていうイメージ。
オークマ(OSP)は「IF文」でループ?
さて問題はオークマ(OSP)です。
こっちはWHILEが無いんですよ…
じゃあどうするかというと、「IF文で上の行に飛ばす」ことでループを作るという発想になります。
O1111
N1
G90 G00 X0 Y0
Z1.
G01 Z[VC101] F2000.
X10. F1000.
G00 Z1.
VC101 = VC101 - 2.
IF[ VC101 GE -6. ] N1
RTS
これ、一見ただのIF文に見えますが、IF[ 条件 ] N1
← この「N1にジャンプする」動きがポイント。
つまり、条件を満たしている間(VC101が-6以上)、何度もN1に戻って繰り返す。
…そう、これがオークマ流のループなんです。
ソフトウェア経験者ほど混乱する「オークマ(OSP)のIF文」
これ、C言語とかJavaScriptとかやったことある人なら「え?IFってそんな使い方するん?」って思うはず。
通常のプログラミング言語では、IF文ってこういう使い方ですよね。
if (value >= -6) {
// 条件を満たしたら、この中の処理を1回だけ実行
}
でもオークマ(OSP)のプログラムのIFは違う。
「条件を満たしていたら、指定した行に飛ぶ」=ジャンプ命令的な意味合いがあるんです。
このジャンプ機能を活かして、IFだけでループを作れるのがOSPの特徴ですね。
まとめ:メーカーごとに「ループの常識」が違う
- FANUC:WHILE文でループ。C言語っぽくてわかりやすい。
- オークマ(OSP):**IF文 + ラベル(N)**でループを組む。ジャンプ式でちょっとクセあり。
- NCのIF文は、ソフトウェアのIF文とは動きがまったく違うので注意!
現場で感じたあるある
最初FANUC触ってた自分が、初めてオークマ機のプログラム開いたとき「WHILE文ないやん…」ってめちゃくちゃ戸惑いました。
「え、これ本当にループしてるん?これIFちゃうん?」みたいな(笑)
でも慣れてくると、「IFで飛ばすだけで済むから、逆にシンプルでいいかも?」って思うようにもなってきて。
どっちが良い悪いじゃなくて、**“文化が違う”**って感じですね。
最後に
もしこの記事が、誰かが現場で「え、なんでループしてくれへんの?」って悩んだときのヒントになれば嬉しいです。
NCプログラムは奥が深いし、こういう細かい違いに気づけると、ちょっとずつレベルアップしてる実感が湧きますよね。