• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マシニングセンタ プログラムについて)

マシニングセンタ プログラムの作成例『荒削り』の解説とは?

このQ&Aのポイント
  • この質問は、マシニングセンタのプログラム作成例「荒削り」についての理解を求めています。
  • 特に、「N023 ZP=ZP-0.8」についての意味が理解できていません。
  • サイト内の解説が素人には難解であり、分かりやすく教えていただける方を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • toro321
  • ベストアンサー率29% (1222/4138)
回答No.2

N020 ZP=ZS ZPはZ軸が160にある、と言いたいのですか? そうです。 このプログラムでは、160で一度削ってます。(右から左へ) N021 G01 Z ZP F200 N022 G01 X XF この行が来た時点で切削に入ってしまうわけでは無いですよね? 1回目ですね。160で削るプログラムです。 刃物は、160でXSからXFへ削ってます。今刃物は左にあります。 N023 ZP=ZP-0.8 この行で、今から0.8削って158.2にしてしまえ!と言ってるわけですか?もしそうだとしても、この行ではまだ削ってはいないのですよね? そうです。ここでは計算してるだけです。 削った値から、-0.8引いた値をZPと置きなおせと指令してます。 N024 IF [ZP LE ZF+0.1] N030 この行が来て初めて0.8削っているのでしょうか?もしもZP(160-0.8)がZF(158+0.1)よりも同じかそれ以上ならばN030へ行け!と言うことでしょうか? これは機械の動きとは関係ありません。原本の右に書かれている通り、条件ジャンプです。 条件を満たさなければ、N25へ進みます。 G01 Z ZP G01 X XS ZP=ZP-0.8 IF [ZP LE ZF+0.1] N030 が上下に二つ並んでいますがなぜでしょうか? これは戻ってるんです。左(XF)から右(XS)へ戻りながら切削してるんです。 今刃物は左で160のところにありましたよね。そこから159.2にして(ZP)右に(XS)削りながら戻れと指令してます。 XSの時点で、ZPは159.2ですから、N21からもう一度やり直します。 基本的に、これは、NC旋盤のプログラムですね。 MCじゃ、片側から削りませんから・・・。 #1の数値に置き換えたのは少し間違ってましたね。

puropuro
質問者

お礼

回答と詳しい説明をしていただきありがとうございます。 toro321さん感謝します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • toro321
  • ベストアンサー率29% (1222/4138)
回答No.1

これは変数を使うプログラムで、汎用性を持たせたプログラムになってます。 XS,XFはそれぞれ、Xのスタート座標、Xの仕上げ(フィニッシュ)で、Zも同じ意味です。 ZPは変数で、-0.8は切りこみですね。160mmある高さの物を158に削っていくわけですが、一度に1.9mm取れないため、0.8ずつ取ってます。ZFは158なので、ZF+0.1は158.1 160から、一度0.8取ると、159.2ですから、IF(もし~なら)の条件で158.1になるまでN21~を繰り返すわけです。 ZP-0.8が158.1以下になれば、158.1まで削って、N31の仕上げ削りへと行くわけですね。 この変数は、対話型と呼ばれるNCの補助ソフトで作られるケースが多く、作業者は、このXS,XF、ZS、ZFなどを入れて、ZPは切りこみで、これも入れます。すると、自動的に削ってくれるというソフトのプログラムです。 実際には、この変数を入れてプログラムするより、実数入れてプログラムします。 N21 G0 Z159.2 N22 G01 X100(XF) N23 G0 Z161(Z逃がし) N24 G0 X150(XS)     G0 Z158.4     G01 X100     G0 Z161      G0 X150     G0 Z158.1     G01 X100 ここからは仕上げです

puropuro
質問者

補足

