FANUCとオークマ(OSP)、ループの書き方ぜんぜん違うって知ってた?〜WHILEとIFの話〜

NCコード

最近マクロ組んでて「あれ?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プログラムは奥が深いし、こういう細かい違いに気づけると、ちょっとずつレベルアップしてる実感が湧きますよね。