最近マクロ組んでて「あれ?FANUCとOSP(オークマ)でループの書き方違うやん」って改めて気づいたんですよね。
正直、最初に両方触ったときは頭こんがらがってました。
というわけで、今回は「FANUCとオークマでどうループ処理を書くか」を、できるだけ噛み砕いて解説してみます。
メーカーごとのループの使い方
FANUCは素直に「WHILE文」でループ
FANUCのNCでは、基本的に 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以上の間、処理を繰り返す」
-
ループごとにZが-2ずつ深くなる
という動作になります。
見た目もシンプルで、C言語のような一般的なプログラミング言語に近い書き方です。
オークマ(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[ VC101 GE -6. ] N1
の部分がポイントです。
条件を満たしている間は、N1に戻って繰り返し実行されます。
ソフト経験者が混乱しがちな「OSPのIF文」
プログラミング経験がある人ほど「え、IFってそんな使い方するん?」と戸惑います。
普通のプログラミング言語なら、IF文は「条件を満たしたら、その中の処理を一度だけ実行する」というイメージですよね。
if (value >= -6) {
// 条件を満たしたら、この中の処理を1回だけ実行
}
しかし、OSPでは 「条件を満たしていたら行にジャンプする」 という動きをするため、結果的にループを作れるのです。
現場で感じたあるある
最初FANUC触ってた自分が、初めてオークマ機のプログラム開いたとき「WHILE文ないやん…」ってめちゃくちゃ戸惑いました。
「え、これ本当にループしてるん?これIFちゃうん?」みたいな(笑)
でも慣れてくると、「IFで飛ばすだけで済むから、逆にシンプルでいいかも?」って思うようにもなってきて。
どっちが良い悪いじゃなくて、**“文化が違う”**って感じですね。
まとめ
-
FANUC:
WHILE文
でループ。プログラミング経験者にとって直感的。 -
オークマ(OSP):
IF文 + ラベル(N番号)
でループ。ジャンプ命令的な発想。 -
注意点:NCのIF文はソフトウェアのIF文と全然違うので混乱しやすい。
最後に
もしこの記事が、誰かが現場で「え、なんでループしてくれへんの?」って悩んだときのヒントになれば嬉しいです。
NCプログラムは奥が深いし、こういう細かい違いに気づけると、ちょっとずつレベルアップしてる実感が湧きますよね。