マシニングセンタのプログラムを書いてて、「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番号を登録する」っていうルールは絶対。
知らんとマジで「なんでやねん」ってなるので、これから同じようなコード書く人にはぜひ覚えておいてほしい。
機械は正直なんで、ちゃんと教えてあげないと「知らんプログラム呼ぶな!」って怒るんですね(笑)