変数
変数を使ったプログラムと使わないプログラムとでは、大きな差があります。変数の無いプログラムは使用できる場面が限定されてしまい、似たようなプログラムを何個も作らなければなりません。こうなってしまうと、管理が大変になりますし、何よりもプログラムを作成するのに時間が掛かってしまいます。ところが変数を使用することで、そのプログラムの使用できる範囲が広がり、使い回すことが可能になります。
NCプログラムで使用する変数には、ローカル変数、コモン変数、システム変数の三種類があります。それぞれ特徴がありますので間違えないようにしましょう。
また、未定義変数の解釈のされ方についても解説していますので、一緒に覚えておきましょう。
プログラム初心者の方のために変数講座ページを作成いたしました。
変数の基礎知識
#100=10. …① #101=20.+#100 …② #100=#100+#101 …③ #100=#100+#101 …④
変数に数値を代入する際は、変数を「=」の左側に、代入する数値を「=」の右側に記述します。「=」の左側には一つの変数しか記述できませんが、「=」の右側には数値と変数を組み合わせた計算式を入れることができます。
①では「#100」に「10.」という数値が代入されます。
②では「20.」という数値と「#100」に入っている数値、ここでは「10.」という数値を足した数値、つまり「30.」が「#101」に代入されます。
③は左側にも右側にも「#100」があります。この場合も②と同じで、「#100」と「#101」を足した数値、ここでは「10.」と「30.」を足した「40.」という数値が新たに「#100」に代入されます。
④も③と同じく「#100」と「#101」を足した数値が「#100」に代入されます。しかし③で「#100」の数値が変わっていますから、③とは結果が異なります。「#100」に入っている数値は「40.」、「#101」に入っている数値は「30.」ですから、「#100」には「70.」という数値が代入されます。
変数の中身は下記のように変化していきます。
#100=10. …① (#100=10. , #101=空) #101=20.+#100 …② (#100=10. , #101=30.) #100=#100+#101 …③ (#100=40. , #101=30.) #100=#100+#101 …④ (#100=70. , #101=30.)
また、変数に入っている数値を「#」以降の変数の番号として使用することもできます。この場合「#[変数]」のように、変数を「[ ]」で括る必要があります。
#110=100 #[#110]=300. (#100=300.)
ローカル変数
ローカル変数は「#1〜#33」までの変数で、メインプログラム(起動させるプログラムです)とマクロプログラム(G65やG66で呼び出したプログラムです)でそれぞれ独立している変数です。メインプログラムには最初から「#1〜#33」が存在しており、マクロプログラムを呼び出した時に、別の「#1〜#33」が生成されます。変数名は同じですがまったく別の数値が入ることになります。変数名が同じなので、マクロプログラムからはメインプログラムのローカル変数を使用することはできません。使用したい場合は、マクロプログラムを呼び出す際に引数を使用します。
マクロプログラムからメインプログラムに戻る際に、マクロプログラムのローカル変数は全てクリアになりますが、メインプログラムのローカル変数は数値を保持します。
また、マクロプログラムからマクロプログラムを呼び出した際にも、新たに別のローカル変数が生成されます。
コモン変数
コモン変数は「#100〜#199」と「#500〜#999」までの変数ですが、設備の機種やオプションによって使用できる番号が異なります。ローカル変数と違い、メインプログラムとマクロプログラムのどちらからも使用できる共通の変数です。
「#100〜#199」は設備の電源を切るとクリアされますが、「#500〜#999」は電源を切っても数値を保持します。
システム変数
システム変数は#1000以上の変数で設備や制御装置の機種によって番号が違います。工具径補正値の変更や、座標値の読み込みなどを行うことができます。
制御装置別のシステム変数一覧はこちらになります。
未定義変数
未定義変数とは数値が代入されていない変数のことです。また「#0」の変数は常に中身が空で、数値を代入することはできません。変数に数値が入っているかどうかを調べるときなどに使用されます。
空の変数を使用すると、下記のような振る舞いをします。
代入 | "空"が代入されます #2=#1 → #2="空" |
算術演算 | "0"と同じ振る舞いをします #2=#1+3 → #2=3 |
比較 | "EQ"と"NE"以外は"0"と同じ振る舞いをします #1 EQ 0 → 不成立 #1 NE 0 → 成立 |
座標値 | 無視されます G01X#1Y50. → G01Y50. |
- 当サイトのPDF版を作成しました。教育資料やリファレンスとして使用して頂ければと思います。
→ NCプログラムの教科書 - 上級編も作成しました。
→ NCプログラム上級編