NCプログラム構成
まずはNCプログラムの全体的な構成について見ていきましょう。下記のプログラムを見て下さい。
%; O1000(SAMPLE); #100=10.; N100; S2000; M3; G01X50.Y-50.Z-10.F500; M5; M02; %;
サンプルですので意味のあるプログラムではありません。使用しないように…。上から順に見ていきましょう。
% | データスタート/データエンド
プログラムの先頭にある"%"はデータスタートを表す記号で、ここからプログラムが始まりますよ、という意味があります。プログラムの最後にも同じ"%"がありますが、こちらはデータエンドを表す記号で、プログラムはここまでですよ、という意味になります。つまり最初に読み込んだ"%"はプログラムの始まり、2つ目に読み込んだ"%"はプログラムの終わりになり、これが一つのプログラムとなります。各設備にプログラムを読み込ませる場合に必要になりますので、パソコンでプログラムを作る際には必ず付けましょう。
3つ目以降はどうなるのかと言うと、3つ目はデータスタートになり、4つ目はデータエンドになります。奇数はデータスタート、偶数はデータエンドと言うことです。つまり1つのファイルに複数のプログラムを入れることができ、設備に読み込ませると、データスタートとデータエンドに挟まれた内容が、分割されて登録されます。製品別などでファイルを管理する場合、ファイルを一つにまとめることができますので非常に便利です。
※設備によっては"M02"や"M30"、"M99"などで、プログラムの終了と判断し、次のブロックから別のプログラムとして読み込むものもあります。古い設備にこのタイプが多いようです。
; | EOB(エンドオブブロック)
上のプログラムを見ると、すべての行の終わりに";"(セミコロン)が付いています。この";"をEOB(イー・オー・ビー)と呼びます。End Of Block(エンドオブブロック)の頭文字です。行の終わりには必ず付けることになっており、行の先頭から";"までをブロックと呼びます。
ただし、パソコンなどでプログラムを作成する場合は、設備に読み込ませる際に、改行が";"に変換されるので、つける必要はありません。
O | プログラム番号
データスタートの次のブロックに来るのが、プログラム番号です。"O"の後に続く数字がプログラム番号で、FANUCの多くは最大で4桁になりますが、1桁〜3桁で入力することも可能です(O0012 → O12 等)。プログラム番号は1つのプログラムに1つ、データスタートのすぐ後のブロックに記述する必要があります。
() | 注釈(コメント)
"O1000"の後に"(SAMPLE)"と入っていますが、"()"の中身はNCでは読み込まれません。自分の好きなように注釈を入れることができます。あまり使いすぎるのも考え物ですが、少なくともこのプログラムは何を行うものなのか、という注釈は入れておいた方が良いです。自分で作ったプログラムでも時間がたてば、何に使うプログラムなのか分からなくなってしまいます。
"()"の中は読み込まれませんので基本的には何を記述しても良いのですが、全角文字や一部の記号は使用できません。NCには全角文字などを表示できる機能はついていません(と言うかつける必要性がない)ので、設備に読み込ませたときに別の文字に変換されます。こうなると何が記述されているのか分からなくなってしまいます。設備の操作パネルのキーに無い文字は、使用できないと考えた方が良いです。
# | 変数
3ブロック目に"#100=10."とありますが、FANUCなどの制御装置では"#"+"数値"で変数を表します。変数については変数のページで詳しく説明しますが、数値を保存する箱だと思っておいてください。ここでは変数の後に"=10."とありますが、NCで使用する"="は等しいという意味ではなく、代入を意味します。つまり"#100"という箱に"10."という数値を入れて保存しておき、後でこの"10."という数値を取り出して使用します。なぜこんな面倒なことをするのかは後で説明します。
N | シーケンス番号
4ブロック目にある"N100"はシーケンス番号と呼ばれ、"N"+"数値"で表します。プログラムを見やすくするための目印で、単独で記述しても動作に影響はありません。"GOTO"の飛び先としても使用されます。
"N"の後に続く"数値"は自分の好きな数値を入れることができます。数値の番号も順番に入れなければならないわけではなく、また、同じ番号を付けることも可能ですが、上のブロックから順番に数値が大きくなっていくように番号を付けた方が、見やすくなります。
アドレス + 数値 → ワード
5〜9ブロックにはアルファベットと数値が並んでいます。NCプログラムは特殊な場合(%や#等)を除くと、ほとんどが"アルファベット"+"数値"の形になっています。アルファベットの部分をアドレスと呼び、アドレスと数値を合わせてワードと呼びます。また、アドレスの後に変数や計算式を使用することも可能です。計算式の場合は式全体を"[ ]"で括る必要があります。NCプログラムではアルファベットと数値の組み合わせによって様々な機能を実現しています。
S | 主軸回転数
5ブロック目にある"S2000"は主軸の回転数を設定するもので、"S"+"数値"で表します。回転数の単位はrpm(revolution/minute = 一分間で何回転するか)です。"S2000"だけで主軸が回転するわけではありません。
Mコード | 補助機能
6ブロック目にある"M3"の"M"はMコードと呼ばれ、補助機能を行うものです。主軸の回転や停止などを行います。
MコードについてはMコードのページで解説しています。
Gコード | 準備機能
7ブロック目の先頭にある"G01"の"G"はGコードと呼ばれ、準備機能を行うものです。直線補間や円弧補間などを行います。
GコードについてはGコードのページで解説しています。
X,Y,Z
7ブロック目の真ん中にある"X50.Y-50.Z-10."は、それぞれX軸、Y軸、Z軸のことで、後に続く数値は座標、又は距離になります。
F | 送り速度
7ブロック目の最後にある"F500"は送り速度を設定するもので、"F"+"数値"で表します。送り速度の単位はmm/min(一分間に何ミリ移動するか)です。
T | 次工具選択
上のプログラムには記述されていませんが、ATC(オートツールチェンジャ)を装備した設備であれば、"T"+"数値"でその数値のツール番号に入っている工具を呼び出すことができます。呼び出しただけでは工具交換はされず、"M06"を記述することで工具交換が行われます。
NCプログラム構成まとめ
- NCプログラムの先頭と末尾には"%"(データスタート/データエンド)を入れる。
- データスタートのすぐ後のブロックには、プログラム番号を記述しなければならない。
- "()"内は読み込まれないので、注釈として使用できるが、設備の操作パネルにない文字は使用しない。
- NCプログラムは複数のブロックからできており、1つのブロックはいくつかのワードによって構成されている。
- ワードはアドレスと数値に分かれており、このアドレスと数値の組み合わせによって様々な機能を実現している。
また、NCプログラムは特定の記述がない限り、上から下に向かって1ブロックずつ読み込んでいきます。NCにはブロックを先読みする機能が付いており、設備にもよりますが、現在のブロックから3〜5ブロックを先読みしています。プログラムエラーでアラームが出た場合は、先読みされたブロックにエラーがある場合もありますので、なかなかエラーが見つからないときには、このことを思い出してみてください。
- 当サイトのPDF版を作成しました。教育資料やリファレンスとして使用して頂ければと思います。
→ NCプログラムの教科書 - 上級編も作成しました。
→ NCプログラム上級編