OSP(オークマ) - 変数
NCプログラムで使用する変数には、ローカル変数、コモン変数、システム変数の三種類があります。それぞれ特徴がありますので間違えないようにしましょう。
また、未定義変数の解釈のされ方についても解説していますので、一緒に覚えておきましょう。
プログラム初心者の方のために「変数講座」ページを作成いたしました。こちらはFANUC仕様となっていますが考え方は同じです。
変数の基礎知識
VC1 = 10. …① VC2 = 20. + VC1 …② VC1 = VC1 + VC2 …③ VC1 = VC1 + VC2 …④
変数に数値を代入する際は、変数を「=」の左側に、代入する数値を「=」の右側に記述します。「=」の左側には一つの変数しか記述できませんが、「=」の右側には数値と変数を組み合わせた計算式を入れることができます。
①では「VC1」に「10.」という数値が代入されます。
②では「20.」という数値と「VC1」に入っている数値(ここでは「10.」)を足した数値、つまり「30.」が「VC2」に代入されます。
③は左側にも右側にも「VC1」があります。この場合も②と同じで、「VC1」と「VC2」を足した数値(ここでは「10.」と「30.」を足した「40.」)が新たに「VC1」に代入されます。
④も③と同じく「VC1」と「VC2」を足した数値が「VC1」に代入されます。しかし③で「VC1」の数値が変わっていますから、③とは結果が異なります。「VC1」に入っている数値は「40.」、「VC2」に入っている数値は「30.」ですから、「VC1」には「70.」という数値が代入されます。
変数の中身は下記のように変化していきます。
VC1 = 10. …① (VC1 = 10. , VC2 = 空) VC2 = 20. + VC1 …② (VC1 = 10. , VC2 = 30.) VC1 = VC1 + VC2 …③ (VC1 = 40. , VC2 = 30.) VC1 = VC1 + VC2 …④ (VC1 = 70. , VC2 = 30.)
また、変数に入っている数値を「VC」以降の変数の番号として使用することもできます。この場合「VC [ 変数 ]」のように、変数を「[]」で括る必要があります。
VC11 = 20 VC [ VC11 ] = 300. (VC20 = 300.)
ローカル変数
ローカル変数はメインプログラムとサブプログラムでそれぞれ独立している変数です。サブプログラムからメインプログラムのローカル変数を使用することはできません。その逆も同じですが、サブプログラム呼び出しの引数設定で使用する場合は、メインプログラムからサブプログラムのローカル変数に値を代入(引数の受け渡し)をすることができます。
ローカル変数は、予約語以外の4字以内で「=」の左辺に定義することにより設定でき、最大255個まで設定出来ます。変数名の先頭の2字は英字となり、タイプ1の先頭の英字はO,N,V,Pは使用出来ません。ローカル変数はNCリセットで消滅します。サブプログラム内のローカル変数はそのサブプログラムの実行が終了した時点で消滅します。
ローカル変数の予約語一覧はこのページの一番下に記載しました。
| 1文字目 | 2文字目 | 3、4文字目 | |
|---|---|---|---|
| タイプ1 | 英字 | 英字 | 英数字2字以内 |
| タイプ2 | P | 英字 | 英数字2字以内 |
コモン変数
コモン変数は標準で「VC1〜VC200」までの200個、オプションで「VC1〜VC1000」の1000個の変数です。ローカル変数と違い、スケジュールプログラム、メインプログラム、マクロプログラムのどこからでも使用できる共通の変数です。
「VC1〜VC400」は設備の電源を切っても数値を保持しますが、「VC401〜VC1000」は電源を切るとクリアされます。
コモン変数は「VC [n]」という配列変数を使用することができます。nは数値になり添字と呼ばれます。
システム変数
システム変数はシステムによって用途が決まっている変数で、スケジュールプログラム、メインプログラム、サブプログラムのどこからでも使用出来ます。工具径補正値の変更や、座標値の読み込みなどを行うことができます。
「制御装置別のシステム変数一覧」はこちらになります。
未定義変数(EMPTY)
未定義変数とは数値が代入されていない空の変数のことで、「EMPTY」で表します。
空の変数「EMPTY」を使用すると、下記のような振る舞いをします。
| 代入 | 「EMPTY」が代入されます VC2 = VC1 → VC2 = EMPTY |
| 算術演算 | 「0」と同じ振る舞いをします VC2 = VC1 + 3 → VC2 = 3 |
| 比較 | 「EQ」と「NE」以外は「0」と同じ振る舞いをします VC1 EQ 0 → 不成立 VC1 NE 0 → 成立 |
| 座標値 | 無視されます G01 X = VC1 Y50. → G01 Y50. |
ローカル変数予約語一覧
- ABS
- AND
- AG
- ARC
- ATAN
- ATAN2
- BCD
- BHC
- BIN
- CALL
- CLEAR
- COPY
- COPYE
- COS
- DA
- DB
- DC
- DEF
- DELETE
- DFIX
- DFUP
- DGRDX
- DGRDY
- DIN
- DRAW
- DROUND
- EIN
- EMPTY
- EQ
- EOR
- FA
- FB
- FC
- FIX
- FMILF
- FMILR
- FUP
- GE
- GOTO
- GRCI
- GRCV
- GRDX
- GRDY
- GRER
- GROF
- GRON
- GRSK
- GRST
- GT
- HA
- HB
- HC
- IF
- LAA
- LE
- LPRINT
- LT
- MITCAN
- MOD
- MODIN
- MODOUT
- MSG
- NE
- NOT
- OR
- PCIR
- PMIL
- PMILR
- RCIRI
- RCIRO
- RMILI
- RMILO
- RH
- ROUNT
- RP
- RQNFL
- RS
- RSQCO
- RSQRI
- RSQRO
- RSTRT
- RT
- RTMCR
- RTMDI
- RTI
- RTS
- SAVE
- SIN
- SPRINT
- SQRT
- SQRX
- SQRY
- TAN
- TLCO
- TLFR
- TLFOFF
- TLFON
- TLOK
- TN
当サイトのPDF版を作成しました。教育資料やリファレンスとして使用して頂ければと思います。
上級編も作成しました。