- 締切済み
マクロプログラムでシステム変数の使い方
- マクロプログラムを使用して、リセットせずに刃物交換後にプログラム運転を再起動する方法を知りたい。
- システム変数を利用して破損した位置から加工を再開する方法を教えていただけないでしょうか。
- 標準の参考書には具体的な解説がなく、初心者の私には理解できません。例題を提供していただけると助かります。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
こんにちは。 どのような用途でシステム変数を使いたいのかわかりませんが、文面から察するに割り込み型カスタムマクロを利用しようと考えているのではないですか? 機械をリセットさせずに他のプログラムを実行するにはマクロを割り込ませる必要が有りますが、そのためには割り込み信号を発生させる何かが必要です。そのためには機械メーカーとの打ち合わせが必要になります。 そうではなく、単純にすでに加工した部分を端折りたいという場合には、1ループごとにカウンタをもうけて、再開用のプログラムでそのカウンタを読み取って、その部分から始めるようにすれば良いのではないですか? それでも、工具が破損してから停止させるまでの未加工の部分は、自動では判断できないと思いますので、もう少し汎用性を持たせて何ミリ進んだところから再開とか、入力できるようにプログラムを作るのが現実的ではないかと思います。 ちなみに回答(2)104氏の例ではドリルサイクル時に破損に気づいて一時停止を押したのがサイクル中、サイクル後にかかわらず、その次の穴から加工スタートします。 tosiyukiさん遅くなりました。 ただ単純に一時停止したその場所へ戻したいというのであれば、それで大丈夫です。 一度リセットさせて、再開用の別プログラムを使う必要がありますが。 モーダル情報を取得→Z軸退避→ツール交換→モーダル情報を元に復帰→一時停止した位置に復帰→その工具位置を元にループ再開。というような形でオッケーでしょう。 その加工専用の復帰プログラムなら読み取るモーダル情報は#5021~#5028または#5041~#5048の位置情報だけで良いでしょう。 位置変数に対する軸名称は機械によって異なりますので、機械メーカーに確認するか、実機で検証してください。
横中繰りの経験が無くて・・・ >>内径円錐穴をWHILE文を使ったヘリカル切削中 ここをもう少し詳しく教えてください。どんな動きですか? ヘリカル補間・・とは違うのですよね? 今の加工プログラムの例(Whileを使うヘリカル切削)を 見せて頂けると助かります。
>リセットせず・・・・・プログラム運転を再起動したい 手動で戻さず・・・・・破損停止した位置から加工開始 これは、『リトラクト』『復帰』『リスタート』とか称して、マシンに付いてるスイッチを操作してできる機能で、ユーザレベルで行うのは事実上不可能と思います。 たしかに便利な機能ですが、原理上の制約も多いはずです。 参考URLをみると、この機能は今も進化しています。 私はこのスイッチは付いているが『機械メーカの独自仕様とバッティングするため使わないで下さい』とマニュアルに注釈がある機械を使ったことがあります。(従って使い方は覚えてません。。。。) 私が考え得る制約として ?工具折れはマシンが検知ぜず、未加工状態で進んだ時点でオペレータが 停止させた。その位置またはプログラムのブロックまで戻すと不都合が 生じる。 ?その位置までプログラムの途中経路によらず早送りするとして、その経 路によっでは不都合が生じる。 ?プログラムが座標回転、ミラーイメージなどを行っている、システムパ ラメータを操作しているなど複雑なものに対応することが出来るか。 ?NCは、元の位置で全てのシステムパラメータを再現してやれば、以降 の動作も元の動きをするが、?全て?を実現するのは相当困難。 ?上記から、そのプログラムの3次元干渉チェックなどが画面上でシミュ レーションできる最新型のNCで、かつオペレータのアシストがないと 無理 結論として『市販の参考書』の内容は信用出来ません。 回答(2)の方のご教示のように、リセット→加工進行を確認してプログラ ムを改変→再起動しかないと思います。
お礼
勉強不足なため簡単に考え皆さんにお手数をかけましたお礼とお詫びをいたします。有難うございました。
破損時の機械の停止状態が良く解らないのですが。下記 対応例です。 解決策としては・・・ 1.単純にフィードホールドにおいて、手動工具交換でサイクルスタート(再起動) 2.リセットを押して、一端中断するが、シーケンス番号をマクロ変数に記憶しておいて、NCプログラム内 GOTO文で対応。(工具交換は手動またはMDI) この場合 #4114 でシーケンス番号を読み出せるのでこれを利用。 N100 (DRILL) G90 G73 Z-20.0 F K0; IF [#501 EQ 0] GOTO 101; GOTO [#501+1.0]; N101 X10.0; #501=#4114; <=変数 #501 にN101 まで加工したと記憶 (ドリル折れ検出); N102 X20.0; #501=#4114; <=変数 #501 にN102 まで加工したと記憶 (ドリル折れ検出); N103; X35.0; #501=0; <=変数 #501 に"0"を記憶=全部加工した (ドリル折れ検出); G80; または等ピッチならば、加工数をカウントして、既加工分はジャンプ。 G90 G00 X0 Y0 Z50.0; G73 Z-20.0 R F K0; WHILE [#501 LT 10] DO 1; X[10.0 * #501]; #501=#501+1.0; (ドリル折れ検出); END 1; #501=0; G80; 3.ドリル折れ検出からATC、再開まで全て自動でおこなうならば・・ Mコードでドリル折れ検出を起動し折損を検出した場合、「折れた」という情報をNCプログラムで取り扱わなければいけません。この機能は装置メーカーが#1000~#1015辺りを利用して、情報(「折れた」フラグ)を提供している必要があります。機能が無ければ、NCプログラムで全て対応は出来ません。機能が有れば IF文 を使って分岐していくプログラムを作成すれば対応出来ます。※メーカーに問い合わせて見てください。 >>市販の参考書を見れば「システム変数を利用すれば可能」・・・ は必要な装置条件を書き漏らしているように感じます。 2番の対応が実施しやすいと思いますが。
お礼
丁寧なご指導有難うございました。これを参考に自分なりに挑戦してみます。又行き詰ったら宜しくお願いします。
マクロプログラムの内容を概要でも書かないと答えは出てこないか でても 市販の参考書 と変わらない程度の回答になる可能性があります
お礼
不慣れなものですみません。
お礼
有難うございました。ループごとにカウントしていく方法が私の頭の中で想像しているものに近いのではないかと思います。G01等の切削補間ブロックにコモン変数に#5021?へ格納して再開時に該当のコモン変数を指定すれば良いかと思いますがこれも浅知恵で自信がありません。