【テクノ言語とG言語のご紹介⑫】テクノ言語のサンプル紹介(マクロ変数)
テクノの野崎です。
今回はテクノ言語における「マクロ変数」をご紹介します。
※テクノ言語・G言語は1行1動作の形式でプログラムを作成します。
運転プログラムの中で、変数や演算(四則演算、判別)を使って、移動指令の移動量や、繰り返し実行時の繰り返し回数、実行するサブルーチンなどを状況に応じて変更したいときに使用します。
マクロ変数は「#XXXX」(XXXXはレジスタ番号)で記載します。
詳細は各種ユーザーズマニュアルの「運転プログラム」をご確認ください。
※マニュアル閲覧には会員登録が必要です。
マクロは①代入、②演算、③条件判断(IF文)、④変数指定が可能です。
G言語でもマクロ変数は使用できます。
①代入
マクロ変数に対し、マクロ変数や即値の代入ができます。
======================================
#1000 = 15; /* ワード形式のマクロ変数へ値(15=0xF)代入 */
#1001 = #1600; /* ワード形式のマクロ変数へ入力ポート0(#1600)の状態を代入 */
#5502 = 6400000; /* ロングワード形式のマクロ変数へ値代入 */
======================================
②演算
マクロ変数に対し、演算を行う事ができます。
四則演算や論理演算を使用し、カウンタや設定値の計算だけでなく、入力やステータスの特定ビットの状態確認なども可能です。
======================================
#1000 = 100; /* 初期値の代入 */
:LOOP
#1532 = #1000; /* オーバライドの変更 */
#1000 = #1000 + 1; /* ワード形式のマクロ変数をインクリメント */
#1000 = #1000 & 127; /* 0~127の範囲で変化するように変更。*/
TIM1.0;
JMP LOOP; /* LOOPラベルへジャンプ。 */
END;
======================================
③条件判断
IF命令を使った条件判断を行うことができます。
マクロ変数を経由することで、演算結果だけでなく、ステータスや入出力状態などの内部情報での分岐も行えます。
======================================
#1000 = 1; /* オーバライド増分値 */
:LOOP
IF #1532 == 200; /* オーバライドが200%の場合 */
#1000 = -1; /* 増分値の符号反転 */
ENDIF;
IF #1532 == 0; /* オーバライドが0%の場合 */
#1000 = 1; /* 増分値の符号反転 */
ENDIF;
#1532 = #1532 + #1000; /* マクロ変数経由でオーバライドを変更 */
TIM1.0;
JMP LOOP; /* LOOPラベルへジャンプ。 */
END;
======================================
④変数指定
移動命令などのパラメータ(目標位置や速度など)をマクロ変数で指定することができます。
マクロ変数で指定することで、運転プログラム内の演算結果から動きを変化させることや、PCやラダーからマクロ変数を指定することで動きを変更できます。
外部から#5500に1辺の長さを設定。
#5500から移動量を計算し、正方形を描画し続けます。
======================================
/*#5500に1辺の長さを設定*/
#5504 = 30000; /* F値は30kpps */
:LOOP
#5502 = #5500; /* 移動量を指定 */
LIN X#5502 Y0 F#5504;
LIN X0 Y#5502 F#5504;
LIN X-#5502 Y0 F#5504;
LIN X0 Y-#5502 F#5504;
JMP LOOP;
END;
======================================
▼テクノ言語にご興味のある方:テクノ言語運転プログラムをぜひ、ご確認ください。
▼テクノ言語/G言語の対応リストもあります。
【テクノ言語とG言語のご紹介⑪】テクノ言語のサンプル紹介(パンチングマシン)
テクノの野崎です。
今回のテクノ言語・G言語のサンプルプログラムは軸と汎用出力(パンチの下降/上昇)を同時に制御した「パンチングマシン」を例にとってご紹介します。
※テクノ言語・G言語は1行1動作の形式でプログラムを作成します。
右絵はX、Y軸、I/Oでパンチの下降/上昇を行うパンチングマシンを示しています。
■テクノ言語のサンプル例
PTP X1000 Y0; /*位置決め*/
ONR00 TIM1.0; /*パンチ下降後1秒待*/
OFR00 TIM0.5; /*パンチ上昇後0.5秒待ち*/
(各位置に合わせて繰り返し)
■G言語のサンプル例
G00 X1000 Y0; /*位置決め*/
#1641 = #1641 | 0x0001; /*Ro00をON(パンチ)*/
G04 P1.0; /*パンチ下降後1秒待*/
#1641 = #1641 & 0xFFFE; /*Ro00をOFF*/
G04 P0.5; /*パンチ上昇後0.5秒待*/
(繰り返し)
(#1641のbit0に、汎用出力Ro00を割り付け)
次回はマクロ機能をご紹介します。
▼テクノ言語にご興味のある方:テクノ言語運転プログラムをぜひ、ご確認ください。
▼テクノ言語/G言語の対応リストもあります。
【テクノ言語とG言語のご紹介⑩】テクノ言語のサンプル紹介(穴あけマシン)
テクノの野崎です。
今回からはテクノ言語・G言語のサンプルプログラムをご紹介していきます。
まずは「穴あけマシン」を例にとってご紹介します。
※テクノ言語・G言語は1行1動作の形式でプログラムを作成します。
右絵はX、Y、Z軸の穴あけマシンを想定しています。
X/Y軸で位置決めをし、Z軸で穴あけ。この動作を穴数だけ繰り返すといった流れです。
■テクノ言語のサンプル例
PTPとLINのみを使用した例です。
※PTPとLINについては「テクノ言語とG言語のご紹介④と⑤」をご確認ください。
PTP X1000 Y0; /* 位置決め */
LIN Z-100 F1000 ; /* 穴開け下降(1穴目) */
LIN Z100; /* 戻り 上昇 */
PTP X0 Y1000; /* 2穴目へ 位置決め */
LIN Z-100; /* 穴開け下降(2穴目) */
LIN Z100; /* 戻り 上昇 */
■G言語のサンプル例
G00 X1000 Y0; /* 位置決め
G01 Z-100 F1000; /* 穴開け下降(1穴目)
G01 Z100; /* 戻り 上昇
G00 X0 Y1000; /* 2穴目へ位置決め
G01 Z-100; /* 穴開け下降(2穴目)
G01 Z100; /* 戻り 上昇
シンプルに作成できることがおわかり頂けたのではないでしょうか。
次回は軸と汎用出力を同時に制御した場合のパンチングマシンの例を掲載します。
▼テクノ言語にご興味のある方:テクノ言語運転プログラムをぜひ、ご確認ください。
▼テクノ言語/G言語の対応リストもあります。
【テクノ言語とG言語のご紹介⑨】テクノ言語のサンプル紹介(汎用入力処理)
テクノの野崎です。
今回はテクノ言語における「汎用入力処理」のサンプルをご紹介します。
※テクノ言語は1行1動作の形式でプログラムを作成します。
サンプル:「汎用入力処理」
汎用入力処理は「△□R○○」を使用します。
△:処理内容指定(E、J、W、S)
E(Exit):プログラム強制終了
この信号がアクティブになると、強制的に動作プログラムを完了して停止します。
W(Wait):ステップ実行開始待ち
各動作ステップの先頭でこの入力をチェックします。アクティブであれば停止します。
J(Jump):スキップ
この信号がアクティブになるとそのステップの動作を途中終了し、次のステップへ進行します。
S(Stop):一時停止
この信号がアクティブな間、動作を停止します。
※アクティブ:正論理・負論理指定がTRUEのこと
□:正論理・負論理指定(なし、N)
なし:正論理(ONのときTRUE、OFFのときFALSE)
N :負論理(OFFのときTRUE、ONのときFALSE)
○:制御ビット指定
判別を行うビットの番号を指定します。範囲は0~63です。
汎用入力処理はセンサーや外部機器からの信号のON/OFF状態によって、運転プログラムの実行を停止/終了/スキップしたい場合に使用します。
移動命令と同一のステップで実行できます。
右上図は下記のサンプルプログラムの軌跡例になります。
==========================
① CALL SUB L5 JR01 WR02;
② PTPA X0 Y0;
③ END;
④ :SUB
LIN X40000 Y20000 F40000 ER00 SR03;
⑤ LIN X40000 Y-20000;
⑥ LIN X-40000 Y-20000;
⑦ LIN X-40000 Y20000;
⑧ LIN Y-40000;
⑨ END;
==========================
・運転プログラム実行開始時、Ri01のみがONの場合(起動時の信号の状態 Ri00=OFF、Ri01=ON、Ri02=OFF、Ri03=OFF)
① このステップをスキップ
② (0,0)へ移動して終了
・運転プログラム実行開始時、Ri02のみがONの場合(起動時の信号の状態 Ri00=OFF、Ri01=OFF、Ri02=ON、Ri03=OFF)
① このステップの実行をウェイト
Ri02がOFFになると、”④~⑧”を5回繰り返す
④ (0,0)から、(40000,20000)へ移動
⑤ (40000,20000)から、(80000,0)へ移動
⑥ (80000,0)から、(40000,-20000)へ移動
⑦ (40000,-20000)から、(0,0)へ移動
⑧ (0,0)から、(0,40000)へ移動
・運転プログラム実行開始時、Ri00のみがONの場合(起動時の信号の状態 Ri00=ON、Ri01=OFF、Ri02=OFF、Ri03=OFF)
① ”④”を呼び出す
④ Ri00がONなのでプログラム運転終了
・運転プログラム実行開始時、Ri03のみがONの場合(起動時の信号の状態 Ri00=OFF、Ri01=OFF、Ri02=OFF、Ri03=ON)
① ”④”を呼び出す
④ Ri03がONなのでプログラム途中停止
Ri03がOFFになるとプログラム運転を再開します。
▼テクノ言語にご興味のある方:テクノ言語運転プログラムをぜひ、ご確認ください。
▼テクノ言語/G言語の対応リストもあります。
【テクノ言語とG言語のご紹介⑧】テクノ言語のサンプル紹介(汎用出力処理「ONR、OFR」とタイマー命令「TIM」)
テクノの野崎です。
今回はテクノ言語における「汎用出力処理とタイマー命令」のサンプルをご紹介します。
※テクノ言語は1行1動作の形式でプログラムを作成します。
サンプル:「汎用出力処理とタイマー命令」
汎用出力処理は「ONR」、「OFR」、タイマー命令は「TIM」を使用します。
汎用出力処理は、以下のようなときに使用します。
・外部機器の動作ON/OFFを行いたい
・ランプなどをON/OFFしたい
タイマー命令は以下のようなときに使用します。
・プログラムステップの動作時間を指定したい
・運転プログラム中にウェイトを入れたい
両方とも移動命令と同一ステップで実行できます。
右上図は下記のサンプルプログラムの軌跡例になります。
==========================
① TIM1.0 ONR00;
② LIN X40000 Y20000 F40000 OFR00;
③ TIM1.0 ONR01;
④ LIN X40000 Y-20000 OFR01;
⑤ TIM1.0 ONR02;
⑥ LIN X-40000 Y-20000 OFR02;
⑦ TIM1.0 ONR03;
⑧ LIN X-40000 Y20000 OFR03;
⑨ END;
==========================
出力をONするときは"ONR"コードに続けてONする出力のビットを指定します。
出力をOFFするときは"OFR"コードに続けてOFFする出力のビットを指定します。
"TIM"コードに続けて時間を指定します。単位は秒です。
① Ro00出力をONして1秒間停止
② Ro00出力をOFFして、(0,0)から(40000,20000)へ移動
③ Ro01出力をONして1秒間停止
④ Ro01出力をOFFして、(40000,20000)から(80000,0)へ移動
⑤ Ro02出力をONして1秒間停止
⑥ Ro02出力をOFFして、(80000,0)から(40000,-20000)へ移動
⑦ Ro03出力をONして1秒間停止
⑧ Ro03出力をOFFして、(40000,-20000)から(0,0)へ移動
汎用出力やタイマー命令が簡単に記述できることを知っていただけたかと思います。
▼テクノ言語にご興味のある方:テクノ言語運転プログラムをぜひ、ご確認ください。
▼テクノ言語/G言語の対応リストもあります。