N020 ZP=ZS ZPはZ軸が160にある、と言いたいのですか? N021 G01 Z ZP F200 N022 G01 X XF この行が来た時点で切削に入ってしまうわけでは無いですよね? N023 ZP=ZP-0.8 この行で、今から0.8削って158.2にしてしまえ!と言ってるわけですか?もしそうだとしても、この行ではまだ削ってはいないのですよね? N024 IF [ZP LE ZF+0.1] N030 この行が来て初めて0.8削っているのでしょうか?もしもZP(160-0.8)がZF(158+0.1)よりも同じかそれ以上ならばN030へ行け!と言うことでしょうか? G01 Z ZP G01 X XS ZP=ZP-0.8 IF [ZP LE ZF+0.1] N030 が上下に二つ並んでいますがなぜでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マシニングセンタのプログラム

    こんばんわ。私は22歳大学生です。最近、実験でマシニングセンタを使っています。現在、直方体の金属の上面を端からエンドミルでひたすら側面切削し、エンドミルの寿命試験を行っています。 現在使っているプログラムは以下のとおりです。 G90 G0 G58 X0 Y0; T3; M6; G43 Z10.H7 S8000 M3; Z-1; X0; G91 G1 Y-40 D1 F80; G28 Z0 M5 M01; M30; ここで6行目のX0;のところをプログラムが終わるごとに自動で0.5ずつ移動させて再び切削し、最終的にX10;まで自動で切削するという感じにしたいのです。 しかし、どうすればよいかわからないので今は6行目のX0;のところをプログラムが終わる毎にいちいちX0.5;、X1.0;、X1.5;、・・・と0.5刻みで毎回手動で変えながら行っています。 これだと時間がかかり、さらに面倒です。 どなたか詳しい人いましたら教えてください。お願いします。

  • マクロプログラム

    マクロプログラム初心者です。 よろしくお願いいたします。 使用設備 OKK MCH600 (横型マシニング、パレットチェンジ機構付) 制御装置 MELDAS 500 縦型のマシニングセンターを10年ほど扱っておりますが、今回はじめて パレットチェンジ機構の付いたマシニングを使うことになり、とても 困っています。 パレット1の時と、パレット2の時のプログラムをそれぞれ分けて 動かしたいです。IF~GOTOを使用したいと考えています。 プログラムは以下のとうりです。 L15000(MAIN) G80G40G17G64G69.1 G91G00G30Z0 G30X0Y0 G28B0 M1 M60 ← パレットチェンジのM信号 IF[#****EQ1]GOTO10  ← 機内がパレット1ならシーケンス番号 N10へ IF[#****EQ1]GOTO20  ← 機内がパレット1ならシーケンス番号 N20へ N10(*NO,1-PALETTO) M62(*1PALE,CHECK) ← 機内がパレット1なら OK G22L15100 GOTO30 N20(*NO,2-PALETTO) M61(*2PALE,CHECK)  ← 機内がパレット2なら OK G22L15200 GOTO30 N30 G23 上記のプログラム内容で、パレット1、パレット2のどちらからでも スタートすることができて連続運転をしたいです。 IF[#****EQ1]GOTO10 ****の部分にシステム変数を使用すれば良いのでしょうか? またシステム変数(#1000~#1031)の設定は画面上で確認することは可能でしょうか? とても困っていますので、どうかよろしくお願いいたします。

  • FORTRANのプログラムです。

    FORTRANのプログラムです。 下に記載したプログラムを、行列値の計算にするプログラムに改良するにはどうすればよいでしょうか? アドバイスお願いします。 c *************************** if(root.LT.x0) GOTO 11 x0=root; x1=xs0; x2=xs1 GOTO 99 11 x0=root; x1=xs0; x2=xs2 GOTO 99 c c *************************** OPEN(6,FILE='sum.dat') 1002 FORMAT(E12.5,3x,4(E12.5,4x)) CLOSE(6) STOP 100 END c ************************* SUBROUTINE FRES(x,F) DOUBLE PRECISION x,F c f=3.*x+DSIN(x)-DEXP(x) f=(x-1.)*(x-2.)*(x-3.)*(x-4.)*(x-5.)*(x-6.) RETURN END よろしくお願いいたします。

  • G65を使ったプログラムについて

    使用機械 森精機(旧日立精機?) モデル vs60 O4200 G65P4201A100 G65P4201A200 M30 O4201 GOTO#1 N1 加工プログラム N2 加工プログラム M99 上記のようにサブプログラムにN100、N200のように加工プログラムを2つ記入している状態です。 メインプログラムにて、G65A100(A200)と引数指定にてN100とN200を読み出したいのですが、GOTO#1を読み込んだ瞬間に、   不明なシーケンス番号です のようなアラームが出てしまい止まってしまいます。 GOTO#1を IF[#1EQ100]GOTO100 IF[#1EQ200]GOTO200 と変えても指定したシーケンス番号まで飛んでくれません。 他の質問者様の回答に *************************************** サブプログラム O9000 GOTO #1 GOTO9999 N1 動作プログラム1 GOTO9999 N2 動作プログラム2 GOTO9999 N9999 M99 *************************************** このプログラムが記載されていましたので。参考に作ってみたのですが,,, わかる方いらっしゃいましたらお力添え頂ければと思います。 よろしくお願いします。

  • マシニングセンタ

    マシニングセンタを独学で勉強しているのですが、プログラムの基本的な流れはこれで良いでしょうか。工具交換の時に工具径補正、工具長補正キャンセルを入れる必要があると思うのですが、どこに入れれば良いでしょうか。 ファナックです。 ーーー T01(工具呼び出し) G91 G28 Z0(Z軸レファレンス点復帰) G28 X0 Y0 (XY軸レファレンス点復帰) M06(工具交換) G54 G17(ワーク座標設定,XY平面指定) G41 G90 G00 X**.* Y**.* D01 (工具径補正,XY位置決め) G43 Z**.* H01(工具長補正,Z位置決め) M01(オプショナルストップ) G01 X**.* Y**.*(スタートアップ動作) Z**.*(Z切り込み) M03(主軸正転) M08(クーラントON) : 座標指示 : M05(主軸停止) M09(クーラントOFF) G91 G28 Z0 G28 X0 Y0 M02(プログラム終了) ーーー 本職が加工ではないため実際に機械を動かしてみることができないためよろしくお願いします。

  • gotoを使わずに2

    やっぱり全体がないとわかりませんよね・・・ とりあえず、コピーします。見にくいとおもいますが・・ 中置法を逆ポーランドに変換するプログラムです。 void CPorandoView::OnButton1() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください CString ss; char st[30],z[30],tai,ap; CEdit* myED1=(CEdit*)GetDlgItem(IDC_EDIT1); //EDIT1のアドレスをmyED1の代入 CEdit* myED2=(CEdit*)GetDlgItem(IDC_EDIT2); //EDIT2のアドレスをmyED2の代入 CEdit* myED3=(CEdit*)GetDlgItem(IDC_EDIT3); //EDIT3のアドレスをmyED3の代入 myED1->GetWindowText(ss); //入力された中置法式を作業領域ssに代入 int np=0,stp=0,zp=0,a=999,i=0,sw=0; char ka[30],s=0,kp=0; float st2[30]; float x=0; char p[100]="" ; char *N = new char[ss.GetLength()+1]; //ダイアログ(中置法入力枠)に入力された式をNに入れ込む strcpy( N, ss ); myED1->SetWindowText(""); myED2->SetWindowText(""); myED3->SetWindowText(""); if(N[0]==NULL){ int ret; ret=AfxMessageBox("入力がありません。",MB_OK|MB_ICONEXCLAMATION); goto end; } if(30<strlen(N)){ int ret; ret=AfxMessageBox("入力文字数オーバーです。",MB_OK|MB_ICONEXCLAMATION); goto end; } for(;a!='\0';np++){ a=N[np]; tai=0; if( a>0x003a){ if(a<0x007e ){ if(a!='*' && a!='/' && a!='+' && a!='-' && a!='(' && a!=')'){ int ret; ret=AfxMessageBox("指定外文字が入力されています。",MB_OK|MB_ICONEXCLAMATION); goto end; } } } if(a==0x0030){ int ret;      ret=AfxMessageBox("0は入力不可です。",MB_OK|MB_ICONEXCLAMATION);//入力が0の場合エラーを表示 goto end; } if(a>'0' && a<='9'){      if(z[zp-1]>='0' && z[zp-1]<='10'){      z[zp]=','; zp++; } z[zp]=a;      zp++; z[zp]='\0';      sw--; }else if(a!='(' && a!=')'){ if(stp==0){ st[stp]=a; stp++; st[stp]='\0'; sw++; }else if(st[stp-1]!='('){ if(st[stp-1]=='*' || st[stp-1]=='/'){ tai=2; }else{ tai=1; } }else{ st[stp]=a; stp++; } if(a=='*' || a=='/'){ ap=2;      sw++; }else{ ap=1; sw++; } if(sw>1){ int ret; ret=AfxMessageBox("演算子が連続しているか、\n先頭、または最後尾に演算子が入力されています。",MB_OK|MB_ICONEXCLAMATION); goto end; } if(tai!=0){ if(ap<=tai){ z[zp]=st[stp-1];                st[stp-1]=a; zp++; z[zp]='\0'; st[stp]='\0'; if(a==st[stp-2]){          z[zp]=st[stp-2]; zp++;          st[stp-2]=st[stp-1]; z[zp]='\0'; st[stp-1]='\0'; stp--; } }else{ st[stp]=a; stp++; st[stp]='\0'; } } }else if(a=='('){ st[stp]='('; stp++; st[stp]='\0'; }else { while(st[stp]!='('){、 stp--; if(st[stp]!='('){ z[zp]=st[stp]; zp++; } } } } if(stp>=0){ stp--; while(stp>=1){ z[zp]=st[stp-1]; zp++; z[zp]='\0'; stp--; } } if(sw<=0){ int ret; ret=AfxMessageBox("数値は1~9までです。",MB_OK|MB_ICONEXCLAMATION);//演算子がないとエラー処理 goto end; } z[zp+1]='\0'; myED2->SetWindowText(z); end: ; }

  • もう一つ質問です

    例えば四角ポケット加工の場合で、コーナーRが刃物の半径よりも小さい場合コーナーで円弧補間をつかいます。コーナーRが刃物の半径と同じ場合は円弧補間をつかいませんよね。マクロプログラムではどう分ければいいのでしょうか?今作ってるやつでは動きが怪しいのですが・・・・・。 コーナーR   #18 刃物半径    #11 ポケット深さ   #26 O1 G90G0Z5. IF[#11GT#18}GOTO1 IF[#18EQ#11]GOTO2 ; ; ; ←円弧補間を使うプログラム ; ; ; ; ; IF[#26EQ#26]GOTO3 ←円弧補間を使うプログラムをこの指令でN3に N2             とばしてます。 G90G0Z5. ; ; ;        ←円弧補間を使わないプログラム ; ; ; ; N1 N3 G90G0Z30. M99 どうでしょう?

  • ファナックNCプログラムについて

    下記のプログラムにて N60 G01 X2085. Z-35. F1. N61 G01 Z-170. N62 G01 X2067. Z-200. N63 G01 Z-230. で、N61を加工中、一時停止してリセットを押すとN63に飛びます。何か理由がありますか? また、飛ばない方法はありますか?

  • G71を解除したいのですが

    前任者のプログラムでG71を使用したプログラムがあるのですが 切削時間削減の為にG71を使わずにプログラムを組みたいんです。 下記が前任者プログラムになります。 G28 U0. ; G0 G40 G55 G97 T303 S700 / M3 ; G0 Z10. ; X21. ; Z2. ; G71 U1. R0.5 ; G71 P1000 Q2000 U-0.2 W0.2 F0.1 ; N1000 G0 X44. ; G1 G41 Z0. F0.03 ; X43.4 . G2 X41. Z-1.2 R1.2 ; G1 Z-1.311 ; G3 X40.2 Z-1.711 R0.4 ; G1 X23.45 Z-1.6 ; X22. Z-2.325 ; N2000 G40 U-1. ; 切削物が非鉄ですのでサイクルせずに加工出切ると思うのですが… 宜しければ荒削り無しの一発加工プログラムを教えて頂けませんでしょうか? 回転数と送り速度は実地で調べてみます。 どうか宜しくお願いいたします。

  • アラームの指令

    マクロプログラムでアラームをつかいたいのですが、どういった指令の 仕方をすればいいのですか?ファナック、OSPの場合。 (例) IF[#20EQ#30]GOTO1 ; ; ; ; ; N1 ?????????←ここです。 G90G0Z30. M99

専門家に質問してみよう