【オークマ(OSP)】マクロでサブプログラム呼び出し「CALL O=VC101」で止まる!?PREGってなんやねん!現場でつまずいた話と対策

NCコード

↓↓この記事はこんな人におすすめ↓↓

  • マクロ使い始めたけど、CALL O=VC変数で止まった人
  • 「PREG」って単語が初耳だった人
  • 現場で同じようなことで詰まってる人

マシニングセンタのプログラムを書いてて、「CALL O=VC101」って書いたらアラームで機械が止まったこと、ありませんか?

あれ、地味に心折れるんですよね。

「え、なんで???普通にO番号書いてるやん!」ってパネルの前で10分ぐらいフリーズした経験、僕だけじゃないはず。

今回はその時にハマった落とし穴、「PREG」の使い方について、僕の経験ベースで書いてみようと思います。

例えばこんな感じのコード

O1000
N1
VC101 = 1001
VC102 = 0
VC103 = 10
CALL O1111 Q36
M30

O1111
G11 X0 Y0 P[VC102]
CALL O=VC101
G10
VC102 = VC102 + VC103
RTS

O1001
G00 X10.Y20.
Z3.
G01 Z-3. F500.
X-10.
G00 Z5.
RTS

 

サブプログラムO1111で、角度を振りながらO1001を呼び出す…っていう流れ。

例えば10度ずつ回して36回繰り返すから、360度ぐるっと一周加工するみたいなやつですね。

この「CALL O=VC101」で、機械が止まったんですよ。え、何がアカンの?ってなりました。

原因は「PREG」しとらんかったから

で、先輩と調べて分かったのが、変数でサブプログラム呼ぶときは、そのO番号を「PREG」で登録しないとアカンってこと。

PREGってなんやねん?って最初思いましたけど、要するに「これから使うサブプログラムのO番号を宣言しといてね」っていう前準備です。

正しい書き方はこれ

O1111
PREG O1001,O1002,O1003

G11 X0 Y0 P[VC102]
CALL O=VC101
G10
VC102 = VC102 + VC103
RTS

この「PREG O1001,O1002,O1003」ってのがポイント。

ここに書いたO番号じゃないと、変数でCALLしたときに認識してくれないんです。

ちなみにPREGには上限があるっぽい

いろいろ登録できるかと思いきや、1個のPREGに登録できるO番号は10個までっぽいんですよね(経験上、多分そう)。

もし20個とか30個のサブプログラム使いたい場合は、こうやってPREGを分けて複数書く必要があります。

PREG O1001,O1002,O1003,O1004,O1005,O1006,O1007,O1008,O1009,O1010
PREG O1011,O1012,O1013,O1014,O1015,O1016,O1017,O1018,O1019,O1020

 

最後に:PREGを忘れずに

変数でサブプログラムを呼び出すなら、「PREGでO番号を登録する」っていうルールは絶対

知らんとマジで「なんでやねん」ってなるので、これから同じようなコード書く人にはぜひ覚えておいてほしい。

機械は正直なんで、ちゃんと教えてあげないと「知らんプログラム呼ぶな!」って怒るんですね(笑)